summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGunnar Sletta <gunnar.sletta@nokia.com>2010-09-27 11:41:38 +0200
committerGunnar Sletta <gunnar.sletta@nokia.com>2010-09-27 11:41:38 +0200
commit2271315eb46665b0a9e61ff0525340713163c1b6 (patch)
treed0068e34924eca85eb6af4089b3f443a89c929f6
parent33e7ee9d1866f12a9b92fe4b5549c31e30974d8e (diff)
parent53d010a989aed878c21522cbaf0d75c7cf821b42 (diff)
Merge branch 'master' of scm.dev.nokia.troll.no:qt/qt
Conflicts: configure src/corelib/global/qglobal.h
-rw-r--r--.gitignore1
-rwxr-xr-xbin/createpackage.pl15
-rwxr-xr-xbin/patch_capabilities.pl83
-rwxr-xr-xbin/syncqt3
-rw-r--r--config.tests/symbian/audio/audio.pro2
-rwxr-xr-xconfigure98
-rwxr-xr-xconfigure.exebin1321472 -> 1402368 bytes
-rw-r--r--dist/changes-4.7.04
-rw-r--r--doc/src/declarative/advtutorial.qdoc2
-rw-r--r--doc/src/declarative/declarativeui.qdoc1
-rw-r--r--doc/src/declarative/example-slideswitch.qdoc2
-rw-r--r--doc/src/declarative/extending.qdoc2
-rw-r--r--doc/src/declarative/pics/qml-gradient.png (renamed from doc/src/declarative/pics/gradient.png)bin364 -> 364 bytes
-rw-r--r--doc/src/declarative/pics/rect-border-width.pngbin356 -> 374 bytes
-rw-r--r--doc/src/declarative/pics/rect-color.pngbin0 -> 570 bytes
-rw-r--r--doc/src/declarative/positioners.qdoc193
-rw-r--r--doc/src/declarative/qtdeclarative.qdoc12
-rw-r--r--doc/src/development/qmake-manual.qdoc18
-rw-r--r--doc/src/development/qtestlib.qdoc8
-rw-r--r--doc/src/files-and-resources/resources.qdoc22
-rw-r--r--doc/src/getting-started/gettingstartedqml.qdoc54
-rw-r--r--doc/src/getting-started/installation.qdoc514
-rw-r--r--doc/src/getting-started/known-issues.qdoc125
-rw-r--r--doc/src/images/qml-mousearea-snippet.pngbin0 -> 780 bytes
-rw-r--r--doc/src/index.qdoc2
-rw-r--r--doc/src/objectmodel/properties.qdoc2
-rw-r--r--doc/src/objectmodel/signalsandslots.qdoc6
-rw-r--r--doc/src/qt4-intro.qdoc72
-rw-r--r--doc/src/snippets/code/src_corelib_kernel_qvariant.cpp2
-rw-r--r--doc/src/snippets/declarative/SelfDestroyingRect.qml2
-rw-r--r--doc/src/snippets/declarative/Sprite.qml2
-rw-r--r--doc/src/snippets/declarative/anchoranimation.qml2
-rw-r--r--doc/src/snippets/declarative/anchorchanges.qml2
-rw-r--r--doc/src/snippets/declarative/animatedimage.qml2
-rw-r--r--doc/src/snippets/declarative/animation-behavioral.qml2
-rw-r--r--doc/src/snippets/declarative/animation-easing.qml2
-rw-r--r--doc/src/snippets/declarative/animation-elements.qml2
-rw-r--r--doc/src/snippets/declarative/animation-groups.qml2
-rw-r--r--doc/src/snippets/declarative/animation-propertyvaluesource.qml2
-rw-r--r--doc/src/snippets/declarative/animation-signalhandler.qml2
-rw-r--r--doc/src/snippets/declarative/animation-standalone.qml2
-rw-r--r--doc/src/snippets/declarative/animation-transitions.qml2
-rw-r--r--doc/src/snippets/declarative/behavior.qml2
-rw-r--r--doc/src/snippets/declarative/borderimage/borderimage-scaled.qml2
-rw-r--r--doc/src/snippets/declarative/borderimage/borderimage-tiled.qml2
-rw-r--r--doc/src/snippets/declarative/borderimage/normal-image.qml2
-rw-r--r--doc/src/snippets/declarative/codingconventions/dotproperties.qml2
-rw-r--r--doc/src/snippets/declarative/codingconventions/javascript-imports.qml2
-rw-r--r--doc/src/snippets/declarative/codingconventions/javascript.qml2
-rw-r--r--doc/src/snippets/declarative/codingconventions/lists.qml2
-rw-r--r--doc/src/snippets/declarative/codingconventions/photo.qml2
-rw-r--r--doc/src/snippets/declarative/coloranimation.qml2
-rw-r--r--doc/src/snippets/declarative/column/column.qml2
-rw-r--r--doc/src/snippets/declarative/column/vertical-positioner.qml2
-rw-r--r--doc/src/snippets/declarative/comments.qml2
-rw-r--r--doc/src/snippets/declarative/component.qml2
-rw-r--r--doc/src/snippets/declarative/createComponent-simple.qml2
-rw-r--r--doc/src/snippets/declarative/createComponent.qml2
-rw-r--r--doc/src/snippets/declarative/createQmlObject.qml2
-rw-r--r--doc/src/snippets/declarative/dynamicObjects-destroy.qml2
-rw-r--r--doc/src/snippets/declarative/flickable.qml2
-rw-r--r--doc/src/snippets/declarative/flickableScrollbar.qml2
-rw-r--r--doc/src/snippets/declarative/flipable/flipable.qml2
-rw-r--r--doc/src/snippets/declarative/flow-diagram.qml2
-rw-r--r--doc/src/snippets/declarative/flow.qml2
-rw-r--r--doc/src/snippets/declarative/focusscopes.qml2
-rw-r--r--doc/src/snippets/declarative/folderlistmodel.qml2
-rw-r--r--doc/src/snippets/declarative/gradient.qml2
-rw-r--r--doc/src/snippets/declarative/grid/grid-items.qml2
-rw-r--r--doc/src/snippets/declarative/grid/grid-no-spacing.qml2
-rw-r--r--doc/src/snippets/declarative/grid/grid-spacing.qml2
-rw-r--r--doc/src/snippets/declarative/grid/grid.qml2
-rw-r--r--doc/src/snippets/declarative/gridview/ContactModel.qml2
-rw-r--r--doc/src/snippets/declarative/gridview/gridview.qml2
-rw-r--r--doc/src/snippets/declarative/image.qml2
-rw-r--r--doc/src/snippets/declarative/listmodel-modify.qml2
-rw-r--r--doc/src/snippets/declarative/listmodel-nested.qml2
-rw-r--r--doc/src/snippets/declarative/listmodel-simple.qml2
-rw-r--r--doc/src/snippets/declarative/listmodel.qml2
-rw-r--r--doc/src/snippets/declarative/listview/ContactModel.qml2
-rw-r--r--doc/src/snippets/declarative/listview/listview-snippet.qml2
-rw-r--r--doc/src/snippets/declarative/listview/listview.qml2
-rw-r--r--doc/src/snippets/declarative/loader/KeyReader.qml2
-rw-r--r--doc/src/snippets/declarative/loader/MyItem.qml2
-rw-r--r--doc/src/snippets/declarative/loader/connections.qml2
-rw-r--r--doc/src/snippets/declarative/loader/focus.qml2
-rw-r--r--doc/src/snippets/declarative/loader/simple.qml2
-rw-r--r--doc/src/snippets/declarative/mousearea/mousearea-snippet.qml53
-rw-r--r--doc/src/snippets/declarative/mousearea/mousearea.qml (renamed from doc/src/snippets/declarative/mousearea.qml)2
-rw-r--r--doc/src/snippets/declarative/mousearea/mouseareadragfilter.qml (renamed from doc/src/snippets/declarative/mouseareadragfilter.qml)2
-rw-r--r--doc/src/snippets/declarative/numberanimation.qml2
-rw-r--r--doc/src/snippets/declarative/parallelanimation.qml2
-rw-r--r--doc/src/snippets/declarative/parentanimation.qml2
-rw-r--r--doc/src/snippets/declarative/parentchange.qml2
-rw-r--r--doc/src/snippets/declarative/pathview/ContactModel.qml2
-rw-r--r--doc/src/snippets/declarative/pathview/pathattributes.qml2
-rw-r--r--doc/src/snippets/declarative/pathview/pathview.qml2
-rw-r--r--doc/src/snippets/declarative/propertyaction.qml2
-rw-r--r--doc/src/snippets/declarative/propertyanimation.qml2
-rw-r--r--doc/src/snippets/declarative/propertychanges.qml2
-rw-r--r--doc/src/snippets/declarative/qml-data-models/dynamic-listmodel.qml2
-rw-r--r--doc/src/snippets/declarative/qml-data-models/listelements.qml2
-rw-r--r--doc/src/snippets/declarative/qml-data-models/listmodel-listview.qml2
-rw-r--r--doc/src/snippets/declarative/qml-documents/inline-component.qml2
-rw-r--r--doc/src/snippets/declarative/qml-documents/inline-text-component.qml2
-rw-r--r--doc/src/snippets/declarative/qml-documents/non-trivial.qml2
-rw-r--r--doc/src/snippets/declarative/qml-documents/qmldocuments.qml2
-rw-r--r--doc/src/snippets/declarative/qml-intro/anchors1.qml2
-rw-r--r--doc/src/snippets/declarative/qml-intro/anchors2.qml2
-rw-r--r--doc/src/snippets/declarative/qml-intro/anchors3.qml2
-rw-r--r--doc/src/snippets/declarative/qml-intro/hello-world1.qml2
-rw-r--r--doc/src/snippets/declarative/qml-intro/hello-world2.qml2
-rw-r--r--doc/src/snippets/declarative/qml-intro/hello-world3.qml2
-rw-r--r--doc/src/snippets/declarative/qml-intro/hello-world4.qml2
-rw-r--r--doc/src/snippets/declarative/qml-intro/hello-world5.qml2
-rw-r--r--doc/src/snippets/declarative/qml-intro/number-animation1.qml2
-rw-r--r--doc/src/snippets/declarative/qml-intro/number-animation2.qml2
-rw-r--r--doc/src/snippets/declarative/qml-intro/rectangle.qml2
-rw-r--r--doc/src/snippets/declarative/qml-intro/sequential-animation1.qml2
-rw-r--r--doc/src/snippets/declarative/qml-intro/sequential-animation2.qml2
-rw-r--r--doc/src/snippets/declarative/qml-intro/sequential-animation3.qml2
-rw-r--r--doc/src/snippets/declarative/qml-intro/states1.qml2
-rw-r--r--doc/src/snippets/declarative/qml-intro/transformations1.qml2
-rw-r--r--doc/src/snippets/declarative/qtbinding/contextproperties/main.qml2
-rw-r--r--doc/src/snippets/declarative/qtbinding/custompalette/main.qml2
-rw-r--r--doc/src/snippets/declarative/qtbinding/resources/main.qml2
-rw-r--r--doc/src/snippets/declarative/qtbinding/stopwatch/main.qml2
-rw-r--r--doc/src/snippets/declarative/qtobject.qml2
-rw-r--r--doc/src/snippets/declarative/rectangle/rect-border-width.qml (renamed from doc/src/snippets/declarative/rect-border-width.qml)4
-rw-r--r--doc/src/snippets/declarative/rectangle/rectangle-colors.qml62
-rw-r--r--doc/src/snippets/declarative/rectangle/rectangle-gradient.qml74
-rw-r--r--doc/src/snippets/declarative/rectangle/rectangle-smooth.qml87
-rw-r--r--doc/src/snippets/declarative/rectangle/rectangle.qml (renamed from doc/src/snippets/declarative/~image-fillmode.qml)14
-rw-r--r--doc/src/snippets/declarative/repeaters/repeater-grid-index.qml2
-rw-r--r--doc/src/snippets/declarative/repeaters/repeater.qml2
-rw-r--r--doc/src/snippets/declarative/rotation.qml2
-rw-r--r--doc/src/snippets/declarative/rotationanimation.qml2
-rw-r--r--doc/src/snippets/declarative/row.qml2
-rw-r--r--doc/src/snippets/declarative/row/row.qml2
-rw-r--r--doc/src/snippets/declarative/sequentialanimation.qml2
-rw-r--r--doc/src/snippets/declarative/smoothedanimation.qml2
-rw-r--r--doc/src/snippets/declarative/springanimation.qml2
-rw-r--r--doc/src/snippets/declarative/state-when.qml2
-rw-r--r--doc/src/snippets/declarative/state.qml2
-rw-r--r--doc/src/snippets/declarative/states.qml2
-rw-r--r--doc/src/snippets/declarative/systempalette.qml2
-rw-r--r--doc/src/snippets/declarative/text/onLinkActivated.qml54
-rw-r--r--doc/src/snippets/declarative/texteditor.qml2
-rw-r--r--doc/src/snippets/declarative/transition-from-to.qml2
-rw-r--r--doc/src/snippets/declarative/transition-reversible.qml2
-rw-r--r--doc/src/snippets/declarative/transition.qml2
-rw-r--r--doc/src/snippets/declarative/visualdatamodel.qml2
-rw-r--r--doc/src/snippets/declarative/visualdatamodel_rootindex/view.qml2
-rw-r--r--doc/src/snippets/declarative/workerscript.qml2
-rw-r--r--doc/src/snippets/declarative/xmlrole.qml2
-rw-r--r--doc/src/snippets/layouts/layouts.cpp42
-rw-r--r--doc/src/snippets/signalmapper/filereader.cpp12
-rwxr-xr-xdoc/src/template/style/style.css74
-rw-r--r--doc/src/tutorials/modelview.qdoc30
-rw-r--r--doc/src/widgets-and-layouts/layout.qdoc16
-rw-r--r--examples/declarative/animation/basics/color-animation.qml2
-rw-r--r--examples/declarative/animation/basics/property-animation.qml2
-rw-r--r--examples/declarative/animation/behaviors/SideRect.qml2
-rw-r--r--examples/declarative/animation/behaviors/behavior-example.qml2
-rw-r--r--examples/declarative/animation/easing/content/QuitButton.qml2
-rw-r--r--examples/declarative/animation/easing/easing.qml17
-rw-r--r--examples/declarative/animation/states/states.qml2
-rw-r--r--examples/declarative/animation/states/transitions.qml2
-rw-r--r--examples/declarative/cppextensions/imageprovider/imageprovider-example.qml2
-rw-r--r--examples/declarative/cppextensions/networkaccessmanagerfactory/view.qml2
-rw-r--r--examples/declarative/cppextensions/plugins/com/nokia/TimeExample/Clock.qml2
-rw-r--r--examples/declarative/cppextensions/plugins/plugins.qml2
-rw-r--r--examples/declarative/cppextensions/qgraphicslayouts/layoutitem/layoutitem.qml2
-rw-r--r--examples/declarative/cppextensions/qgraphicslayouts/qgraphicsgridlayout/gridlayout.cpp2
-rw-r--r--examples/declarative/cppextensions/qgraphicslayouts/qgraphicsgridlayout/gridlayout.h2
-rw-r--r--examples/declarative/cppextensions/qgraphicslayouts/qgraphicsgridlayout/qgraphicsgridlayout.qml2
-rw-r--r--examples/declarative/cppextensions/qgraphicslayouts/qgraphicslinearlayout/linearlayout.cpp2
-rw-r--r--examples/declarative/cppextensions/qgraphicslayouts/qgraphicslinearlayout/linearlayout.h2
-rw-r--r--examples/declarative/cppextensions/qgraphicslayouts/qgraphicslinearlayout/qgraphicslinearlayout.qml2
-rw-r--r--examples/declarative/cppextensions/qwidgets/qwidgets.qml2
-rw-r--r--examples/declarative/cppextensions/referenceexamples/adding/example.qml2
-rw-r--r--examples/declarative/cppextensions/referenceexamples/attached/example.qml2
-rw-r--r--examples/declarative/cppextensions/referenceexamples/binding/example.qml2
-rw-r--r--examples/declarative/cppextensions/referenceexamples/coercion/example.qml2
-rw-r--r--examples/declarative/cppextensions/referenceexamples/default/example.qml2
-rw-r--r--examples/declarative/cppextensions/referenceexamples/extended/example.qml2
-rw-r--r--examples/declarative/cppextensions/referenceexamples/grouped/example.qml2
-rw-r--r--examples/declarative/cppextensions/referenceexamples/methods/example.qml2
-rw-r--r--examples/declarative/cppextensions/referenceexamples/properties/example.qml2
-rw-r--r--examples/declarative/cppextensions/referenceexamples/signal/example.qml2
-rw-r--r--examples/declarative/cppextensions/referenceexamples/valuesource/example.qml2
-rw-r--r--examples/declarative/i18n/i18n.qml2
-rw-r--r--examples/declarative/imageelements/borderimage/borderimage.qml2
-rw-r--r--examples/declarative/imageelements/borderimage/content/MyBorderImage.qml2
-rw-r--r--examples/declarative/imageelements/borderimage/content/ShadowRectangle.qml2
-rw-r--r--examples/declarative/imageelements/borderimage/shadows.qml2
-rw-r--r--examples/declarative/imageelements/image/ImageCell.qml2
-rw-r--r--examples/declarative/imageelements/image/image.qml2
-rw-r--r--examples/declarative/keyinteraction/focus/Core/ContextMenu.qml2
-rw-r--r--examples/declarative/keyinteraction/focus/Core/GridMenu.qml2
-rw-r--r--examples/declarative/keyinteraction/focus/Core/ListMenu.qml2
-rw-r--r--examples/declarative/keyinteraction/focus/Core/ListViewDelegate.qml2
-rw-r--r--examples/declarative/keyinteraction/focus/focus.qml2
-rw-r--r--examples/declarative/modelviews/abstractitemmodel/main.cpp2
-rw-r--r--examples/declarative/modelviews/abstractitemmodel/model.cpp2
-rw-r--r--examples/declarative/modelviews/abstractitemmodel/model.h2
-rw-r--r--examples/declarative/modelviews/abstractitemmodel/view.qml2
-rw-r--r--examples/declarative/modelviews/gridview/gridview-example.qml2
-rw-r--r--examples/declarative/modelviews/listview/content/PetsModel.qml2
-rw-r--r--examples/declarative/modelviews/listview/content/PressAndHoldButton.qml2
-rw-r--r--examples/declarative/modelviews/listview/content/RecipesModel.qml2
-rw-r--r--examples/declarative/modelviews/listview/content/TextButton.qml2
-rw-r--r--examples/declarative/modelviews/listview/content/pics/arrow-down.pngbin0 -> 594 bytes
-rw-r--r--examples/declarative/modelviews/listview/content/pics/arrow-up.pngbin0 -> 692 bytes
-rw-r--r--examples/declarative/modelviews/listview/content/pics/list-delete.pngbin0 -> 831 bytes
-rw-r--r--examples/declarative/modelviews/listview/content/pics/minus-sign.pngbin498 -> 250 bytes
-rw-r--r--examples/declarative/modelviews/listview/content/pics/plus-sign.pngbin907 -> 462 bytes
-rw-r--r--examples/declarative/modelviews/listview/dynamiclist.qml2
-rw-r--r--examples/declarative/modelviews/listview/expandingdelegates.qml2
-rw-r--r--examples/declarative/modelviews/listview/highlight.qml2
-rw-r--r--examples/declarative/modelviews/listview/highlightranges.qml2
-rw-r--r--examples/declarative/modelviews/listview/sections.qml2
-rw-r--r--examples/declarative/modelviews/objectlistmodel/dataobject.cpp2
-rw-r--r--examples/declarative/modelviews/objectlistmodel/dataobject.h2
-rw-r--r--examples/declarative/modelviews/objectlistmodel/view.qml2
-rw-r--r--examples/declarative/modelviews/package/Delegate.qml2
-rw-r--r--examples/declarative/modelviews/package/view.qml2
-rw-r--r--examples/declarative/modelviews/parallax/parallax.qml2
-rw-r--r--examples/declarative/modelviews/parallax/qml/ParallaxView.qml2
-rw-r--r--examples/declarative/modelviews/parallax/qml/Smiley.qml2
-rw-r--r--examples/declarative/modelviews/pathview/pathview-example.qml2
-rw-r--r--examples/declarative/modelviews/stringlistmodel/view.qml2
-rw-r--r--examples/declarative/modelviews/visualitemmodel/visualitemmodel.qml2
-rw-r--r--examples/declarative/modelviews/webview/alerts.qml2
-rw-r--r--examples/declarative/modelviews/webview/autosize.qml2
-rw-r--r--examples/declarative/modelviews/webview/content/Mapping/Map.qml2
-rw-r--r--examples/declarative/modelviews/webview/googlemaps.qml2
-rw-r--r--examples/declarative/modelviews/webview/inlinehtml.qml2
-rw-r--r--examples/declarative/modelviews/webview/newwindows.qml2
-rw-r--r--examples/declarative/positioners/Button.qml2
-rw-r--r--examples/declarative/positioners/positioners.qml2
-rw-r--r--examples/declarative/screenorientation/Core/Bubble.qml2
-rw-r--r--examples/declarative/screenorientation/Core/Button.qml2
-rw-r--r--examples/declarative/screenorientation/Core/screenorientation.js2
-rw-r--r--examples/declarative/screenorientation/screenorientation.qml2
-rw-r--r--examples/declarative/sqllocalstorage/hello.qml2
-rw-r--r--examples/declarative/text/fonts/availableFonts.qml2
-rw-r--r--examples/declarative/text/fonts/banner.qml2
-rw-r--r--examples/declarative/text/fonts/fonts.qml2
-rw-r--r--examples/declarative/text/fonts/hello.qml5
-rw-r--r--examples/declarative/text/textselection/textselection.qml2
-rw-r--r--examples/declarative/threading/threadedlistmodel/dataloader.js40
-rw-r--r--examples/declarative/threading/threadedlistmodel/threadedlistmodel.qmlproject40
-rw-r--r--examples/declarative/threading/threadedlistmodel/timedisplay.qml2
-rw-r--r--examples/declarative/threading/workerscript/workerscript.qml2
-rw-r--r--examples/declarative/touchinteraction/gestures/experimental-gestures.qml2
-rw-r--r--examples/declarative/touchinteraction/mousearea/mousearea-example.qml2
-rw-r--r--examples/declarative/toys/clocks/clocks.qml2
-rw-r--r--examples/declarative/toys/clocks/content/Clock.qml2
-rw-r--r--examples/declarative/toys/clocks/content/QuitButton.qml2
-rw-r--r--examples/declarative/toys/corkboards/Day.qml2
-rw-r--r--examples/declarative/toys/corkboards/corkboards.qml2
-rw-r--r--examples/declarative/toys/dynamicscene/dynamicscene.qml2
-rw-r--r--examples/declarative/toys/dynamicscene/qml/Button.qml2
-rw-r--r--examples/declarative/toys/dynamicscene/qml/GenericSceneItem.qml2
-rw-r--r--examples/declarative/toys/dynamicscene/qml/PaletteItem.qml2
-rw-r--r--examples/declarative/toys/dynamicscene/qml/PerspectiveItem.qml2
-rw-r--r--examples/declarative/toys/dynamicscene/qml/Sun.qml2
-rw-r--r--examples/declarative/toys/tic-tac-toe/content/Button.qml2
-rw-r--r--examples/declarative/toys/tic-tac-toe/content/TicTac.qml2
-rw-r--r--examples/declarative/toys/tic-tac-toe/tic-tac-toe.qml2
-rw-r--r--examples/declarative/toys/tvtennis/tvtennis.qml2
-rw-r--r--examples/declarative/tutorials/extending/chapter1-basics/app.qml2
-rw-r--r--examples/declarative/tutorials/extending/chapter2-methods/app.qml2
-rw-r--r--examples/declarative/tutorials/extending/chapter3-bindings/app.qml2
-rw-r--r--examples/declarative/tutorials/extending/chapter4-customPropertyTypes/app.qml2
-rw-r--r--examples/declarative/tutorials/extending/chapter5-listproperties/app.qml2
-rw-r--r--examples/declarative/tutorials/extending/chapter6-plugins/app.qml2
-rw-r--r--examples/declarative/tutorials/helloworld/Cell.qml2
-rw-r--r--examples/declarative/tutorials/helloworld/tutorial1.qml2
-rw-r--r--examples/declarative/tutorials/helloworld/tutorial2.qml2
-rw-r--r--examples/declarative/tutorials/helloworld/tutorial3.qml2
-rw-r--r--examples/declarative/tutorials/samegame/samegame1/Block.qml2
-rw-r--r--examples/declarative/tutorials/samegame/samegame1/Button.qml2
-rw-r--r--examples/declarative/tutorials/samegame/samegame1/samegame.qml2
-rw-r--r--examples/declarative/tutorials/samegame/samegame2/Block.qml2
-rw-r--r--examples/declarative/tutorials/samegame/samegame2/Button.qml2
-rw-r--r--examples/declarative/tutorials/samegame/samegame2/samegame.qml2
-rw-r--r--examples/declarative/tutorials/samegame/samegame3/Block.qml2
-rw-r--r--examples/declarative/tutorials/samegame/samegame3/Button.qml2
-rw-r--r--examples/declarative/tutorials/samegame/samegame3/Dialog.qml2
-rw-r--r--examples/declarative/tutorials/samegame/samegame3/samegame.qml2
-rw-r--r--examples/declarative/tutorials/samegame/samegame4/content/BoomBlock.qml2
-rw-r--r--examples/declarative/tutorials/samegame/samegame4/content/Button.qml2
-rw-r--r--examples/declarative/tutorials/samegame/samegame4/content/Dialog.qml2
-rw-r--r--examples/declarative/tutorials/samegame/samegame4/samegame.qml2
-rw-r--r--examples/declarative/ui-components/dialcontrol/content/Dial.qml2
-rw-r--r--examples/declarative/ui-components/dialcontrol/content/QuitButton.qml2
-rw-r--r--examples/declarative/ui-components/dialcontrol/dialcontrol.qml3
-rw-r--r--examples/declarative/ui-components/flipable/content/Card.qml2
-rw-r--r--examples/declarative/ui-components/flipable/flipable.qml2
-rw-r--r--examples/declarative/ui-components/progressbar/content/ProgressBar.qml2
-rw-r--r--examples/declarative/ui-components/progressbar/main.qml2
-rw-r--r--examples/declarative/ui-components/scrollbar/ScrollBar.qml2
-rw-r--r--examples/declarative/ui-components/scrollbar/main.qml2
-rw-r--r--examples/declarative/ui-components/searchbox/SearchBox.qml2
-rw-r--r--examples/declarative/ui-components/searchbox/main.qml2
-rw-r--r--examples/declarative/ui-components/slideswitch/content/Switch.qml2
-rw-r--r--examples/declarative/ui-components/slideswitch/slideswitch.qml2
-rw-r--r--examples/declarative/ui-components/spinner/content/Spinner.qml2
-rw-r--r--examples/declarative/ui-components/spinner/main.qml2
-rw-r--r--examples/declarative/ui-components/tabwidget/TabWidget.qml2
-rw-r--r--examples/declarative/ui-components/tabwidget/main.qml2
-rw-r--r--examples/declarative/xml/xmlhttprequest/xmlhttprequest-example.qml2
-rw-r--r--examples/draganddrop/puzzle/puzzle.pro2
-rw-r--r--examples/graphicsview/flowlayout/flowlayout.pro6
-rw-r--r--examples/multimedia/audiooutput/audiooutput.cpp4
-rw-r--r--examples/network/bearermonitor/sessionwidget.cpp2
-rw-r--r--examples/opengl/pbuffers/glwidget.cpp4
-rw-r--r--examples/script/calculator/calculator.pro1
-rw-r--r--examples/tools/echoplugin/echowindow/echowindow.pro1
-rw-r--r--examples/tutorials/gettingStarted/gsQml/texteditor.qml4
-rwxr-xr-xexamples/tutorials/modelview/3_changingmodel/mymodel.cpp3
-rwxr-xr-xexamples/tutorials/modelview/5_edit/mainwindow.h6
-rwxr-xr-xexamples/tutorials/modelview/6_treeview/mainwindow.h8
-rwxr-xr-xexamples/tutorials/modelview/7_selections/mainwindow.h8
-rw-r--r--mkspecs/common/g++.conf2
-rw-r--r--mkspecs/common/mac-g++.conf3
-rw-r--r--mkspecs/common/symbian/symbian.conf55
-rw-r--r--mkspecs/features/default_post.prf88
-rw-r--r--mkspecs/features/moc.prf4
-rw-r--r--mkspecs/features/qt.prf3
-rw-r--r--mkspecs/features/symbian/nested_exceptions.prf4
-rw-r--r--mkspecs/features/symbian/sis_targets.prf (renamed from mkspecs/features/sis_targets.prf)0
-rw-r--r--mkspecs/features/symbian/stl.prf5
-rw-r--r--mkspecs/features/symbian/symbian_building.prf32
-rw-r--r--mkspecs/features/unix/gdb_dwarf_index.prf1
-rw-r--r--mkspecs/win32-msvc2003/qmake.conf3
-rw-r--r--mkspecs/win32-msvc2005/qmake.conf3
-rw-r--r--mkspecs/win32-msvc2008/qmake.conf3
-rw-r--r--mkspecs/win32-msvc2010/qmake.conf3
-rw-r--r--qmake/generators/makefile.cpp4
-rw-r--r--qmake/generators/symbian/symmake_sbsv2.cpp351
-rw-r--r--qmake/generators/symbian/symmake_sbsv2.h15
-rw-r--r--qmake/generators/unix/unixmake.cpp51
-rw-r--r--qmake/generators/win32/msvc_vcproj.cpp6
-rw-r--r--qmake/generators/win32/winmakefile.cpp5
-rwxr-xr-xsrc/3rdparty/libconninet/config.guess1533
-rwxr-xr-xsrc/3rdparty/libconninet/config.sub1693
-rw-r--r--src/3rdparty/libconninet/configure.ac4
-rw-r--r--src/3rdparty/libconninet/debian/changelog20
-rw-r--r--src/3rdparty/libconninet/debian/control4
-rw-r--r--src/3rdparty/libconninet/src/proxyconf.cpp147
-rw-r--r--src/3rdparty/libjpeg.pri15
-rw-r--r--src/3rdparty/webkit/.tag2
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/ChangeLog57
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/bytecode/Opcode.h2
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/jit/JITStubs.cpp97
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h5
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/Vector.h2
-rw-r--r--src/3rdparty/webkit/VERSION2
-rw-r--r--src/3rdparty/webkit/WebCore/ChangeLog102
-rw-r--r--src/3rdparty/webkit/WebCore/WebCore.pro11
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/npapi.h31
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/PluginPackage.cpp2
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/PluginView.cpp10
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/PluginView.h10
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/qt/PluginViewQt.cpp109
-rw-r--r--src/3rdparty/webkit/WebKit.pri2
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebkitglobal.h4
-rw-r--r--src/3rdparty/webkit/WebKit/qt/ChangeLog77
-rw-r--r--src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp17
-rw-r--r--src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri4
-rw-r--r--src/corelib/arch/arch.pri2
-rw-r--r--src/corelib/arch/armv6/arch.pri3
-rw-r--r--src/corelib/arch/qatomic_arm.h403
-rw-r--r--src/corelib/arch/qatomic_armv5.h431
-rw-r--r--src/corelib/arch/qatomic_armv6.h161
-rw-r--r--src/corelib/arch/qatomic_armv7.h61
-rw-r--r--src/corelib/arch/symbian/arch.pri2
-rw-r--r--src/corelib/arch/symbian/qatomic_generic_armv6.cpp (renamed from src/corelib/arch/armv6/qatomic_generic_armv6.cpp)0
-rw-r--r--src/corelib/codecs/qtextcodec_symbian.cpp19
-rw-r--r--src/corelib/concurrent/qthreadpool.cpp1
-rw-r--r--src/corelib/global/qglobal.h13
-rw-r--r--src/corelib/global/qlibraryinfo.cpp3
-rw-r--r--src/corelib/global/qnamespace.h1
-rw-r--r--src/corelib/global/qnumeric.cpp35
-rw-r--r--src/corelib/io/qdir.cpp5
-rw-r--r--src/corelib/io/qsettings_win.cpp24
-rw-r--r--src/corelib/io/qurl.cpp26
-rw-r--r--src/corelib/kernel/qcoreapplication.cpp3
-rw-r--r--src/corelib/kernel/qeventdispatcher_unix.cpp22
-rw-r--r--src/corelib/kernel/qmath.qdoc155
-rw-r--r--src/corelib/kernel/qmetaobject.cpp20
-rw-r--r--src/corelib/kernel/qmetatype.h26
-rw-r--r--src/corelib/kernel/qobject.h8
-rw-r--r--src/corelib/kernel/qobjectdefs.h1
-rw-r--r--src/corelib/kernel/qpointer.cpp2
-rw-r--r--src/corelib/plugin/qfactoryloader.cpp8
-rw-r--r--src/corelib/plugin/qfactoryloader_p.h4
-rw-r--r--src/corelib/plugin/qlibrary.cpp3
-rw-r--r--src/corelib/plugin/qsystemlibrary.cpp4
-rw-r--r--src/corelib/statemachine/qstatemachine.cpp3
-rw-r--r--src/corelib/thread/qatomic.cpp12
-rw-r--r--src/corelib/thread/qthread_unix.cpp35
-rw-r--r--src/corelib/tools/qbytearray.cpp1
-rw-r--r--src/corelib/tools/qchar.cpp17
-rw-r--r--src/corelib/tools/qcryptographichash.cpp2
-rw-r--r--src/corelib/tools/qstring.cpp6
-rw-r--r--src/corelib/tools/qstringmatcher.cpp1
-rw-r--r--src/corelib/tools/qunicodetables.cpp119
-rw-r--r--src/corelib/tools/qunicodetables_p.h28
-rw-r--r--src/corelib/tools/qvector.h2
-rw-r--r--src/declarative/debugger/qdeclarativedebugservice.cpp41
-rw-r--r--src/declarative/graphicsitems/qdeclarativeflickable.cpp11
-rw-r--r--src/declarative/graphicsitems/qdeclarativeflickable_p_p.h3
-rw-r--r--src/declarative/graphicsitems/qdeclarativegridview.cpp42
-rw-r--r--src/declarative/graphicsitems/qdeclarativeitem.cpp69
-rw-r--r--src/declarative/graphicsitems/qdeclarativeitem_p.h4
-rw-r--r--src/declarative/graphicsitems/qdeclarativelistview.cpp15
-rw-r--r--src/declarative/graphicsitems/qdeclarativeloader.cpp8
-rw-r--r--src/declarative/graphicsitems/qdeclarativemousearea.cpp100
-rw-r--r--src/declarative/graphicsitems/qdeclarativemousearea_p_p.h6
-rw-r--r--src/declarative/graphicsitems/qdeclarativepathview.cpp195
-rw-r--r--src/declarative/graphicsitems/qdeclarativepathview_p_p.h4
-rw-r--r--src/declarative/graphicsitems/qdeclarativerectangle.cpp179
-rw-r--r--src/declarative/graphicsitems/qdeclarativetext.cpp10
-rw-r--r--src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp40
-rw-r--r--src/declarative/qml/qdeclarative.h4
-rw-r--r--src/declarative/qml/qdeclarativebinding.cpp13
-rw-r--r--src/declarative/qml/qdeclarativebinding_p.h7
-rw-r--r--src/declarative/qml/qdeclarativecomponent_p.h2
-rw-r--r--src/declarative/qml/qdeclarativecustomparser_p.h2
-rw-r--r--src/declarative/qml/qdeclarativeengine.cpp2
-rw-r--r--src/declarative/qml/qdeclarativeobjectscriptclass.cpp2
-rw-r--r--src/declarative/qml/qdeclarativescriptparser.cpp2
-rw-r--r--src/declarative/qml/qdeclarativetypeloader.cpp8
-rw-r--r--src/declarative/qml/qdeclarativevaluetype.cpp2
-rw-r--r--src/declarative/qml/qdeclarativexmlhttprequest.cpp4
-rw-r--r--src/declarative/util/qdeclarativeanimation.cpp5
-rw-r--r--src/declarative/util/qdeclarativefontloader.cpp197
-rw-r--r--src/declarative/util/qdeclarativefontloader_p.h2
-rw-r--r--src/declarative/util/qdeclarativelistmodel.cpp536
-rw-r--r--src/declarative/util/qdeclarativelistmodel_p.h12
-rw-r--r--src/declarative/util/qdeclarativelistmodel_p_p.h134
-rw-r--r--src/declarative/util/qdeclarativelistmodelworkeragent.cpp33
-rw-r--r--src/declarative/util/qdeclarativelistmodelworkeragent_p.h4
-rw-r--r--src/declarative/util/qdeclarativepixmapcache_p.h2
-rw-r--r--src/declarative/util/qdeclarativepropertychanges.cpp275
-rw-r--r--src/declarative/util/qdeclarativepropertychanges_p.h16
-rw-r--r--src/declarative/util/qdeclarativestate.cpp238
-rw-r--r--src/declarative/util/qdeclarativestate_p.h21
-rw-r--r--src/declarative/util/qdeclarativestate_p_p.h135
-rw-r--r--src/declarative/util/qdeclarativestateoperations.cpp66
-rw-r--r--src/declarative/util/qdeclarativetransitionmanager.cpp4
-rw-r--r--src/declarative/util/qdeclarativexmllistmodel.cpp8
-rw-r--r--src/gui/accessible/qaccessible_win.cpp130
-rw-r--r--src/gui/dialogs/qfiledialog.cpp1
-rw-r--r--src/gui/egl/qegl.cpp2
-rw-r--r--src/gui/egl/qegl_p.h4
-rw-r--r--src/gui/egl/qeglcontext_p.h3
-rw-r--r--src/gui/egl/qeglproperties.cpp4
-rw-r--r--src/gui/embedded/qsoundqss_qws.cpp2
-rw-r--r--src/gui/graphicsview/qgraphicsitem.cpp53
-rw-r--r--src/gui/graphicsview/qgraphicsitem_p.h17
-rw-r--r--src/gui/graphicsview/qgraphicslayoutitem.cpp2
-rw-r--r--src/gui/graphicsview/qgraphicsscene.cpp11
-rw-r--r--src/gui/image/qiconloader.cpp4
-rw-r--r--src/gui/image/qjpeghandler.cpp60
-rw-r--r--src/gui/image/qpixmap.cpp15
-rw-r--r--src/gui/image/qpixmapfilter.cpp15
-rw-r--r--src/gui/image/qtiffhandler.cpp7
-rw-r--r--src/gui/itemviews/qabstractproxymodel.cpp16
-rw-r--r--src/gui/itemviews/qsortfilterproxymodel.cpp8
-rw-r--r--src/gui/kernel/qaction.cpp3
-rw-r--r--src/gui/kernel/qapplication.cpp39
-rw-r--r--src/gui/kernel/qapplication_p.h4
-rw-r--r--src/gui/kernel/qapplication_x11.cpp29
-rw-r--r--src/gui/kernel/qcocoaapplication_mac.mm11
-rw-r--r--src/gui/kernel/qcocoasharedwindowmethods_mac_p.h10
-rw-r--r--src/gui/kernel/qgesture.cpp2
-rw-r--r--src/gui/kernel/qgesture.h4
-rw-r--r--src/gui/kernel/qgesture_p.h18
-rw-r--r--src/gui/kernel/qgesturemanager.cpp43
-rw-r--r--src/gui/kernel/qkeysequence.cpp2
-rw-r--r--src/gui/kernel/qstandardgestures.cpp16
-rw-r--r--src/gui/kernel/qwidget.cpp12
-rw-r--r--src/gui/kernel/qwidget_mac.mm12
-rw-r--r--src/gui/kernel/qwidget_s60.cpp2
-rw-r--r--src/gui/painting/qbezier.cpp41
-rw-r--r--src/gui/painting/qblendfunctions.cpp4
-rw-r--r--src/gui/painting/qbrush.cpp15
-rw-r--r--src/gui/painting/qdrawhelper.cpp2
-rw-r--r--src/gui/painting/qdrawhelper_sse2.cpp15
-rw-r--r--src/gui/painting/qdrawhelper_ssse3.cpp75
-rw-r--r--src/gui/painting/qgraphicssystem_runtime.cpp6
-rw-r--r--src/gui/painting/qgraphicssystem_runtime_p.h1
-rw-r--r--src/gui/painting/qgraphicssystemfactory.cpp2
-rw-r--r--src/gui/painting/qpaintengine_raster.cpp10
-rw-r--r--src/gui/painting/qpaintengineex.cpp2
-rw-r--r--src/gui/painting/qpainter.cpp4
-rw-r--r--src/gui/painting/qprintengine_ps.cpp1
-rw-r--r--src/gui/painting/qprintengine_win.cpp2
-rw-r--r--src/gui/painting/qregion.cpp4
-rw-r--r--src/gui/painting/qstroker.cpp2
-rw-r--r--src/gui/painting/qtextureglyphcache.cpp129
-rw-r--r--src/gui/painting/qtextureglyphcache_p.h42
-rw-r--r--src/gui/styles/qs60style.cpp81
-rw-r--r--src/gui/styles/qs60style_p.h2
-rw-r--r--src/gui/text/qfontdatabase_mac.cpp43
-rw-r--r--src/gui/text/qfontengine.cpp8
-rw-r--r--src/gui/text/qfontengine_ft.cpp6
-rw-r--r--src/gui/text/qfontengine_ft_p.h2
-rw-r--r--src/gui/text/qfontengine_mac.mm27
-rw-r--r--src/gui/text/qfontengine_p.h13
-rw-r--r--src/gui/text/qfontengine_win.cpp5
-rw-r--r--src/gui/text/qfontengine_win_p.h2
-rw-r--r--src/gui/text/qstatictext.cpp8
-rw-r--r--src/gui/text/qtextdocument.cpp13
-rw-r--r--src/gui/text/qtextdocumentfragment.cpp1
-rw-r--r--src/gui/text/qtexthtmlparser.cpp1
-rw-r--r--src/gui/text/qtextlayout.cpp8
-rw-r--r--src/gui/text/qtextobject.cpp5
-rw-r--r--src/gui/widgets/qdockarealayout.cpp10
-rw-r--r--src/gui/widgets/qdockwidget.cpp37
-rw-r--r--src/gui/widgets/qlinecontrol.cpp4
-rw-r--r--src/gui/widgets/qmainwindow.cpp71
-rw-r--r--src/gui/widgets/qmainwindowlayout.cpp11
-rw-r--r--src/gui/widgets/qmainwindowlayout_p.h2
-rw-r--r--src/gui/widgets/qmenu_symbian.cpp8
-rw-r--r--src/gui/widgets/qtoolbar.cpp20
-rw-r--r--src/gui/widgets/qtoolbararealayout.cpp5
-rw-r--r--src/gui/widgets/qtoolbarlayout.cpp7
-rw-r--r--src/imports/folderlistmodel/qdeclarativefolderlistmodel.cpp4
-rw-r--r--src/imports/folderlistmodel/qdeclarativefolderlistmodel.h2
-rw-r--r--src/multimedia/audio/qaudio_symbian_p.cpp42
-rw-r--r--src/multimedia/audio/qaudio_symbian_p.h15
-rw-r--r--src/multimedia/audio/qaudioinput_symbian_p.cpp37
-rw-r--r--src/multimedia/audio/qaudiooutput_symbian_p.cpp47
-rw-r--r--src/multimedia/video/qabstractvideobuffer.cpp2
-rw-r--r--src/network/access/qhttpnetworkconnection.cpp4
-rw-r--r--src/network/access/qnetworkreplyimpl.cpp1
-rw-r--r--src/network/bearer/qbearerengine.cpp3
-rw-r--r--src/network/kernel/qauthenticator.cpp39
-rw-r--r--src/network/kernel/qauthenticator_p.h1
-rw-r--r--src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp35
-rw-r--r--src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp21
-rw-r--r--src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h4
-rw-r--r--src/opengl/gl2paintengineex/qtriangulatingstroker.cpp1
-rw-r--r--src/opengl/qgl.cpp5
-rw-r--r--src/opengl/qgl_x11.cpp1
-rw-r--r--src/opengl/qglframebufferobject.cpp4
-rw-r--r--src/opengl/qglpixelbuffer.cpp8
-rw-r--r--src/opengl/qglpixelbuffer_win.cpp34
-rw-r--r--src/opengl/qpaintengine_opengl.cpp9
-rw-r--r--src/opengl/qpixmapdata_gl_p.h1
-rw-r--r--src/opengl/qwindowsurface_gl.cpp17
-rw-r--r--src/openvg/qpaintengine_vg.cpp160
-rw-r--r--src/openvg/qvg_symbian.cpp31
-rw-r--r--src/openvg/qvgimagepool.cpp13
-rw-r--r--src/plugins/bearer/bearer.pro6
-rw-r--r--src/plugins/bearer/connman/qofonoservice_linux_p.h2
-rw-r--r--src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp11
-rw-r--r--src/plugins/bearer/networkmanager/qnetworkmanagerservice.cpp2
-rw-r--r--src/plugins/bearer/symbian/3_2/3_2.pro12
-rw-r--r--src/plugins/bearer/symbian/symbian.pri6
-rw-r--r--src/plugins/bearer/symbian/symbian.pro7
-rw-r--r--src/plugins/bearer/symbian/symbian_3/symbian_3.pro18
-rw-r--r--src/plugins/gfxdrivers/directfb/directfb.pro2
-rw-r--r--src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp2
-rw-r--r--src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp2
-rw-r--r--src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp2
-rw-r--r--src/plugins/graphicssystems/graphicssystems.pro4
-rw-r--r--src/plugins/graphicssystems/meego/meego.pro13
-rw-r--r--src/plugins/graphicssystems/meego/qmeegoextensions.cpp129
-rw-r--r--src/plugins/graphicssystems/meego/qmeegoextensions.h88
-rw-r--r--src/plugins/graphicssystems/meego/qmeegographicssystem.cpp247
-rw-r--r--src/plugins/graphicssystems/meego/qmeegographicssystem.h85
-rw-r--r--src/plugins/graphicssystems/meego/qmeegographicssystemplugin.cpp58
-rw-r--r--src/plugins/graphicssystems/meego/qmeegographicssystemplugin.h54
-rw-r--r--src/plugins/graphicssystems/meego/qmeegopixmapdata.cpp206
-rw-r--r--src/plugins/graphicssystems/meego/qmeegopixmapdata.h73
-rw-r--r--src/plugins/imageformats/jpeg/jpeg.pro14
-rw-r--r--src/plugins/s60/s60.pro10
-rw-r--r--src/qt3support/dialogs/q3filedialog.cpp1
-rw-r--r--src/qt3support/text/q3richtext.cpp1
-rw-r--r--src/s60installs/bwins/QtCoreu.def4
-rw-r--r--src/s60installs/bwins/QtDeclarativeu.def78
-rw-r--r--src/s60installs/bwins/QtGuiu.def11
-rw-r--r--src/s60installs/bwins/QtOpenGLu.def701
-rw-r--r--src/s60installs/eabi/QtDeclarativeu.def76
-rw-r--r--src/s60installs/eabi/QtGuiu.def8
-rw-r--r--src/s60installs/eabi/QtOpenGLu.def705
-rw-r--r--src/s60installs/s60installs.pro48
-rw-r--r--src/script/api/qscriptcontext.cpp2
-rw-r--r--src/testlib/qbenchmark.cpp2
-rw-r--r--tests/auto/declarative/qdeclarativeanimatedimage/tst_qdeclarativeanimatedimage.cpp17
-rw-r--r--tests/auto/declarative/qdeclarativeborderimage/tst_qdeclarativeborderimage.cpp23
-rw-r--r--tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp16
-rw-r--r--tests/auto/declarative/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp15
-rw-r--r--tests/auto/declarative/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp16
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp16
-rw-r--r--tests/auto/declarative/qdeclarativefontloader/data/daniel.ttfbin0 -> 51984 bytes
-rw-r--r--tests/auto/declarative/qdeclarativefontloader/tst_qdeclarativefontloader.cpp42
-rw-r--r--tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp2
-rw-r--r--tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp21
-rw-r--r--tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp311
-rw-r--r--tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp2
-rw-r--r--tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp15
-rw-r--r--tests/auto/declarative/qdeclarativemousearea/data/doubleclick.qml14
-rw-r--r--tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp32
-rw-r--r--tests/auto/declarative/qdeclarativepathview/data/datamodel.qml1
-rw-r--r--tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp23
-rw-r--r--tests/auto/declarative/qdeclarativestates/data/anchorRewindBug2.qml25
-rw-r--r--tests/auto/declarative/qdeclarativestates/data/editProperties.qml34
-rw-r--r--tests/auto/declarative/qdeclarativestates/data/parentChange6.qml30
-rw-r--r--tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp172
-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/qdeclarativevisualdatamodel/data/singlerole1.qml11
-rw-r--r--tests/auto/declarative/qdeclarativevisualdatamodel/data/singlerole2.qml11
-rw-r--r--tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp82
-rw-r--r--tests/auto/declarative/qdeclarativexmlhttprequest/tst_qdeclarativexmlhttprequest.cpp67
-rw-r--r--tests/auto/gestures/tst_gestures.cpp26
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/heuristics/expectedoutput.txt1
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp41
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result16
-rw-r--r--tests/auto/linguist/lupdate/tst_lupdate.cpp9
-rw-r--r--tests/auto/moc/tst_moc.cpp8
-rw-r--r--tests/auto/q3table/tst_q3table.cpp8
-rw-r--r--tests/auto/qcompleter/tst_qcompleter.cpp4
-rw-r--r--tests/auto/qfontdatabase/tst_qfontdatabase.cpp35
-rw-r--r--tests/auto/qglthreads/tst_qglthreads.cpp160
-rw-r--r--tests/auto/qglthreads/tst_qglthreads.h2
-rw-r--r--tests/auto/qglyphs/tst_qglyphs.cpp8
-rw-r--r--tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp81
-rw-r--r--tests/auto/qgraphicslayoutitem/tst_qgraphicslayoutitem.cpp8
-rw-r--r--tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp20
-rw-r--r--tests/auto/qimagereader/images/qtbug13653-no_eoi.jpgbin0 -> 8250 bytes
-rw-r--r--tests/auto/qimagereader/qimagereader.qrc1
-rw-r--r--tests/auto/qimagereader/tst_qimagereader.cpp5
-rw-r--r--tests/auto/qlineedit/tst_qlineedit.cpp18
-rw-r--r--tests/auto/qlist/tst_qlist.cpp2
-rw-r--r--tests/auto/qmainwindow/tst_qmainwindow.cpp3
-rw-r--r--tests/auto/qobject/tst_qobject.cpp8
-rw-r--r--tests/auto/qpainter/tst_qpainter.cpp69
-rw-r--r--tests/auto/qpixmap/tst_qpixmap.cpp5
-rw-r--r--tests/auto/qpixmapfilter/tst_qpixmapfilter.cpp22
-rw-r--r--tests/auto/qsequentialanimationgroup/tst_qsequentialanimationgroup.cpp4
-rw-r--r--tests/auto/qsettings/tst_qsettings.cpp63
-rw-r--r--tests/auto/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp39
-rw-r--r--tests/auto/qstatictext/tst_qstatictext.cpp13
-rw-r--r--tests/auto/qtimer/tst_qtimer.cpp69
-rw-r--r--tests/auto/qurl/tst_qurl.cpp10
-rw-r--r--tests/auto/qvector/tst_qvector.cpp2
-rw-r--r--tools/assistant/tools/assistant/helpenginewrapper.cpp2
-rw-r--r--tools/assistant/tools/qhelpconverter/filespage.cpp4
-rw-r--r--tools/assistant/tools/qhelpconverter/filterpage.cpp2
-rw-r--r--tools/configure/configure.pro1
-rw-r--r--tools/configure/configureapp.cpp32
-rw-r--r--tools/designer/src/components/formeditor/formeditor_optionspage.cpp6
-rw-r--r--tools/designer/src/components/formeditor/qdesigner_resource.cpp28
-rw-r--r--tools/designer/src/components/propertyeditor/designerpropertymanager.cpp310
-rw-r--r--tools/designer/src/components/propertyeditor/designerpropertymanager.h3
-rw-r--r--tools/designer/src/lib/shared/iconselector.cpp2
-rw-r--r--tools/designer/src/lib/shared/qdesigner_utils.cpp8
-rw-r--r--tools/designer/src/lib/uilib/abstractformbuilder.cpp123
-rw-r--r--tools/linguist/linguist/mainwindow.cpp6
-rw-r--r--tools/linguist/linguist/sourcecodeview.cpp2
-rw-r--r--tools/linguist/lupdate/cpp.cpp19
-rw-r--r--tools/linguist/shared/translator.h4
-rw-r--r--tools/porting/src/rpp.cpp4
-rw-r--r--tools/porting/src/semantic.cpp4
-rw-r--r--tools/porting/src/tokenengine.h2
-rw-r--r--tools/porting/src/tokenreplacements.cpp8
-rw-r--r--tools/qdoc3/doc/files/qt.qdocconf8
-rw-r--r--tools/qdoc3/htmlgenerator.cpp30
-rw-r--r--tools/qdoc3/test/qt-build-docs.qdocconf1
-rw-r--r--tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf7
-rw-r--r--tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf7
-rw-r--r--tools/qdoc3/test/qt-html-templates.qdocconf53
-rw-r--r--tools/qdoc3/test/qt-html-templates_ja_JP.qdocconf9
-rw-r--r--tools/qdoc3/test/qt-html-templates_zh_CN.qdocconf9
-rw-r--r--tools/qdoc3/test/qt.qdocconf1
-rw-r--r--tools/qmeegographicssystemhelper/qmeegographicssystemhelper.cpp133
-rw-r--r--tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h175
-rw-r--r--tools/qmeegographicssystemhelper/qmeegographicssystemhelper.pro10
-rw-r--r--tools/qmeegographicssystemhelper/qmeegoliveimage.cpp115
-rw-r--r--tools/qmeegographicssystemhelper/qmeegoliveimage.h106
-rw-r--r--tools/qmeegographicssystemhelper/qmeegoliveimage_p.h63
-rw-r--r--tools/qmeegographicssystemhelper/qmeegolivepixmap.cpp163
-rw-r--r--tools/qmeegographicssystemhelper/qmeegolivepixmap.h98
-rw-r--r--tools/qmeegographicssystemhelper/qmeegolivepixmap_p.h66
-rw-r--r--tools/qmeegographicssystemhelper/qmeegooverlaywidget.cpp99
-rw-r--r--tools/qmeegographicssystemhelper/qmeegooverlaywidget.h86
-rw-r--r--tools/qmeegographicssystemhelper/qmeegoruntime.cpp158
-rw-r--r--tools/qmeegographicssystemhelper/qmeegoruntime.h61
-rw-r--r--tools/qml/qmlruntime.cpp8
-rw-r--r--tools/runonphone/ossignalconverter.cpp1
-rw-r--r--tools/tools.pro4
-rw-r--r--translations/assistant_de.ts540
-rw-r--r--translations/assistant_sl.ts579
-rw-r--r--translations/designer_de.ts56
-rw-r--r--translations/designer_sl.ts110
-rw-r--r--translations/linguist_de.ts686
-rw-r--r--translations/linguist_sl.ts709
-rw-r--r--translations/qt_de.ts46
-rw-r--r--translations/qt_gl.ts9828
-rw-r--r--translations/qt_help_de.ts2
-rw-r--r--translations/qt_help_sl.ts2
-rw-r--r--translations/qt_sl.ts479
-rw-r--r--util/unicode/main.cpp211
713 files changed, 25487 insertions, 7292 deletions
diff --git a/.gitignore b/.gitignore
index 4d5aa9b2ff..7bacc11f34 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,6 +6,7 @@ examples/*/*/*
!examples/*/*/README
examples/*/*/*[.]app
!examples/declarative/*
+!examples/tutorials/*
!examples/ja_JP/*/*
demos/*/*
!demos/spectrum/*
diff --git a/bin/createpackage.pl b/bin/createpackage.pl
index 2569a66733..cce0b54510 100755
--- a/bin/createpackage.pl
+++ b/bin/createpackage.pl
@@ -139,6 +139,9 @@ unless (GetOptions('i|install' => \$install,
Usage();
}
+my $epocroot = $ENV{EPOCROOT};
+$epocroot =~ s,[\\/]$,,x;
+
my $certfilepath = abs_path(dirname($certfile));
# Read params to variables
@@ -303,12 +306,12 @@ if ($preprocessonly) {
}
if($stub) {
- if(!($ENV{EPOCROOT})) { die("EPOCROOT must be set to create stub sis files"); }
- my $systeminstall = "$ENV{EPOCROOT}epoc32/data/z/system/install";
+ if(!($epocroot)) { die("EPOCROOT must be set to create stub sis files"); }
+ my $systeminstall = "$epocroot/epoc32/data/z/system/install";
mkpath($systeminstall);
my $stub_sis_name = $systeminstall."/".$stub_sis_name;
# Create stub SIS.
- system ("makesis -s $pkgoutput $stub_sis_name");
+ system ("$epocroot/epoc32/tools/makesis -s $pkgoutput $stub_sis_name");
} else {
if ($certtext eq "Self Signed"
&& !@certificates
@@ -321,7 +324,11 @@ if($stub) {
# Create SIS.
# The 'and' is because system uses 0 to indicate success.
- system ("makesis $pkgoutput $unsigned_sis_name") and die ("makesis failed");
+ if($epocroot) {
+ system ("$epocroot/epoc32/tools/makesis $pkgoutput $unsigned_sis_name") and die ("makesis failed");
+ } else {
+ system ("makesis $pkgoutput $unsigned_sis_name") and die ("makesis failed");
+ }
print("\n");
my $targetInsert = "";
diff --git a/bin/patch_capabilities.pl b/bin/patch_capabilities.pl
index 0c0538c476..a85f073912 100755
--- a/bin/patch_capabilities.pl
+++ b/bin/patch_capabilities.pl
@@ -46,7 +46,13 @@
#
#######################################################################
+#
+# Note: Please make sure to output all changes done to the pkg file in a print statements
+# starting with "Patching: " to ease integration into IDEs!
+#
+
use File::Copy;
+use File::Spec;
sub Usage() {
print("This script can be used to set capabilities of all binaries\n");
@@ -142,39 +148,56 @@ if (@ARGV)
# Parse each line.
while (<PKG>)
{
- # Patch pkg UID
my $line = $_;
my $newLine = $line;
- if ($line =~ m/^\#.*\(0x[0-9|a-f|A-F]*\).*$/)
+
+ # Patch pkg UID if it's in protected range
+ if ($line =~ m/^\#.*\((0x[0-7][0-9|a-f|A-F]*)\).*$/)
{
- $newLine =~ s/\(0x./\(0xE/;
+ my $oldUID = $1;
+ my $newUID = $oldUID;
+ $newUID =~ s/0x./0xE/i;
+ $newLine =~ s/$oldUID/$newUID/;
+ print ("Patching: UID $oldUID is not compatible with self-signing! Changed to: $newUID.\n");
}
- # Patch embedded sis name and UID
- if ($line =~ m/^@.*\.sis.*\(0x[0-9|a-f|A-F]*\).*$/)
+ # Patch embedded sis name and UID if UID is in protected range
+ if ($line =~ m/^@\"*(.*\.sis).*\((0x[0-7][0-9|a-f|A-F]*)\).*$/)
{
- $newLine =~ s/\(0x./\(0xE/;
- if ($line !~ m/^.*_selfsigned.sis.*$/)
+ my $oldSisName = $1;
+ my $oldUID = $2;
+ my $newUID = $oldUID;
+ $newUID =~ s/0x./0xE/i;
+ $newLine =~ s/$oldUID/$newUID/;
+ print ("Patching: Embedded sis $oldSisName UID $oldUID changed to: $newUID.\n");
+
+ if ($oldSisName !~ m/^.*_selfsigned.sis$/i)
{
- $newLine =~ s/\.sis/_selfsigned\.sis/i;
+ my $newSisName = $oldSisName;
+ $newSisName =~ s/\.sis$/_selfsigned\.sis/i;
+ $newLine =~ s/$oldSisName/$newSisName/i;
+ print ("Patching: Embedded sis $oldSisName name changed to: $newSisName.\n");
}
}
- # Remove dependencies to known problem packages (i.e. packages that are likely to be patched, also)
+ # Remove dependencies to known problem packages (i.e. packages that are likely to be patched, too)
# to reduce unnecessary error messages.
- if ($line =~ m/^\(0x2002af5f\).*\{.*\}$/)
+ if ($line =~ m/^\((0x2002af5f)\).*\{.*\}$/)
{
- $newLine = "\n"
+ $newLine = "\n";
+ print ("Patching: Removed dependency to sqlite3.sis ($1) to avoid installation issues in case sqlite3.sis is also patched.\n");
}
- if ($line =~ m/^\(0x2001E61C\).*\{.*\}$/)
+ if ($line =~ m/^\((0x2001E61C)\).*\{.*\}$/)
{
- $newLine = "\n"
+ $newLine = "\n";
+ print ("Patching: Removed dependency to qt.sis ($1) to avoid installation issues in case qt.sis is also patched.\n");
}
# Remove manufacturer ifdef
if ($line =~ m/^.*\(MANUFACTURER\)\=\(.*\).*$/)
{
$newLine = "\n";
+ print ("Patching: Removed manufacturer check as it is usually not desirable in self-signed packages.\n");
}
if ($line =~ m/^ELSEIF.*MANUFACTURER$/)
@@ -240,7 +263,9 @@ if (@ARGV)
foreach my $binaryPath(@binaries)
{
# Create the command line for setting the capabilities.
+ my ($binaryVolume, $binaryDirs, $binaryBaseName) = File::Spec->splitpath($binaryPath);
my $commandToExecute = $baseCommandToExecute;
+ my $executeNeeded = 0;
if (@capabilitiesSpecified)
{
$commandToExecute = sprintf($baseCommandToExecute, join(" ", @capabilitiesSpecified));
@@ -250,34 +275,54 @@ if (@ARGV)
my $dllCaps;
open($dllCaps, "elftran -dump s $binaryPath |") or die ("Could not execute elftran");
my $capsFound = 0;
+ my $originalVid;
my @capabilitiesToSet;
my $capabilitiesToAllow = join(" ", @capabilitiesToAllow);
+ my @capabilitiesToDrop;
while (<$dllCaps>) {
+ if (/^Vendor ID: (.*)$/) {
+ $originalVid = "$1";
+ }
if (!$capsFound) {
$capsFound = 1 if (/Capabilities:/);
} else {
$_ = trim($_);
if ($capabilitiesToAllow =~ /$_/) {
push(@capabilitiesToSet, $_);
+ } else {
+ push(@capabilitiesToDrop, $_);
}
}
}
close($dllCaps);
+ if ($originalVid !~ "00000000") {
+ print ("Patching: Vendor ID (0x$originalVid) incompatible with self-signed packages, setting it to zero for \"$binaryBaseName\".\n");
+ $executeNeeded = 1;
+ }
+ if ($#capabilitiesToDrop) {
+ my $capsToDropStr = join("\", \"", @capabilitiesToDrop);
+ $capsToDropStr =~ s/\", \"$//;
+
+ print ("Patching: The following capabilities used in \"$binaryBaseName\" are not compatible with a self-signed package and will be removed: \"$capsToDropStr\".\n");
+ $executeNeeded = 1;
+ }
$commandToExecute = sprintf($baseCommandToExecute, join(" ", @capabilitiesToSet));
}
$commandToExecute .= $binaryPath;
- # Actually execute the elftran command to set the capabilities.
- print ("Executing ".$commandToExecute."\n");
- system ($commandToExecute." > $nullDevice");
-
+ if ($executeNeeded) {
+ # Actually execute the elftran command to set the capabilities.
+ print ("\n");
+ system ("$commandToExecute > $nullDevice");
+ }
## Create another command line to check that the set capabilities are correct.
#$commandToExecute = "elftran -dump s ".$binaryPath;
}
print ("\n");
- print ("NOTE: A patched package may not work as expected due to reduced capabilities.\n");
- print (" Therefore it should not be used for any kind of Symbian signing or distribution!\n");
+ print ("NOTE: A patched package may not work as expected due to reduced capabilities and other modifications,\n");
+ print (" so it should not be used for any kind of Symbian signing or distribution!\n");
+ print (" Use a proper certificate to avoid the need to patch the package.\n");
print ("\n");
}
}
diff --git a/bin/syncqt b/bin/syncqt
index a2eece07ff..faa357538e 100755
--- a/bin/syncqt
+++ b/bin/syncqt
@@ -51,6 +51,7 @@ my %modules = ( # path to module name map
"QtWebKit" => "$basedir/src/3rdparty/webkit/WebCore",
"phonon" => "$basedir/src/phonon",
"QtMultimedia" => "$basedir/src/multimedia",
+ "QtMeeGoGraphicsSystemHelper" => "$basedir/tools/qmeegographicssystemhelper",
);
my %moduleheaders = ( # restrict the module headers to those found in relative path
"QtWebKit" => "../WebKit/qt/Api",
@@ -690,7 +691,7 @@ my $class_lib_map_contents = "";
my @ignore_for_master_contents = ( "qt.h", "qpaintdevicedefs.h" );
my @ignore_for_include_check = ( "qatomic.h" );
my @ignore_for_qt_begin_header_check = ( "qiconset.h", "qconfig.h", "qconfig-dist.h", "qconfig-large.h", "qconfig-medium.h", "qconfig-minimal.h", "qconfig-small.h", "qfeatures.h", "qt_windows.h" );
-my @ignore_for_qt_begin_namespace_check = ( "qconfig.h", "qconfig-dist.h", "qconfig-large.h", "qconfig-medium.h", "qconfig-minimal.h", "qconfig-small.h", "qfeatures.h", "qatomic_arch.h", "qatomic_windowsce.h", "qt_windows.h", "qatomic_macosx.h" );
+my @ignore_for_qt_begin_namespace_check = ( "qconfig.h", "qconfig-dist.h", "qconfig-large.h", "qconfig-medium.h", "qconfig-minimal.h", "qconfig-small.h", "qfeatures.h", "qatomic_arch.h", "qatomic_windowsce.h", "qt_windows.h", "qatomic_macosx.h", "qatomic_arm.h", "qatomic_armv7.h" );
my @ignore_for_qt_module_check = ( "$modules{QtCore}/arch", "$modules{QtCore}/global", "$modules{QtSql}/drivers", "$modules{QtTest}", "$modules{QtDesigner}", "$modules{QtUiTools}", "$modules{QtDBus}", "$modules{phonon}" );
my %colliding_headers = ();
my %inject_headers;
diff --git a/config.tests/symbian/audio/audio.pro b/config.tests/symbian/audio/audio.pro
index abbde6e05b..b2a1986c71 100644
--- a/config.tests/symbian/audio/audio.pro
+++ b/config.tests/symbian/audio/audio.pro
@@ -3,5 +3,7 @@ SOURCES = audio.cpp
INCLUDEPATH += $${EPOCROOT}epoc32/include/mmf/server
INCLUDEPATH += $${EPOCROOT}epoc32/include/mmf/common
+INCLUDEPATH += $${EPOCROOT}epoc32/include/platform
LIBS += -lmmfdevsound
+QT =
diff --git a/configure b/configure
index 098131da4e..a9151b7cb4 100755
--- a/configure
+++ b/configure
@@ -730,7 +730,8 @@ CFG_MULTIMEDIA=auto
CFG_AUDIO_BACKEND=auto
CFG_SVG=auto
CFG_DECLARATIVE=auto
-CFG_WEBKIT=auto # (yes|no|auto)
+CFG_DECLARATIVE_DEBUG=yes
+CFG_WEBKIT=auto # (yes|no|auto|debug)
CFG_JAVASCRIPTCORE_JIT=auto
CFG_GFX_AVAILABLE="linuxfb transformed qvfb vnc multiscreen directfb"
@@ -1021,13 +1022,26 @@ while [ "$#" -gt 0 ]; do
VAR=`echo $1 | sed "s,^-[^-]*-\(.*\),\1,"`
VAL=`echo $1 | sed "s,^-\([^-]*\).*,\1,"`
;;
+ #WebKit options
+ -webkit)
+ VAR="webkit"
+ VAL="yes"
+ ;;
+ -webkit-debug)
+ VAR="webkit"
+ VAL="debug"
+ ;;
+ -no-webkit)
+ VAR="webkit"
+ VAL="no"
+ ;;
#Qt style no options
-no-*)
VAR=`echo $1 | sed "s,^-no-\(.*\),\1,"`
VAL=no
;;
#Qt style yes options
- -incremental|-qvfb|-profile|-shared|-static|-sm|-xinerama|-xshape|-xsync|-xinput|-egl|-reduce-exports|-pch|-separate-debug-info|-stl|-freetype|-xcursor|-xfixes|-xrandr|-xrender|-mitshm|-fontconfig|-xkb|-nis|-qdbus|-dbus|-dbus-linked|-glib|-gstreamer|-gtkstyle|-cups|-iconv|-largefile|-h|-help|-v|-verbose|-debug|-release|-fast|-accessibility|-confirm-license|-gnumake|-framework|-qt3support|-debug-and-release|-exceptions|-cocoa|-carbon|-universal|-prefix-install|-silent|-armfpa|-optimized-qmake|-dwarf2|-reduce-relocations|-sse|-openssl|-openssl-linked|-ptmalloc|-xmlpatterns|-phonon|-phonon-backend|-multimedia|-audio-backend|-svg|-declarative|-webkit|-javascript-jit|-script|-scripttools|-rpath|-force-pkg-config|-s60|-usedeffiles)
+ -incremental|-qvfb|-profile|-shared|-static|-sm|-xinerama|-xshape|-xsync|-xinput|-egl|-reduce-exports|-pch|-separate-debug-info|-stl|-freetype|-xcursor|-xfixes|-xrandr|-xrender|-mitshm|-fontconfig|-xkb|-nis|-qdbus|-dbus|-dbus-linked|-glib|-gstreamer|-gtkstyle|-cups|-iconv|-largefile|-h|-help|-v|-verbose|-debug|-release|-fast|-accessibility|-confirm-license|-gnumake|-framework|-qt3support|-debug-and-release|-exceptions|-cocoa|-carbon|-universal|-prefix-install|-silent|-armfpa|-optimized-qmake|-dwarf2|-reduce-relocations|-sse|-openssl|-openssl-linked|-ptmalloc|-xmlpatterns|-phonon|-phonon-backend|-multimedia|-audio-backend|-svg|-declarative|-javascript-jit|-script|-scripttools|-rpath|-force-pkg-config|-s60|-usedeffiles)
VAR=`echo $1 | sed "s,^-\(.*\),\1,"`
VAL=yes
;;
@@ -2113,17 +2127,21 @@ while [ "$#" -gt 0 ]; do
fi
fi
;;
- webkit)
- if [ "$VAL" = "yes" ] || [ "$VAL" = "auto" ]; then
- CFG_WEBKIT="yes"
+ declarative-debug)
+ if [ "$VAL" = "yes" ]; then
+ CFG_DECLARATIVE_DEBUG="yes"
else
if [ "$VAL" = "no" ]; then
- CFG_WEBKIT="no"
+ CFG_DECLARATIVE_DEBUG="no"
else
UNKNOWN_OPT=yes
fi
fi
;;
+ webkit)
+ [ "$VAL" = "auto" ] && VAL="yes"
+ CFG_WEBKIT="$VAL"
+ ;;
javascript-jit)
if [ "$VAL" = "yes" ] || [ "$VAL" = "auto" ] || [ "$VAL" = "no" ]; then
CFG_JAVASCRIPTCORE_JIT="$VAL"
@@ -3124,6 +3142,9 @@ if [ "$PLATFORM" != "$XPLATFORM" -a "$CFG_EMBEDDED" != "no" ]; then
sh4al)
CFG_ARCH=sh4a
;;
+ arm*)
+ CFG_ARCH=arm
+ ;;
*)
CFG_ARCH="$CFG_EMBEDDED"
;;
@@ -3136,6 +3157,16 @@ elif [ "$PLATFORM_MAC" = "yes" ] || [ -z "$CFG_ARCH" ]; then
CFG_ARCH=$CFG_HOST_ARCH
fi
+# for compatibility
+COMPAT_ARCH=
+case "$CFG_ARCH" in
+arm*)
+ # previously, armv6 was a different arch
+ CFG_ARCH=arm
+ COMPAT_ARCH=armv6
+ ;;
+esac
+
if [ -d "$relpath/src/corelib/arch/$CFG_ARCH" ]; then
if [ "$OPT_VERBOSE" = "yes" ]; then
echo " '$CFG_ARCH' is supported"
@@ -3653,9 +3684,10 @@ Usage: $relconf [-h] [-prefix <dir>] [-prefix-install] [-bindir <dir>] [-libdir
[-no-multimedia] [-multimedia] [-no-phonon] [-phonon] [-no-phonon-backend] [-phonon-backend]
[-no-media-backend] [-media-backend] [-no-audio-backend] [-audio-backend]
[-no-openssl] [-openssl] [-openssl-linked]
- [-no-gtkstyle] [-gtkstyle] [-no-svg] [-svg] [-no-webkit] [-webkit] [-no-javascript-jit] [-javascript-jit]
- [-no-script] [-script] [-no-scripttools] [-scripttools] [-no-declarative] [-declarative]
-
+ [-no-gtkstyle] [-gtkstyle] [-no-svg] [-svg] [-no-webkit] [-webkit] [-webkit-debug]
+ [-no-javascript-jit] [-javascript-jit]
+ [-no-script] [-script] [-no-scripttools] [-scripttools]
+ [-no-declarative] [-declarative][-no-declarative-debug] [-declarative-debug]
[additional platform specific options (see below)]
@@ -3807,6 +3839,7 @@ fi
-no-webkit ......... Do not build the WebKit module.
+ -webkit ............ Build the WebKit module.
WebKit is built if a decent C++ compiler is used.
+ -webkit-debug ...... Build the WebKit module with debug symbols.
-no-javascript-jit . Do not build the JavaScriptCore JIT compiler.
+ -javascript-jit .... Build the JavaScriptCore JIT compiler.
@@ -3817,9 +3850,12 @@ fi
-no-scripttools .... Do not build the QtScriptTools module.
+ -scripttools ....... Build the QtScriptTools module.
- -no-declarative .....Do not build the declarative module.
+ -no-declarative ..... Do not build the declarative module.
+ -declarative ....... Build the declarative module.
+ -no-declarative-debug ..... Do not build the declarative debugging support.
+ + -declarative-debug ....... Build the declarative debugging support.
+
-platform target ... The operating system and compiler you are building
on ($PLATFORM).
@@ -4960,7 +4996,7 @@ if [ "$CFG_IWMMXT" = "yes" ]; then
fi
# detect neon support
-if ( [ "$CFG_ARCH" = "arm" ] || [ "$CFG_ARCH" = "armv6" ] ) && [ "${CFG_NEON}" = "auto" ]; then
+if [ "$CFG_ARCH" = "arm" ] && [ "${CFG_NEON}" = "auto" ]; then
if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/neon "neon" $L_FLAGS $I_FLAGS $l_FLAGS "-mfpu=neon"; then
CFG_NEON=yes
else
@@ -6636,7 +6672,7 @@ elif [ "$XPLATFORM" = "symbian-sbsv2" ]; then
fi
if [ "$CFG_JAVASCRIPTCORE_JIT" = "yes" ] || [ "$CFG_JAVASCRIPTCORE_JIT" = "auto" ]; then
- if [ "$CFG_ARCH" = "arm" ] || [ "$CFG_ARCH" = "armv6" ]; then
+ if [ "$CFG_ARCH" = "arm" ]; then
"$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/javascriptcore-jit "javascriptcore-jit" $L_FLAGS $I_FLAGS $l_FLAGS
if [ $? != "0" ]; then
CFG_JAVASCRIPTCORE_JIT=no
@@ -7293,7 +7329,7 @@ case "$XPLATFORM" in
canBuildQtXmlPatterns="no"
canBuildQtConcurrent="no"
;;
- 5.9)
+ 5.*)
canBuildWebKit="no"
canBuildQtConcurrent="no"
;;
@@ -7417,14 +7453,15 @@ if [ "$CFG_WEBKIT" = "auto" ]; then
CFG_WEBKIT="$canBuildWebKit"
fi
-if [ "$CFG_WEBKIT" = "yes" ]; then
+if [ "$CFG_WEBKIT" != "no" ]; then
# This include takes care of adding "webkit" to QT_CONFIG.
cp -f "$relpath/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri" "$outpath/mkspecs/modules/qt_webkit_version.pri"
# The reason we set CFG_WEBKIT, is such that the printed overview of what will be enabled, shows correctly.
- CFG_WEBKIT="yes"
+ if [ "$CFG_WEBKIT" = "debug" ]; then
+ QMAKE_CONFIG="$QMAKE_CONFIG webkit-debug"
+ fi
else
rm -f "$outpath/mkspecs/modules/qt_webkit_version.pri"
- CFG_WEBKIT="no"
QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_WEBKIT"
fi
@@ -7471,6 +7508,9 @@ fi
if [ "$CFG_DECLARATIVE" = "yes" ]; then
QT_CONFIG="$QT_CONFIG declarative"
+ if [ "$CFG_DECLARATIVE_DEBUG" = "no" ]; then
+ QCONFIG_FLAGS="$QCONFIG_FLAGS QDECLARATIVE_NO_DEBUG_PROTOCOL"
+ fi
else
QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_DECLARATIVE"
fi
@@ -7736,10 +7776,20 @@ if [ ! -z "$COMPAT_COMPILER" ]; then
fi
fi
+# is this arch compatible with some other "standard" build key
+QT_BUILD_KEY_COMPAT_ARCH=
+if [ ! -z "$COMPAT_ARCH" ]; then
+ QT_BUILD_KEY_COMPAT_ARCH="$CFG_USER_BUILD_KEY $COMPAT_ARCH $TARGET_OPERATING_SYSTEM $COMPILER $BUILD_OPTIONS"
+ if [ -n "$QT_NAMESPACE" ]; then
+ QT_BUILD_KEY_COMPAT_COMPILER="$QT_BUILD_KEY_COMPAT_ARCH $QT_NAMESPACE"
+ fi
+fi
+
# strip out leading/trailing/extra whitespace
QT_BUILD_KEY=`echo $QT_BUILD_KEY | sed -e "s, *, ,g" -e "s,^ *,," -e "s, *$,,"`
QT_BUILD_KEY_COMPAT=`echo $QT_BUILD_KEY_COMPAT | sed -e "s, *, ,g" -e "s,^ *,," -e "s, *$,,"`
QT_BUILD_KEY_COMPAT_COMPILER=`echo $QT_BUILD_KEY_COMPAT_COMPILER | sed -e "s, *, ,g" -e "s,^ *,," -e "s, *$,,"`
+QT_BUILD_KEY_COMPAT_ARCH=`echo $QT_BUILD_KEY_COMPAT_ARCH | sed -e "s, *, ,g" -e "s,^ *,," -e "s, *$,,"`
#-------------------------------------------------------------------------------
# part of configuration information goes into qconfig.h
@@ -7792,6 +7842,11 @@ if [ -n "$QT_BUILD_KEY_COMPAT_COMPILER" ]; then
echo "#define QT_BUILD_KEY_COMPAT2 \"$QT_BUILD_KEY_COMPAT_COMPILER\"" \
>> "$outpath/src/corelib/global/qconfig.h.new"
fi
+if [ -n "$QT_BUILD_KEY_COMPAT_ARCH" ]; then
+ echo "#define QT_BUILD_KEY_COMPAT3 \"$QT_BUILD_KEY_COMPAT_ARCH\"" \
+ >> "$outpath/src/corelib/global/qconfig.h.new"
+fi
+
echo "" >>"$outpath/src/corelib/global/qconfig.h.new"
echo "#ifdef QT_BOOTSTRAPPED" >>"$outpath/src/corelib/global/qconfig.h.new"
@@ -8357,7 +8412,7 @@ EOF
*) ;;
esac
-if [ "$PLATFORM_MAC" = "yes" ] && [ "$CFG_MAC_DWARF2" = "no" ] && [ "$CFG_WEBKIT" = "yes" ] && [ "$CFG_DEBUG_RELEASE" = "yes" ]; then
+if [ "$PLATFORM_MAC" = "yes" ] && [ "$CFG_MAC_DWARF2" = "no" ] && [ "$CFG_WEBKIT" != "no" ] && [ "$CFG_DEBUG_RELEASE" = "yes" ]; then
cat <<EOF
WARNING: DWARF2 debug symbols are not enabled. Linking webkit
in debug mode will run out of memory on systems with 2GB or less.
@@ -8434,8 +8489,12 @@ echo "QtXmlPatterns module ... $CFG_XMLPATTERNS"
echo "Phonon module .......... $CFG_PHONON"
echo "Multimedia module ...... $CFG_MULTIMEDIA"
echo "SVG module ............. $CFG_SVG"
-echo "WebKit module .......... $CFG_WEBKIT"
-if [ "$CFG_WEBKIT" = "yes" ]; then
+case "$CFG_WEBKIT" in
+ yes) echo "WebKit module .......... yes" ;;
+ debug) echo "WebKit module .......... yes (debug)" ;;
+ no) echo "WebKit module .......... no" ;;
+esac
+if [ "$CFG_WEBKIT" != "no" ]; then
if [ "$CFG_JAVASCRIPTCORE_JIT" = "auto" ]; then
echo "JavaScriptCore JIT ..... To be decided by JavaScriptCore"
else
@@ -8443,6 +8502,7 @@ if [ "$CFG_WEBKIT" = "yes" ]; then
fi
fi
echo "Declarative module ..... $CFG_DECLARATIVE"
+echo "Declarative debugging ...$CFG_DECLARATIVE_DEBUG"
echo "Support for S60 ........ $CFG_S60"
echo "Symbian DEF files ...... $CFG_SYMBIAN_DEFFILES"
echo "STL support ............ $CFG_STL"
diff --git a/configure.exe b/configure.exe
index 18c9004c48..e2f4331572 100755
--- a/configure.exe
+++ b/configure.exe
Binary files differ
diff --git a/dist/changes-4.7.0 b/dist/changes-4.7.0
index a5939e3b5f..53e51f86b7 100644
--- a/dist/changes-4.7.0
+++ b/dist/changes-4.7.0
@@ -371,6 +371,10 @@ Qt for Symbian
- QSplashScreen
* [QTBUG-11129] Fixed a hanging bug in QSplashScreen on 3.1 devices.
+ - QS60Main... classes
+ * The future compatibility of QS60MainAppUi, QS60MainDocument and
+ QS60MainApplication are improved by removing the need for any
+ sub-class to link to Avkon functions that may not exist in future.
****************************************************************************
diff --git a/doc/src/declarative/advtutorial.qdoc b/doc/src/declarative/advtutorial.qdoc
index 1341bbb942..4c97e1a1f8 100644
--- a/doc/src/declarative/advtutorial.qdoc
+++ b/doc/src/declarative/advtutorial.qdoc
@@ -425,7 +425,7 @@ First we call \c sendHighScore() (explained in the section below) if it is possi
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.
-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 beter 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.
+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.
\section3 Storing high scores online
diff --git a/doc/src/declarative/declarativeui.qdoc b/doc/src/declarative/declarativeui.qdoc
index 2f436829bf..cb326a3e71 100644
--- a/doc/src/declarative/declarativeui.qdoc
+++ b/doc/src/declarative/declarativeui.qdoc
@@ -30,7 +30,6 @@
\page qtquick.html
\ingroup qt-gui-concepts
-
\brief Qt Quick provides a declarative framework for building highly
dynamic, custom user interfaces.
diff --git a/doc/src/declarative/example-slideswitch.qdoc b/doc/src/declarative/example-slideswitch.qdoc
index 1a40f14a4a..09b6006d97 100644
--- a/doc/src/declarative/example-slideswitch.qdoc
+++ b/doc/src/declarative/example-slideswitch.qdoc
@@ -35,7 +35,7 @@ The code for this example can be found in the \c $QTDIR/examples/declarative/ui-
\section1 Overview
-The elements that composed the switch are:
+The elements that compose the switch are:
\list
\o a \c on property (the interface to interact with the switch),
diff --git a/doc/src/declarative/extending.qdoc b/doc/src/declarative/extending.qdoc
index 0cc989d487..a1ffde0036 100644
--- a/doc/src/declarative/extending.qdoc
+++ b/doc/src/declarative/extending.qdoc
@@ -124,7 +124,7 @@ The QML snippet shown above assigns a \c Person object to the \c BirthdayParty's
QML can set properties of types that are more complex than basic intrinsics like
integers and strings. Properties can also be object pointers, Qt interface
-pointers, lists of object points, and lists of Qt interface pointers. As QML
+pointers, lists of object pointers, and lists of Qt interface pointers. As QML
is typesafe it ensures that only valid types are assigned to these properties,
just like it does for primitive types.
diff --git a/doc/src/declarative/pics/gradient.png b/doc/src/declarative/pics/qml-gradient.png
index 5eefdd2031..5eefdd2031 100644
--- a/doc/src/declarative/pics/gradient.png
+++ b/doc/src/declarative/pics/qml-gradient.png
Binary files differ
diff --git a/doc/src/declarative/pics/rect-border-width.png b/doc/src/declarative/pics/rect-border-width.png
index c3c6c2ccb9..e232cf3ebd 100644
--- a/doc/src/declarative/pics/rect-border-width.png
+++ b/doc/src/declarative/pics/rect-border-width.png
Binary files differ
diff --git a/doc/src/declarative/pics/rect-color.png b/doc/src/declarative/pics/rect-color.png
new file mode 100644
index 0000000000..b258ba9b6c
--- /dev/null
+++ b/doc/src/declarative/pics/rect-color.png
Binary files differ
diff --git a/doc/src/declarative/positioners.qdoc b/doc/src/declarative/positioners.qdoc
new file mode 100644
index 0000000000..8c9b8b7e6c
--- /dev/null
+++ b/doc/src/declarative/positioners.qdoc
@@ -0,0 +1,193 @@
+/****************************************************************************
+**
+** 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 documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:FDL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in a
+** written agreement between you and Nokia.
+**
+** GNU Free Documentation License
+** Alternatively, this file may be used under the terms of the GNU Free
+** Documentation License version 1.3 as published by the Free Software
+** Foundation and appearing in the file included in the packaging of this
+** file.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*!
+\page qml-positioners.html
+\title Using QML Positioner and Repeater Items
+
+\section1 Introduction
+
+Positioner items are container items that manage the positions and sizes of
+items in a declarative user interface. Positioners behave in a similar way to
+the \l{Widgets and Layouts}{layout managers} used with standard Qt widgets,
+except that they are also containers in their own right.
+
+Positioners and repeaters make it easier to work with many items when they need
+to be arranged in a regular layout.
+
+\section1 Positioners
+
+A set of standard positioners are provided in the basic set of Qt Quick
+graphical elements:
+
+\list
+\o \l{#Column}{Column} arranges its children in a column
+\o \l{#Row}{Row} arranges its children in a row
+\o \l{#Grid}{Grid} arranges its children in a grid
+\o \l{#Flow}{Flow} arranges its children like words on a page
+\endlist
+
+\section2 Column
+
+\beginfloatright
+\image qml-column.png
+\endfloat
+
+\l Column items are used to vertically arrange items. The following example
+uses a Column item to arrange three \l Rectangle items in an area defined
+by an outer \l Item. The \l{Column::spacing}{spacing} property is set to
+include a small amount of space between the rectangles.
+
+\clearfloat
+\snippet doc/src/snippets/declarative/column/column.qml document
+
+Note that, since Column inherits directly from Item, any background color
+must be added to a parent Rectangle, if desired.
+
+\section2 Row
+
+\beginfloatright
+\image qml-row.png
+\endfloat
+
+\l Row items are used to horizontally arrange items. The following example
+uses a Row item to arrange three rounded \l Rectangle items in an area defined
+by an outer colored Rectangle. The \l{Row::spacing}{spacing} property is set to
+include a small amount of space between the rectangles.
+
+We ensure that the parent Rectangle is large enough so that there is some space
+left around the edges of the horizontally centered Row item.
+
+\clearfloat
+\snippet doc/src/snippets/declarative/row.qml document
+
+\section2 Grid
+
+\beginfloatright
+\image qml-grid-spacing.png
+\endfloat
+
+\l Grid items are used to place items in a grid or table arrangement.
+The following example uses a Grid item to place four \l Rectangle items
+in a 2-by-2 grid. As with the other positioners, the spacing between items
+can be specified using the \l{Grid::spacing}{spacing} property.
+
+\clearfloat
+\snippet doc/src/snippets/declarative/grid/grid-spacing.qml document
+
+There is no difference between horizontal and vertical spacing inserted
+between items, so any additional space must be added within the items
+themselves.
+
+Any empty cells in the grid must be created by defining placeholder items
+at the appropriate places in the Grid definition.
+
+\section2 Flow
+
+\beginfloatright
+\image qml-flow-text1.png
+\image qml-flow-text2.png
+\endfloat
+
+\l Flow items are used to place items like words on a page, with rows or
+columns of non-overlapping items.
+
+Flow items arrange items in a similar way to \l Grid items, with items
+arranged in lines along one axis (the minor axis), and lines of items
+placed next to each other along another axis (the major axis). The
+direction of flow, as well as the spacing between items, are controlled
+by the \l{Flow::}{flow} and \l{Flow::}{spacing} properties.
+
+The following example shows a Flow item containing a number of \l Text
+child items. These are arranged in a similar way to those shown in the
+screenshots.
+
+\clearfloat
+\snippet doc/src/snippets/declarative/flow.qml document
+
+The main differences between the Grid and Flow positioners are that items
+inside a Flow will wrap when they run out of space on the minor axis, and
+items on one line may not be aligned with items on another line if the
+items do not have uniform sizes. As with Grid items, there is no independent
+control of spacing between items and between lines of items.
+
+\section1 Repeaters
+
+\beginfloatright
+\image qml-repeater-grid-index.png
+\endfloat
+
+Repeaters create items from a template for use with positioners, using data
+from a model. Combining repeaters and positioners is an easy way to lay out
+lots of items. A \l Repeater item is placed inside a positioner, and generates
+items that the enclosing positioner arranges.
+
+Each Repeater creates a number of items by combining each element of data
+from a model, specified using the \l{Repeater::model}{model} property, with
+the template item, defined as a child item within the Repeater.
+The total number of items is determined by the amount of data in the model.
+
+The following example shows a repeater used with a \l{#Grid}{Grid} item to
+arrange a set of Rectangle items. The Repeater item creates a series of 24
+rectangles for the Grid item to position in a 5 by 5 arrangement.
+
+\clearfloat
+\snippet doc/src/snippets/declarative/repeaters/repeater-grid-index.qml document
+
+The number of items created by a Repeater is held by its \l{Repeater::}{count}
+property. It is not possible to set this property to determine the number of
+items to be created. Instead, as in the above example, we use an integer as
+the model. This is explained in the \l{QML Data Models#An Integer}{QML Data Models}
+document.
+
+It is also possible to use a delegate as the template for the items created
+by a Repeater. This is specified using the \l{Repeater::}{delegate} property.
+
+\section1 Using Transitions
+
+Transitions can be used to animate items that are added to, moved within,
+or removed from a positioner.
+
+Transitions for adding items apply to items that are created as part of a
+positioner, as well as those that are reparented to become children of a
+positioner.
+Transitions for removing items apply to items within a positioner that are
+deleted, as well as those that are removed from a positioner and given new
+parents in a document.
+
+Additionally, changing the opacity of items to zero will cause them to
+disappear using the remove transition, and making the opacity non-zero will
+cause them to appear using the add transition.
+
+\section1 Other Ways to Position Items
+
+There are several other ways to position items in a user interface. In addition
+to the basic technique of specifying their coordinates directly, they can be
+positioned relative to other items with \l{anchor-layout}{anchors}, or used
+with \l{QML Data Models} such as
+\l{QML Data Models#VisualItemModel}{VisualItemModel}.
+*/
diff --git a/doc/src/declarative/qtdeclarative.qdoc b/doc/src/declarative/qtdeclarative.qdoc
index f163a66a54..5232841d2b 100644
--- a/doc/src/declarative/qtdeclarative.qdoc
+++ b/doc/src/declarative/qtdeclarative.qdoc
@@ -56,17 +56,18 @@
\macro QML_DECLARE_TYPE()
\relates QDeclarativeEngine
- Equivalent to Q_DECLARE_METATYPE(TYPE) and Q_DECLARE_METATYPE(QDeclarativeListProperty<TYPE>)
+ Equivalent to \c Q_DECLARE_METATYPE(TYPE) and \c Q_DECLARE_METATYPE(QDeclarativeListProperty<TYPE>)
*/
/*!
\macro QML_DECLARE_TYPEINFO(Type,Flags)
\relates QDeclarativeEngine
- Declares additional properties of a type.
+ Declares additional properties of the given \a Type as described by the
+ specified \a Flags.
Current the only supported type info is \c QML_HAS_ATTACHED_PROPERTIES which
- declares that the \c Type supports \l {Attached Properties}.
+ declares that the \a Type supports \l {Attached Properties}.
*/
@@ -92,7 +93,7 @@
specified module name and version number:
\qml
- imoprt com.mycompany.qmlcomponents 1.0
+ import com.mycompany.qmlcomponents 1.0
Slider { ... }
\endqml
@@ -146,7 +147,7 @@
This will cause any QML which uses this module and attempts to use the type to produce an error message:
\code
-fun.qml: Get back to work, slacker!
+ fun.qml: Get back to work, slacker!
Game {
^
\endcode
@@ -175,6 +176,5 @@ fun.qml: Get back to work, slacker!
This template function registers the C++ type in the QML system
under the name \a typeName.
-
Returns the QML type id.
*/
diff --git a/doc/src/development/qmake-manual.qdoc b/doc/src/development/qmake-manual.qdoc
index b6b48bce1c..d6dc7d6f40 100644
--- a/doc/src/development/qmake-manual.qdoc
+++ b/doc/src/development/qmake-manual.qdoc
@@ -2665,6 +2665,13 @@
value of this variable is typically handled by \c qmake or
\l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
+ \section1 QMAKE_LN_SHLIB
+
+ This variable contains the command to execute when creating a link
+ to a shared library. The
+ value of this variable is typically handled by \c qmake or
+ \l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
+
\section1 QMAKE_POST_LINK
This variable contains the command to execute after linking the TARGET
@@ -2679,12 +2686,13 @@
executed, additionally some backends will not support this - mostly only
Makefile backends.
- \section1 QMAKE_LN_SHLIB
+ \section1 QMAKE_PROJECT_NAME
- This variable contains the command to execute when creating a link
- to a shared library. The
- value of this variable is typically handled by \c qmake or
- \l{#QMAKESPEC}{qmake.conf} and rarely needs to be modified.
+ \e {This is used for Visual Studio project files only.}
+
+ This variable determines the name of the project when generating project
+ files for IDEs. The default value is the target name. The value of this
+ variable is typically handled by \c qmake and rarely needs to be modified.
\section1 QMAKE_MAC_SDK
diff --git a/doc/src/development/qtestlib.qdoc b/doc/src/development/qtestlib.qdoc
index 0c07747d44..a83c27e77e 100644
--- a/doc/src/development/qtestlib.qdoc
+++ b/doc/src/development/qtestlib.qdoc
@@ -88,10 +88,6 @@
\o Custom types can easily be added to the test data and test output.
\endtable
- Note: For higher-level GUI and application testing needs, please
- see the \l{Third-Party Tools}{Qt testing products provided by
- Nokia partners}.
-
\section1 QTestLib API
@@ -218,12 +214,12 @@
\section2 Creating a Benchmark
- To create a benchmark, follow the instructions for crating a test and then add a
+ To create a benchmark, follow the instructions for creating a test and then add a
QBENCHMARK macro to the test function that you want to benchmark.
\snippet doc/src/snippets/code/doc_src_qtestlib.qdoc 12
- The code insde the QBENCHMARK macro will be measured, and possibly also repeated
+ The code inside the QBENCHMARK macro will be measured, and possibly also repeated
several times in order to get an accurate measurement. This depends on the selected
measurement back-end. Several back-ends are available. They can be selected on the
command line:
diff --git a/doc/src/files-and-resources/resources.qdoc b/doc/src/files-and-resources/resources.qdoc
index 3177af8c55..f0cb130dc8 100644
--- a/doc/src/files-and-resources/resources.qdoc
+++ b/doc/src/files-and-resources/resources.qdoc
@@ -54,7 +54,7 @@
The resource system is based on tight cooperation between \l qmake,
\l rcc (Qt's resource compiler), and QFile. It obsoletes Qt 3's
\c qembed tool and the
- \l{http://doc.qt.nokia.com/qq/qq05-iconography.html}{image
+ \l{http://qt.nokia.com/doc/qq/qq05-iconography.html#imagestorage}{image
collection} mechanism.
\section1 Resource Collection Files (\c{.qrc})
@@ -156,6 +156,26 @@
native support for resources. This might change in a future Qt
release.
+ \section1 Compression
+
+ Resources are compressed by default (in the \c ZIP format). It is
+ possible to turn off compression. This can be useful if your
+ resources already contain a compressed format, such as \c .png
+ files. You do this by giving the \c {-no-compress} command line
+ argument.
+
+ \code
+ rcc -no-compress myresources.qrc
+ \endcode
+
+ \c rcc also gives you some control over the compression. You can
+ specify the compression level and the threshold level to consider
+ while compressing files, for example:
+
+ \code
+ rcc -compress 2 -threshold 3 myresources.qrc
+ \endcode
+
\section1 Using Resources in the Application
In the application, resource paths can be used in most places
diff --git a/doc/src/getting-started/gettingstartedqml.qdoc b/doc/src/getting-started/gettingstartedqml.qdoc
index 6cef316570..a5e45d9a05 100644
--- a/doc/src/getting-started/gettingstartedqml.qdoc
+++ b/doc/src/getting-started/gettingstartedqml.qdoc
@@ -71,20 +71,7 @@
In QML, the basic visual item is the \l {Rectangle}{Rectangle} element. The
\c Rectangle element has properties to control the element's appearance and location.
- \code
- import Qt 4.7
- Rectangle {
- id: simplebutton
- color: "grey"
- width: 150; height: 75
-
- Text{
- id: buttonLabel
- anchors.centerIn: parent
- text: "button label"
- }
- }
- \endcode
+ \snippet examples/tutorials/gettingStarted/gsQml/part0/Button.qml document
First, the \c { import Qt 4.7 } allows the qmlviewer tool to import the QML elements
we will later use. This line must exist for every QML file. Notice that the version
@@ -422,7 +409,7 @@
focus: true
wrapMode: TextEdit.Wrap
-
+
onCursorRectangleChanged: flickArea.ensureVisible(cursorRectangle)
}
\endcode
@@ -446,7 +433,7 @@
contentY = r.y+r.height-height;
}
\endcode
-
+
\section2 Combining Components for the Text Editor
We are now ready to create the layout of our text editor using QML. The text
@@ -464,7 +451,7 @@
//the screen is partitioned into the MenuBar and TextArea. 1/3 of the screen is assigned to the MenuBar
property int partition: height/3
-
+
MenuBar{
id:menuBar
height: partition
@@ -543,27 +530,7 @@
the \c drawer, and the drawer's icon will undergo property changes to meet the
current state.
- \code
-
- states:[
- State{
- name: "DRAWER_OPEN"
- PropertyChanges { target: menuBar; y:0}
- PropertyChanges { target: textArea; y: partition + drawer.height}
- PropertyChanges { target: drawer; y: partition}
- PropertyChanges { target: arrowIcon; rotation: 180}
- },
- State{
- name: "DRAWER_CLOSED"
- PropertyChanges { target: menuBar; y:-partition}
- PropertyChanges { target: textArea; y: drawer.height; height: screen.height - drawer.height}
- PropertyChanges { target: drawer; y: 0}
- PropertyChanges { target: arrowIcon; rotation: 0}
- }
-
- ]
-
- \endcode
+ \snippet examples/tutorials/gettingStarted/gsQml/texteditor.qml states
State changes are abrupt and needs smoother transitions. Transitions between states
are defined using the \l {Transition}{Transition} element, which can then bind to
@@ -582,16 +549,7 @@
the end of the animation. Pleae read \l {qdeclarativeanimation.html}{QML's Animation}
article.
- \code
- transitions: [
- Transition{
- to: "*"
- NumberAnimation { target: textArea; properties: "y, height"; duration: 100; easing.type: Easing.OutQuint }
- NumberAnimation { target: menuBar; properties: "y"; duration: 100;easing.type: Easing.OutQuint }
- NumberAnimation { target: drawer; properties: "y"; duration: 100;easing.type: Easing.OutQuint }
- }
- ]
- \endcode
+ \snippet examples/tutorials/gettingStarted/gsQml/texteditor.qml transitions
Another way of animating property changes is by declaring a \l {Behavior}{Behavior}
element. A transition only works during state changes and \c Behavior can set an
diff --git a/doc/src/getting-started/installation.qdoc b/doc/src/getting-started/installation.qdoc
index 708f166316..bc0128cc09 100644
--- a/doc/src/getting-started/installation.qdoc
+++ b/doc/src/getting-started/installation.qdoc
@@ -45,16 +45,19 @@ for your platform from the following list.
\brief How to install Qt on platforms with X11.
\previouspage Installation
-\note Qt for X11 has some requirements that are given in more detail
-in the \l{Qt for X11 Requirements} document.
+\tableofcontents
-\list 1
-\o If you have the commercial edition of Qt, install your license
+ Qt for X11 has some requirements that are given in more detail
+ in the \l{Qt for X11 Requirements} document.
+
+\section1 Step 1: Installing the License File (commercial editions only)
+ If you have the commercial edition of Qt, install your license
file as \c{$HOME/.qt-license}.
For the open source version you do not need a license file.
-\o Unpack the archive if you have not done so already. For example,
+\section1 Step 2: Unpacking the Archive
+ Unpack the archive if you have not done so already. For example,
if you have the \c{qt-everywhere-opensource-src-%VERSION%.tar.gz}
package, type the following commands at a command line prompt:
@@ -64,7 +67,7 @@ in the \l{Qt for X11 Requirements} document.
containing the files from the archive. We only support the GNU version of
the tar archiving utility. Note that on some systems it is called gtar.
-\o Building
+\section1 Step 3: Building the Library
To configure the Qt library for your machine type, run the
\c{./configure} script in the package directory.
@@ -84,12 +87,10 @@ in the \l{Qt for X11 Requirements} document.
If \c{-prefix} is outside the build directory, you need to install
the library, demos, examples, tools, and tutorials in the appropriate
- place. To do this, type:
+ place. To do this (as root if necessary), type:
\snippet doc/src/snippets/code/doc_src_installation.qdoc 3
-
- , as root if necessary.
-
+
Note that on some systems the make utility is named differently,
e.g. gmake. The configure script tells you which make utility to
use.
@@ -99,7 +100,7 @@ in the \l{Qt for X11 Requirements} document.
removed by entering the build directory and typing \c{make confclean}
before running \c configure again.
-\o Environment variables
+\section1 Step 4: Set the Environment Variables
In order to use Qt, some environment variables needs to be
extended.
@@ -125,7 +126,9 @@ in the \l{Qt for X11 Requirements} document.
\c{/usr/local/Trolltech/Qt-%VERSION%/lib}. On Linux with GCC this step
is not needed.
-\o That's all. Qt is now installed.
+\bold {That's all. Qt is now installed.}
+
+\section1 Qt Demos and Examples
If you are new to Qt, we suggest that you take a look at the demos
and examples to see Qt in action. Run the Qt Examples and Demos
@@ -141,7 +144,6 @@ in the \l{Qt for X11 Requirements} document.
\o \l{Developer Zone}
\o \l{Deploying Qt Applications}
\endlist
-\endlist
We hope you will enjoy using Qt. Good luck!
@@ -154,24 +156,22 @@ in the \l{Qt for X11 Requirements} document.
\brief How to install Qt on Windows.
\previouspage Installation
-\note Qt for Windows has some requirements that are given in more detail
-in the \l{Qt for Windows Requirements} document.
+\tableofcontents
-\table
-\row \o \bold{Notes:}
-\list
-\o If you have obtained a binary package for this platform,
-consult the installation instructions provided instead of the ones in
-this document.
-\o \l{Open Source Versions of Qt} is not officially supported for use with
-any version of Visual Studio. Integration with Visual Studio is available
-as part of the \l{Qt Commercial Edition}.
+ Qt for Windows has some requirements that are given in more detail
+ in the \l{Qt for Windows Requirements} document.
-\endlist
-\endtable
+ If you have obtained a binary package for this platform,
+ consult the installation instructions provided instead of the ones in
+ this document.
-\list 1
-\o If you have the commercial edition of Qt, copy the license file
+ Open Source Versions of Qt is not officially supported for use with
+ any version of Visual Studio. Integration with Visual Studio is available
+ as part of the \l{Qt Commercial Edition}.
+
+\section1 Step 1: Install the License File (commercial editions only)
+
+ If you have the commercial edition of Qt, copy the license file
from your account on dist.trolltech.com into your home directory
(this may be known as the \c userprofile environment variable) and
rename it to \c{.qt-license}. This renaming process must be done
@@ -181,13 +181,15 @@ as part of the \l{Qt Commercial Edition}.
For the open source version you do not need a license file.
-\o Uncompress the files into the directory you want Qt installed;
+\section1 Step 2: Unpack the Archive
+
+ Uncompress the files into the directory you want Qt installed;
e.g. \c{C:\Qt\%VERSION%}.
\note The install path must not contain any spaces or Windows specific
file system characters.
-\o Environment variables
+\section1 Step 3: Set the Environment variables
In order to build and use Qt, the \c PATH environment variable needs to be
extended:
@@ -203,12 +205,13 @@ as part of the \l{Qt Commercial Edition}.
other build tools are listed in the \c PATH variable. This will depend
on your choice of software development environment.
- \bold{Note}: If you don't use the configured shells, which is
+ \note If you don't use the configured shells, which is
available in the application menu, in the \l{Open Source Versions of Qt},
\c configure requires that \c sh.exe is not in the path
or that it is run from \c msys. This also goes for mingw32-make.
-\o Building
+\section1 Step 4: Build the Qt Library
+
To configure the Qt library for your machine, type the following command
in a \bold{Visual Studio} command prompt:
@@ -243,7 +246,9 @@ as part of the \l{Qt Commercial Edition}.
removed by entering the build directory and typing \c{nmake distclean}
before running \c configure again.
-\o That's all. Qt is now installed.
+\bold{That's all. Qt is now installed.}
+
+\section1 Qt Demos and Examples
If you are new to Qt, we suggest that you take a look at the demos
and examples to see Qt in action. Run the Qt Examples and Demos
@@ -259,8 +264,6 @@ as part of the \l{Qt Commercial Edition}.
\o \l{Deploying Qt Applications}
\endlist
-\endlist
-
We hope you will enjoy using Qt. Good luck!
*/
@@ -270,11 +273,14 @@ as part of the \l{Qt Commercial Edition}.
\ingroup installation
\brief How to install Qt on Mac OS X.
\previouspage Installation
+\tableofcontents
-\note Qt for Mac OS X has some requirements that are given in more detail
+Qt for Mac OS X has some requirements that are given in more detail
in the \l{Qt for Mac OS X Requirements} document.
-\bold{Note for the binary package}: If you have the binary package, simply double-click on the Qt.mpkg
+The following instructions describe how to install Qt from the source package.
+
+For the binary package, simply double-click on the Qt.mpkg
and follow the instructions to install Qt. You can later run the \c{uninstall-qt.py}
script to uninstall the binary package. The script is located in /Developer/Tools and
must be run as root.
@@ -283,15 +289,13 @@ must be run as root.
\l{http://openradar.appspot.com/7214991}
{iPhone simulator conflicts with the package installer}.
-The following instructions describe how to install Qt from the source package.
-
-\list 1
-\o If you have the commercial edition of Qt, install your license
+\section1 Step 1: Install the License File (commercial editions only)
+ If you have the commercial edition of Qt, install your license
file as \c{$HOME/.qt-license}.
For the open source version you do not need a license file.
-\o Unpack the archive if you have not done so already. For example,
+ Unpack the archive if you have not done so already. For example,
if you have the \c{qt-everywhere-opensource-src-%VERSION%.tar.gz}
package, type the following commands at a command line prompt:
@@ -300,7 +304,7 @@ The following instructions describe how to install Qt from the source package.
This creates the directory \c{/tmp/qt-everywhere-opensource-src-%VERSION%}
containing the files from the archive.
-\o Building
+\section1 Step 2: Build the Qt Library
To configure the Qt library for your machine type, run the
\c{./configure} script in the package directory.
@@ -335,18 +339,18 @@ The following instructions describe how to install Qt from the source package.
\snippet doc/src/snippets/code/doc_src_installation.qdoc 14
- as root, if neccessary (note that this requires that you have administrator access
- to your machine).
+ This command requires that you have administrator access
+ on your machine.
- There is a potential race condition when running make install with multiple
+ \note There is a potential race condition when running make install with multiple
jobs. It is best to only run one make job (-j1) for the install.
- \bold{Note:} If you later need to reconfigure and rebuild Qt from the
+ If you later need to reconfigure and rebuild Qt from the
same location, ensure that all traces of the previous configuration are
removed by entering the build directory and typing \c{make confclean}
before running \c configure again.
-\o Environment variables
+\section1 Step 3: Set the Environment variables
In order to use Qt, some environment variables need to be
extended.
@@ -366,8 +370,9 @@ The following instructions describe how to install Qt from the source package.
If you use a different shell, please modify your environment
variables accordingly.
-\o That's all. Qt is now installed.
+\bold {That's all. Qt is now installed.}
+\section1 Qt Demos and Examples
If you are new to Qt, we suggest that you take a look at the demos
and examples to see Qt in action. Run the Qt Examples and Demos
either by typing \c qtdemo on the command line or through the
@@ -381,7 +386,6 @@ The following instructions describe how to install Qt from the source package.
\o \l{Developer Zone}
\o \l{Deploying Qt Applications}
\endlist
-\endlist
We hope you will enjoy using Qt. Good luck!
@@ -393,96 +397,96 @@ The following instructions describe how to install Qt from the source package.
\ingroup qtce
\brief How to install Qt on Windows CE.
\previouspage Installation
+\tableofcontents
-\note Qt for Windows CE has some requirements that are given in more detail
+Qt for Windows CE has some requirements that are given in more detail
in the \l{Qt for Windows CE Requirements} document.
-\list 1
- \o Uncompress the files into the directory you want to install Qt into;
- e.g., \c{C:\Qt\%VERSION%}.
-
- \note The install path must not contain any spaces.
+\section1 Step 1: Install the License File (commercial editions only)
+ Uncompress the files into the directory you want to install Qt into;
+ e.g., \c{C:\Qt\%VERSION%}.
- \o Environment variables
+ \note The install path must not contain any spaces.
- In order to build and use Qt, the \c PATH environment variable needs
- to be extended:
+\section1 Step 2: Set the Environment variables
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 18
+ In order to build and use Qt, the \c PATH environment variable needs
+ to be extended:
- This is done by adding \c{c:\Qt\%VERSION%\bin} to the \c PATH variable.
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 18
+ This is done by adding \c{c:\Qt\%VERSION%\bin} to the \c PATH variable.
- For newer versions of Windows, \c PATH can be extended through
- "Control Panel->System->Advanced->Environment variables" and for
- older versions by editing \c{c:\autoexec.bat}.
+ For newer versions of Windows, \c PATH can be extended through
+ "Control Panel->System->Advanced->Environment variables" and for
+ older versions by editing \c{c:\autoexec.bat}.
- Make sure the enviroment variables for your compiler are set.
- Visual Studio includes \c{vcvars32.bat} for that purpose - or simply
- use the "Visual Studio Command Prompt" from the Start menu.
+ Make sure the enviroment variables for your compiler are set.
+ Visual Studio includes \c{vcvars32.bat} for that purpose - or simply
+ use the "Visual Studio Command Prompt" from the Start menu.
- \o Configuring Qt
+\section1 Step 3: Configure Qt
- To configure Qt for Windows Mobile 5.0 for Pocket PC, type the
- following:
+ To configure Qt for Windows Mobile 5.0 for Pocket PC, type the
+ following:
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 19
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 19
- If you want to configure Qt for another platform or with other
- options, type \c{configure -help} to get a list of all available
- options. See the \c README file for the list of supported platforms.
+ If you want to configure Qt for another platform or with other
+ options, type \c{configure -help} to get a list of all available
+ options. See the \c README file for the list of supported platforms.
+\section1 Step 4: Build Qt Library
- \o Building Qt
+ Now, to build Qt you first have to update your \c PATH, \c INCLUDE
+ and \c LIB paths to point to the correct resources for your target
+ platforms. For a default installation of the Windows Mobile 5.0
+ Pocket PC SDK, this is done with the following commands:
- Now, to build Qt you first have to update your \c PATH, \c INCLUDE
- and \c LIB paths to point to the correct resources for your target
- platforms. For a default installation of the Windows Mobile 5.0
- Pocket PC SDK, this is done with the following commands:
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 20
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 20
+ We provide a convenience script for this purpose, called \c{setcepaths}.
+ Simply type:
- We provide a convenience script for this purpose, called \c{setcepaths}.
- Simply type:
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 21
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 21
+ Then to build Qt type:
- Then to build Qt type:
+ \snippet doc/src/snippets/code/doc_src_installation.qdoc 22
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 22
+\bold{That's all. Qt is now installed.}
- \o That's all. Qt is now installed.
+\section1 Qt Demos and Examples
- To get started with Qt, you can check out the examples found in the
- \c{examples} directory of your Qt installation. The documentation can
- be found in \c{doc\html}.
+ To get started with Qt, you can check out the examples found in the
+ \c{examples} directory of your Qt installation. The documentation can
+ be found in \c{doc\html}.
- \bold{Remember:} If you reconfigure Qt for a different platform,
- make sure you start with a new clean console to get rid of the
- platform dependent include directories.
+ \note If you reconfigure Qt for a different platform,
+ make sure you start with a new clean console to get rid of the
+ platform dependent include directories.
- The links below provide further information for using Qt:
- \list
- \o \l{How to Learn Qt}
- \o \l{Tutorials}
- \o \l{Developer Zone}
- \o \l{Deploying Qt Applications}
- \endlist
+ The links below provide further information for using Qt:
+ \list
+ \o \l{How to Learn Qt}
+ \o \l{Tutorials}
+ \o \l{Developer Zone}
+ \o \l{Deploying Qt Applications}
+ \endlist
- You might also want to try the following Windows CE specific links:
- \list
- \o \l{Windows CE - Introduction to using Qt}
- \o \l{Windows CE - Working with Custom SDKs}
- \o \l{Windows CE - Using shadow builds}
- \o \l{Windows CE - Signing}
- \endlist
+ You might also want to try the following Windows CE specific links:
+ \list
+ \o \l{Windows CE - Introduction to using Qt}
+ \o \l{Windows CE - Working with Custom SDKs}
+ \o \l{Windows CE - Using shadow builds}
+ \o \l{Windows CE - Signing}
+ \endlist
- Information on feature and performance tuning for embedded builds can
- be found on the following pages:
- \list
- \o \l{Fine-Tuning Features in Qt}
- \o \l{Qt Performance Tuning}
- \endlist
-\endlist
+ Information on feature and performance tuning for embedded builds can
+ be found on the following pages:
+ \list
+ \o \l{Fine-Tuning Features in Qt}
+ \o \l{Qt Performance Tuning}
+ \endlist
We hope you will enjoy using Qt. Good luck!
*/
@@ -491,20 +495,22 @@ in the \l{Qt for Windows CE Requirements} document.
\title Installing Qt on the Symbian platform from a Binary Package
\ingroup qtsymbian
\brief How to install Qt on the Symbian platform from a binary package.
+\previouspage Installation
+
+\tableofcontents
-\note Qt for the Symbian platform has some requirements that are given in more detail
+Qt for the Symbian platform has some requirements that are given in more detail
in the \l{Qt for the Symbian platform Requirements} document.
-\list 1
- \o Install Qt
+\section1 Step 1: Install Qt
Run \c{qt-symbian-opensource-%VERSION%.exe} and follow the instructions.
\note Qt must be installed on the same drive as the Symbian SDK you are
using, and the install path must not contain any spaces.
- \o Install Qt into a device
+\section1 Step 2: Install Qt into a device
To run Qt applications on a device, \c{qt_installer.sis} found
in the Qt installation directory must be first installed into the device.
@@ -516,7 +522,7 @@ in the \l{Qt for the Symbian platform Requirements} document.
on the \c{qt_installer.sis} file, select "Install with Nokia Application
Installer" and follow the instructions.
- \o Running Qt demos
+\section1 Running Qt demos
We've included a subset of the Qt demos in this package for you
to try out. An excellent starting point is the "fluidlauncher"
@@ -540,9 +546,8 @@ in the \l{Qt for the Symbian platform Requirements} document.
Symbian platform,
see \l{The Symbian platform - Introduction to Qt}.
- We hope you will enjoy using Qt.
+\bold{We hope you will enjoy using Qt.}
-\endlist
*/
/*! \page install-Symbian.html
@@ -550,206 +555,200 @@ Symbian platform,
\ingroup installation
\ingroup qtsymbian
\brief How to install Qt on the Symbian platform.
+\previouspage Installation
+\tableofcontents
-\note Qt for the Symbian platform has some requirements that are given in more detail
+Qt for the Symbian platform has some requirements that are given in more detail
in the \l{Qt for the Symbian platform Requirements} document.
-\note \bold {This document describes how to install and configure Qt for
-the Symbian platform from scratch.
-If you are using pre-built binaries, follow the instructions given in the
-\l{Installing Qt on the Symbian platform from a Binary Package} document.}
+This document describes how to install and configure Qt for
+the Symbian platform from scratch. If you are using pre-built binaries, follow
+the instructions given in the \l{Installing Qt on the Symbian platform from a
+Binary Package} document.
-\list 1
+\section1 Step 1: Set Up the Development Environment
- \o Setup the development environment
+ Make sure your Symbian development environment is correctly installed
+ and patched as explained in the \l{Qt for the Symbian platform Requirements}
+ document.
- Make sure your Symbian development environment is correctly installed and
- patched as explained in the \l{Qt for the Symbian platform Requirements} document.
+ After you have finished the Symbian development environment setup, it is
+ good to verify that environment is functional for example by compiling one
+ of the pure Symbian examples for both emulator and HW. This can be done from
+ command prompt as follows:
- After you have finished the Symbian development environment setup, it is good
- to verify that environment is functional for example by compiling one
- of the pure Symbian examples for both emulator and HW. This can be done from
- command prompt as follows:
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 32
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 32
+ If all steps pass without errors your Symbian development environment is
+ very likely installed correctly.
- If all steps pass without errors your Symbian development environment is
- very likely installed correctly.
+\section1 Step 2: Install Qt
- \o Install Qt
+ Uncompress the \l{http://qt.nokia.com/downloads}{downloaded} source
+ package into the directory you want Qt installed, e.g. \c{C:\Qt\%VERSION%}.
- Uncompress the \l{http://qt.nokia.com/downloads}{downloaded} source package into the
- directory you want Qt installed, e.g. \c{C:\Qt\%VERSION%}.
+ \note Qt must be installed on the same drive as the Symbian SDK you are
+ using, and the install path must not contain any spaces.
- \note Qt must be installed on the same drive as the Symbian SDK you are
- using, and the install path must not contain any spaces.
+\section1 Step 3: Set the Environment variables
- \o Environment variables
+ In order to build and use Qt, the \c PATH environment variable needs
+ to be extended:
- In order to build and use Qt, the \c PATH environment variable needs
- to be extended:
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 18
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 18
+ This is done by adding \c{c:\Qt\%VERSION%\bin} to the \c PATH variable.
- This is done by adding \c{c:\Qt\%VERSION%\bin} to the \c PATH variable.
+ On Windows the\c PATH can be extended by navigating to
+ "Control Panel->System->Advanced->Environment variables".
- On Windows the PATH can be extended by navigating to
- "Control Panel->System->Advanced->Environment variables".
+ In addition, you must configure the environment for use with the Symbian
+ emulator. This is done by locating the Carbide.c++ submenu on the Start
+ menu, and choosing "Configure environment for WINSCW command line".
- In addition, you must configure the environment for use with the Symbian
- emulator. This is done by locating the Carbide.c++ submenu on the Start
- menu, and choosing "Configure environment for WINSCW command line".
+ If you are planning to use \c abld (the default build system that comes with
+ the S60 SDK) to build Qt, you will also need to set the following
+ environment variable:
- If you are planning to use abld (the default build system that comes with the S60 SDK)
- to build Qt, you will also need to set the following environment variable:
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 33
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 33
+ This is not necessary for other applications, only when building Qt.
- This is not necessary for other applications, only when building Qt.
+\section1 Step 4: Configure Qt
- \o Configure Qt
+ To configure Qt for the Symbian platform, do:
- To configure Qt for the Symbian platform, do:
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 23
+ (to build the tools using MinGW, and the libraries using abld)
+
+ \bold or
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 23
- to build the tools using MinGW, and the libraries using abld.
- or
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 31
- to build the tools using MinGW, and the libraries using SBSv2.
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 31
+ (to build the tools using MinGW, and the libraries using SBSv2)
- SBSv2 (also known as \l{http://developer.symbian.org/wiki/index.php/Introduction_to_RAPTOR} {Raptor})
- is a next-generation Symbian build system. SBSv2 is not officially
- supported by any of the S60 SDKs currently available from Forum Nokia.
+ SBSv2 (also known as \l{http://developer.symbian.org/wiki/index.php/Introduction_to_RAPTOR} {Raptor})
+ is a next-generation Symbian build system. SBSv2 is not officially supported
+ by any of the S60 SDKs currently available from Forum Nokia.
- \o Build Qt
+\section1 Step 5: Build Qt
- To build Qt for the emulator, type:
+ To build Qt for the emulator, type:
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 24
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 24
- To build Qt for the device, type:
+ To build Qt for the device, type:
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 28
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 28
- Congratulations, Qt is now ready to use.
+ Congratulations, Qt is now ready to use.
- \o Installing Qt libraries on the device
+\section1 Step 7: Installing Qt Libraries on the Device
- To run the demo on a real device, you first have to install
- the Qt libraries on the device:
+ To run the demo on a real device, you first have to install
+ the Qt libraries on the device:
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 29
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 29
- The Qt libraries are built with "All -Tcb" capability, so that
- they can support all types of application.
- If you don't have a suitable certificate, it is possible to patch
- the binaries as follows:
+ The Qt libraries are built with "All -Tcb" capability, so that
+ they can support all types of application.
+ If you don't have a suitable certificate, it is possible to patch
+ the binaries as follows:
- \list A
- \o Installing Qt without a certificate
+ If you have no certificate, build a self signed Qt:
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 34
- If you have no certificate, build a self signed Qt:
+ If you have a symbian-signed developer certificate, specify the
+ capabilities you can sign for, for example:
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 35
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 34
+\section1 Running Qt demos
- \o Installing Qt with a Symbian developer certificate
+ We've included a subset of the Qt demos in this package for you
+ to try out. An excellent starting point is the "fluidlauncher"
+ demo.
- If you have a symbian-signed developer certificate, specify the
- capabilities you can sign for, for example:
+ Similarly, install fluidlauncher to the device:
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 35
- \endlist
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 30
- \o Running Qt demos
+ This will create a self-signed \c fluidlauncher.sis and
+ install it to your device.
- We've included a subset of the Qt demos in this package for you
- to try out. An excellent starting point is the "fluidlauncher"
- demo.
-
- Similarly, install fluidlauncher to the device:
-
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 30
+ To run the demos on the emulator simply navigate to the directory of the demo
+ you want to see and run:
- This will create a self-signed \c fluidlauncher.sis and
- install it to your device.
-
- To run the demos on the emulator simply navigate to the directory of the demo
- you want to see and run:
-
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 27
-
- For more information about building and running Qt programs on the
- Symbian platform, see \l{The Symbian platform - Introduction to Qt}.
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 27
+ For more information about building and running Qt programs on the
+ Symbian platform, see \l{The Symbian platform - Introduction to Qt}.
We hope you will enjoy using Qt.
-\endlist
-
*/
/*! \page install-Symbian-linux.html
\title Installing Qt on the Symbian platform using Linux (experimental)
\ingroup installation
\ingroup qtsymbian
\brief How to install Qt on the Symbian platform using Linux.
+\previouspage Installation
+\tableofcontents
-\note \bold {This document describes how to install and configure Qt for
+This document describes how to install and configure Qt for
the Symbian platform from scratch, using Linux as the build host.
Qt for Symbian binaries can be downloaded directly so development of
-applications using Qt for Symbian can start right away.}
-
-\list 1
-
- \o Setup the development environment
+applications using Qt for Symbian can start right away.
- \note Qt for the Symbian platform has some requirements on the development
- platform. The Symbian SDK for Linux as well as a cross compiler for the ARM
- processor used on Symbian devices should be present on the development machine.
- See {http://qt.gitorious.org/qt/pages/QtCreatorSymbianLinux} for more details.
+\section1 Step 1: Setup the development environment
- \o Install Qt
+ Qt for the Symbian platform has some requirements on the development
+ platform. The Symbian SDK for Linux as well as a cross compiler for the ARM
+ processor used on Symbian devices should be present on the development
+ machine.
+
+ See \l{http://qt.gitorious.org/qt/pages/QtCreatorSymbianLinux} for more details.
+\section1 Step 2: Unpack the Archive
- Uncompress the \l{http://qt.nokia.com/downloads}{downloaded} source package into the
+ Uncompress the \l{http://qt.nokia.com/downloads}{downloaded} source package into the
directory you want Qt installed, e.g. \c{/home/user/qt/%VERSION%}.
- \o Environment variables
+\section1 Step 3: Set the Environment Variables
- In order to build and use Qt, the \c PATH environment variable needs
- to be extended to fine Qt tools and also to find the Symbian platform tools:
+ In order to build and use Qt, the \c PATH environment variable needs
+ to be extended to fine Qt tools and also to find the Symbian platform tools:
- First you need to set the \c EPOCROOT environment variable to point to the location
- of your S60 SDK:
+ First you need to set the \c EPOCROOT environment variable to point to the
+ location of your S60 SDK:
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 36
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 36
- Then you can update the PATH variable;
+ Then you can update the PATH variable;
\snippet doc/src/snippets/code/doc_src_installation.qdoc 37
- \o Configure Qt
+\section1 Step 4: Configure Qt
- To configure Qt for the Symbian platform, do:
+ To configure Qt for the Symbian platform, do:
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 38
- to build the libraries using RVCT or
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 39
- to build the libraries using GCCE.
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 38
+ to build the libraries using RVCT or
- \o Build Qt
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 39
+ to build the libraries using GCCE.
- To build Qt for the device, type:
+\section1 Step 5: Build Qt
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 40
+ To build Qt for the device, type:
- Congratulations, Qt is now ready to use.
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 40
- \o Building Qt packages for the device
+ Congratulations, Qt is now ready to use.
- To run any application or demo on a real device, you need to install it
- on the device. To do this you first have to create a a package for the
- device, containing the libraries:
+\section1 Step 6: Building Qt packages for the Device
- \list A
- \o Building a Qt package without a certificate
+ To run any application or demo on a real device, you need to install it
+ on the device. To do this you first have to create a a package for the
+ device, containing the libraries:
+
+ \bold{Building a Qt package without a certificate}
If you have no certificate, build a self signed Qt:
@@ -760,15 +759,14 @@ applications using Qt for Symbian can start right away.}
capabilities are automatically lowered if you make a self-signed
package.
- \o Building a Qt package with a Symbian developer certificate
+ \bold{Building a Qt package with a Symbian developer certificate}
If you have a symbian-signed developer certificate, specify the
capabilities you can sign for, for example:
\snippet doc/src/snippets/code/doc_src_installation.qdoc 42
- \endlist
-
- \o Installing Qt packages to the device.
+
+ \section2 Installing Qt packages to the device.
It is possible to install packages to a phone in Linux by putting
the package on the phone memory card and then installing manually
@@ -776,8 +774,7 @@ applications using Qt for Symbian can start right away.}
on phones without a memory card, so the method recommended by Qt is
to use the App TRK tool.
- \list a
- \o Obtaining the App TRK package.
+ \section3 Obtaining the App TRK package.
Download the package from the following location.
@@ -793,7 +790,7 @@ applications using Qt for Symbian can start right away.}
menu, or using a Windows PC for doing the install. However,
the installation only has to be done once.
- \o Configuring App TRK on the phone.
+ \section3 Configuring App TRK on the phone.
When App TRK is installed, connect the phone to the PC using
the USB cable. Select "PCSuite" as connection type. Then run
@@ -802,7 +799,7 @@ applications using Qt for Symbian can start right away.}
the \c Settings menu entry. If necessary, choose \c Connect
from the menu.
- \o Configuring the USB serial driver on the Linux system.
+ \section3 Configuring the USB serial driver on the Linux system.
On Linux, phone should appear as the \c /dev/ttyUSB1 device,
however if you are running an old kernel, you may need to
@@ -821,7 +818,7 @@ applications using Qt for Symbian can start right away.}
The \c rmmod step may fail if the module is not already
loaded, but that is harmless.
- \o Building the \c runonphone tool.
+ \section3 Building the \c runonphone tool.
Note that building the \c runonphone tool requires a separate
installation of Qt for Linux. If there is a version of Qt
@@ -846,7 +843,7 @@ applications using Qt for Symbian can start right away.}
Copy the resulting executable to a folder which is in your
\c PATH environment variable.
- \o Installing the built package onto the phone.
+ \section3 Installing the built package onto the phone.
Return to the root of the Qt tree configured for Symbian. Then
install the Qt libraries by running the following:
@@ -863,9 +860,7 @@ applications using Qt for Symbian can start right away.}
\snippet doc/src/snippets/code/doc_src_installation.qdoc 50
- \endlist
-
- \o Running Qt demos
+\section1 Running Qt demos
We've included a subset of the Qt demos in this package for you
to try out. An excellent starting point is the "fluidlauncher"
@@ -883,10 +878,8 @@ applications using Qt for Symbian can start right away.}
Symbian platform, see \l{The Symbian platform - Introduction to Qt}.
We hope you will enjoy using Qt.
-
-\endlist
-
*/
+
/*!
\page requirements.html
\title General Qt Requirements
@@ -958,6 +951,9 @@ applications using Qt for Symbian can start right away.}
\brief Setting up the Mac OS X environment for Qt.
\previouspage General Qt Requirements
+ Qt requires Xcode to be installed on the system. Xcode should be
+ available on the Mac installation CD.
+
\sa {Known Issues}
*/
diff --git a/doc/src/getting-started/known-issues.qdoc b/doc/src/getting-started/known-issues.qdoc
index 0c2d8d838e..942c41d5d4 100644
--- a/doc/src/getting-started/known-issues.qdoc
+++ b/doc/src/getting-started/known-issues.qdoc
@@ -29,127 +29,12 @@
\page known-issues.html
\title Known Issues
\ingroup platform-specific
- \brief A summary of known issues in this Qt version at the time of release.
+ \brief Links to online resources stating known issues in this Qt version at the time of release.
- An up-to-date list of known issues can be found at
- \l{http://bugreports.qt.nokia.com/}{Qt Bug Tracker}.
-
- For a list list of known bugs, see the \l{Task Tracker} at the Qt
- website.
-
- An overview of known issues may also be found at:
- \l{http://qt.gitorious.org/qt/pages/QtKnownIssues}
+ \list
+ \o An up-to-date list of known issues can be found at \l{http://bugreports.qt.nokia.com/}{Qt Bug Tracker}.
+ \o For a list list of known bugs, see the \l{Task Tracker} at the Qt website.
+ \o An overview of known issues may also be found at: \l{http://qt.gitorious.org/qt/pages/QtKnownIssues}
{Known Issues Wiki}.
-
- \section1 Installation Issues
-
- \section2 Installing the Source Package on Unix systems
-
- \list
-
- \o If you download a Zip source package, you will need to convert
- Windows-style line endings (CR/LF) to Unix-style line-endings (LF) when
- you uncompress the package. To do this, give the "-a" option when you
- run the "unzip' command.
-
- \o If you fail to supply the "-a" option when unzipping the package, you
- will see the following error message when you attempt to execute the
- configure command:
- "bash: ./configure: /bin/sh^M: bad interpreter: No such file or directory"
-
- \endlist
-
- \section2 Installing on Mac OS X 10.6 "Snow Leopard"
-
- \list
-
- \o There are two workarounds, either disable spotlight for the target
- drive during the install, or do a custom install where you deselect
- documentation and examples. Run the installer again as a full
- install to get the documentation and examples installed.
-
- \endlist
-
- \section1 Issues with Third Party Software
-
- \section2 X11
-
- \list
- \o There is a bug in the 169.xx NVIDIA drivers on certain GeForce 8 series
- cards that is triggered by the OpenGL paint engine when using QPainter
- on a QGLWidget to draw paths and polygons. Some other painting
- operations that end up in the path fallback are affected as well. The
- bug causes the whole X server to repeatedly hang for several seconds at
- a time.
- \o There is an issue with NVIDIA's 9xxx driver series on X11 that causes a
- crash in cases where there are several \l{QGLContext}s and the extended
- composition modes are used (the composition modes between and including
- QPainter::CompositionMode_Multiply and
- QPainter::CompositionMode_Exclusion). This affects the composition mode
- demo in Qt 4.5, for example. The crash does not occur in newer versions
- of the drivers.
- \endlist
-
- \section2 Windows
-
- \list
-
- \o When using version 6.14.11.6921 of the NVIDIA drivers for the GeForce
- 6600 GT under Windows XP, Qt applications which use drag and drop will
- display reduced size drag and drop icons when run alongside
- applications that use OpenGL. This problem can be worked around by
- reducing the level of graphics acceleration provided by the driver, or
- by disabling hardware acceleration completely.
-
- \o With NVIDIA GeForce 7950 GT (driver version 6.14.11.7824), a fullscreen
- QGLWidget flickers when child widgets are shown/hidden. The workaround
- for this is to use \l{QWidget::}{setGeometry()} with a width/height 1
- pixel bigger than your geometry and call \l{QWidget::}{show()}.
-
- \o A bug in the Firebird database can cause an application to crash when
- \c{fbembed.dll} is unloaded. The bug is fixed in version 2.5.
-
- \o On Windows 7, resizing windows is slower than on Vista/Xp. This is because
- the gesture initialization process (required for native gesture support)
- currently calls winId() on widgets, which causes whole widget hierarchies
- to use native window handles. This slows down resizing.
-
- \o Compile errors with Intel C++ Compiler.\br
- There seems to be a bug in the Intel compiler with respect to
- over-agressive inlining of code.
- The problem will manifest itself during the link phase of QtGui where
- it fails with the error that it cannot find QObjectData::~QObjectData().
- See \l{http://bugreports.qt.nokia.com/browse/QTBUG-5145} for updates on this
- bug.
- Also, due to some bugs in WebKit, the QtScript and QtWebKit modules
- will not compile.
- See \l{http://bugreports.qt.nokia.com/browse/QTBUG-6297} for a
- workaround for QtScript.
-
- \o Compile errors with Microsoft Visual C++ compiler. \br
- There seems to be a bug in the Microsoft compiler when compiling with O2
- optimization level in 64 bit.
- This problem will result in crashes in QAbstractItemView::viewOptions().
- See \l{http://bugreports.qt.nokia.com/browse/QTBUG-11445} for updates on this
- bug.
-
-
- \endlist
-
- \section2 Mac OS X
-
- \list
-
- \o If a sheet is opened for a given window, clicking the title bar of that
- window will cause it to flash. This behavior has been reported to Apple
- (bug number 5827676).
-
- \endlist
-
- \section2 Symbian
-
- \list
- \o Check known issues for Symbian at
- \l{http://qt.gitorious.org/qt/pages/QtKnownIssues} {Known Issues Wiki}.
\endlist
*/
diff --git a/doc/src/images/qml-mousearea-snippet.png b/doc/src/images/qml-mousearea-snippet.png
new file mode 100644
index 0000000000..15229446c7
--- /dev/null
+++ b/doc/src/images/qml-mousearea-snippet.png
Binary files differ
diff --git a/doc/src/index.qdoc b/doc/src/index.qdoc
index edb4d1ea68..77856ec720 100644
--- a/doc/src/index.qdoc
+++ b/doc/src/index.qdoc
@@ -77,7 +77,7 @@
<ul>
<li><a href="qtquick.html">Qt Quick</a></li>
<li><a href="qdeclarativeintroduction.html">Introduction to QML</a></li>
- <li><a href="qmlelements.html">QML Elements</a></li>
+ <li><a href="qdeclarativeelements.html">QML Elements</a></li>
<li><a href="qdeclarativeexamples.html">QML Examples and Demos</a></li>
</ul>
</div>
diff --git a/doc/src/objectmodel/properties.qdoc b/doc/src/objectmodel/properties.qdoc
index 3a8e3b4351..2cb7c04e7f 100644
--- a/doc/src/objectmodel/properties.qdoc
+++ b/doc/src/objectmodel/properties.qdoc
@@ -29,7 +29,7 @@
\page properties.html
\title The Property System
\brief An overview of Qt's property system.
-
+
\ingroup qt-basic-concepts
\target Qt's Property System
diff --git a/doc/src/objectmodel/signalsandslots.qdoc b/doc/src/objectmodel/signalsandslots.qdoc
index 09c427b61f..c12ca78c03 100644
--- a/doc/src/objectmodel/signalsandslots.qdoc
+++ b/doc/src/objectmodel/signalsandslots.qdoc
@@ -336,7 +336,7 @@
If on the other hand you want to call two different error
functions when the number overflows, simply connect the signal to
- two different slots. Qt will call both (in arbitrary order).
+ two different slots. Qt will call both (in the order they were connected).
\snippet doc/src/snippets/signalsandslots/lcdnumber.h 10
\snippet doc/src/snippets/signalsandslots/lcdnumber.h 11
@@ -427,6 +427,10 @@
\snippet doc/src/snippets/signalmapper/filereader.cpp 1
+ \note The following code will compile and run, but due to signature normalization, the code will be slower.
+
+ \snippet doc/src/snippets/signalmapper/filereader.cpp 2
+
\sa {Meta-Object System}, {Qt's Property System}
\target 3rd Party Signals and Slots
diff --git a/doc/src/qt4-intro.qdoc b/doc/src/qt4-intro.qdoc
index 8684ad2312..919bb880de 100644
--- a/doc/src/qt4-intro.qdoc
+++ b/doc/src/qt4-intro.qdoc
@@ -476,7 +476,7 @@
QML UIs through drag-and-drop. The text editor supports the QML
syntax and provides authoring assistance such as auto-completion,
error lookup, help lookup and easy preview of QML UI's. The Qt
- Quick features in Qt Creator will be released with Qt Creator 2.1
+ Quick features in Qt Creator will be released with Qt Creator 2.1
\endlist
\section1 Network Bearer Management
@@ -489,14 +489,72 @@
QNetworkAccessManager uses this API for HTTP level roaming.
- \section1 Multimedia - playback and declarative elements
+ \section1 Feature Improvements in QtWebKit
- The Multimedia API provides media playback and playlist support
- for Qt Applications. Play music and movies through a single interface
- with selectable output for movies to widgets or graphics view.
+ The QGraphicsWebView class has a new tiled backing store, which
+ improves scrolling and zooming performance. You can even create
+ animated zoom-in or zoom-out effects (see
+ QWebSettings::TiledBackingStoreEnabled).
- Multimedia support for Quick is also available with the new multimedia
- declarative elements.
+ On mobile platforms, it is often useful to avoid displaying
+ separate scrollbars for iframes and framesets. If you switch on
+ frame flattening, QtWebKit will resize frames to fit their content
+ to avoid separate scrollbars (see
+ QWebSettings::FrameFlatteningEnabled).
+
+ Qt 4.7 adds support for accelerated compositing, which enhances
+ the performance of CSS animations and transitions. Read more in
+ \l{http://labs.trolltech.com/blogs/2010/05/17/qtwebkit-now-accelerates-css-animations-3d-transforms/}{this blog}.
+
+ For hybrid QtWebKit and C++ projects, Qt 4.7 has added support for
+ transporting \l{QPixmap}s between Qt C++ and WebKit. We have also
+ improved the documentation hybrid development. Read more here:
+ \l{The QtWebKit Bridge}.
+
+ \section1 QtWebKit Performance Benchmarks
+
+ We have introduced a set of performance benchmarks for QtWebKit,
+ and made numerous improvements in rendering performance, page
+ loading performance, scrolling performance and CSS performance.
+ Here are some examples from the benchmarks run on a 64-bit Linux
+ workstation with the raster graphics system.
+
+ In a benchmark that measures the scrolling performance on popular
+ websites, we found out that Qt 4.7.0 on this platform is 350%
+ faster than Qt 4.6.0, thanks to several rendering related
+ improvements.
+
+ Our page loading benchmark shows an improvement of 16% in Qt 4.7.0
+ from Qt 4.6.0. This is due to improvements in text layout speed,
+ image decoding, resource loading and event handling.
+
+ Several CSS animation benchmarks indicate a speed improvement of
+ 31% from Qt 4.6.0 to Qt 4.7.0. These benchmarks are effectively
+ showing the improvement we get from accelerated compositing (see
+ above).
+
+ \section1 Other Performance Related Improvements
+
+ In addition to the QtWebKit module, performance has been a focus
+ area in Qt 4.7 throughout the Qt framework. Here are a couple of
+ examples about performance related feature improvements.
+
+ On Mac OS X, Qt now uses a different widget implementation (called
+ "alien widgets"), which improves the responsiveness of
+ applications that have complex user interfaces with several
+ widgets.
+
+ Qt 4.7 introduces the QStaticText class, which can be used to
+ improve text rendering performance. More info is available from
+ \l{http://labs.trolltech.com/blogs/2010/03/01/insanity-is-shaping-the-same-text-again-and-expecting-a-different-result/}{this blog}.
+
+ The QPainter class has a new API for rendering pixmap fragments
+ (QPainter::drawPixmapFragments), which can improve the rendering
+ performance of applications that need to render
+ \l{QPainter::drawPixmapFragments()}{pixmap fragments}.
+
+ Qt 4.7 has an updated version of the JavaScriptCore engine for the
+ QtScript module, which improves JavaScript execution performance.
\section1 New Classes, Functions, Macros, etc.
diff --git a/doc/src/snippets/code/src_corelib_kernel_qvariant.cpp b/doc/src/snippets/code/src_corelib_kernel_qvariant.cpp
index e81745c61b..9a86583c4f 100644
--- a/doc/src/snippets/code/src_corelib_kernel_qvariant.cpp
+++ b/doc/src/snippets/code/src_corelib_kernel_qvariant.cpp
@@ -101,7 +101,7 @@ QVariant v;
MyCustomStruct c;
if (v.canConvert<MyCustomStruct>())
- c = v.value<MyCustomStruct>(v);
+ c = v.value<MyCustomStruct>();
v = 7;
int i = v.value<int>(); // same as v.toInt()
diff --git a/doc/src/snippets/declarative/SelfDestroyingRect.qml b/doc/src/snippets/declarative/SelfDestroyingRect.qml
index f14d2d261d..413c04e7ee 100644
--- a/doc/src/snippets/declarative/SelfDestroyingRect.qml
+++ b/doc/src/snippets/declarative/SelfDestroyingRect.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/Sprite.qml b/doc/src/snippets/declarative/Sprite.qml
index 42e9a8c679..3928c4d83f 100644
--- a/doc/src/snippets/declarative/Sprite.qml
+++ b/doc/src/snippets/declarative/Sprite.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/anchoranimation.qml b/doc/src/snippets/declarative/anchoranimation.qml
index 9a7b8ff84c..f1493261b1 100644
--- a/doc/src/snippets/declarative/anchoranimation.qml
+++ b/doc/src/snippets/declarative/anchoranimation.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/anchorchanges.qml b/doc/src/snippets/declarative/anchorchanges.qml
index 3f1142130d..19356d7fee 100644
--- a/doc/src/snippets/declarative/anchorchanges.qml
+++ b/doc/src/snippets/declarative/anchorchanges.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/animatedimage.qml b/doc/src/snippets/declarative/animatedimage.qml
index bf5d61157f..66abbae940 100644
--- a/doc/src/snippets/declarative/animatedimage.qml
+++ b/doc/src/snippets/declarative/animatedimage.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/animation-behavioral.qml b/doc/src/snippets/declarative/animation-behavioral.qml
index dc790184a0..a4fa648390 100644
--- a/doc/src/snippets/declarative/animation-behavioral.qml
+++ b/doc/src/snippets/declarative/animation-behavioral.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/animation-easing.qml b/doc/src/snippets/declarative/animation-easing.qml
index e65c470295..97f6e60e5a 100644
--- a/doc/src/snippets/declarative/animation-easing.qml
+++ b/doc/src/snippets/declarative/animation-easing.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/animation-elements.qml b/doc/src/snippets/declarative/animation-elements.qml
index 7cb253ea10..a65bd67a07 100644
--- a/doc/src/snippets/declarative/animation-elements.qml
+++ b/doc/src/snippets/declarative/animation-elements.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/animation-groups.qml b/doc/src/snippets/declarative/animation-groups.qml
index 8a8f92577a..ba546c9478 100644
--- a/doc/src/snippets/declarative/animation-groups.qml
+++ b/doc/src/snippets/declarative/animation-groups.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/animation-propertyvaluesource.qml b/doc/src/snippets/declarative/animation-propertyvaluesource.qml
index ac5f0716cd..366505cbec 100644
--- a/doc/src/snippets/declarative/animation-propertyvaluesource.qml
+++ b/doc/src/snippets/declarative/animation-propertyvaluesource.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/animation-signalhandler.qml b/doc/src/snippets/declarative/animation-signalhandler.qml
index 749596c093..492c007de2 100644
--- a/doc/src/snippets/declarative/animation-signalhandler.qml
+++ b/doc/src/snippets/declarative/animation-signalhandler.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/animation-standalone.qml b/doc/src/snippets/declarative/animation-standalone.qml
index d75fd923ed..c847d02252 100644
--- a/doc/src/snippets/declarative/animation-standalone.qml
+++ b/doc/src/snippets/declarative/animation-standalone.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/animation-transitions.qml b/doc/src/snippets/declarative/animation-transitions.qml
index 3265065bac..5b0bb843d1 100644
--- a/doc/src/snippets/declarative/animation-transitions.qml
+++ b/doc/src/snippets/declarative/animation-transitions.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/behavior.qml b/doc/src/snippets/declarative/behavior.qml
index 4260e38cd4..7f66e5a779 100644
--- a/doc/src/snippets/declarative/behavior.qml
+++ b/doc/src/snippets/declarative/behavior.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/borderimage/borderimage-scaled.qml b/doc/src/snippets/declarative/borderimage/borderimage-scaled.qml
index cc3ae2fc44..0ed99437a3 100644
--- a/doc/src/snippets/declarative/borderimage/borderimage-scaled.qml
+++ b/doc/src/snippets/declarative/borderimage/borderimage-scaled.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/borderimage/borderimage-tiled.qml b/doc/src/snippets/declarative/borderimage/borderimage-tiled.qml
index e79281417b..680709d28b 100644
--- a/doc/src/snippets/declarative/borderimage/borderimage-tiled.qml
+++ b/doc/src/snippets/declarative/borderimage/borderimage-tiled.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/borderimage/normal-image.qml b/doc/src/snippets/declarative/borderimage/normal-image.qml
index 76ec6e2584..85a7f52f41 100644
--- a/doc/src/snippets/declarative/borderimage/normal-image.qml
+++ b/doc/src/snippets/declarative/borderimage/normal-image.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/codingconventions/dotproperties.qml b/doc/src/snippets/declarative/codingconventions/dotproperties.qml
index dbf3de62e6..8a173cd476 100644
--- a/doc/src/snippets/declarative/codingconventions/dotproperties.qml
+++ b/doc/src/snippets/declarative/codingconventions/dotproperties.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/codingconventions/javascript-imports.qml b/doc/src/snippets/declarative/codingconventions/javascript-imports.qml
index 88f89a7f1e..391bf27399 100644
--- a/doc/src/snippets/declarative/codingconventions/javascript-imports.qml
+++ b/doc/src/snippets/declarative/codingconventions/javascript-imports.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/codingconventions/javascript.qml b/doc/src/snippets/declarative/codingconventions/javascript.qml
index fd19b0220d..90790b9b1b 100644
--- a/doc/src/snippets/declarative/codingconventions/javascript.qml
+++ b/doc/src/snippets/declarative/codingconventions/javascript.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/codingconventions/lists.qml b/doc/src/snippets/declarative/codingconventions/lists.qml
index 66e07285ba..8d2bdbc42a 100644
--- a/doc/src/snippets/declarative/codingconventions/lists.qml
+++ b/doc/src/snippets/declarative/codingconventions/lists.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/codingconventions/photo.qml b/doc/src/snippets/declarative/codingconventions/photo.qml
index 39fc852e7d..359a75627e 100644
--- a/doc/src/snippets/declarative/codingconventions/photo.qml
+++ b/doc/src/snippets/declarative/codingconventions/photo.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/coloranimation.qml b/doc/src/snippets/declarative/coloranimation.qml
index 7e8e9fe580..d904721b84 100644
--- a/doc/src/snippets/declarative/coloranimation.qml
+++ b/doc/src/snippets/declarative/coloranimation.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/column/column.qml b/doc/src/snippets/declarative/column/column.qml
index e372cfd4bc..6d378bb92c 100644
--- a/doc/src/snippets/declarative/column/column.qml
+++ b/doc/src/snippets/declarative/column/column.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/column/vertical-positioner.qml b/doc/src/snippets/declarative/column/vertical-positioner.qml
index 27b09c1078..86ecc55821 100644
--- a/doc/src/snippets/declarative/column/vertical-positioner.qml
+++ b/doc/src/snippets/declarative/column/vertical-positioner.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/comments.qml b/doc/src/snippets/declarative/comments.qml
index 9be0ce549d..aa034c6a12 100644
--- a/doc/src/snippets/declarative/comments.qml
+++ b/doc/src/snippets/declarative/comments.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/component.qml b/doc/src/snippets/declarative/component.qml
index a0ab28c72e..84c063f452 100644
--- a/doc/src/snippets/declarative/component.qml
+++ b/doc/src/snippets/declarative/component.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/createComponent-simple.qml b/doc/src/snippets/declarative/createComponent-simple.qml
index 9669580353..f4c240d3c2 100644
--- a/doc/src/snippets/declarative/createComponent-simple.qml
+++ b/doc/src/snippets/declarative/createComponent-simple.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/createComponent.qml b/doc/src/snippets/declarative/createComponent.qml
index 0f9fad5a3c..f1a7436f96 100644
--- a/doc/src/snippets/declarative/createComponent.qml
+++ b/doc/src/snippets/declarative/createComponent.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/createQmlObject.qml b/doc/src/snippets/declarative/createQmlObject.qml
index a5f15f4a1e..6a4eae8ced 100644
--- a/doc/src/snippets/declarative/createQmlObject.qml
+++ b/doc/src/snippets/declarative/createQmlObject.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/dynamicObjects-destroy.qml b/doc/src/snippets/declarative/dynamicObjects-destroy.qml
index 2c0c2fb9a6..b4ae80cce4 100644
--- a/doc/src/snippets/declarative/dynamicObjects-destroy.qml
+++ b/doc/src/snippets/declarative/dynamicObjects-destroy.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/flickable.qml b/doc/src/snippets/declarative/flickable.qml
index d7a163b475..a283e9a39b 100644
--- a/doc/src/snippets/declarative/flickable.qml
+++ b/doc/src/snippets/declarative/flickable.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/flickableScrollbar.qml b/doc/src/snippets/declarative/flickableScrollbar.qml
index 2fdc3f1939..fc06f635d2 100644
--- a/doc/src/snippets/declarative/flickableScrollbar.qml
+++ b/doc/src/snippets/declarative/flickableScrollbar.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/flipable/flipable.qml b/doc/src/snippets/declarative/flipable/flipable.qml
index c2ecbbe1b9..eaf367a2a0 100644
--- a/doc/src/snippets/declarative/flipable/flipable.qml
+++ b/doc/src/snippets/declarative/flipable/flipable.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/flow-diagram.qml b/doc/src/snippets/declarative/flow-diagram.qml
index 80506b9b76..f34e3fdfdc 100644
--- a/doc/src/snippets/declarative/flow-diagram.qml
+++ b/doc/src/snippets/declarative/flow-diagram.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/flow.qml b/doc/src/snippets/declarative/flow.qml
index 77db683164..809627e4d4 100644
--- a/doc/src/snippets/declarative/flow.qml
+++ b/doc/src/snippets/declarative/flow.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/focusscopes.qml b/doc/src/snippets/declarative/focusscopes.qml
index 682fb58d5a..da6a8504c0 100644
--- a/doc/src/snippets/declarative/focusscopes.qml
+++ b/doc/src/snippets/declarative/focusscopes.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/folderlistmodel.qml b/doc/src/snippets/declarative/folderlistmodel.qml
index bb9ea2819c..a5e0071d6e 100644
--- a/doc/src/snippets/declarative/folderlistmodel.qml
+++ b/doc/src/snippets/declarative/folderlistmodel.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/gradient.qml b/doc/src/snippets/declarative/gradient.qml
index a38548569f..4c8bd401b2 100644
--- a/doc/src/snippets/declarative/gradient.qml
+++ b/doc/src/snippets/declarative/gradient.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/grid/grid-items.qml b/doc/src/snippets/declarative/grid/grid-items.qml
index 50997584a0..2382d38cd1 100644
--- a/doc/src/snippets/declarative/grid/grid-items.qml
+++ b/doc/src/snippets/declarative/grid/grid-items.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/grid/grid-no-spacing.qml b/doc/src/snippets/declarative/grid/grid-no-spacing.qml
index f04c24234c..6318165c79 100644
--- a/doc/src/snippets/declarative/grid/grid-no-spacing.qml
+++ b/doc/src/snippets/declarative/grid/grid-no-spacing.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/grid/grid-spacing.qml b/doc/src/snippets/declarative/grid/grid-spacing.qml
index 8715977fa3..fb3822c551 100644
--- a/doc/src/snippets/declarative/grid/grid-spacing.qml
+++ b/doc/src/snippets/declarative/grid/grid-spacing.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/grid/grid.qml b/doc/src/snippets/declarative/grid/grid.qml
index d57b4b2b3d..45998068ea 100644
--- a/doc/src/snippets/declarative/grid/grid.qml
+++ b/doc/src/snippets/declarative/grid/grid.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/gridview/ContactModel.qml b/doc/src/snippets/declarative/gridview/ContactModel.qml
index ac896c9e37..9fdeb4a101 100644
--- a/doc/src/snippets/declarative/gridview/ContactModel.qml
+++ b/doc/src/snippets/declarative/gridview/ContactModel.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/gridview/gridview.qml b/doc/src/snippets/declarative/gridview/gridview.qml
index e92a429df4..cbebb0a454 100644
--- a/doc/src/snippets/declarative/gridview/gridview.qml
+++ b/doc/src/snippets/declarative/gridview/gridview.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/image.qml b/doc/src/snippets/declarative/image.qml
index 42efb8ff99..228e83a454 100644
--- a/doc/src/snippets/declarative/image.qml
+++ b/doc/src/snippets/declarative/image.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/listmodel-modify.qml b/doc/src/snippets/declarative/listmodel-modify.qml
index 8f381f74c0..f08137f505 100644
--- a/doc/src/snippets/declarative/listmodel-modify.qml
+++ b/doc/src/snippets/declarative/listmodel-modify.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/listmodel-nested.qml b/doc/src/snippets/declarative/listmodel-nested.qml
index 3d876a303c..c38ee2d202 100644
--- a/doc/src/snippets/declarative/listmodel-nested.qml
+++ b/doc/src/snippets/declarative/listmodel-nested.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/listmodel-simple.qml b/doc/src/snippets/declarative/listmodel-simple.qml
index 382fd134a4..e561284431 100644
--- a/doc/src/snippets/declarative/listmodel-simple.qml
+++ b/doc/src/snippets/declarative/listmodel-simple.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/listmodel.qml b/doc/src/snippets/declarative/listmodel.qml
index 3dc04f940f..20f2074611 100644
--- a/doc/src/snippets/declarative/listmodel.qml
+++ b/doc/src/snippets/declarative/listmodel.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/listview/ContactModel.qml b/doc/src/snippets/declarative/listview/ContactModel.qml
index aa26cf467a..f48f84f227 100644
--- a/doc/src/snippets/declarative/listview/ContactModel.qml
+++ b/doc/src/snippets/declarative/listview/ContactModel.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/listview/listview-snippet.qml b/doc/src/snippets/declarative/listview/listview-snippet.qml
index c510472632..d81bcbb7ed 100644
--- a/doc/src/snippets/declarative/listview/listview-snippet.qml
+++ b/doc/src/snippets/declarative/listview/listview-snippet.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/listview/listview.qml b/doc/src/snippets/declarative/listview/listview.qml
index cde820e2cd..2945b2f216 100644
--- a/doc/src/snippets/declarative/listview/listview.qml
+++ b/doc/src/snippets/declarative/listview/listview.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/loader/KeyReader.qml b/doc/src/snippets/declarative/loader/KeyReader.qml
index 4423ac68f5..66a74fa740 100644
--- a/doc/src/snippets/declarative/loader/KeyReader.qml
+++ b/doc/src/snippets/declarative/loader/KeyReader.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
diff --git a/doc/src/snippets/declarative/loader/MyItem.qml b/doc/src/snippets/declarative/loader/MyItem.qml
index cc69661c04..22c3fd31b4 100644
--- a/doc/src/snippets/declarative/loader/MyItem.qml
+++ b/doc/src/snippets/declarative/loader/MyItem.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
diff --git a/doc/src/snippets/declarative/loader/connections.qml b/doc/src/snippets/declarative/loader/connections.qml
index babac4ea38..a1cdce29ef 100644
--- a/doc/src/snippets/declarative/loader/connections.qml
+++ b/doc/src/snippets/declarative/loader/connections.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
diff --git a/doc/src/snippets/declarative/loader/focus.qml b/doc/src/snippets/declarative/loader/focus.qml
index 464d98613e..4b4c940009 100644
--- a/doc/src/snippets/declarative/loader/focus.qml
+++ b/doc/src/snippets/declarative/loader/focus.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
diff --git a/doc/src/snippets/declarative/loader/simple.qml b/doc/src/snippets/declarative/loader/simple.qml
index e0dc6b337e..bb06ffcdac 100644
--- a/doc/src/snippets/declarative/loader/simple.qml
+++ b/doc/src/snippets/declarative/loader/simple.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
diff --git a/doc/src/snippets/declarative/mousearea/mousearea-snippet.qml b/doc/src/snippets/declarative/mousearea/mousearea-snippet.qml
new file mode 100644
index 0000000000..85071f141d
--- /dev/null
+++ b/doc/src/snippets/declarative/mousearea/mousearea-snippet.qml
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** 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 documentation 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$
+**
+****************************************************************************/
+
+//! [document]
+import Qt 4.7
+
+Rectangle {
+ width: 100; height: 100
+ color: "green"
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: { parent.color = 'red' }
+ }
+}
+//! [document]
diff --git a/doc/src/snippets/declarative/mousearea.qml b/doc/src/snippets/declarative/mousearea/mousearea.qml
index fb6cba0694..e7764f9a19 100644
--- a/doc/src/snippets/declarative/mousearea.qml
+++ b/doc/src/snippets/declarative/mousearea/mousearea.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/mouseareadragfilter.qml b/doc/src/snippets/declarative/mousearea/mouseareadragfilter.qml
index 52ed10cedd..fa0682e03d 100644
--- a/doc/src/snippets/declarative/mouseareadragfilter.qml
+++ b/doc/src/snippets/declarative/mousearea/mouseareadragfilter.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/numberanimation.qml b/doc/src/snippets/declarative/numberanimation.qml
index 0a1d5a491d..19c0b0d7da 100644
--- a/doc/src/snippets/declarative/numberanimation.qml
+++ b/doc/src/snippets/declarative/numberanimation.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/parallelanimation.qml b/doc/src/snippets/declarative/parallelanimation.qml
index a8e80cd6c8..caf4e01e6c 100644
--- a/doc/src/snippets/declarative/parallelanimation.qml
+++ b/doc/src/snippets/declarative/parallelanimation.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/parentanimation.qml b/doc/src/snippets/declarative/parentanimation.qml
index 506eff4dc9..b8a4c00b72 100644
--- a/doc/src/snippets/declarative/parentanimation.qml
+++ b/doc/src/snippets/declarative/parentanimation.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/parentchange.qml b/doc/src/snippets/declarative/parentchange.qml
index c704f1256a..72932b2445 100644
--- a/doc/src/snippets/declarative/parentchange.qml
+++ b/doc/src/snippets/declarative/parentchange.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/pathview/ContactModel.qml b/doc/src/snippets/declarative/pathview/ContactModel.qml
index df90d4d050..62daf3df3b 100644
--- a/doc/src/snippets/declarative/pathview/ContactModel.qml
+++ b/doc/src/snippets/declarative/pathview/ContactModel.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/pathview/pathattributes.qml b/doc/src/snippets/declarative/pathview/pathattributes.qml
index 4daee638ed..a45f15acb7 100644
--- a/doc/src/snippets/declarative/pathview/pathattributes.qml
+++ b/doc/src/snippets/declarative/pathview/pathattributes.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/pathview/pathview.qml b/doc/src/snippets/declarative/pathview/pathview.qml
index d9804dc4e3..e03c615e7e 100644
--- a/doc/src/snippets/declarative/pathview/pathview.qml
+++ b/doc/src/snippets/declarative/pathview/pathview.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/propertyaction.qml b/doc/src/snippets/declarative/propertyaction.qml
index ff299f1ed4..696c9ef01a 100644
--- a/doc/src/snippets/declarative/propertyaction.qml
+++ b/doc/src/snippets/declarative/propertyaction.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/propertyanimation.qml b/doc/src/snippets/declarative/propertyanimation.qml
index 55ea9f6ea8..24efd60cef 100644
--- a/doc/src/snippets/declarative/propertyanimation.qml
+++ b/doc/src/snippets/declarative/propertyanimation.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/propertychanges.qml b/doc/src/snippets/declarative/propertychanges.qml
index 5959e5494d..06a3fae355 100644
--- a/doc/src/snippets/declarative/propertychanges.qml
+++ b/doc/src/snippets/declarative/propertychanges.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/qml-data-models/dynamic-listmodel.qml b/doc/src/snippets/declarative/qml-data-models/dynamic-listmodel.qml
index 72e27f35d3..48f2bdb057 100644
--- a/doc/src/snippets/declarative/qml-data-models/dynamic-listmodel.qml
+++ b/doc/src/snippets/declarative/qml-data-models/dynamic-listmodel.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/qml-data-models/listelements.qml b/doc/src/snippets/declarative/qml-data-models/listelements.qml
index d9cea81d91..2d12567065 100644
--- a/doc/src/snippets/declarative/qml-data-models/listelements.qml
+++ b/doc/src/snippets/declarative/qml-data-models/listelements.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/qml-data-models/listmodel-listview.qml b/doc/src/snippets/declarative/qml-data-models/listmodel-listview.qml
index 92107f130e..69533c9577 100644
--- a/doc/src/snippets/declarative/qml-data-models/listmodel-listview.qml
+++ b/doc/src/snippets/declarative/qml-data-models/listmodel-listview.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/qml-documents/inline-component.qml b/doc/src/snippets/declarative/qml-documents/inline-component.qml
index 9233bbf6ea..45d7eb4d4c 100644
--- a/doc/src/snippets/declarative/qml-documents/inline-component.qml
+++ b/doc/src/snippets/declarative/qml-documents/inline-component.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/qml-documents/inline-text-component.qml b/doc/src/snippets/declarative/qml-documents/inline-text-component.qml
index 83ba213250..1f3af33178 100644
--- a/doc/src/snippets/declarative/qml-documents/inline-text-component.qml
+++ b/doc/src/snippets/declarative/qml-documents/inline-text-component.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/qml-documents/non-trivial.qml b/doc/src/snippets/declarative/qml-documents/non-trivial.qml
index eb2364b3da..e9cba984d6 100644
--- a/doc/src/snippets/declarative/qml-documents/non-trivial.qml
+++ b/doc/src/snippets/declarative/qml-documents/non-trivial.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/qml-documents/qmldocuments.qml b/doc/src/snippets/declarative/qml-documents/qmldocuments.qml
index cd0a1f7d9c..a4b5589584 100644
--- a/doc/src/snippets/declarative/qml-documents/qmldocuments.qml
+++ b/doc/src/snippets/declarative/qml-documents/qmldocuments.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/qml-intro/anchors1.qml b/doc/src/snippets/declarative/qml-intro/anchors1.qml
index c1158b8171..ba6f928438 100644
--- a/doc/src/snippets/declarative/qml-intro/anchors1.qml
+++ b/doc/src/snippets/declarative/qml-intro/anchors1.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/qml-intro/anchors2.qml b/doc/src/snippets/declarative/qml-intro/anchors2.qml
index a7d4922770..ac60e1baa5 100644
--- a/doc/src/snippets/declarative/qml-intro/anchors2.qml
+++ b/doc/src/snippets/declarative/qml-intro/anchors2.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/qml-intro/anchors3.qml b/doc/src/snippets/declarative/qml-intro/anchors3.qml
index a2e0f0379b..ab74670ba1 100644
--- a/doc/src/snippets/declarative/qml-intro/anchors3.qml
+++ b/doc/src/snippets/declarative/qml-intro/anchors3.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/qml-intro/hello-world1.qml b/doc/src/snippets/declarative/qml-intro/hello-world1.qml
index 9b91049998..55b39c640a 100644
--- a/doc/src/snippets/declarative/qml-intro/hello-world1.qml
+++ b/doc/src/snippets/declarative/qml-intro/hello-world1.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/qml-intro/hello-world2.qml b/doc/src/snippets/declarative/qml-intro/hello-world2.qml
index ddc10174da..c537528ce6 100644
--- a/doc/src/snippets/declarative/qml-intro/hello-world2.qml
+++ b/doc/src/snippets/declarative/qml-intro/hello-world2.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/qml-intro/hello-world3.qml b/doc/src/snippets/declarative/qml-intro/hello-world3.qml
index f1102c2665..794c406b24 100644
--- a/doc/src/snippets/declarative/qml-intro/hello-world3.qml
+++ b/doc/src/snippets/declarative/qml-intro/hello-world3.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/qml-intro/hello-world4.qml b/doc/src/snippets/declarative/qml-intro/hello-world4.qml
index 9656ff84dc..7ea4bed41c 100644
--- a/doc/src/snippets/declarative/qml-intro/hello-world4.qml
+++ b/doc/src/snippets/declarative/qml-intro/hello-world4.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/qml-intro/hello-world5.qml b/doc/src/snippets/declarative/qml-intro/hello-world5.qml
index b816e09c41..33458821f6 100644
--- a/doc/src/snippets/declarative/qml-intro/hello-world5.qml
+++ b/doc/src/snippets/declarative/qml-intro/hello-world5.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/qml-intro/number-animation1.qml b/doc/src/snippets/declarative/qml-intro/number-animation1.qml
index 7b405e4c3d..64ebe7af4e 100644
--- a/doc/src/snippets/declarative/qml-intro/number-animation1.qml
+++ b/doc/src/snippets/declarative/qml-intro/number-animation1.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/qml-intro/number-animation2.qml b/doc/src/snippets/declarative/qml-intro/number-animation2.qml
index f109f76170..79050020e3 100644
--- a/doc/src/snippets/declarative/qml-intro/number-animation2.qml
+++ b/doc/src/snippets/declarative/qml-intro/number-animation2.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/qml-intro/rectangle.qml b/doc/src/snippets/declarative/qml-intro/rectangle.qml
index 007881316f..1ce0a0416e 100644
--- a/doc/src/snippets/declarative/qml-intro/rectangle.qml
+++ b/doc/src/snippets/declarative/qml-intro/rectangle.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/qml-intro/sequential-animation1.qml b/doc/src/snippets/declarative/qml-intro/sequential-animation1.qml
index 7ae2fde0da..a1a1af9dad 100644
--- a/doc/src/snippets/declarative/qml-intro/sequential-animation1.qml
+++ b/doc/src/snippets/declarative/qml-intro/sequential-animation1.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/qml-intro/sequential-animation2.qml b/doc/src/snippets/declarative/qml-intro/sequential-animation2.qml
index ac0f3f53d6..f83c224cdd 100644
--- a/doc/src/snippets/declarative/qml-intro/sequential-animation2.qml
+++ b/doc/src/snippets/declarative/qml-intro/sequential-animation2.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/qml-intro/sequential-animation3.qml b/doc/src/snippets/declarative/qml-intro/sequential-animation3.qml
index 97c574b4ed..32bf59c657 100644
--- a/doc/src/snippets/declarative/qml-intro/sequential-animation3.qml
+++ b/doc/src/snippets/declarative/qml-intro/sequential-animation3.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/qml-intro/states1.qml b/doc/src/snippets/declarative/qml-intro/states1.qml
index 9619eb7ed5..6e7bab18d0 100644
--- a/doc/src/snippets/declarative/qml-intro/states1.qml
+++ b/doc/src/snippets/declarative/qml-intro/states1.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/qml-intro/transformations1.qml b/doc/src/snippets/declarative/qml-intro/transformations1.qml
index b4a16923ae..7ca3aee9db 100644
--- a/doc/src/snippets/declarative/qml-intro/transformations1.qml
+++ b/doc/src/snippets/declarative/qml-intro/transformations1.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/qtbinding/contextproperties/main.qml b/doc/src/snippets/declarative/qtbinding/contextproperties/main.qml
index 8b8f3f5a3b..341765aec6 100644
--- a/doc/src/snippets/declarative/qtbinding/contextproperties/main.qml
+++ b/doc/src/snippets/declarative/qtbinding/contextproperties/main.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/qtbinding/custompalette/main.qml b/doc/src/snippets/declarative/qtbinding/custompalette/main.qml
index 3781a1249a..ea8464c4d8 100644
--- a/doc/src/snippets/declarative/qtbinding/custompalette/main.qml
+++ b/doc/src/snippets/declarative/qtbinding/custompalette/main.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/qtbinding/resources/main.qml b/doc/src/snippets/declarative/qtbinding/resources/main.qml
index e4dfe4f90c..b12af9e69a 100644
--- a/doc/src/snippets/declarative/qtbinding/resources/main.qml
+++ b/doc/src/snippets/declarative/qtbinding/resources/main.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/qtbinding/stopwatch/main.qml b/doc/src/snippets/declarative/qtbinding/stopwatch/main.qml
index 5d7b8f6568..75c08316c9 100644
--- a/doc/src/snippets/declarative/qtbinding/stopwatch/main.qml
+++ b/doc/src/snippets/declarative/qtbinding/stopwatch/main.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/qtobject.qml b/doc/src/snippets/declarative/qtobject.qml
index bd48390439..581af16191 100644
--- a/doc/src/snippets/declarative/qtobject.qml
+++ b/doc/src/snippets/declarative/qtobject.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/rect-border-width.qml b/doc/src/snippets/declarative/rectangle/rect-border-width.qml
index e6628c9eb4..3cf0831ac8 100644
--- a/doc/src/snippets/declarative/rect-border-width.qml
+++ b/doc/src/snippets/declarative/rectangle/rect-border-width.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
@@ -43,7 +43,7 @@ import Qt 4.7
//![0]
Rectangle {
width: 100; height: 100
- color: "yellow"
+ color: "lightblue"
Rectangle {
anchors.fill: parent
diff --git a/doc/src/snippets/declarative/rectangle/rectangle-colors.qml b/doc/src/snippets/declarative/rectangle/rectangle-colors.qml
new file mode 100644
index 0000000000..8f306f66aa
--- /dev/null
+++ b/doc/src/snippets/declarative/rectangle/rectangle-colors.qml
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation 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 Qt 4.7
+
+Item {
+ width: 100; height: 200
+
+Item {
+ x: 10; y: 10
+ width: 80; height: 180
+
+//! [rectangles]
+Rectangle {
+ color: "#00B000"
+ width: 80; height: 80
+}
+
+Rectangle {
+ color: "steelblue"
+ y: 100; width: 80; height: 80
+}
+//! [rectangles]
+}
+}
diff --git a/doc/src/snippets/declarative/rectangle/rectangle-gradient.qml b/doc/src/snippets/declarative/rectangle/rectangle-gradient.qml
new file mode 100644
index 0000000000..aff5849a2c
--- /dev/null
+++ b/doc/src/snippets/declarative/rectangle/rectangle-gradient.qml
@@ -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 documentation 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 Qt 4.7
+
+Item {
+ width: 100; height: 300
+
+Item {
+ x: 10; y: 10
+ width: 80; height: 280
+
+//! [rectangles]
+Rectangle {
+ y: 0; width: 80; height: 80
+ color: "lightsteelblue"
+}
+
+Rectangle {
+ y: 100; width: 80; height: 80
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: "lightsteelblue" }
+ GradientStop { position: 1.0; color: "blue" }
+ }
+}
+
+Rectangle {
+ y: 200; width: 80; height: 80
+ rotation: 90
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: "lightsteelblue" }
+ GradientStop { position: 1.0; color: "blue" }
+ }
+}
+//! [rectangles]
+}
+}
diff --git a/doc/src/snippets/declarative/rectangle/rectangle-smooth.qml b/doc/src/snippets/declarative/rectangle/rectangle-smooth.qml
new file mode 100644
index 0000000000..e1d6980c49
--- /dev/null
+++ b/doc/src/snippets/declarative/rectangle/rectangle-smooth.qml
@@ -0,0 +1,87 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation 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 Qt 4.7
+
+Rectangle {
+ width: 400; height: 200
+ color: "white"
+
+ Grid {
+ anchors.centerIn: parent
+ columns: 4; rows: 2; spacing: 10
+
+ Rectangle {
+ color: "steelblue"; width: 80; height: 80
+ rotation: 10
+ }
+ Rectangle {
+ color: "#F0A080"; width: 80; height: 80
+ border.color: "gray"; rotation: 10
+ }
+ Rectangle {
+ color: "steelblue"; width: 80; height: 80
+ radius: 10; rotation: 10
+ }
+ Rectangle {
+ color: "#F0A080"; width: 80; height: 80
+ radius: 10; border.color: "gray"
+ rotation: 10
+ }
+
+ Rectangle {
+ color: "steelblue"; width: 80; height: 80
+ rotation: 10; smooth: true
+ }
+ Rectangle {
+ color: "#F0A080"; width: 80; height: 80
+ border.color: "gray"; rotation: 10; smooth: true
+ }
+ Rectangle {
+ color: "steelblue"; width: 80; height: 80
+ radius: 10; rotation: 10; smooth: true
+ }
+ Rectangle {
+ color: "#F0A080"; width: 80; height: 80
+ radius: 10; border.color: "gray"
+ rotation: 10; smooth: true
+ }
+ }
+}
diff --git a/doc/src/snippets/declarative/~image-fillmode.qml b/doc/src/snippets/declarative/rectangle/rectangle.qml
index cee26c49ee..a464cb96ea 100644
--- a/doc/src/snippets/declarative/~image-fillmode.qml
+++ b/doc/src/snippets/declarative/rectangle/rectangle.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
@@ -38,9 +38,15 @@
**
****************************************************************************/
+//! [document]
import Qt 4.7
-Image {
- source: "pics/qtlogo.png"
- width: 20; height: 20
+Rectangle {
+ width: 100
+ height: 100
+ color: "red"
+ border.color: "black"
+ border.width: 5
+ radius: 10
}
+//! [document]
diff --git a/doc/src/snippets/declarative/repeaters/repeater-grid-index.qml b/doc/src/snippets/declarative/repeaters/repeater-grid-index.qml
index 106550eb89..dbf24ae363 100644
--- a/doc/src/snippets/declarative/repeaters/repeater-grid-index.qml
+++ b/doc/src/snippets/declarative/repeaters/repeater-grid-index.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/repeaters/repeater.qml b/doc/src/snippets/declarative/repeaters/repeater.qml
index d71fd298ba..db606d033e 100644
--- a/doc/src/snippets/declarative/repeaters/repeater.qml
+++ b/doc/src/snippets/declarative/repeaters/repeater.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/rotation.qml b/doc/src/snippets/declarative/rotation.qml
index c3ff304d56..4db8b4a7fc 100644
--- a/doc/src/snippets/declarative/rotation.qml
+++ b/doc/src/snippets/declarative/rotation.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/rotationanimation.qml b/doc/src/snippets/declarative/rotationanimation.qml
index a0f635478c..2309d0af17 100644
--- a/doc/src/snippets/declarative/rotationanimation.qml
+++ b/doc/src/snippets/declarative/rotationanimation.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/row.qml b/doc/src/snippets/declarative/row.qml
index bd2db164c5..efb6190a9e 100644
--- a/doc/src/snippets/declarative/row.qml
+++ b/doc/src/snippets/declarative/row.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/row/row.qml b/doc/src/snippets/declarative/row/row.qml
index c863243e8f..8096c0f6ad 100644
--- a/doc/src/snippets/declarative/row/row.qml
+++ b/doc/src/snippets/declarative/row/row.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/sequentialanimation.qml b/doc/src/snippets/declarative/sequentialanimation.qml
index bf73be53fa..1a17ae9d16 100644
--- a/doc/src/snippets/declarative/sequentialanimation.qml
+++ b/doc/src/snippets/declarative/sequentialanimation.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/smoothedanimation.qml b/doc/src/snippets/declarative/smoothedanimation.qml
index 20c90b564b..edc33db724 100644
--- a/doc/src/snippets/declarative/smoothedanimation.qml
+++ b/doc/src/snippets/declarative/smoothedanimation.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/springanimation.qml b/doc/src/snippets/declarative/springanimation.qml
index 8e810e1c93..fe5aeb8a0d 100644
--- a/doc/src/snippets/declarative/springanimation.qml
+++ b/doc/src/snippets/declarative/springanimation.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/state-when.qml b/doc/src/snippets/declarative/state-when.qml
index 8e38f82634..6dbd099f9e 100644
--- a/doc/src/snippets/declarative/state-when.qml
+++ b/doc/src/snippets/declarative/state-when.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/state.qml b/doc/src/snippets/declarative/state.qml
index 5f43947ffe..85973145c6 100644
--- a/doc/src/snippets/declarative/state.qml
+++ b/doc/src/snippets/declarative/state.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/states.qml b/doc/src/snippets/declarative/states.qml
index 1f9dc2c90d..be483afda7 100644
--- a/doc/src/snippets/declarative/states.qml
+++ b/doc/src/snippets/declarative/states.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/systempalette.qml b/doc/src/snippets/declarative/systempalette.qml
index cf5c902d15..5e540b958d 100644
--- a/doc/src/snippets/declarative/systempalette.qml
+++ b/doc/src/snippets/declarative/systempalette.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/text/onLinkActivated.qml b/doc/src/snippets/declarative/text/onLinkActivated.qml
new file mode 100644
index 0000000000..0fb236a38d
--- /dev/null
+++ b/doc/src/snippets/declarative/text/onLinkActivated.qml
@@ -0,0 +1,54 @@
+/****************************************************************************
+**
+** 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: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 Qt 4.7
+
+Rectangle {
+ width: 700; height: 400
+
+//![0]
+ Text {
+ textFormat: Text.RichText
+ text: "The main website is at <a href=\"http://qt.nokia.com\">Nokia Qt DF</a>."
+ onLinkActivated: console.log(link + " link activated")
+ }
+//![0]
+
+}
+
diff --git a/doc/src/snippets/declarative/texteditor.qml b/doc/src/snippets/declarative/texteditor.qml
index 6cfbcc823b..55438f44a2 100644
--- a/doc/src/snippets/declarative/texteditor.qml
+++ b/doc/src/snippets/declarative/texteditor.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/transition-from-to.qml b/doc/src/snippets/declarative/transition-from-to.qml
index 09949fce00..73bf880ed8 100644
--- a/doc/src/snippets/declarative/transition-from-to.qml
+++ b/doc/src/snippets/declarative/transition-from-to.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/transition-reversible.qml b/doc/src/snippets/declarative/transition-reversible.qml
index 367ad4994a..b64cf37909 100644
--- a/doc/src/snippets/declarative/transition-reversible.qml
+++ b/doc/src/snippets/declarative/transition-reversible.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/transition.qml b/doc/src/snippets/declarative/transition.qml
index a79e483f98..6a8a2f513c 100644
--- a/doc/src/snippets/declarative/transition.qml
+++ b/doc/src/snippets/declarative/transition.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/visualdatamodel.qml b/doc/src/snippets/declarative/visualdatamodel.qml
index 231e4dd2ef..67f9b6bd33 100644
--- a/doc/src/snippets/declarative/visualdatamodel.qml
+++ b/doc/src/snippets/declarative/visualdatamodel.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/visualdatamodel_rootindex/view.qml b/doc/src/snippets/declarative/visualdatamodel_rootindex/view.qml
index 9e759f9910..10bcfe8930 100644
--- a/doc/src/snippets/declarative/visualdatamodel_rootindex/view.qml
+++ b/doc/src/snippets/declarative/visualdatamodel_rootindex/view.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/workerscript.qml b/doc/src/snippets/declarative/workerscript.qml
index 6bc33fba68..434a90ecac 100644
--- a/doc/src/snippets/declarative/workerscript.qml
+++ b/doc/src/snippets/declarative/workerscript.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/declarative/xmlrole.qml b/doc/src/snippets/declarative/xmlrole.qml
index 85fe9c8771..9c8af89d0c 100644
--- a/doc/src/snippets/declarative/xmlrole.qml
+++ b/doc/src/snippets/declarative/xmlrole.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
diff --git a/doc/src/snippets/layouts/layouts.cpp b/doc/src/snippets/layouts/layouts.cpp
index 66c9b9d65a..58440f5b6f 100644
--- a/doc/src/snippets/layouts/layouts.cpp
+++ b/doc/src/snippets/layouts/layouts.cpp
@@ -66,7 +66,9 @@ int main(int argc, char *argv[])
layout->addWidget(button5);
window->setLayout(layout);
-//! [4] //! [5]
+//! [4]
+ window->setWindowTitle("QHBoxLayout");
+//! [5]
window->show();
//! [5]
}
@@ -93,7 +95,9 @@ int main(int argc, char *argv[])
layout->addWidget(button5);
window->setLayout(layout);
-//! [10] //! [11]
+//! [10]
+ window->setWindowTitle("QVBoxLayout");
+//! [11]
window->show();
//! [11]
}
@@ -120,10 +124,42 @@ int main(int argc, char *argv[])
layout->addWidget(button5, 2, 1);
window->setLayout(layout);
-//! [16] //! [17]
+//! [16]
+ window->setWindowTitle("QGridLayout");
+//! [17]
window->show();
//! [17]
}
+ {
+//! [18]
+ QWidget *window = new QWidget;
+//! [18]
+//! [19]
+ QPushButton *button1 = new QPushButton("One");
+ QLineEdit *lineEdit1 = new QLineEdit();
+//! [19]
+//! [20]
+ QPushButton *button2 = new QPushButton("Two");
+ QLineEdit *lineEdit2 = new QLineEdit();
+ QPushButton *button3 = new QPushButton("Three");
+ QLineEdit *lineEdit3 = new QLineEdit();
+//! [20]
+//! [21]
+ QFormLayout *layout = new QFormLayout;
+//! [21]
+//! [22]
+ layout->addRow(button1, lineEdit1);
+ layout->addRow(button2, lineEdit2);
+ layout->addRow(button3, lineEdit3);
+
+ window->setLayout(layout);
+//! [22]
+ window->setWindowTitle("QFormLayout");
+//! [23]
+ window->show();
+//! [23]
+ }
+
return app.exec();
}
diff --git a/doc/src/snippets/signalmapper/filereader.cpp b/doc/src/snippets/signalmapper/filereader.cpp
index 76ed4c16c6..08f4d063b7 100644
--- a/doc/src/snippets/signalmapper/filereader.cpp
+++ b/doc/src/snippets/signalmapper/filereader.cpp
@@ -66,10 +66,18 @@ FileReader::FileReader(QWidget *parent)
//! [0]
//! [1]
- connect(signalMapper, SIGNAL(mapped(const QString &)),
- this, SLOT(readFile(const QString &)));
+ connect(signalMapper, SIGNAL(mapped(QString)),
+ this, SLOT(readFile(QString)));
//! [1]
+/*
+//! [2]
+ //slower due to signature normalization at runtime
+
+ connect(signalMapper, SIGNAL(mapped(const QString &)),
+ this, SLOT(readFile(const QString &)));
+//! [2]
+*/
QHBoxLayout *buttonLayout = new QHBoxLayout;
buttonLayout->addWidget(taxFileButton);
buttonLayout->addWidget(accountFileButton);
diff --git a/doc/src/template/style/style.css b/doc/src/template/style/style.css
index 6cc1cb6b5b..b60aa41401 100755
--- a/doc/src/template/style/style.css
+++ b/doc/src/template/style/style.css
@@ -193,7 +193,7 @@
/* font style elements */
.heading
{
- font: normal bold 16px/1.0 Arial;
+ font: normal bold 16px/1.2 Arial;
padding-bottom: 15px;
}
.subtitle
@@ -670,7 +670,7 @@
.wrap .toolbar .breadcrumb
{
font-size: 11px;
- line-height: 1;
+ line-height: 1.2;
padding: 0 0 10px 21px;
height: 10px;
}
@@ -779,26 +779,27 @@
.wrap .content ol li {
background:none;
- font:normal 10pt/1 Verdana;
+ font:normal 10pt/1.2 Verdana;
margin-bottom:10px;
margin-left:12px;
/*list-style-type:disc;*/
}
-
- .wrap .content li
- {
- background: url(../images/bullet_sq.png) no-repeat 0 5px;
- font: normal 400 10pt/1 Verdana;
- margin-bottom: 10px;
- padding-left:12px;
- }
.wrap .content ol li
{
background:none;
margin-bottom: 10px;
padding-left:0px;
+ margin-left:52px;
+ }
+
+ .wrap .content li
+ {
+ background: url(../images/bullet_sq.png) no-repeat 0 5px;
+ font: normal 400 10pt/1.2 Verdana;
+ margin-bottom: 10px;
+ padding-left:12px;
}
.content li:hover {}
@@ -829,7 +830,7 @@
.wrap .content table p
{
line-height: 20px;
- padding: 0px;
+ /* padding: 0px;*/
}
.wrap .content ul
{
@@ -858,7 +859,7 @@
text-decoration: underline;
}
.alphaChar{
- width:100%;
+ width:95%;
background-color:#F6F6F6;
border:1px solid #E6E6E6;
-moz-border-radius: 7px 7px 7px 7px;
@@ -870,16 +871,39 @@
margin-bottom:10px;
}
.flowList{
- vertical-align:top;
+ /*vertical-align:top;*/
+ /*margin:20px auto;*/
+
+ column-count:3;
+ -webkit-column-count:3;
+ -moz-column-count:3;
+/*
+ column-width:100%;
+ -webkit-column-width:200px;
+ -col-column-width:200px;
+*/
+ column-gap:41px;
+ -webkit-column-gap:41px;
+ -moz-column-gap:41px;
+
+ column-rule: 1px dashed #ccc;
+ -webkit-column-rule: 1px dashed #ccc;
+ -moz-column-rule: 1px dashed #ccc;
}
.flowList dl{
}
.flowList dd{
- display:inline-block;
+ /*display:inline-block;*/
margin-left:10px;
- width:250px;
+ min-width:250px;
+ line-height: 1.2;
+
+ }
+
+ .flowList dd a{
}
+
.wrap .content .flowList p{
padding:0px;
}
@@ -938,7 +962,7 @@
padding: 5px 5px 0 0;
margin-bottom: 3px;
color: #363534;
- font-weight: 600;
+ font-weight:bold;
float: right;
text-decoration: none;
}
@@ -1003,7 +1027,7 @@
.generic{
}
.generic td{
- padding:5px;
+ /* padding:5px;*/
}
.generic .alphaChar{
margin-top:5px;
@@ -1330,6 +1354,9 @@
background-color: #FAFAFA;
}
+ .wrap .content ol li {
+
+ }
.creator .header, .footer, .wrapper
@@ -1373,10 +1400,17 @@
.creator .footer
{
border-top:1px solid #E5E5E5;
- min-height: 100px;
+ height: 50px;
margin:0px;
+ padding:10px;
}
+ .creator .footer p
+ {
+ text-align:justify;
+ max-width:900px;
+ }
+
.creator .wrap
{
@@ -1423,7 +1457,7 @@
max-width:75%;
}
.creator .generic td{
- padding:0;
+ /*padding:0;*/
}
.creator .indexboxbar
{
diff --git a/doc/src/tutorials/modelview.qdoc b/doc/src/tutorials/modelview.qdoc
index 65f66743f0..e47fe831fe 100644
--- a/doc/src/tutorials/modelview.qdoc
+++ b/doc/src/tutorials/modelview.qdoc
@@ -30,7 +30,7 @@
\startpage {index.html}{Qt Reference Documentation}
- \title Model/View Contents
+ \title Model/View Tutorial
\brief An introduction to ModelView programming
Every UI developer should know about ModelView programming and the goal of
@@ -103,13 +103,13 @@
Let's have a closer look at a standard table widget. A table widget is a 2D
array of the data elements that the user can change. The table widget can be
integrated into a program flow by reading and writing the data elements that
- the table widget provides. This method is very intuitive and useful in many
- applications.
-
- Displaying and editing a database table with a standard table widget can be
- problematic. Two copies of the data have to be coordinated: one outside the
+ the table widget provides.
+
+ This method is very intuitive and useful in many applications, but displaying
+ and editing a database table with a standard table widget can be problematic.
+ Two copies of the data have to be coordinated: one outside the
widget; one inside the widget. The developer is responsible for
- synchronizing both versions. The tight coupling of presentation and data
+ synchronizing both versions. Besides this, the tight coupling of presentation and data
makes it harder to write unit tests.
\section2 1.2 Model/View to the Rescue
@@ -184,7 +184,13 @@
\section1 2. A Simple Model/View Application
- If you want to develop a model/view application, where should you start? We recommend starting with a simple example and extending it step-by-step. This makes understanding the architecture a lot easier. Trying to understand the model/view architecture in detail before invoking the IDE has proven to be less convenient for many developers. It is substantially easier to start with a simple model/view application that has demo data. Give it a try! Simply replace the data in the examples below with your own.
+ If you want to develop a model/view application, where should you start?
+ We recommend starting with a simple example and extending it step-by-step.
+ This makes understanding the architecture a lot easier. Trying to understand
+ the model/view architecture in detail before invoking the IDE has proven
+ to be less convenient for many developers. It is substantially easier to
+ start with a simple model/view application that has demo data. Give it a
+ try! Simply replace the data in the examples below with your own.
Below are 7 very simple and independent applications that show different
sides of model/view programming. The source code can be found inside the
@@ -596,20 +602,22 @@
\list 1
\o \bold{C++ GUI Programming with Qt 4} / Jasmin Blanchette, Mark Summerfield,
\e{Prentice Hall, 2nd edition}, ISBN 0-13-235416-0. Also available in
- German: C++ GUI Programmierung mit Qt 4: Die offizielle Einführung,
+ German: \bold{C++ GUI Programmierung mit Qt 4: Die offizielle Einführung},
\e{Addison-Wesley}, ISBN 3-827327-29-6
\o \bold{The Book of Qt4, The Art of Building Qt Applications} / Daniel Molkentin,
\e{Open Source Press}, ISBN 1-59327-147-6.
Translated from \bold{Qt 4, Einführung in die Applikationsentwicklung},
\e{Open Source Press}, ISBN 3-937514-12-0.
\o \bold{Foundations of Qt Development} / Johan Thelin, \e{Apress}, ISBN 1-59059-831-8.
+ \o \bold{Advanced Qt Programming} / Mark Summerfield, \e{Prentice Hall}, ISBN 0-321-63590-6.
+ This book covers Model/View programming on more than 150 pages.
\endlist
More information about these books is available on the
\l{Books about Qt Programming}{Qt Web site}.
- The following list provides an overview of example programs contained in the
- books above. Some of them make very good templates for developing similar
+ The following list provides an overview of example programs contained in the first three
+ books listed above. Some of them make very good templates for developing similar
applications.
\table
diff --git a/doc/src/widgets-and-layouts/layout.qdoc b/doc/src/widgets-and-layouts/layout.qdoc
index 32dddd7b02..4db991a5ee 100644
--- a/doc/src/widgets-and-layouts/layout.qdoc
+++ b/doc/src/widgets-and-layouts/layout.qdoc
@@ -116,7 +116,7 @@
\section2 Laying Out Widgets in Code
The following code creates a QHBoxLayout that manages the geometry of five
- \l{QPushButton}s, as shown on the first screenshot above:
+ \l{QPushButton}{QPushButtons}, as shown on the first screenshot above:
\snippet doc/src/snippets/layouts/layouts.cpp 0
\snippet doc/src/snippets/layouts/layouts.cpp 1
@@ -141,7 +141,19 @@
The third QPushButton spans 2 columns. This is possible by specifying 2 as
the fifth argument to QGridLayout::addWidget().
- Finally, the code for QFormLayout is ..
+ QFormLayout will add two widgets on a row, commonly a QLabel and a QLineEdit
+ to create forms. Adding a QLabel and a QLineEdit on the same row will set
+ the QLineEdit as the QLabel's buddy. The following code will use the
+ QFormLayout to place three \l{QPushButton}{QPushButtons} and a corresponding
+ QLineEdit on a row.
+
+ \snippet doc/src/snippets/layouts/layouts.cpp 18
+ \snippet doc/src/snippets/layouts/layouts.cpp 19
+ \snippet doc/src/snippets/layouts/layouts.cpp 20
+ \codeline
+ \snippet doc/src/snippets/layouts/layouts.cpp 21
+ \snippet doc/src/snippets/layouts/layouts.cpp 22
+ \snippet doc/src/snippets/layouts/layouts.cpp 23
\section2 Tips for Using Layouts
diff --git a/examples/declarative/animation/basics/color-animation.qml b/examples/declarative/animation/basics/color-animation.qml
index 6d8b46c2f1..182bb54cbd 100644
--- a/examples/declarative/animation/basics/color-animation.qml
+++ b/examples/declarative/animation/basics/color-animation.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/animation/basics/property-animation.qml b/examples/declarative/animation/basics/property-animation.qml
index 69d166a2e0..5149f5b0a0 100644
--- a/examples/declarative/animation/basics/property-animation.qml
+++ b/examples/declarative/animation/basics/property-animation.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/animation/behaviors/SideRect.qml b/examples/declarative/animation/behaviors/SideRect.qml
index 76cb3f5f6d..eba08172dd 100644
--- a/examples/declarative/animation/behaviors/SideRect.qml
+++ b/examples/declarative/animation/behaviors/SideRect.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/animation/behaviors/behavior-example.qml b/examples/declarative/animation/behaviors/behavior-example.qml
index adefb9e5d8..268d6e58a5 100644
--- a/examples/declarative/animation/behaviors/behavior-example.qml
+++ b/examples/declarative/animation/behaviors/behavior-example.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/animation/easing/content/QuitButton.qml b/examples/declarative/animation/easing/content/QuitButton.qml
index 039694d757..9dfe9bd594 100644
--- a/examples/declarative/animation/easing/content/QuitButton.qml
+++ b/examples/declarative/animation/easing/content/QuitButton.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/animation/easing/easing.qml b/examples/declarative/animation/easing/easing.qml
index b53cb9817c..ffb129d5d2 100644
--- a/examples/declarative/animation/easing/easing.qml
+++ b/examples/declarative/animation/easing/easing.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
@@ -94,36 +94,37 @@ Rectangle {
id: delegate
Item {
- height: 42; width: window.width
+ height: 56; width: window.width
Text { text: name; anchors.centerIn: parent; color: "White" }
Rectangle {
- id: slot1; color: "#121212"; x: 30; height: 32; width: 32
- border.color: "#343434"; border.width: 1; radius: 8
+ id: slot1; color: "#121212"; x: 30; height: 46; width: 46
+ border.color: "#343434"; border.width: 1; radius: 12
anchors.verticalCenter: parent.verticalCenter
}
Rectangle {
- id: slot2; color: "#121212"; x: window.width - 62; height: 32; width: 32
- border.color: "#343434"; border.width: 1; radius: 8
+ id: slot2; color: "#121212"; x: window.width - 76; height: 46; width: 46
+ border.color: "#343434"; border.width: 1; radius: 12
anchors.verticalCenter: parent.verticalCenter
}
Rectangle {
id: rect; x: 30; color: "#454545"
border.color: "White"; border.width: 2
- height: 32; width: 32; radius: 8
+ height: 46; width: 46; radius: 12
anchors.verticalCenter: parent.verticalCenter
MouseArea {
onClicked: if (rect.state == '') rect.state = "right"; else rect.state = ''
anchors.fill: parent
+ anchors.margins: -5 // Make MouseArea bigger than the rectangle, itself
}
states : State {
name: "right"
- PropertyChanges { target: rect; x: window.width - 62; color: ballColor }
+ PropertyChanges { target: rect; x: window.width - 76; color: ballColor }
}
transitions: Transition {
diff --git a/examples/declarative/animation/states/states.qml b/examples/declarative/animation/states/states.qml
index 34cdae322c..4f3e28ca7a 100644
--- a/examples/declarative/animation/states/states.qml
+++ b/examples/declarative/animation/states/states.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/animation/states/transitions.qml b/examples/declarative/animation/states/transitions.qml
index 884779cb4a..6efcdbaffa 100644
--- a/examples/declarative/animation/states/transitions.qml
+++ b/examples/declarative/animation/states/transitions.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/cppextensions/imageprovider/imageprovider-example.qml b/examples/declarative/cppextensions/imageprovider/imageprovider-example.qml
index 1ef97fa99f..58536bf2cd 100644
--- a/examples/declarative/cppextensions/imageprovider/imageprovider-example.qml
+++ b/examples/declarative/cppextensions/imageprovider/imageprovider-example.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/cppextensions/networkaccessmanagerfactory/view.qml b/examples/declarative/cppextensions/networkaccessmanagerfactory/view.qml
index 4b849e0713..439740a9d9 100644
--- a/examples/declarative/cppextensions/networkaccessmanagerfactory/view.qml
+++ b/examples/declarative/cppextensions/networkaccessmanagerfactory/view.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/cppextensions/plugins/com/nokia/TimeExample/Clock.qml b/examples/declarative/cppextensions/plugins/com/nokia/TimeExample/Clock.qml
index 6b2676e7e7..c7d2757a7f 100644
--- a/examples/declarative/cppextensions/plugins/com/nokia/TimeExample/Clock.qml
+++ b/examples/declarative/cppextensions/plugins/com/nokia/TimeExample/Clock.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/cppextensions/plugins/plugins.qml b/examples/declarative/cppextensions/plugins/plugins.qml
index 8d1085c96d..3aa0995473 100644
--- a/examples/declarative/cppextensions/plugins/plugins.qml
+++ b/examples/declarative/cppextensions/plugins/plugins.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/cppextensions/qgraphicslayouts/layoutitem/layoutitem.qml b/examples/declarative/cppextensions/qgraphicslayouts/layoutitem/layoutitem.qml
index 6f377c521c..571e42733b 100644
--- a/examples/declarative/cppextensions/qgraphicslayouts/layoutitem/layoutitem.qml
+++ b/examples/declarative/cppextensions/qgraphicslayouts/layoutitem/layoutitem.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/cppextensions/qgraphicslayouts/qgraphicsgridlayout/gridlayout.cpp b/examples/declarative/cppextensions/qgraphicslayouts/qgraphicsgridlayout/gridlayout.cpp
index b52305e699..79d3f4c440 100644
--- a/examples/declarative/cppextensions/qgraphicslayouts/qgraphicsgridlayout/gridlayout.cpp
+++ b/examples/declarative/cppextensions/qgraphicslayouts/qgraphicsgridlayout/gridlayout.cpp
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/cppextensions/qgraphicslayouts/qgraphicsgridlayout/gridlayout.h b/examples/declarative/cppextensions/qgraphicslayouts/qgraphicsgridlayout/gridlayout.h
index ca2cedcfbb..a9818a0800 100644
--- a/examples/declarative/cppextensions/qgraphicslayouts/qgraphicsgridlayout/gridlayout.h
+++ b/examples/declarative/cppextensions/qgraphicslayouts/qgraphicsgridlayout/gridlayout.h
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/cppextensions/qgraphicslayouts/qgraphicsgridlayout/qgraphicsgridlayout.qml b/examples/declarative/cppextensions/qgraphicslayouts/qgraphicsgridlayout/qgraphicsgridlayout.qml
index 50026f1274..fd3aa03be5 100644
--- a/examples/declarative/cppextensions/qgraphicslayouts/qgraphicsgridlayout/qgraphicsgridlayout.qml
+++ b/examples/declarative/cppextensions/qgraphicslayouts/qgraphicsgridlayout/qgraphicsgridlayout.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/cppextensions/qgraphicslayouts/qgraphicslinearlayout/linearlayout.cpp b/examples/declarative/cppextensions/qgraphicslayouts/qgraphicslinearlayout/linearlayout.cpp
index d0e978342a..e8b2daa32c 100644
--- a/examples/declarative/cppextensions/qgraphicslayouts/qgraphicslinearlayout/linearlayout.cpp
+++ b/examples/declarative/cppextensions/qgraphicslayouts/qgraphicslinearlayout/linearlayout.cpp
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/cppextensions/qgraphicslayouts/qgraphicslinearlayout/linearlayout.h b/examples/declarative/cppextensions/qgraphicslayouts/qgraphicslinearlayout/linearlayout.h
index d9391ca54a..985b335aba 100644
--- a/examples/declarative/cppextensions/qgraphicslayouts/qgraphicslinearlayout/linearlayout.h
+++ b/examples/declarative/cppextensions/qgraphicslayouts/qgraphicslinearlayout/linearlayout.h
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/cppextensions/qgraphicslayouts/qgraphicslinearlayout/qgraphicslinearlayout.qml b/examples/declarative/cppextensions/qgraphicslayouts/qgraphicslinearlayout/qgraphicslinearlayout.qml
index 9a0bd55e5e..24992d515c 100644
--- a/examples/declarative/cppextensions/qgraphicslayouts/qgraphicslinearlayout/qgraphicslinearlayout.qml
+++ b/examples/declarative/cppextensions/qgraphicslayouts/qgraphicslinearlayout/qgraphicslinearlayout.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/cppextensions/qwidgets/qwidgets.qml b/examples/declarative/cppextensions/qwidgets/qwidgets.qml
index c1edc80515..16e92274d6 100644
--- a/examples/declarative/cppextensions/qwidgets/qwidgets.qml
+++ b/examples/declarative/cppextensions/qwidgets/qwidgets.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/cppextensions/referenceexamples/adding/example.qml b/examples/declarative/cppextensions/referenceexamples/adding/example.qml
index da3ddfcce2..de9a5c6319 100644
--- a/examples/declarative/cppextensions/referenceexamples/adding/example.qml
+++ b/examples/declarative/cppextensions/referenceexamples/adding/example.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/cppextensions/referenceexamples/attached/example.qml b/examples/declarative/cppextensions/referenceexamples/attached/example.qml
index 62f336dd66..ad2187921d 100644
--- a/examples/declarative/cppextensions/referenceexamples/attached/example.qml
+++ b/examples/declarative/cppextensions/referenceexamples/attached/example.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/cppextensions/referenceexamples/binding/example.qml b/examples/declarative/cppextensions/referenceexamples/binding/example.qml
index 8f359b08ee..b8731a4c28 100644
--- a/examples/declarative/cppextensions/referenceexamples/binding/example.qml
+++ b/examples/declarative/cppextensions/referenceexamples/binding/example.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/cppextensions/referenceexamples/coercion/example.qml b/examples/declarative/cppextensions/referenceexamples/coercion/example.qml
index eaf36381ce..8ad5af8777 100644
--- a/examples/declarative/cppextensions/referenceexamples/coercion/example.qml
+++ b/examples/declarative/cppextensions/referenceexamples/coercion/example.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/cppextensions/referenceexamples/default/example.qml b/examples/declarative/cppextensions/referenceexamples/default/example.qml
index 5c7635e64e..79b9c59457 100644
--- a/examples/declarative/cppextensions/referenceexamples/default/example.qml
+++ b/examples/declarative/cppextensions/referenceexamples/default/example.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/cppextensions/referenceexamples/extended/example.qml b/examples/declarative/cppextensions/referenceexamples/extended/example.qml
index 7a7670844c..afc941bbb7 100644
--- a/examples/declarative/cppextensions/referenceexamples/extended/example.qml
+++ b/examples/declarative/cppextensions/referenceexamples/extended/example.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/cppextensions/referenceexamples/grouped/example.qml b/examples/declarative/cppextensions/referenceexamples/grouped/example.qml
index 8cd8f5d147..ba1f9ab0a9 100644
--- a/examples/declarative/cppextensions/referenceexamples/grouped/example.qml
+++ b/examples/declarative/cppextensions/referenceexamples/grouped/example.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/cppextensions/referenceexamples/methods/example.qml b/examples/declarative/cppextensions/referenceexamples/methods/example.qml
index c4698a2a7d..ea3fa5fbdc 100644
--- a/examples/declarative/cppextensions/referenceexamples/methods/example.qml
+++ b/examples/declarative/cppextensions/referenceexamples/methods/example.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/cppextensions/referenceexamples/properties/example.qml b/examples/declarative/cppextensions/referenceexamples/properties/example.qml
index 1468a4fa10..d8c88d5cec 100644
--- a/examples/declarative/cppextensions/referenceexamples/properties/example.qml
+++ b/examples/declarative/cppextensions/referenceexamples/properties/example.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/cppextensions/referenceexamples/signal/example.qml b/examples/declarative/cppextensions/referenceexamples/signal/example.qml
index f4c6439304..1e6f2db259 100644
--- a/examples/declarative/cppextensions/referenceexamples/signal/example.qml
+++ b/examples/declarative/cppextensions/referenceexamples/signal/example.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/cppextensions/referenceexamples/valuesource/example.qml b/examples/declarative/cppextensions/referenceexamples/valuesource/example.qml
index 4f9e6eb410..11d29d93bf 100644
--- a/examples/declarative/cppextensions/referenceexamples/valuesource/example.qml
+++ b/examples/declarative/cppextensions/referenceexamples/valuesource/example.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/i18n/i18n.qml b/examples/declarative/i18n/i18n.qml
index 5c2702c824..fcf24c263c 100644
--- a/examples/declarative/i18n/i18n.qml
+++ b/examples/declarative/i18n/i18n.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/imageelements/borderimage/borderimage.qml b/examples/declarative/imageelements/borderimage/borderimage.qml
index 98e573eb40..bbe113c30c 100644
--- a/examples/declarative/imageelements/borderimage/borderimage.qml
+++ b/examples/declarative/imageelements/borderimage/borderimage.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/imageelements/borderimage/content/MyBorderImage.qml b/examples/declarative/imageelements/borderimage/content/MyBorderImage.qml
index 10e6822734..b8f8a7006d 100644
--- a/examples/declarative/imageelements/borderimage/content/MyBorderImage.qml
+++ b/examples/declarative/imageelements/borderimage/content/MyBorderImage.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/imageelements/borderimage/content/ShadowRectangle.qml b/examples/declarative/imageelements/borderimage/content/ShadowRectangle.qml
index 0806fc8753..73eb040f89 100644
--- a/examples/declarative/imageelements/borderimage/content/ShadowRectangle.qml
+++ b/examples/declarative/imageelements/borderimage/content/ShadowRectangle.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/imageelements/borderimage/shadows.qml b/examples/declarative/imageelements/borderimage/shadows.qml
index 365d29304b..4cb7c65b92 100644
--- a/examples/declarative/imageelements/borderimage/shadows.qml
+++ b/examples/declarative/imageelements/borderimage/shadows.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/imageelements/image/ImageCell.qml b/examples/declarative/imageelements/image/ImageCell.qml
index 71a17fea3e..f8973c809a 100644
--- a/examples/declarative/imageelements/image/ImageCell.qml
+++ b/examples/declarative/imageelements/image/ImageCell.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/imageelements/image/image.qml b/examples/declarative/imageelements/image/image.qml
index bc5ae376dc..719d54404a 100644
--- a/examples/declarative/imageelements/image/image.qml
+++ b/examples/declarative/imageelements/image/image.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/keyinteraction/focus/Core/ContextMenu.qml b/examples/declarative/keyinteraction/focus/Core/ContextMenu.qml
index ba49d143b3..be32386e37 100644
--- a/examples/declarative/keyinteraction/focus/Core/ContextMenu.qml
+++ b/examples/declarative/keyinteraction/focus/Core/ContextMenu.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/keyinteraction/focus/Core/GridMenu.qml b/examples/declarative/keyinteraction/focus/Core/GridMenu.qml
index 88840cba86..8cdec3e783 100644
--- a/examples/declarative/keyinteraction/focus/Core/GridMenu.qml
+++ b/examples/declarative/keyinteraction/focus/Core/GridMenu.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/keyinteraction/focus/Core/ListMenu.qml b/examples/declarative/keyinteraction/focus/Core/ListMenu.qml
index 6100b32b70..ca2e206735 100644
--- a/examples/declarative/keyinteraction/focus/Core/ListMenu.qml
+++ b/examples/declarative/keyinteraction/focus/Core/ListMenu.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/keyinteraction/focus/Core/ListViewDelegate.qml b/examples/declarative/keyinteraction/focus/Core/ListViewDelegate.qml
index 602b52b970..95164f823a 100644
--- a/examples/declarative/keyinteraction/focus/Core/ListViewDelegate.qml
+++ b/examples/declarative/keyinteraction/focus/Core/ListViewDelegate.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/keyinteraction/focus/focus.qml b/examples/declarative/keyinteraction/focus/focus.qml
index 9463192d25..da2c30df82 100644
--- a/examples/declarative/keyinteraction/focus/focus.qml
+++ b/examples/declarative/keyinteraction/focus/focus.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/abstractitemmodel/main.cpp b/examples/declarative/modelviews/abstractitemmodel/main.cpp
index e869aba4d7..dc563ad9f1 100644
--- a/examples/declarative/modelviews/abstractitemmodel/main.cpp
+++ b/examples/declarative/modelviews/abstractitemmodel/main.cpp
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/abstractitemmodel/model.cpp b/examples/declarative/modelviews/abstractitemmodel/model.cpp
index 940a44d441..eab6728ee2 100644
--- a/examples/declarative/modelviews/abstractitemmodel/model.cpp
+++ b/examples/declarative/modelviews/abstractitemmodel/model.cpp
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/abstractitemmodel/model.h b/examples/declarative/modelviews/abstractitemmodel/model.h
index 1119837f22..34a9091bb7 100644
--- a/examples/declarative/modelviews/abstractitemmodel/model.h
+++ b/examples/declarative/modelviews/abstractitemmodel/model.h
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/abstractitemmodel/view.qml b/examples/declarative/modelviews/abstractitemmodel/view.qml
index 591d89ada7..2fb48853c6 100644
--- a/examples/declarative/modelviews/abstractitemmodel/view.qml
+++ b/examples/declarative/modelviews/abstractitemmodel/view.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/gridview/gridview-example.qml b/examples/declarative/modelviews/gridview/gridview-example.qml
index 740f205c05..aea34ffd5c 100644
--- a/examples/declarative/modelviews/gridview/gridview-example.qml
+++ b/examples/declarative/modelviews/gridview/gridview-example.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/listview/content/PetsModel.qml b/examples/declarative/modelviews/listview/content/PetsModel.qml
index b77557dab0..beeed1a2f5 100644
--- a/examples/declarative/modelviews/listview/content/PetsModel.qml
+++ b/examples/declarative/modelviews/listview/content/PetsModel.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/listview/content/PressAndHoldButton.qml b/examples/declarative/modelviews/listview/content/PressAndHoldButton.qml
index 0d5a255271..ad6230e9fa 100644
--- a/examples/declarative/modelviews/listview/content/PressAndHoldButton.qml
+++ b/examples/declarative/modelviews/listview/content/PressAndHoldButton.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/listview/content/RecipesModel.qml b/examples/declarative/modelviews/listview/content/RecipesModel.qml
index e6d829fa6e..812cf77bfa 100644
--- a/examples/declarative/modelviews/listview/content/RecipesModel.qml
+++ b/examples/declarative/modelviews/listview/content/RecipesModel.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/listview/content/TextButton.qml b/examples/declarative/modelviews/listview/content/TextButton.qml
index ded7a11414..0270fdcea5 100644
--- a/examples/declarative/modelviews/listview/content/TextButton.qml
+++ b/examples/declarative/modelviews/listview/content/TextButton.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/listview/content/pics/arrow-down.png b/examples/declarative/modelviews/listview/content/pics/arrow-down.png
new file mode 100644
index 0000000000..29d1d4439a
--- /dev/null
+++ b/examples/declarative/modelviews/listview/content/pics/arrow-down.png
Binary files differ
diff --git a/examples/declarative/modelviews/listview/content/pics/arrow-up.png b/examples/declarative/modelviews/listview/content/pics/arrow-up.png
new file mode 100644
index 0000000000..e437312217
--- /dev/null
+++ b/examples/declarative/modelviews/listview/content/pics/arrow-up.png
Binary files differ
diff --git a/examples/declarative/modelviews/listview/content/pics/list-delete.png b/examples/declarative/modelviews/listview/content/pics/list-delete.png
new file mode 100644
index 0000000000..df2a147d24
--- /dev/null
+++ b/examples/declarative/modelviews/listview/content/pics/list-delete.png
Binary files differ
diff --git a/examples/declarative/modelviews/listview/content/pics/minus-sign.png b/examples/declarative/modelviews/listview/content/pics/minus-sign.png
index 2bb1a59831..d6f233d739 100644
--- a/examples/declarative/modelviews/listview/content/pics/minus-sign.png
+++ b/examples/declarative/modelviews/listview/content/pics/minus-sign.png
Binary files differ
diff --git a/examples/declarative/modelviews/listview/content/pics/plus-sign.png b/examples/declarative/modelviews/listview/content/pics/plus-sign.png
index e029787c71..40df1134f8 100644
--- a/examples/declarative/modelviews/listview/content/pics/plus-sign.png
+++ b/examples/declarative/modelviews/listview/content/pics/plus-sign.png
Binary files differ
diff --git a/examples/declarative/modelviews/listview/dynamiclist.qml b/examples/declarative/modelviews/listview/dynamiclist.qml
index 3c1af37a65..27ef6e0b1b 100644
--- a/examples/declarative/modelviews/listview/dynamiclist.qml
+++ b/examples/declarative/modelviews/listview/dynamiclist.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/listview/expandingdelegates.qml b/examples/declarative/modelviews/listview/expandingdelegates.qml
index 24d63866a4..2dec76901b 100644
--- a/examples/declarative/modelviews/listview/expandingdelegates.qml
+++ b/examples/declarative/modelviews/listview/expandingdelegates.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/listview/highlight.qml b/examples/declarative/modelviews/listview/highlight.qml
index 2d68da6f9c..5646e9fea5 100644
--- a/examples/declarative/modelviews/listview/highlight.qml
+++ b/examples/declarative/modelviews/listview/highlight.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/listview/highlightranges.qml b/examples/declarative/modelviews/listview/highlightranges.qml
index 30976f4ddd..711463a257 100644
--- a/examples/declarative/modelviews/listview/highlightranges.qml
+++ b/examples/declarative/modelviews/listview/highlightranges.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/listview/sections.qml b/examples/declarative/modelviews/listview/sections.qml
index 8e0a49fbbc..a9ec538621 100644
--- a/examples/declarative/modelviews/listview/sections.qml
+++ b/examples/declarative/modelviews/listview/sections.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/objectlistmodel/dataobject.cpp b/examples/declarative/modelviews/objectlistmodel/dataobject.cpp
index 2a42ea39e0..ce7465ae1a 100644
--- a/examples/declarative/modelviews/objectlistmodel/dataobject.cpp
+++ b/examples/declarative/modelviews/objectlistmodel/dataobject.cpp
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/objectlistmodel/dataobject.h b/examples/declarative/modelviews/objectlistmodel/dataobject.h
index 17aa355a9c..22e5de296f 100644
--- a/examples/declarative/modelviews/objectlistmodel/dataobject.h
+++ b/examples/declarative/modelviews/objectlistmodel/dataobject.h
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/objectlistmodel/view.qml b/examples/declarative/modelviews/objectlistmodel/view.qml
index c3cccdd901..7e7c68ad06 100644
--- a/examples/declarative/modelviews/objectlistmodel/view.qml
+++ b/examples/declarative/modelviews/objectlistmodel/view.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/package/Delegate.qml b/examples/declarative/modelviews/package/Delegate.qml
index 9c42876ef4..a38727c630 100644
--- a/examples/declarative/modelviews/package/Delegate.qml
+++ b/examples/declarative/modelviews/package/Delegate.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/package/view.qml b/examples/declarative/modelviews/package/view.qml
index 26230efde8..38cc0475fa 100644
--- a/examples/declarative/modelviews/package/view.qml
+++ b/examples/declarative/modelviews/package/view.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/parallax/parallax.qml b/examples/declarative/modelviews/parallax/parallax.qml
index 19eadd03cd..3d7d091acc 100644
--- a/examples/declarative/modelviews/parallax/parallax.qml
+++ b/examples/declarative/modelviews/parallax/parallax.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/parallax/qml/ParallaxView.qml b/examples/declarative/modelviews/parallax/qml/ParallaxView.qml
index ac479f4965..724d7e0b20 100644
--- a/examples/declarative/modelviews/parallax/qml/ParallaxView.qml
+++ b/examples/declarative/modelviews/parallax/qml/ParallaxView.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/parallax/qml/Smiley.qml b/examples/declarative/modelviews/parallax/qml/Smiley.qml
index 3ca672aeb8..959c85ce81 100644
--- a/examples/declarative/modelviews/parallax/qml/Smiley.qml
+++ b/examples/declarative/modelviews/parallax/qml/Smiley.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/pathview/pathview-example.qml b/examples/declarative/modelviews/pathview/pathview-example.qml
index 0a3b34cf67..8777291396 100644
--- a/examples/declarative/modelviews/pathview/pathview-example.qml
+++ b/examples/declarative/modelviews/pathview/pathview-example.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/stringlistmodel/view.qml b/examples/declarative/modelviews/stringlistmodel/view.qml
index 3d789fd509..1751a7a239 100644
--- a/examples/declarative/modelviews/stringlistmodel/view.qml
+++ b/examples/declarative/modelviews/stringlistmodel/view.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/visualitemmodel/visualitemmodel.qml b/examples/declarative/modelviews/visualitemmodel/visualitemmodel.qml
index 1b44e05266..344ce62c5f 100644
--- a/examples/declarative/modelviews/visualitemmodel/visualitemmodel.qml
+++ b/examples/declarative/modelviews/visualitemmodel/visualitemmodel.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/webview/alerts.qml b/examples/declarative/modelviews/webview/alerts.qml
index 9e3c925b69..68f7a5cdde 100644
--- a/examples/declarative/modelviews/webview/alerts.qml
+++ b/examples/declarative/modelviews/webview/alerts.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/webview/autosize.qml b/examples/declarative/modelviews/webview/autosize.qml
index 4a5096ef00..91550c12a3 100644
--- a/examples/declarative/modelviews/webview/autosize.qml
+++ b/examples/declarative/modelviews/webview/autosize.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/webview/content/Mapping/Map.qml b/examples/declarative/modelviews/webview/content/Mapping/Map.qml
index c2489c5985..ab549b5eea 100644
--- a/examples/declarative/modelviews/webview/content/Mapping/Map.qml
+++ b/examples/declarative/modelviews/webview/content/Mapping/Map.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/webview/googlemaps.qml b/examples/declarative/modelviews/webview/googlemaps.qml
index 361b40c00c..bc9a0e30e6 100644
--- a/examples/declarative/modelviews/webview/googlemaps.qml
+++ b/examples/declarative/modelviews/webview/googlemaps.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/webview/inlinehtml.qml b/examples/declarative/modelviews/webview/inlinehtml.qml
index 0448ff33f8..afc8418fef 100644
--- a/examples/declarative/modelviews/webview/inlinehtml.qml
+++ b/examples/declarative/modelviews/webview/inlinehtml.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/modelviews/webview/newwindows.qml b/examples/declarative/modelviews/webview/newwindows.qml
index c09b2a9251..576232155d 100644
--- a/examples/declarative/modelviews/webview/newwindows.qml
+++ b/examples/declarative/modelviews/webview/newwindows.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/positioners/Button.qml b/examples/declarative/positioners/Button.qml
index bb8c9c7916..4709aa6e33 100644
--- a/examples/declarative/positioners/Button.qml
+++ b/examples/declarative/positioners/Button.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/positioners/positioners.qml b/examples/declarative/positioners/positioners.qml
index d16d3df360..26b9ccdf4a 100644
--- a/examples/declarative/positioners/positioners.qml
+++ b/examples/declarative/positioners/positioners.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/screenorientation/Core/Bubble.qml b/examples/declarative/screenorientation/Core/Bubble.qml
index 2474f300be..58bd13c801 100644
--- a/examples/declarative/screenorientation/Core/Bubble.qml
+++ b/examples/declarative/screenorientation/Core/Bubble.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the examples of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
diff --git a/examples/declarative/screenorientation/Core/Button.qml b/examples/declarative/screenorientation/Core/Button.qml
index 60083d8d07..11117c9124 100644
--- a/examples/declarative/screenorientation/Core/Button.qml
+++ b/examples/declarative/screenorientation/Core/Button.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the examples of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
diff --git a/examples/declarative/screenorientation/Core/screenorientation.js b/examples/declarative/screenorientation/Core/screenorientation.js
index f0a5574d73..68aedd453e 100644
--- a/examples/declarative/screenorientation/Core/screenorientation.js
+++ b/examples/declarative/screenorientation/Core/screenorientation.js
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the examples of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
diff --git a/examples/declarative/screenorientation/screenorientation.qml b/examples/declarative/screenorientation/screenorientation.qml
index 6af38bb110..4387266bef 100644
--- a/examples/declarative/screenorientation/screenorientation.qml
+++ b/examples/declarative/screenorientation/screenorientation.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the examples of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
diff --git a/examples/declarative/sqllocalstorage/hello.qml b/examples/declarative/sqllocalstorage/hello.qml
index 19b73784d5..cbfc14a0d8 100644
--- a/examples/declarative/sqllocalstorage/hello.qml
+++ b/examples/declarative/sqllocalstorage/hello.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/text/fonts/availableFonts.qml b/examples/declarative/text/fonts/availableFonts.qml
index 19bf59c3a3..312bc38a6c 100644
--- a/examples/declarative/text/fonts/availableFonts.qml
+++ b/examples/declarative/text/fonts/availableFonts.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/text/fonts/banner.qml b/examples/declarative/text/fonts/banner.qml
index c4b2719eba..41bc9978ae 100644
--- a/examples/declarative/text/fonts/banner.qml
+++ b/examples/declarative/text/fonts/banner.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/text/fonts/fonts.qml b/examples/declarative/text/fonts/fonts.qml
index 8ed39a9bef..743ee793bb 100644
--- a/examples/declarative/text/fonts/fonts.qml
+++ b/examples/declarative/text/fonts/fonts.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/text/fonts/hello.qml b/examples/declarative/text/fonts/hello.qml
index 888110885f..60bd91902f 100644
--- a/examples/declarative/text/fonts/hello.qml
+++ b/examples/declarative/text/fonts/hello.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
@@ -56,10 +56,11 @@ Rectangle {
color: "white"
text: "Hello world!"
font.pixelSize: 60
+ smooth: true
SequentialAnimation on font.letterSpacing {
loops: Animation.Infinite;
- NumberAnimation { from: 100; to: 300; easing.type: Easing.InQuad; duration: 3000 }
+ NumberAnimation { from: 0; to: 150; easing.type: Easing.InQuad; duration: 3000 }
ScriptAction {
script: {
container.y = (screen.height / 4) + (Math.random() * screen.height / 2)
diff --git a/examples/declarative/text/textselection/textselection.qml b/examples/declarative/text/textselection/textselection.qml
index 1ba3e186ab..aa958e68a6 100644
--- a/examples/declarative/text/textselection/textselection.qml
+++ b/examples/declarative/text/textselection/textselection.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the examples of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
diff --git a/examples/declarative/threading/threadedlistmodel/dataloader.js b/examples/declarative/threading/threadedlistmodel/dataloader.js
index d720f09d83..f3d0a2f149 100644
--- a/examples/declarative/threading/threadedlistmodel/dataloader.js
+++ b/examples/declarative/threading/threadedlistmodel/dataloader.js
@@ -1,3 +1,43 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the 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$
+**
+****************************************************************************/
+
// ![0]
WorkerScript.onMessage = function(msg) {
if (msg.action == 'appendCurrentTime') {
diff --git a/examples/declarative/threading/threadedlistmodel/threadedlistmodel.qmlproject b/examples/declarative/threading/threadedlistmodel/threadedlistmodel.qmlproject
index d4909f8685..de3bf1d880 100644
--- a/examples/declarative/threading/threadedlistmodel/threadedlistmodel.qmlproject
+++ b/examples/declarative/threading/threadedlistmodel/threadedlistmodel.qmlproject
@@ -1,3 +1,43 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the 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 QmlProject 1.0
Project {
diff --git a/examples/declarative/threading/threadedlistmodel/timedisplay.qml b/examples/declarative/threading/threadedlistmodel/timedisplay.qml
index d807955226..b1cce05be5 100644
--- a/examples/declarative/threading/threadedlistmodel/timedisplay.qml
+++ b/examples/declarative/threading/threadedlistmodel/timedisplay.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/threading/workerscript/workerscript.qml b/examples/declarative/threading/workerscript/workerscript.qml
index 8d986a306c..e224bf1f9f 100644
--- a/examples/declarative/threading/workerscript/workerscript.qml
+++ b/examples/declarative/threading/workerscript/workerscript.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/touchinteraction/gestures/experimental-gestures.qml b/examples/declarative/touchinteraction/gestures/experimental-gestures.qml
index 02a197328f..500a909419 100644
--- a/examples/declarative/touchinteraction/gestures/experimental-gestures.qml
+++ b/examples/declarative/touchinteraction/gestures/experimental-gestures.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/touchinteraction/mousearea/mousearea-example.qml b/examples/declarative/touchinteraction/mousearea/mousearea-example.qml
index 85ea2dcd21..492ffc664b 100644
--- a/examples/declarative/touchinteraction/mousearea/mousearea-example.qml
+++ b/examples/declarative/touchinteraction/mousearea/mousearea-example.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/toys/clocks/clocks.qml b/examples/declarative/toys/clocks/clocks.qml
index 82a1dbfcbb..9002fac4e9 100644
--- a/examples/declarative/toys/clocks/clocks.qml
+++ b/examples/declarative/toys/clocks/clocks.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/toys/clocks/content/Clock.qml b/examples/declarative/toys/clocks/content/Clock.qml
index 765e8b856e..9c732f9e1c 100644
--- a/examples/declarative/toys/clocks/content/Clock.qml
+++ b/examples/declarative/toys/clocks/content/Clock.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/toys/clocks/content/QuitButton.qml b/examples/declarative/toys/clocks/content/QuitButton.qml
index 039694d757..9dfe9bd594 100644
--- a/examples/declarative/toys/clocks/content/QuitButton.qml
+++ b/examples/declarative/toys/clocks/content/QuitButton.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/toys/corkboards/Day.qml b/examples/declarative/toys/corkboards/Day.qml
index 9d1f3ae329..f406f7bcf9 100644
--- a/examples/declarative/toys/corkboards/Day.qml
+++ b/examples/declarative/toys/corkboards/Day.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/toys/corkboards/corkboards.qml b/examples/declarative/toys/corkboards/corkboards.qml
index a4679c9d60..9b764c988e 100644
--- a/examples/declarative/toys/corkboards/corkboards.qml
+++ b/examples/declarative/toys/corkboards/corkboards.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/toys/dynamicscene/dynamicscene.qml b/examples/declarative/toys/dynamicscene/dynamicscene.qml
index d1055cd910..ad1869898f 100644
--- a/examples/declarative/toys/dynamicscene/dynamicscene.qml
+++ b/examples/declarative/toys/dynamicscene/dynamicscene.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/toys/dynamicscene/qml/Button.qml b/examples/declarative/toys/dynamicscene/qml/Button.qml
index 7e51293e92..7bb0ddf125 100644
--- a/examples/declarative/toys/dynamicscene/qml/Button.qml
+++ b/examples/declarative/toys/dynamicscene/qml/Button.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/toys/dynamicscene/qml/GenericSceneItem.qml b/examples/declarative/toys/dynamicscene/qml/GenericSceneItem.qml
index 7e090d8b3d..fa976c178a 100644
--- a/examples/declarative/toys/dynamicscene/qml/GenericSceneItem.qml
+++ b/examples/declarative/toys/dynamicscene/qml/GenericSceneItem.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/toys/dynamicscene/qml/PaletteItem.qml b/examples/declarative/toys/dynamicscene/qml/PaletteItem.qml
index 855a34b7a7..1c31f7189b 100644
--- a/examples/declarative/toys/dynamicscene/qml/PaletteItem.qml
+++ b/examples/declarative/toys/dynamicscene/qml/PaletteItem.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/toys/dynamicscene/qml/PerspectiveItem.qml b/examples/declarative/toys/dynamicscene/qml/PerspectiveItem.qml
index aa5b06d8f6..9b6f243240 100644
--- a/examples/declarative/toys/dynamicscene/qml/PerspectiveItem.qml
+++ b/examples/declarative/toys/dynamicscene/qml/PerspectiveItem.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/toys/dynamicscene/qml/Sun.qml b/examples/declarative/toys/dynamicscene/qml/Sun.qml
index 4b2bcdb890..eb24285591 100644
--- a/examples/declarative/toys/dynamicscene/qml/Sun.qml
+++ b/examples/declarative/toys/dynamicscene/qml/Sun.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/toys/tic-tac-toe/content/Button.qml b/examples/declarative/toys/tic-tac-toe/content/Button.qml
index d0f387ff0e..2d30a03959 100644
--- a/examples/declarative/toys/tic-tac-toe/content/Button.qml
+++ b/examples/declarative/toys/tic-tac-toe/content/Button.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/toys/tic-tac-toe/content/TicTac.qml b/examples/declarative/toys/tic-tac-toe/content/TicTac.qml
index 36c9dae00b..0ca5350341 100644
--- a/examples/declarative/toys/tic-tac-toe/content/TicTac.qml
+++ b/examples/declarative/toys/tic-tac-toe/content/TicTac.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/toys/tic-tac-toe/tic-tac-toe.qml b/examples/declarative/toys/tic-tac-toe/tic-tac-toe.qml
index 34c31309b3..12b0fda101 100644
--- a/examples/declarative/toys/tic-tac-toe/tic-tac-toe.qml
+++ b/examples/declarative/toys/tic-tac-toe/tic-tac-toe.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/toys/tvtennis/tvtennis.qml b/examples/declarative/toys/tvtennis/tvtennis.qml
index 4080c873e5..53c95c056b 100644
--- a/examples/declarative/toys/tvtennis/tvtennis.qml
+++ b/examples/declarative/toys/tvtennis/tvtennis.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/tutorials/extending/chapter1-basics/app.qml b/examples/declarative/tutorials/extending/chapter1-basics/app.qml
index ada088d6d9..826bea91a8 100644
--- a/examples/declarative/tutorials/extending/chapter1-basics/app.qml
+++ b/examples/declarative/tutorials/extending/chapter1-basics/app.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/tutorials/extending/chapter2-methods/app.qml b/examples/declarative/tutorials/extending/chapter2-methods/app.qml
index 0b55f7c02a..50051b6f5c 100644
--- a/examples/declarative/tutorials/extending/chapter2-methods/app.qml
+++ b/examples/declarative/tutorials/extending/chapter2-methods/app.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/tutorials/extending/chapter3-bindings/app.qml b/examples/declarative/tutorials/extending/chapter3-bindings/app.qml
index 2ff6ae1965..e183b27912 100644
--- a/examples/declarative/tutorials/extending/chapter3-bindings/app.qml
+++ b/examples/declarative/tutorials/extending/chapter3-bindings/app.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/app.qml b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/app.qml
index fcd38068c5..6e5d3b4536 100644
--- a/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/app.qml
+++ b/examples/declarative/tutorials/extending/chapter4-customPropertyTypes/app.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/tutorials/extending/chapter5-listproperties/app.qml b/examples/declarative/tutorials/extending/chapter5-listproperties/app.qml
index f759bc90e5..483332c347 100644
--- a/examples/declarative/tutorials/extending/chapter5-listproperties/app.qml
+++ b/examples/declarative/tutorials/extending/chapter5-listproperties/app.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/tutorials/extending/chapter6-plugins/app.qml b/examples/declarative/tutorials/extending/chapter6-plugins/app.qml
index 38ceefa356..097da7e7fe 100644
--- a/examples/declarative/tutorials/extending/chapter6-plugins/app.qml
+++ b/examples/declarative/tutorials/extending/chapter6-plugins/app.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/tutorials/helloworld/Cell.qml b/examples/declarative/tutorials/helloworld/Cell.qml
index e070df0771..e64aa7eb2a 100644
--- a/examples/declarative/tutorials/helloworld/Cell.qml
+++ b/examples/declarative/tutorials/helloworld/Cell.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/tutorials/helloworld/tutorial1.qml b/examples/declarative/tutorials/helloworld/tutorial1.qml
index 21f340adcf..e6c412292f 100644
--- a/examples/declarative/tutorials/helloworld/tutorial1.qml
+++ b/examples/declarative/tutorials/helloworld/tutorial1.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/tutorials/helloworld/tutorial2.qml b/examples/declarative/tutorials/helloworld/tutorial2.qml
index 3296f3c42b..1ffde57a74 100644
--- a/examples/declarative/tutorials/helloworld/tutorial2.qml
+++ b/examples/declarative/tutorials/helloworld/tutorial2.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/tutorials/helloworld/tutorial3.qml b/examples/declarative/tutorials/helloworld/tutorial3.qml
index d68097530f..af2d5d2b78 100644
--- a/examples/declarative/tutorials/helloworld/tutorial3.qml
+++ b/examples/declarative/tutorials/helloworld/tutorial3.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/tutorials/samegame/samegame1/Block.qml b/examples/declarative/tutorials/samegame/samegame1/Block.qml
index 56d8ecf65b..db1245dd07 100644
--- a/examples/declarative/tutorials/samegame/samegame1/Block.qml
+++ b/examples/declarative/tutorials/samegame/samegame1/Block.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/tutorials/samegame/samegame1/Button.qml b/examples/declarative/tutorials/samegame/samegame1/Button.qml
index 8f9b5bb4bf..72b18bc400 100644
--- a/examples/declarative/tutorials/samegame/samegame1/Button.qml
+++ b/examples/declarative/tutorials/samegame/samegame1/Button.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/tutorials/samegame/samegame1/samegame.qml b/examples/declarative/tutorials/samegame/samegame1/samegame.qml
index 68f87122c1..01396faef6 100644
--- a/examples/declarative/tutorials/samegame/samegame1/samegame.qml
+++ b/examples/declarative/tutorials/samegame/samegame1/samegame.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/tutorials/samegame/samegame2/Block.qml b/examples/declarative/tutorials/samegame/samegame2/Block.qml
index a7a6eec832..c271cf7f15 100644
--- a/examples/declarative/tutorials/samegame/samegame2/Block.qml
+++ b/examples/declarative/tutorials/samegame/samegame2/Block.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/tutorials/samegame/samegame2/Button.qml b/examples/declarative/tutorials/samegame/samegame2/Button.qml
index f8883c024a..3bd3099f91 100644
--- a/examples/declarative/tutorials/samegame/samegame2/Button.qml
+++ b/examples/declarative/tutorials/samegame/samegame2/Button.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/tutorials/samegame/samegame2/samegame.qml b/examples/declarative/tutorials/samegame/samegame2/samegame.qml
index 492c9143d6..ae1916e2d8 100644
--- a/examples/declarative/tutorials/samegame/samegame2/samegame.qml
+++ b/examples/declarative/tutorials/samegame/samegame2/samegame.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/tutorials/samegame/samegame3/Block.qml b/examples/declarative/tutorials/samegame/samegame3/Block.qml
index ec41c6461d..673007eaa8 100644
--- a/examples/declarative/tutorials/samegame/samegame3/Block.qml
+++ b/examples/declarative/tutorials/samegame/samegame3/Block.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/tutorials/samegame/samegame3/Button.qml b/examples/declarative/tutorials/samegame/samegame3/Button.qml
index f8883c024a..3bd3099f91 100644
--- a/examples/declarative/tutorials/samegame/samegame3/Button.qml
+++ b/examples/declarative/tutorials/samegame/samegame3/Button.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/tutorials/samegame/samegame3/Dialog.qml b/examples/declarative/tutorials/samegame/samegame3/Dialog.qml
index d838205fd6..ed17e5fe33 100644
--- a/examples/declarative/tutorials/samegame/samegame3/Dialog.qml
+++ b/examples/declarative/tutorials/samegame/samegame3/Dialog.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/tutorials/samegame/samegame3/samegame.qml b/examples/declarative/tutorials/samegame/samegame3/samegame.qml
index 21d4291d8e..2c49adc8ba 100644
--- a/examples/declarative/tutorials/samegame/samegame3/samegame.qml
+++ b/examples/declarative/tutorials/samegame/samegame3/samegame.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/tutorials/samegame/samegame4/content/BoomBlock.qml b/examples/declarative/tutorials/samegame/samegame4/content/BoomBlock.qml
index 92c607fabf..8e3ca96d33 100644
--- a/examples/declarative/tutorials/samegame/samegame4/content/BoomBlock.qml
+++ b/examples/declarative/tutorials/samegame/samegame4/content/BoomBlock.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/tutorials/samegame/samegame4/content/Button.qml b/examples/declarative/tutorials/samegame/samegame4/content/Button.qml
index f8883c024a..3bd3099f91 100644
--- a/examples/declarative/tutorials/samegame/samegame4/content/Button.qml
+++ b/examples/declarative/tutorials/samegame/samegame4/content/Button.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/tutorials/samegame/samegame4/content/Dialog.qml b/examples/declarative/tutorials/samegame/samegame4/content/Dialog.qml
index c216c088e6..5c81929995 100644
--- a/examples/declarative/tutorials/samegame/samegame4/content/Dialog.qml
+++ b/examples/declarative/tutorials/samegame/samegame4/content/Dialog.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/tutorials/samegame/samegame4/samegame.qml b/examples/declarative/tutorials/samegame/samegame4/samegame.qml
index c66f1fe2c7..4fec71bc9e 100644
--- a/examples/declarative/tutorials/samegame/samegame4/samegame.qml
+++ b/examples/declarative/tutorials/samegame/samegame4/samegame.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/ui-components/dialcontrol/content/Dial.qml b/examples/declarative/ui-components/dialcontrol/content/Dial.qml
index 3ffa09ae40..ed1b04d291 100644
--- a/examples/declarative/ui-components/dialcontrol/content/Dial.qml
+++ b/examples/declarative/ui-components/dialcontrol/content/Dial.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/ui-components/dialcontrol/content/QuitButton.qml b/examples/declarative/ui-components/dialcontrol/content/QuitButton.qml
index 039694d757..9dfe9bd594 100644
--- a/examples/declarative/ui-components/dialcontrol/content/QuitButton.qml
+++ b/examples/declarative/ui-components/dialcontrol/content/QuitButton.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/ui-components/dialcontrol/dialcontrol.qml b/examples/declarative/ui-components/dialcontrol/dialcontrol.qml
index a7da5c6c4d..ed8c7d61fa 100644
--- a/examples/declarative/ui-components/dialcontrol/dialcontrol.qml
+++ b/examples/declarative/ui-components/dialcontrol/dialcontrol.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
@@ -83,6 +83,7 @@ Rectangle {
MouseArea {
anchors.fill: parent
+ anchors.margins: -16 // Increase mouse area a lot outside the slider
drag.target: parent; drag.axis: Drag.XAxis
drag.minimumX: 2; drag.maximumX: container.width - 32
}
diff --git a/examples/declarative/ui-components/flipable/content/Card.qml b/examples/declarative/ui-components/flipable/content/Card.qml
index fc60ce45cb..d22fa7d09b 100644
--- a/examples/declarative/ui-components/flipable/content/Card.qml
+++ b/examples/declarative/ui-components/flipable/content/Card.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/ui-components/flipable/flipable.qml b/examples/declarative/ui-components/flipable/flipable.qml
index 479e35b413..0f775e5e06 100644
--- a/examples/declarative/ui-components/flipable/flipable.qml
+++ b/examples/declarative/ui-components/flipable/flipable.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/ui-components/progressbar/content/ProgressBar.qml b/examples/declarative/ui-components/progressbar/content/ProgressBar.qml
index 6aa67655f5..f830f95f0e 100644
--- a/examples/declarative/ui-components/progressbar/content/ProgressBar.qml
+++ b/examples/declarative/ui-components/progressbar/content/ProgressBar.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/ui-components/progressbar/main.qml b/examples/declarative/ui-components/progressbar/main.qml
index 22f8dbdd4b..c92e5867d3 100644
--- a/examples/declarative/ui-components/progressbar/main.qml
+++ b/examples/declarative/ui-components/progressbar/main.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/ui-components/scrollbar/ScrollBar.qml b/examples/declarative/ui-components/scrollbar/ScrollBar.qml
index 9927ecb338..ee8e9fa948 100644
--- a/examples/declarative/ui-components/scrollbar/ScrollBar.qml
+++ b/examples/declarative/ui-components/scrollbar/ScrollBar.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/ui-components/scrollbar/main.qml b/examples/declarative/ui-components/scrollbar/main.qml
index 8f5033b448..930c3b8175 100644
--- a/examples/declarative/ui-components/scrollbar/main.qml
+++ b/examples/declarative/ui-components/scrollbar/main.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/ui-components/searchbox/SearchBox.qml b/examples/declarative/ui-components/searchbox/SearchBox.qml
index 8ef21b39f6..60fa7996a1 100644
--- a/examples/declarative/ui-components/searchbox/SearchBox.qml
+++ b/examples/declarative/ui-components/searchbox/SearchBox.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/ui-components/searchbox/main.qml b/examples/declarative/ui-components/searchbox/main.qml
index bf3bed8d8b..513c2989bc 100644
--- a/examples/declarative/ui-components/searchbox/main.qml
+++ b/examples/declarative/ui-components/searchbox/main.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/ui-components/slideswitch/content/Switch.qml b/examples/declarative/ui-components/slideswitch/content/Switch.qml
index 2a89177a53..9632fd6b12 100644
--- a/examples/declarative/ui-components/slideswitch/content/Switch.qml
+++ b/examples/declarative/ui-components/slideswitch/content/Switch.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/ui-components/slideswitch/slideswitch.qml b/examples/declarative/ui-components/slideswitch/slideswitch.qml
index e94ebfe013..a0a0eb2d8d 100644
--- a/examples/declarative/ui-components/slideswitch/slideswitch.qml
+++ b/examples/declarative/ui-components/slideswitch/slideswitch.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/ui-components/spinner/content/Spinner.qml b/examples/declarative/ui-components/spinner/content/Spinner.qml
index 1c412399df..910efb9251 100644
--- a/examples/declarative/ui-components/spinner/content/Spinner.qml
+++ b/examples/declarative/ui-components/spinner/content/Spinner.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/ui-components/spinner/main.qml b/examples/declarative/ui-components/spinner/main.qml
index 37dd912b3b..a196e72dd7 100644
--- a/examples/declarative/ui-components/spinner/main.qml
+++ b/examples/declarative/ui-components/spinner/main.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/ui-components/tabwidget/TabWidget.qml b/examples/declarative/ui-components/tabwidget/TabWidget.qml
index ce57213f4e..30eba68f95 100644
--- a/examples/declarative/ui-components/tabwidget/TabWidget.qml
+++ b/examples/declarative/ui-components/tabwidget/TabWidget.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/ui-components/tabwidget/main.qml b/examples/declarative/ui-components/tabwidget/main.qml
index 4a27806ed1..b9ca2a142d 100644
--- a/examples/declarative/ui-components/tabwidget/main.qml
+++ b/examples/declarative/ui-components/tabwidget/main.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/declarative/xml/xmlhttprequest/xmlhttprequest-example.qml b/examples/declarative/xml/xmlhttprequest/xmlhttprequest-example.qml
index b302729693..f77e1de547 100644
--- a/examples/declarative/xml/xmlhttprequest/xmlhttprequest-example.qml
+++ b/examples/declarative/xml/xmlhttprequest/xmlhttprequest-example.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** 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:
diff --git a/examples/draganddrop/puzzle/puzzle.pro b/examples/draganddrop/puzzle/puzzle.pro
index 31786c7672..ec88f7a0a3 100644
--- a/examples/draganddrop/puzzle/puzzle.pro
+++ b/examples/draganddrop/puzzle/puzzle.pro
@@ -7,6 +7,8 @@ SOURCES = main.cpp \
pieceslist.cpp \
puzzlewidget.cpp
+QMAKE_PROJECT_NAME = dndpuzzle
+
# install
target.path = $$[QT_INSTALL_EXAMPLES]/draganddrop/puzzle
sources.files = $$SOURCES $$HEADERS $$RESOURCES *.pro *.jpg
diff --git a/examples/graphicsview/flowlayout/flowlayout.pro b/examples/graphicsview/flowlayout/flowlayout.pro
index c029d6c8c6..ce3536774b 100644
--- a/examples/graphicsview/flowlayout/flowlayout.pro
+++ b/examples/graphicsview/flowlayout/flowlayout.pro
@@ -1,12 +1,10 @@
-######################################################################
-# Automatically generated by qmake (2.01a) ma 30. mar 12:46:15 2009
-######################################################################
-
TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .
+QMAKE_PROJECT_NAME = flowlayout_graphicsview
+
# Input
HEADERS += flowlayout.h window.h
SOURCES += flowlayout.cpp main.cpp window.cpp
diff --git a/examples/multimedia/audiooutput/audiooutput.cpp b/examples/multimedia/audiooutput/audiooutput.cpp
index 4e74a252fd..93020bc59e 100644
--- a/examples/multimedia/audiooutput/audiooutput.cpp
+++ b/examples/multimedia/audiooutput/audiooutput.cpp
@@ -132,9 +132,9 @@ void Generator::generateData(const QAudioFormat &format, qint64 durationUs, int
qint64 Generator::readData(char *data, qint64 len)
{
qint64 total = 0;
- while (len - total) {
+ while (len - total > 0) {
const qint64 chunk = qMin((m_buffer.size() - m_pos), len - total);
- memcpy(data, m_buffer.constData() + m_pos, chunk);
+ memcpy(data + total, m_buffer.constData() + m_pos, chunk);
m_pos = (m_pos + chunk) % m_buffer.size();
total += chunk;
}
diff --git a/examples/network/bearermonitor/sessionwidget.cpp b/examples/network/bearermonitor/sessionwidget.cpp
index ecc2a9367f..5ec9d53b1b 100644
--- a/examples/network/bearermonitor/sessionwidget.cpp
+++ b/examples/network/bearermonitor/sessionwidget.cpp
@@ -107,7 +107,7 @@ void SessionWidget::updateSession()
if (session->state() == QNetworkSession::Connected)
statsTimer = startTimer(1000);
- else
+ else if (statsTimer != -1)
killTimer(statsTimer);
if (session->configuration().type() == QNetworkConfiguration::InternetAccessPoint)
diff --git a/examples/opengl/pbuffers/glwidget.cpp b/examples/opengl/pbuffers/glwidget.cpp
index 6f4f0603b2..c57a510568 100644
--- a/examples/opengl/pbuffers/glwidget.cpp
+++ b/examples/opengl/pbuffers/glwidget.cpp
@@ -62,7 +62,9 @@ GLWidget::GLWidget(QWidget *parent)
, cube(0)
{
// create the pbuffer
- pbuffer = new QGLPixelBuffer(QSize(512, 512), format(), this);
+ QGLFormat pbufferFormat = format();
+ pbufferFormat.setSampleBuffers(false);
+ pbuffer = new QGLPixelBuffer(QSize(512, 512), pbufferFormat, this);
setWindowTitle(tr("OpenGL pbuffers"));
initializeGeometry();
}
diff --git a/examples/script/calculator/calculator.pro b/examples/script/calculator/calculator.pro
index 6385d7ef31..f328fc36cb 100644
--- a/examples/script/calculator/calculator.pro
+++ b/examples/script/calculator/calculator.pro
@@ -2,6 +2,7 @@ QT += script
CONFIG += uitools
RESOURCES += calculator.qrc
SOURCES += main.cpp
+QMAKE_PROJECT_NAME = scripted_calculator
contains(QT_CONFIG, scripttools): QT += scripttools
diff --git a/examples/tools/echoplugin/echowindow/echowindow.pro b/examples/tools/echoplugin/echowindow/echowindow.pro
index bdf8c41e46..c2abc6a605 100644
--- a/examples/tools/echoplugin/echowindow/echowindow.pro
+++ b/examples/tools/echoplugin/echowindow/echowindow.pro
@@ -4,6 +4,7 @@ SOURCES = echowindow.cpp \
main.cpp
TARGET = echoplugin
+QMAKE_PROJECT_NAME = echopluginwindow
win32 {
debug:DESTDIR = ../debug/
release:DESTDIR = ../release/
diff --git a/examples/tutorials/gettingStarted/gsQml/texteditor.qml b/examples/tutorials/gettingStarted/gsQml/texteditor.qml
index 3bd9d5572b..5a75e0baa4 100644
--- a/examples/tutorials/gettingStarted/gsQml/texteditor.qml
+++ b/examples/tutorials/gettingStarted/gsQml/texteditor.qml
@@ -100,6 +100,7 @@ Rectangle {
}
}
+//! [states]
states:[
State {
name: "DRAWER_OPEN"
@@ -116,7 +117,9 @@ Rectangle {
PropertyChanges { target: arrowIcon; rotation: 0 }
}
]
+//! [states]
+//! [transitions]
transitions: [
Transition {
to: "*"
@@ -125,4 +128,5 @@ Rectangle {
NumberAnimation { target: drawer; properties: "y"; duration: 100; easing.type: Easing.OutExpo }
}
]
+//! [transitions]
}
diff --git a/examples/tutorials/modelview/3_changingmodel/mymodel.cpp b/examples/tutorials/modelview/3_changingmodel/mymodel.cpp
index 42915b09f1..7d78aa7c30 100755
--- a/examples/tutorials/modelview/3_changingmodel/mymodel.cpp
+++ b/examples/tutorials/modelview/3_changingmodel/mymodel.cpp
@@ -38,9 +38,8 @@
**
****************************************************************************/
-#include <QTimer>
-#include <QTime>
#include <QBrush>
+#include <QTime>
#include "mymodel.h"
//! [quoting mymodel_a]
diff --git a/examples/tutorials/modelview/5_edit/mainwindow.h b/examples/tutorials/modelview/5_edit/mainwindow.h
index ac5b77b10d..41b15d127f 100755
--- a/examples/tutorials/modelview/5_edit/mainwindow.h
+++ b/examples/tutorials/modelview/5_edit/mainwindow.h
@@ -42,7 +42,11 @@
#define MAINWINDOW_H
#include <QtGui/QMainWindow>
-#include <QtGui/QTableView>
+
+QT_BEGIN_NAMESPACE // QT_BEGIN_NAMESPACE / QT_END_NAMESPACE are not needed in Qt user code
+class QTableView; //forward declaration
+QT_END_NAMESPACE
+
class MainWindow : public QMainWindow
{
diff --git a/examples/tutorials/modelview/6_treeview/mainwindow.h b/examples/tutorials/modelview/6_treeview/mainwindow.h
index 4c4ddb0bf3..16d3140f78 100755
--- a/examples/tutorials/modelview/6_treeview/mainwindow.h
+++ b/examples/tutorials/modelview/6_treeview/mainwindow.h
@@ -42,8 +42,12 @@
#define MAINWINDOW_H
#include <QtGui/QMainWindow>
-#include <QtGui/QTreeView>
-#include <QtGui/QStandardItemModel>
+
+QT_BEGIN_NAMESPACE // QT_BEGIN_NAMESPACE / QT_END_NAMESPACE are not needed in Qt user code
+class QTreeView; //forward declarations
+class QStandardItemModel;
+class QStandardItem;
+QT_END_NAMESPACE
class MainWindow : public QMainWindow
diff --git a/examples/tutorials/modelview/7_selections/mainwindow.h b/examples/tutorials/modelview/7_selections/mainwindow.h
index a8f8488175..0d2dd0e569 100755
--- a/examples/tutorials/modelview/7_selections/mainwindow.h
+++ b/examples/tutorials/modelview/7_selections/mainwindow.h
@@ -42,8 +42,12 @@
#define MAINWINDOW_H
#include <QtGui/QMainWindow>
-#include <QtGui/QTreeView>
-#include <QtGui/QStandardItemModel>
+
+QT_BEGIN_NAMESPACE // QT_BEGIN_NAMESPACE / QT_END_NAMESPACE are not needed in Qt user code
+class QTreeView; //forward declarations
+class QStandardItemModel;
+class QItemSelection;
+QT_END_NAMESPACE
class MainWindow : public QMainWindow
diff --git a/mkspecs/common/g++.conf b/mkspecs/common/g++.conf
index d3db24a4fd..0d511fc014 100644
--- a/mkspecs/common/g++.conf
+++ b/mkspecs/common/g++.conf
@@ -8,6 +8,7 @@ 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
@@ -22,6 +23,7 @@ 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
diff --git a/mkspecs/common/mac-g++.conf b/mkspecs/common/mac-g++.conf
index 446547dcf6..29b740861d 100644
--- a/mkspecs/common/mac-g++.conf
+++ b/mkspecs/common/mac-g++.conf
@@ -10,6 +10,7 @@ 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
@@ -33,6 +34,7 @@ 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
@@ -52,6 +54,7 @@ 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
diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf
index beef193620..679731f172 100644
--- a/mkspecs/common/symbian/symbian.conf
+++ b/mkspecs/common/symbian/symbian.conf
@@ -125,36 +125,47 @@ QT_IMPORTS_BASE_DIR = /resource/qt/imports
load(symbian/platform_paths)
-# The Symbian^3 PDK does not necessarily contain the required sis files.
-# However, libstdcppv5 first appeared in Symbian^3 (S60 5.2), so check for that too.
-exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.2.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.2.sis)|exists($${EPOCROOT}epoc32/release/armv5/lib/libstdcppv5.dso) {
- S60_VERSION = 5.2
-} else {
- exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.1.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.1.sis) {
- S60_VERSION = 5.1
+# If environment.prf is provided by platform, load that.
+# It is used for platform specific variable settings, such as SYMBIAN_VERSION.
+exists($${EPOCROOT}epoc32/tools/qt/mkspecs/features/environment.prf) {
+ load($${EPOCROOT}epoc32/tools/qt/mkspecs/features/environment.prf)
+}
+
+# Try to detect SDK version if it wasn't set by environment.prf
+isEmpty(S60_VERSION) {
+ # The Symbian^3 PDK does not necessarily contain the required sis files.
+ # However, libstdcppv5 first appeared in Symbian^3 (S60 5.2), so check for that too.
+ exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.2.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.2.sis)|exists($${EPOCROOT}epoc32/release/armv5/lib/libstdcppv5.dso) {
+ S60_VERSION = 5.2
} else {
- exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.0.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.0.sis) {
- S60_VERSION = 5.0
+ exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.1.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.1.sis) {
+ S60_VERSION = 5.1
} else {
- exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v3.2.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v3.2.sis) {
- S60_VERSION = 3.2
+ exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.0.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.0.sis) {
+ S60_VERSION = 5.0
} else {
- S60_VERSION = 3.1
+ exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v3.2.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v3.2.sis) {
+ S60_VERSION = 3.2
+ } else {
+ S60_VERSION = 3.1
+ }
}
}
}
}
-contains(S60_VERSION, "3\\.1") {
- SYMBIAN_VERSION = 9.2
-} else:contains(S60_VERSION, "3\\.2") {
- SYMBIAN_VERSION = 9.3
-} else:contains(S60_VERSION, "5\\.0") {
- SYMBIAN_VERSION = 9.4
-} else:contains(S60_VERSION, "5\\.1") {
- SYMBIAN_VERSION = Symbian2
-} else:contains(S60_VERSION, "5\\.2") {
- SYMBIAN_VERSION = Symbian3
+isEmpty(SYMBIAN_VERSION) {
+ contains(S60_VERSION, "3\\.1") {
+ SYMBIAN_VERSION = 9.2
+ } else:contains(S60_VERSION, "3\\.2") {
+ SYMBIAN_VERSION = 9.3
+ } else:contains(S60_VERSION, "5\\.0") {
+ SYMBIAN_VERSION = 9.4
+ } else:contains(S60_VERSION, "5\\.1") {
+ SYMBIAN_VERSION = Symbian2
+ } else:contains(S60_VERSION, "5\\.2") {
+ SYMBIAN_VERSION = Symbian3
+ }
}
# pkg_depends_webkit, pkg_depends_core, and pkg_platform_dependencies can be removed by developer
diff --git a/mkspecs/features/default_post.prf b/mkspecs/features/default_post.prf
index d844385820..59a5e86e5e 100644
--- a/mkspecs/features/default_post.prf
+++ b/mkspecs/features/default_post.prf
@@ -1,3 +1,15 @@
+QT_BREAKPAD_ROOT_PATH = $$(QT_BREAKPAD_ROOT_PATH)
+!isEmpty(QT_BREAKPAD_ROOT_PATH): \ # quick test first whether requested ...
+ !staticlib:!static:CONFIG(release, debug|release):contains(TEMPLATE, .*(app|lib)): \ # is it applicable?
+ !contains(TARGET, .*phony_target.*): \ # monster hack, you don't really see this here, right? ;)
+ system($$QT_BREAKPAD_ROOT_PATH/qtbreakpadsymbols --breakpad-exists) { # do we really have it?
+ CONFIG += breakpad
+ CONFIG -= no_debug_info separate_debug_info
+ QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
+ QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO
+ QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO
+}
+
CONFIG(debug, debug|release):load(debug)
else:load(release)
debug_and_release:load(debug_and_release)
@@ -6,6 +18,82 @@ incredibuild_xge {
CONFIG = incredibuild_xge $$CONFIG
}
+breakpad {
+ !contains(DESTDIR, (/|.:[/\\\\]).*):TARGET_BASEPATH = $${OUT_PWD}/
+ !isEmpty(DESTDIR):TARGET_BASEPATH = $${TARGET_BASEPATH}$${DESTDIR}/
+
+ win32 {
+ TARGET_BASEPATH ~= s,/,\\,
+ contains(TEMPLATE, .*lib) {
+ isEmpty(TARGET_VERSION_EXT):!isEmpty(VERSION) {
+ TARGET_VERSION_EXT = $$section(VERSION, ., 0, 0)
+ isEqual(TARGET_VERSION_EXT, 0):unset(TARGET_VERSION_EXT)
+ }
+ TARGET_EXT = .dll
+ } else {
+ TARGET_EXT = .exe
+ }
+
+ DEBUGFILENAME = $${TARGET_BASEPATH}$${TARGET}$${TARGET_VERSION_EXT}$${TARGET_EXT}
+ PDBFILENAME = $${TARGET_BASEPATH}$${TARGET}$${TARGET_VERSION_EXT}.pdb
+ DEBUGFILENAME ~= s,/,\\,
+ PDBFILENAME ~= s,/,\\,
+ QMAKE_CLEAN += $$PDBFILENAME # for the debug case it is hardcoded in qmake
+ } else {
+ contains(TEMPLATE, .*lib):LIBPREFIX = lib
+
+ macx {
+ equals(TEMPLATE, lib) {
+ lib_bundle {
+ TARGET_FILENAME = $${TARGET_BASEPATH}$${TARGET}.framework/$${TARGET}
+ } else {
+ TARGET_FILENAME = $${TARGET_BASEPATH}$${LIBPREFIX}$${TARGET}
+ !plugin {
+ TEMP_VERSION = $$section(VERSION, ., 0, 0)
+ isEmpty(TEMP_VERSION):TEMP_VERSION = 1
+ TARGET_FILENAME = $${TARGET_FILENAME}.$${TEMP_VERSION}
+ }
+ TARGET_FILENAME = $${TARGET_FILENAME}.$${QMAKE_EXTENSION_SHLIB}
+ }
+ } else {
+ app_bundle {
+ TARGET_FILENAME = $${TARGET_BASEPATH}$${TARGET}.app/Contents/MacOS/$${TARGET}
+ } else {
+ TARGET_FILENAME = $${TARGET_BASEPATH}$${TARGET}
+ }
+ }
+ DEBUGFILENAME = $$TARGET_FILENAME
+ } else {
+ equals(TEMPLATE, lib) {
+ plugin {
+ TARGET_FILENAME = $${TARGET_BASEPATH}$${LIBPREFIX}$${TARGET}.so
+ } else {
+ TEMP_VERSION = $$VERSION
+ isEmpty(TEMP_VERSION):TEMP_VERSION = 1.0.0
+ TARGET_FILENAME = $${TARGET_BASEPATH}$${LIBPREFIX}$${TARGET}.so.$${TEMP_VERSION}
+ }
+ } else {
+ TARGET_BASEPATH = $${TARGET_BASEPATH}$${TARGET}
+ }
+ DEBUGFILENAME = $$TARGET_BASEPATH
+ }
+ }
+
+ PROJECTPATH = $$OUT_PWD
+ win32:PROJECTPATH ~= s,/,\\,
+
+ !isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK = $$QMAKE_POST_LINK$$escape_expand(\\n\\t)
+ QMAKE_POST_LINK += $$quote($${QT_BREAKPAD_ROOT_PATH}$${DIR_SEPARATOR}qtbreakpadsymbols \"$$DEBUGFILENAME\" \"$$PROJECTPATH\")
+ !isEmpty(QMAKE_STRIP):QMAKE_POST_LINK = $$quote($$QMAKE_POST_LINK$$escape_expand(\\n\\t)$$QMAKE_STRIP \"$$DEBUGFILENAME\")
+
+ unset(TARGET_BASEPATH)
+ unset(TARGET_FILENAME)
+ unset(SYMBOLFILENAME)
+ unset(TARGET_EXT)
+ unset(TARGET_VERSION_EXT)
+ unset(TEMP_VERSION)
+}
+
QMAKE_INCDIR += $$QMAKE_INCDIR_POST
QMAKE_LIBDIR += $$QMAKE_LIBDIR_POST
diff --git a/mkspecs/features/moc.prf b/mkspecs/features/moc.prf
index abda78fe47..15e7fd9695 100644
--- a/mkspecs/features/moc.prf
+++ b/mkspecs/features/moc.prf
@@ -45,10 +45,10 @@ defineReplace(mocCmd) {
if(contains(TEMPLATE, "vc.*")|contains(TEMPLATE_PREFIX, "vc")) {
RET += $$mocinclude.commands
}
- RET += $$QMAKE_MOC $(DEFINES) @$$WIN_INCLUDETEMP $$join(QMAKE_COMPILER_DEFINES, " -D", -D) $$1 -o $$2
+ RET += $$QMAKE_MOC $(DEFINES) @$$WIN_INCLUDETEMP $$join(QMAKE_COMPILER_DEFINES, " -D", -D) \"$$1\" -o $$2
return($$RET)
}
- return($$QMAKE_MOC $(DEFINES) $(INCPATH) $$join(QMAKE_COMPILER_DEFINES, " -D", -D) $$1 -o $$2)
+ return($$QMAKE_MOC $(DEFINES) $(INCPATH) $$join(QMAKE_COMPILER_DEFINES, " -D", -D) \"$$1\" -o $$2)
}
#moc headers
diff --git a/mkspecs/features/qt.prf b/mkspecs/features/qt.prf
index 4fd804dda4..e59319fa6c 100644
--- a/mkspecs/features/qt.prf
+++ b/mkspecs/features/qt.prf
@@ -36,7 +36,7 @@ INCLUDEPATH = $$QMAKE_INCDIR_QT $$INCLUDEPATH #prepending prevents us from picki
win32:INCLUDEPATH += $$QMAKE_INCDIR_QT/ActiveQt
# As order does matter for static libs, we reorder the QT variable here
-TMPLIBS = declarative webkit phonon multimedia dbus testlib script scripttools svg qt3support sql xmlpatterns xml egl opengl openvg gui network core
+TMPLIBS = declarative webkit phonon multimedia dbus testlib script scripttools svg qt3support sql xmlpatterns xml egl opengl openvg gui network core meegographicssystemhelper
for(QTLIB, $$list($$TMPLIBS)) {
contains(QT, $$QTLIB): QT_ORDERED += $$QTLIB
}
@@ -175,6 +175,7 @@ for(QTLIB, $$list($$lower($$unique(QT)))) {
}
} else:isEqual(QTLIB, declarative):qlib = QtDeclarative
else:isEqual(QTLIB, multimedia):qlib = QtMultimedia
+ else:isEqual(QTLIB, meegographicssystemhelper):qlib = QtMeeGoGraphicsSystemHelper
else:message("Unknown QT: $$QTLIB"):qlib =
!isEmpty(qlib) {
target_qt:isEqual(TARGET, qlib) {
diff --git a/mkspecs/features/symbian/nested_exceptions.prf b/mkspecs/features/symbian/nested_exceptions.prf
new file mode 100644
index 0000000000..defca94d6f
--- /dev/null
+++ b/mkspecs/features/symbian/nested_exceptions.prf
@@ -0,0 +1,4 @@
+# use nested exceptions runtime support for apps
+contains(TEMPLATE, app) {
+ MMP_RULES *= EPOCNESTEDEXCEPTIONS
+}
diff --git a/mkspecs/features/sis_targets.prf b/mkspecs/features/symbian/sis_targets.prf
index 800a04cb77..800a04cb77 100644
--- a/mkspecs/features/sis_targets.prf
+++ b/mkspecs/features/symbian/sis_targets.prf
diff --git a/mkspecs/features/symbian/stl.prf b/mkspecs/features/symbian/stl.prf
index 2a3bce45ce..65d4b93af2 100644
--- a/mkspecs/features/symbian/stl.prf
+++ b/mkspecs/features/symbian/stl.prf
@@ -36,3 +36,8 @@ equals(use_libstdcppv5, true) {
} else {
LIBS *= -llibstdcpp.dll
}
+
+# use the runtime support for nested exceptions, if a library is available
+exists($${EPOCROOT}epoc32/release/armv5/urel/usrt_nx_*.lib) {
+ CONFIG += nested_exceptions
+}
diff --git a/mkspecs/features/symbian/symbian_building.prf b/mkspecs/features/symbian/symbian_building.prf
index 0b621a3a0f..539609db83 100644
--- a/mkspecs/features/symbian/symbian_building.prf
+++ b/mkspecs/features/symbian/symbian_building.prf
@@ -50,22 +50,22 @@ defineReplace(processSymbianLibrary) {
return($$qt_library)
}
-qt_libraries = $$split(LIBS, " ")
-LIBS =
-for(qt_library, qt_libraries) {
- qt_newLib = $$processSymbianLibrary($$qt_library)
- contains(qt_newLib, ".*\\.dso$")|contains(qt_newLib, ".*\\.lib$"):PRE_TARGETDEPS += $$qt_newLib
- linux-gcce:qt_newLib = "-l:$$qt_newLib"
- LIBS += $$qt_newLib
-}
-
-qt_libraries = $$split(QMAKE_LIBS, " ")
-QMAKE_LIBS =
-for(qt_library, qt_libraries) {
- qt_newLib = $$processSymbianLibrary($$qt_library)
- contains(qt_newLib, ".*\\.dso$")|contains(qt_newLib, ".*\\.lib$"):PRE_TARGETDEPS += $$qt_newLib
- linux-gcce:qt_newLib = "-l:$$qt_newLib"
- QMAKE_LIBS += $$qt_newLib
+# This part turn "-llibc" into "libc.dso", and moves -L entries to QMAKE_LIBDIR.
+libsToProcess = LIBS QMAKE_LIBS
+for(libToProcess, libsToProcess) {
+ qt_libraries = $$split($$libToProcess, " ")
+ eval($$libToProcess =)
+ for(qt_library, qt_libraries) {
+ contains(qt_library, "^-L.*") {
+ qt_library = $$replace(qt_library, "^-L", "")
+ QMAKE_LIBDIR += $$qt_library
+ } else {
+ qt_newLib = $$processSymbianLibrary($$qt_library)
+ contains(qt_newLib, ".*\\.dso$")|contains(qt_newLib, ".*\\.lib$"):PRE_TARGETDEPS += $$qt_newLib
+ linux-gcce:qt_newLib = "-l:$$qt_newLib"
+ eval($$libToProcess += \$\$qt_newLib)
+ }
+ }
}
elf2e32_LIBPATH =
diff --git a/mkspecs/features/unix/gdb_dwarf_index.prf b/mkspecs/features/unix/gdb_dwarf_index.prf
index 264edc22b8..e2167a65de 100644
--- a/mkspecs/features/unix/gdb_dwarf_index.prf
+++ b/mkspecs/features/unix/gdb_dwarf_index.prf
@@ -1,6 +1,7 @@
!CONFIG(separate_debug_info):CONFIG(debug, debug|release):!staticlib:!static:!contains(TEMPLATE, subdirs):!isEmpty(QMAKE_OBJCOPY) {
QMAKE_GDB_INDEX = { test -z \"$(DESTDIR)\" || cd \"$(DESTDIR)\"; } && \
+ test \$\$(gdb --version | sed -e \'s,[^(]*(GDB).\\([0-9]\\)\\.\\([0-9]\\).*,\\1\\2,;q\') -gt 71 && \
gdb --nx --batch --quiet -ex \'set confirm off\' -ex \'save gdb-index .\' -ex quit \'$(TARGET)\' && \
test -f $(TARGET).gdb-index && \
$$QMAKE_OBJCOPY --add-section \'.gdb_index=$(TARGET).gdb-index\' --set-section-flags \'.gdb_index=readonly\' \'$(TARGET)\' \'$(TARGET)\' && \
diff --git a/mkspecs/win32-msvc2003/qmake.conf b/mkspecs/win32-msvc2003/qmake.conf
index 0230b30e1b..63d1ffda90 100644
--- a/mkspecs/win32-msvc2003/qmake.conf
+++ b/mkspecs/win32-msvc2003/qmake.conf
@@ -20,6 +20,7 @@ QMAKE_CFLAGS = -nologo -Zm300
QMAKE_CFLAGS_WARN_ON = -W3
QMAKE_CFLAGS_WARN_OFF = -W0
QMAKE_CFLAGS_RELEASE = -O2 -MD
+QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MDd
QMAKE_CFLAGS_YACC =
@@ -28,6 +29,7 @@ QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON -w34100 -w34189
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_YACC = $$QMAKE_CFLAGS_YACC
QMAKE_CXXFLAGS_STL_ON = -EHsc
@@ -51,6 +53,7 @@ QMAKE_RUN_CXX_IMP_BATCH = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ @<<
QMAKE_LINK = link
QMAKE_LFLAGS = /NOLOGO
QMAKE_LFLAGS_RELEASE = /INCREMENTAL:NO
+QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /INCREMENTAL:NO /DEBUG
QMAKE_LFLAGS_DEBUG = /DEBUG
QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:CONSOLE
QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS
diff --git a/mkspecs/win32-msvc2005/qmake.conf b/mkspecs/win32-msvc2005/qmake.conf
index 0406fd03d6..265d0287b5 100644
--- a/mkspecs/win32-msvc2005/qmake.conf
+++ b/mkspecs/win32-msvc2005/qmake.conf
@@ -20,6 +20,7 @@ QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t-
QMAKE_CFLAGS_WARN_ON = -W3
QMAKE_CFLAGS_WARN_OFF = -W0
QMAKE_CFLAGS_RELEASE = -O2 -MD
+QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MDd
QMAKE_CFLAGS_YACC =
QMAKE_CFLAGS_LTCG = -GL
@@ -29,6 +30,7 @@ QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON -w34100 -w34189
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_YACC = $$QMAKE_CFLAGS_YACC
QMAKE_CXXFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG
@@ -53,6 +55,7 @@ QMAKE_RUN_CXX_IMP_BATCH = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ @<<
QMAKE_LINK = link
QMAKE_LFLAGS = /NOLOGO
QMAKE_LFLAGS_RELEASE = /INCREMENTAL:NO
+QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /INCREMENTAL:NO /DEBUG
QMAKE_LFLAGS_DEBUG = /DEBUG
QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:CONSOLE
QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS \"/MANIFESTDEPENDENCY:type=\'win32\' name=\'Microsoft.Windows.Common-Controls\' version=\'6.0.0.0\' publicKeyToken=\'6595b64144ccf1df\' language=\'*\' processorArchitecture=\'*\'\"
diff --git a/mkspecs/win32-msvc2008/qmake.conf b/mkspecs/win32-msvc2008/qmake.conf
index 9a69aaa497..1432645a9e 100644
--- a/mkspecs/win32-msvc2008/qmake.conf
+++ b/mkspecs/win32-msvc2008/qmake.conf
@@ -20,6 +20,7 @@ QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t-
QMAKE_CFLAGS_WARN_ON = -W3
QMAKE_CFLAGS_WARN_OFF = -W0
QMAKE_CFLAGS_RELEASE = -O2 -MD
+QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MDd
QMAKE_CFLAGS_YACC =
QMAKE_CFLAGS_LTCG = -GL
@@ -30,6 +31,7 @@ QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON -w34100 -w34189
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_YACC = $$QMAKE_CFLAGS_YACC
QMAKE_CXXFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG
@@ -55,6 +57,7 @@ QMAKE_RUN_CXX_IMP_BATCH = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ @<<
QMAKE_LINK = link
QMAKE_LFLAGS = /NOLOGO
QMAKE_LFLAGS_RELEASE = /INCREMENTAL:NO
+QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /INCREMENTAL:NO /DEBUG
QMAKE_LFLAGS_DEBUG = /DEBUG
QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:CONSOLE
QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS \"/MANIFESTDEPENDENCY:type=\'win32\' name=\'Microsoft.Windows.Common-Controls\' version=\'6.0.0.0\' publicKeyToken=\'6595b64144ccf1df\' language=\'*\' processorArchitecture=\'*\'\"
diff --git a/mkspecs/win32-msvc2010/qmake.conf b/mkspecs/win32-msvc2010/qmake.conf
index 8331c142fe..84086e299c 100644
--- a/mkspecs/win32-msvc2010/qmake.conf
+++ b/mkspecs/win32-msvc2010/qmake.conf
@@ -20,6 +20,7 @@ QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t-
QMAKE_CFLAGS_WARN_ON = -W3
QMAKE_CFLAGS_WARN_OFF = -W0
QMAKE_CFLAGS_RELEASE = -O2 -MD
+QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MDd
QMAKE_CFLAGS_YACC =
QMAKE_CFLAGS_LTCG = -GL
@@ -30,6 +31,7 @@ QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON -w34100 -w34189
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_YACC = $$QMAKE_CFLAGS_YACC
QMAKE_CXXFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG
@@ -55,6 +57,7 @@ QMAKE_RUN_CXX_IMP_BATCH = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ @<<
QMAKE_LINK = link
QMAKE_LFLAGS = /NOLOGO
QMAKE_LFLAGS_RELEASE = /INCREMENTAL:NO
+QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /INCREMENTAL:NO /DEBUG
QMAKE_LFLAGS_DEBUG = /DEBUG
QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:CONSOLE
QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS \"/MANIFESTDEPENDENCY:type=\'win32\' name=\'Microsoft.Windows.Common-Controls\' version=\'6.0.0.0\' publicKeyToken=\'6595b64144ccf1df\' language=\'*\' processorArchitecture=\'*\'\"
diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp
index 6214d33f4e..9579ae47ae 100644
--- a/qmake/generators/makefile.cpp
+++ b/qmake/generators/makefile.cpp
@@ -1794,10 +1794,12 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t)
const QString c = Option::fixPathToLocalOS(cmdline.at(argv0), true);
if(exists(c)) {
cmdline[argv0] = escapeFilePath(Option::fixPathToLocalOS(cmdline.at(argv0), false));
- tmp_dep_cmd = cmdline.join(" ");
} else {
cmdline[argv0] = escapeFilePath(cmdline.at(argv0));
}
+ QFileInfo cmdFileInfo(cmdline[argv0]);
+ if (!cmdFileInfo.isAbsolute() || cmdFileInfo.exists())
+ tmp_dep_cmd = cmdline.join(" ");
}
dep_cd_cmd = QLatin1String("cd ")
+ escapeFilePath(Option::fixPathToLocalOS(Option::output_dir, false))
diff --git a/qmake/generators/symbian/symmake_sbsv2.cpp b/qmake/generators/symbian/symmake_sbsv2.cpp
index c66c1b8ca0..32c31eed75 100644
--- a/qmake/generators/symbian/symmake_sbsv2.cpp
+++ b/qmake/generators/symbian/symmake_sbsv2.cpp
@@ -56,12 +56,21 @@ SymbianSbsv2MakefileGenerator::~SymbianSbsv2MakefileGenerator() { }
#define FLM_DEST_DIR "epoc32/tools/makefile_templates/qt"
#define FLM_SOURCE_DIR "/mkspecs/symbian-sbsv2/flm/qt"
-#define UNDETECTED_GCCE_VERSION "0"
#define PLATFORM_GCCE "gcce"
#define PLATFORM_WINSCW "winscw"
-#define PLATFORM_ARMV5 "armv5"
+#define PLATFORM_ARM_PREFIX "arm"
#define BUILD_DEBUG "udeb"
#define BUILD_RELEASE "urel"
+#define SBS_RVCT_PREFIX "rvct"
+
+static QString winscwPlatform;
+static QString armPlatformPrefix;
+static QString gccePlatform;
+static QString sbsRvctPrefix;
+
+#if defined(Q_OS_UNIX)
+ extern char **environ;
+#endif
// Copies Qt FLMs to correct location under epocroot.
// This is not done by configure as it is possible to change epocroot after configure.
@@ -96,64 +105,95 @@ void SymbianSbsv2MakefileGenerator::exportFlm()
}
}
-QString SymbianSbsv2MakefileGenerator::gcceVersion()
+void SymbianSbsv2MakefileGenerator::findInstalledCompilerVersions(const QString &matchExpression,
+ const QString &versionPrefix,
+ QStringList *versionList)
{
- static QString gcceVersionStr;
-
- if (gcceVersionStr.isEmpty()) {
- // First check if QT_GCCE_VERSION has been set, and use that if it is
- QByteArray qtGcceVersion = qgetenv("QT_GCCE_VERSION");
- if (!qtGcceVersion.isEmpty()) {
- // Check that QT_GCCE_VERSION is in proper format
- QString check(qtGcceVersion);
- check.replace(QRegExp("^\\d+\\.\\d+\\.\\d+$"),QString());
- if (check.isEmpty()) {
- gcceVersionStr = PLATFORM_GCCE + QString(qtGcceVersion).replace(".","_");
- return gcceVersionStr;
- } else {
- fprintf(stderr, "Warning: Environment variable QT_GCCE_VERSION ('%s') is in incorrect "
- "format, expected format is: '1.2.3'. Attempting to autodetect GCCE version.",
- qtGcceVersion.constData());
+ // No need to be able to find env variables on other operating systems,
+ // as only linux and windows have support for symbian-sbsv2 toolchain
+#if defined(Q_OS_UNIX) || defined(Q_OS_WIN)
+ char *entry = 0;
+ int count = 0;
+ QRegExp matcher(matchExpression);
+ while ((entry = environ[count++])) {
+ if (matcher.exactMatch(QString::fromLocal8Bit(entry))
+ && fileInfo(matcher.cap(matcher.captureCount())).exists()) {
+ // First capture (index 0) is the whole match, which is skipped.
+ // Next n captures are version numbers, which are interesting.
+ // Final capture is the env var value, which we alrady used, so that is skipped, too.
+ int capture = 1;
+ int finalCapture = matcher.captureCount() - 1;
+ QString version = versionPrefix;
+ while (capture <= finalCapture) {
+ version.append(matcher.cap(capture));
+ if (capture != finalCapture)
+ version.append(QLatin1Char('.'));
+ capture++;
}
+ *versionList << version;
}
- // Sbsv2 has separate env variable defined for each gcce version, so try to determine
- // which user is likely to want to use by checking version 4.0.0 to 9.9.9 and taking
- // the highest found version that actually points to a valid path.
- // This is kind of a kludge, but since qmake doesn't bootstrap QProcess, there
- // is no Qt API available to get all environment variables.
- for (int i = 9; i >= 4; i--) {
- for (int j = 9; j >= 0; j--) {
- for (int k = 9; k >= 0; k--) {
- QByteArray gcceVar = qgetenv(qPrintable(QString("SBS_GCCE%1%2%3BIN").arg(i).arg(j).arg(k)));
- if (!gcceVar.isEmpty() && fileInfo(QString::fromLocal8Bit(gcceVar.constData())).exists()) {
- gcceVersionStr = QString(PLATFORM_GCCE "%1_%2_%3").arg(i).arg(j).arg(k);
- return gcceVersionStr;
- }
- }
- }
+ }
+#endif
+}
+
+void SymbianSbsv2MakefileGenerator::findGcceVersions(QStringList *gcceVersionList,
+ QString *defaultVersion)
+{
+ QString matchStr = QLatin1String("SBS_GCCE(\\d)(\\d)(\\d)BIN=(.*)");
+ findInstalledCompilerVersions(matchStr, gccePlatform, gcceVersionList);
+
+ QString qtGcceVersion = QString::fromLocal8Bit(qgetenv("QT_GCCE_VERSION"));
+
+ if (!qtGcceVersion.isEmpty()) {
+ if (QRegExp("\\d+\\.\\d+\\.\\d+").exactMatch(qtGcceVersion)) {
+ *defaultVersion = gccePlatform + qtGcceVersion;
+ } else {
+ fprintf(stderr, "Warning: Variable QT_GCCE_VERSION ('%s') is in incorrect "
+ "format, expected format is: 'x.y.z'. Attempting to autodetect GCCE version.\n",
+ qPrintable(qtGcceVersion));
}
}
- // Indicate undetected version to avoid rechecking multiple times
- if (gcceVersionStr.isEmpty())
- gcceVersionStr = UNDETECTED_GCCE_VERSION;
+ if (defaultVersion->isEmpty() && gcceVersionList->size()) {
+ gcceVersionList->sort();
+ *defaultVersion = gcceVersionList->last();
+ }
+}
+
+void SymbianSbsv2MakefileGenerator::findRvctVersions(QStringList *rvctVersionList,
+ QString *defaultVersion)
+{
+ QString matchStr = QLatin1String("RVCT(\\d)(\\d)BIN=(.*)");
+ findInstalledCompilerVersions(matchStr, sbsRvctPrefix, rvctVersionList);
+
+ QString qtRvctVersion = QString::fromLocal8Bit(qgetenv("QT_RVCT_VERSION"));
- return gcceVersionStr;
+ if (!qtRvctVersion.isEmpty()) {
+ if (QRegExp("\\d+\\.\\d+").exactMatch(qtRvctVersion)) {
+ *defaultVersion = sbsRvctPrefix + qtRvctVersion;
+ } else {
+ fprintf(stderr, "Warning: Variable QT_RVCT_VERSION ('%s') is in incorrect "
+ "format, expected format is: 'x.y'.\n",
+ qPrintable(qtRvctVersion));
+ }
+ }
}
-QString SymbianSbsv2MakefileGenerator::configClause(QString &platform,
- QString &build,
- QString &winscwClauseTemplate,
- QString &gcceClauseTemplate,
- QString &genericClauseTemplate)
+QString SymbianSbsv2MakefileGenerator::configClause(const QString &platform,
+ const QString &build,
+ const QString &compilerVersion,
+ const QString &clauseTemplate)
{
QString retval;
- if (QString::compare(platform, PLATFORM_WINSCW) == 0)
- retval = winscwClauseTemplate.arg(build);
- else if (QString::compare(platform, PLATFORM_GCCE) == 0)
- retval = gcceClauseTemplate.arg(build);
- else
- retval = genericClauseTemplate.arg(platform).arg(build);
+ if (QString::compare(platform, winscwPlatform) == 0) {
+ retval = clauseTemplate.arg(build);
+ } else if (platform.startsWith(armPlatformPrefix)) {
+ QString fixedCompilerVersion = compilerVersion;
+ fixedCompilerVersion.replace(".","_");
+ retval = clauseTemplate.arg(platform.mid(sizeof(PLATFORM_ARM_PREFIX)-1))
+ .arg(build)
+ .arg(fixedCompilerVersion);
+ } // else - Unsupported platform for makefile target, return empty clause
return retval;
}
@@ -185,52 +225,101 @@ void SymbianSbsv2MakefileGenerator::writeMkFile(const QString& wrapperFileName,
void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, bool isPrimaryMakefile)
{
- static QString debugBuild(BUILD_DEBUG);
- static QString releaseBuild(BUILD_RELEASE);
+ static QString debugBuild;
+ static QString releaseBuild;
+ static QString defaultGcceCompilerVersion;
+ static QString defaultRvctCompilerVersion;
+ static QStringList rvctVersions;
+ static QStringList gcceVersions;
+ static QStringList allArmCompilerVersions;
+
+ // Initialize static variables used in makefile creation
+ if (debugBuild.isEmpty()) {
+ debugBuild.append(QLatin1String(BUILD_DEBUG));
+ releaseBuild.append(QLatin1String(BUILD_RELEASE));
+ winscwPlatform.append(QLatin1String(PLATFORM_WINSCW));
+ gccePlatform.append(QLatin1String(PLATFORM_GCCE));
+ armPlatformPrefix.append(QLatin1String(PLATFORM_ARM_PREFIX));
+ sbsRvctPrefix.append(QLatin1String(SBS_RVCT_PREFIX));
+
+ findGcceVersions(&gcceVersions, &defaultGcceCompilerVersion);
+ findRvctVersions(&rvctVersions, &defaultRvctCompilerVersion);
+
+ allArmCompilerVersions << rvctVersions << gcceVersions;
+
+ if (!allArmCompilerVersions.size()) {
+ fprintf(stderr, "Warning: No HW compilers detected. "
+ "Please install either GCCE or RVCT compiler to enable release builds.\n");
+ }
+ }
QStringList allPlatforms;
foreach(QString platform, project->values("SYMBIAN_PLATFORMS")) {
allPlatforms << platform.toLower();
}
+ if (!gcceVersions.size())
+ allPlatforms.removeAll(gccePlatform);
+
QString testClause;
if (project->isActiveConfig(SYMBIAN_TEST_CONFIG))
testClause = QLatin1String(".test");
else
testClause = QLatin1String("");
- QString genericClause = " -c %1_%2" + testClause;
- QString winscwClause = " -c winscw_%1.mwccinc" + testClause;
- QString gcceClause;
- bool stripArmv5 = false;
+ // Note: armClause is used for gcce, too, which has a side effect
+ // of requiring armv* platform(s) in SYMBIAN_PLATFORMS in order
+ // to get any compiler version specific targets.
+ QString armClause = " -c " PLATFORM_ARM_PREFIX ".%1.%2.%3" + testClause;
+ QString genericArmClause;
+ if (defaultRvctCompilerVersion.isEmpty()) {
+ // Note: Argument %3 needs to be empty string in this version of clause
+ genericArmClause = " -c " PLATFORM_ARM_PREFIX "%1_%2%3" + testClause;
+ } else {
+ // If defaultRvctCompilerVersion is defined, use specific sbs clause for "generic" clause
+ genericArmClause = armClause;
+ }
+ QString winscwClause = " -c " PLATFORM_WINSCW "_%1.mwccinc" + testClause;;
- if (allPlatforms.contains(PLATFORM_GCCE)) {
- if (QString::compare(gcceVersion(), UNDETECTED_GCCE_VERSION) == 0) {
- allPlatforms.removeAll(PLATFORM_GCCE);
- } else {
- gcceClause = " -c arm.v5.%1." + gcceVersion() + testClause;
- // Since gcce building is enabled, do not add armv5 for any sbs command
- // that also contains gcce, because those will build same targets.
- stripArmv5 = true;
+ QStringList armPlatforms = allPlatforms.filter(QRegExp("^" PLATFORM_ARM_PREFIX));
+
+ if (!allArmCompilerVersions.size()) {
+ foreach (QString item, armPlatforms) {
+ allPlatforms.removeAll(item);
}
+ armPlatforms.clear();
}
QStringList allClauses;
QStringList debugClauses;
QStringList releaseClauses;
+ // Only winscw and arm platforms are supported
QStringList debugPlatforms = allPlatforms;
QStringList releasePlatforms = allPlatforms;
- releasePlatforms.removeAll(PLATFORM_WINSCW); // No release for emulator
+ releasePlatforms.removeAll(winscwPlatform); // No release for emulator
- foreach(QString item, debugPlatforms) {
- if (item != PLATFORM_ARMV5 || !stripArmv5)
- debugClauses << configClause(item, debugBuild, winscwClause, gcceClause, genericClause);
+ if (!releasePlatforms.size()) {
+ fprintf(stderr, "Warning: No valid release platforms in SYMBIAN_PLATFORMS (%s)\n"
+ "Most likely required compiler(s) are not properly installed.\n",
+ qPrintable(project->values("SYMBIAN_PLATFORMS").join(" ")));
}
- foreach(QString item, releasePlatforms) {
- if (item != PLATFORM_ARMV5 || !stripArmv5)
- releaseClauses << configClause(item, releaseBuild, winscwClause, gcceClause, genericClause);
+
+ if (debugPlatforms.contains(winscwPlatform))
+ debugClauses << configClause(winscwPlatform, debugBuild, QString(), winscwClause);
+
+ foreach(QString item, armPlatforms) {
+ // Only use single clause per arm platform even if multiple compiler versions were found,
+ // otherwise we get makefile target collisions from sbsv2 toolchain.
+ if (rvctVersions.size()) {
+ debugClauses << configClause(item, debugBuild, defaultRvctCompilerVersion, genericArmClause);
+ releaseClauses << configClause(item, releaseBuild, defaultRvctCompilerVersion, genericArmClause);
+ } else {
+ debugClauses << configClause(item, debugBuild, defaultGcceCompilerVersion, armClause);
+ releaseClauses << configClause(item, releaseBuild, defaultGcceCompilerVersion, armClause);
+ }
}
+
allClauses << debugClauses << releaseClauses;
QTextStream t(&wrapperFile);
@@ -270,22 +359,20 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo
t << " -I\"" << values.at(i) << "\" ";
}
}
- t << endl;
- t << "first: default" << endl;
- if (debugPlatforms.contains(PLATFORM_WINSCW))
- t << "default: debug-winscw";
- else if (debugPlatforms.contains(PLATFORM_ARMV5))
- t << "default: debug-armv5";
- else if (debugPlatforms.size())
- t << "default: debug-" << debugPlatforms.first();
- else
- t << "default: all";
t << endl;
+ t << "first: default" << endl << endl;
if (!isPrimaryMakefile) {
- t << "all:" << endl;
+ t << "all:" << endl << endl;
+ t << "default: all" << endl << endl;
} else {
- t << "all: debug release" << endl;
+ t << "all: debug release" << endl << endl;
+ if (debugPlatforms.contains(winscwPlatform))
+ t << "default: debug-winscw";
+ else if (debugPlatforms.size())
+ t << "default: debug-" << debugPlatforms.first();
+ else
+ t << "default: all";
t << endl;
QString qmakeCmd = "\t$(QMAKE) \"" + project->projectFile() + "\" " + buildArgs();
@@ -302,30 +389,80 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo
t << "debug: " << BLD_INF_FILENAME << endl;
t << "\t$(SBS)";
- foreach(QString item, debugClauses) {
- t << item;
+ foreach(QString clause, debugClauses) {
+ t << clause;
+ }
+ t << endl;
+ t << "clean-debug: " << BLD_INF_FILENAME << endl;
+ t << "\t$(SBS) reallyclean";
+ foreach(QString clause, debugClauses) {
+ t << clause;
}
t << endl;
t << "release: " << BLD_INF_FILENAME << endl;
t << "\t$(SBS)";
- foreach(QString item, releaseClauses) {
- t << item;
+ foreach(QString clause, releaseClauses) {
+ t << clause;
}
t << endl;
+ t << "clean-release: " << BLD_INF_FILENAME << endl;
+ t << "\t$(SBS) reallyclean";
+ foreach(QString clause, releaseClauses) {
+ t << clause;
+ }
+ t << endl << endl;
+
+ QString defaultGcceArmVersion;
+ if (armPlatforms.size()) {
+ defaultGcceArmVersion = armPlatforms.first();
+ } else {
+ defaultGcceArmVersion = QLatin1String("armv5");
+ }
- // For more specific builds, targets are in this form: build-platform, e.g. release-armv5
+ // For more specific builds, targets are in this form:
+ // release-armv5 - generic target, compiler version determined by toolchain or autodetection
+ // release-armv5-rvct4.0 - compiler version specific target
foreach(QString item, debugPlatforms) {
+ QString clause;
+ if (item.compare(winscwPlatform) == 0)
+ clause = configClause(item, debugBuild, QString(), winscwClause);
+ else if (item.compare(gccePlatform) == 0 )
+ clause = configClause(defaultGcceArmVersion, debugBuild, defaultGcceCompilerVersion, armClause);
+ else // use generic arm clause
+ clause = configClause(item, debugBuild, defaultRvctCompilerVersion, genericArmClause);
+
t << "debug-" << item << ": " << BLD_INF_FILENAME << endl;
- t << "\t$(SBS)";
- t << configClause(item, debugBuild, winscwClause, gcceClause, genericClause);
- t << endl;
+ t << "\t$(SBS)" << clause << endl;
+ t << "clean-debug-" << item << ": " << BLD_INF_FILENAME << endl;
+ t << "\t$(SBS) reallyclean" << clause << endl;
}
foreach(QString item, releasePlatforms) {
+ QString clause;
+ if (item.compare(gccePlatform) == 0 )
+ clause = configClause(defaultGcceArmVersion, releaseBuild, defaultGcceCompilerVersion, armClause);
+ else // use generic arm clause
+ clause = configClause(item, releaseBuild, defaultRvctCompilerVersion, genericArmClause);
+
t << "release-" << item << ": " << BLD_INF_FILENAME << endl;
- t << "\t$(SBS)";
- t << configClause(item, releaseBuild, winscwClause, gcceClause, genericClause);
- t << endl;
+ t << "\t$(SBS)" << clause << endl;
+ t << "clean-release-" << item << ": " << BLD_INF_FILENAME << endl;
+ t << "\t$(SBS) reallyclean" << clause << endl;
+ }
+
+ foreach(QString item, armPlatforms) {
+ foreach(QString compilerVersion, allArmCompilerVersions) {
+ QString debugClause = configClause(item, debugBuild, compilerVersion, armClause);
+ QString releaseClause = configClause(item, releaseBuild, compilerVersion, armClause);
+ t << "debug-" << item << "-" << compilerVersion << ": " << BLD_INF_FILENAME << endl;
+ t << "\t$(SBS)" << debugClause << endl;
+ t << "clean-debug-" << item << "-" << compilerVersion << ": " << BLD_INF_FILENAME << endl;
+ t << "\t$(SBS) reallyclean" << debugClause << endl;
+ t << "release-" << item << "-" << compilerVersion << ": " << BLD_INF_FILENAME << endl;
+ t << "\t$(SBS)" << releaseClause << endl;
+ t << "clean-release-" << item << "-" << compilerVersion << ": " << BLD_INF_FILENAME << endl;
+ t << "\t$(SBS) reallyclean" << releaseClause << endl;
+ }
}
t << endl;
@@ -344,7 +481,7 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo
t << endl << endl;
}
- // Add all extra targets including extra compiler targest also to wrapper makefile,
+ // Add all extra targets including extra compiler targets also to wrapper makefile,
// even though many of them may have already been added to bld.inf as FLMs.
// This is to enable use of targets like 'mocables', which call targets generated by extra compilers.
if (targetType != TypeSubdirs) {
@@ -365,32 +502,6 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo
}
t << endl << endl;
- t << "clean-debug: " << BLD_INF_FILENAME << endl;
- t << "\t$(SBS) reallyclean";
- foreach(QString clause, debugClauses) {
- t << clause;
- }
- t << endl << endl;
- t << "clean-release: " << BLD_INF_FILENAME << endl;
- t << "\t$(SBS) reallyclean";
- foreach(QString clause, releaseClauses) {
- t << clause;
- }
- t << endl << endl;
-
- // For more specific builds, targets are in this form: clean-build-platform, e.g. clean-release-armv5
- foreach(QString item, debugPlatforms) {
- t << "clean-debug-" << item << ": " << BLD_INF_FILENAME << endl;
- t << "\t$(SBS) reallyclean";
- t << configClause(item, debugBuild, winscwClause, gcceClause, genericClause);
- t << endl;
- }
- foreach(QString item, releasePlatforms) {
- t << "clean-release-" << item << ": " << BLD_INF_FILENAME << endl;
- t << "\t$(SBS) reallyclean";
- t << configClause(item, releaseBuild, winscwClause, gcceClause, genericClause);
- t << endl;
- }
t << endl;
}
diff --git a/qmake/generators/symbian/symmake_sbsv2.h b/qmake/generators/symbian/symmake_sbsv2.h
index 6644a032c2..557e3dd50a 100644
--- a/qmake/generators/symbian/symmake_sbsv2.h
+++ b/qmake/generators/symbian/symmake_sbsv2.h
@@ -65,12 +65,15 @@ public:
private:
void exportFlm();
- QString gcceVersion();
- QString configClause(QString &platform,
- QString &build,
- QString &winscwClauseTemplate,
- QString &gcceClauseTemplate,
- QString &genericClauseTemplate);
+ void findGcceVersions(QStringList *gcceVersionList, QString *defaultVersion);
+ void findRvctVersions(QStringList *rvctVersionList, QString *defaultVersion);
+ void findInstalledCompilerVersions(const QString &matchExpression,
+ const QString &versionPrefix,
+ QStringList *versionList);
+ QString configClause(const QString &platform,
+ const QString &build,
+ const QString &compilerVersion,
+ const QString &clauseTemplate);
void writeSbsDeploymentList(const DeploymentList& depList, QTextStream& t);
diff --git a/qmake/generators/unix/unixmake.cpp b/qmake/generators/unix/unixmake.cpp
index db5b957da9..da4bbb712d 100644
--- a/qmake/generators/unix/unixmake.cpp
+++ b/qmake/generators/unix/unixmake.cpp
@@ -622,31 +622,42 @@ UnixMakefileGenerator::processPrlFiles()
//merge them into a logical order
if(!project->isActiveConfig("no_smart_library_merge") && !project->isActiveConfig("no_lflags_merge")) {
- QStringList lflags;
+ QHash<QString, QStringList> lflags;
for(int lit = 0; lit < l.size(); ++lit) {
+ QString arch("default");
QString opt = l.at(lit).trimmed();
if(opt.startsWith("-")) {
+ if (Option::target_mode == Option::TARG_MACX_MODE && opt.startsWith("-Xarch")) {
+ if (opt.length() > 7) {
+ arch = opt.mid(7);
+ opt = l.at(++lit);
+ }
+ }
+
if(opt.startsWith("-L") ||
(Option::target_mode == Option::TARG_MACX_MODE && opt.startsWith("-F"))) {
- if(lit == 0 || l.lastIndexOf(opt, lit-1) == -1)
- lflags.append(opt);
+ if(lit == 0 || !lflags[arch].contains(opt))
+ lflags[arch].append(opt);
} else if(opt.startsWith("-l")) {
- if(lit == l.size()-1 || l.indexOf(opt, lit+1) == -1)
- lflags.append(opt);
+ if(lit == l.size()-1 || !lflags[arch].contains(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);
- else
+ else {
opt = l.at(++lit);
+ if (Option::target_mode == Option::TARG_MACX_MODE && opt.startsWith("-Xarch"))
+ opt = l.at(++lit); // The user has done the right thing and prefixed each part
+ }
bool found = false;
- for(int x = lit+1; x < l.size(); ++x) {
- QString xf = l.at(x);
+ for(int x = 0; x < lflags[arch].size(); ++x) {
+ QString xf = lflags[arch].at(x);
if(xf.startsWith("-framework")) {
QString framework;
if(xf.length() > 11)
framework = xf.mid(11);
else
- framework = l.at(++x);
+ framework = lflags[arch].at(++x);
if(framework == opt) {
found = true;
break;
@@ -654,18 +665,30 @@ UnixMakefileGenerator::processPrlFiles()
}
}
if(!found) {
- lflags.append("-framework");
- lflags.append(opt);
+ lflags[arch].append("-framework");
+ lflags[arch].append(opt);
}
} else {
- lflags.append(opt);
+ lflags[arch].append(opt);
}
} else if(!opt.isNull()) {
if(lit == 0 || l.lastIndexOf(opt, lit-1) == -1)
- lflags.append(opt);
+ lflags[arch].append(opt);
+ }
+ }
+
+ l = lflags.take("default");
+
+ // Process architecture specific options (Xarch)
+ QHash<QString, QStringList>::const_iterator archIterator = lflags.constBegin();
+ while (archIterator != lflags.constEnd()) {
+ const QStringList archOptions = archIterator.value();
+ for (int i = 0; i < archOptions.size(); ++i) {
+ l.append(QLatin1String("-Xarch_") + archIterator.key());
+ l.append(archOptions.at(i));
}
+ ++archIterator;
}
- l = lflags;
}
}
}
diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp
index f32ba7e4fa..3c42f145fb 100644
--- a/qmake/generators/win32/msvc_vcproj.cpp
+++ b/qmake/generators/win32/msvc_vcproj.cpp
@@ -280,7 +280,7 @@ bool VcprojGenerator::writeProjectMakefile()
mergedProjects.at(0)->vcProject.Name ==
mergedProjects.at(1)->vcProject.Name)
mergedProjects.at(0)->writePrlFile();
- mergedProject.Name = unescapeFilePath(project->first("QMAKE_ORIG_TARGET"));
+ mergedProject.Name = project->first("QMAKE_PROJECT_NAME");
mergedProject.Version = mergedProjects.at(0)->vcProject.Version;
mergedProject.ProjectGUID = project->isEmpty("QMAKE_UUID") ? getProjectUUID().toString().toUpper() : project->first("QMAKE_UUID");
mergedProject.Keyword = project->first("VCPROJ_KEYWORD");
@@ -468,8 +468,8 @@ void VcprojGenerator::writeSubDirs(QTextStream &t)
}
}
- // We assume project filename is [QMAKE_ORIG_TARGET].vcproj
- QString vcproj = unescapeFilePath(tmp_vcproj.project->first("QMAKE_ORIG_TARGET") + project->first("VCPROJ_EXTENSION"));
+ // We assume project filename is [QMAKE_PROJECT_NAME].vcproj
+ QString vcproj = unescapeFilePath(tmp_vcproj.project->first("QMAKE_PROJECT_NAME") + project->first("VCPROJ_EXTENSION"));
QString vcprojDir = qmake_getpwd();
// If file doesn't exsist, then maybe the users configuration
diff --git a/qmake/generators/win32/winmakefile.cpp b/qmake/generators/win32/winmakefile.cpp
index ecb20c70f9..58f21cb90d 100644
--- a/qmake/generators/win32/winmakefile.cpp
+++ b/qmake/generators/win32/winmakefile.cpp
@@ -290,6 +290,11 @@ void Win32MakefileGenerator::processVars()
}
project->values("QMAKE_ORIG_TARGET") = project->values("TARGET");
+ if (project->isEmpty("QMAKE_PROJECT_NAME"))
+ project->values("QMAKE_PROJECT_NAME") = project->values("QMAKE_ORIG_TARGET");
+ else if (project->first("TEMPLATE").startsWith("vc"))
+ project->values("MAKEFILE") = project->values("QMAKE_PROJECT_NAME");
+
if (!project->values("QMAKE_INCDIR").isEmpty())
project->values("INCLUDEPATH") += project->values("QMAKE_INCDIR");
diff --git a/src/3rdparty/libconninet/config.guess b/src/3rdparty/libconninet/config.guess
deleted file mode 100755
index e3a2116a7d..0000000000
--- a/src/3rdparty/libconninet/config.guess
+++ /dev/null
@@ -1,1533 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-# Free Software Foundation, Inc.
-
-timestamp='2009-06-10'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Originally written by Per Bothner <per@bothner.com>.
-# Please send patches to <config-patches@gnu.org>. Submit a context
-# diff and a properly formatted ChangeLog entry.
-#
-# This script attempts to guess a canonical system name similar to
-# config.sub. If it succeeds, it prints the system name on stdout, and
-# exits with 0. Otherwise, it exits with 1.
-#
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit ;;
- --version | -v )
- echo "$version" ; exit ;;
- --help | --h* | -h )
- echo "$usage"; exit ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help" >&2
- exit 1 ;;
- * )
- break ;;
- esac
-done
-
-if test $# != 0; then
- echo "$me: too many arguments$help" >&2
- exit 1
-fi
-
-trap 'exit 1' 1 2 15
-
-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
-# compiler to aid in system detection is discouraged as it requires
-# temporary files to be created and, as you can see below, it is a
-# headache to deal with in a portable fashion.
-
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-# Portable tmp directory creation inspired by the Autoconf team.
-
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,) echo "int x;" > $dummy.c ;
- for c in cc gcc c89 c99 ; do
- if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
- CC_FOR_BUILD="$c"; break ;
- fi ;
- done ;
- if test x"$CC_FOR_BUILD" = x ; then
- CC_FOR_BUILD=no_compiler_found ;
- fi
- ;;
- ,,*) CC_FOR_BUILD=$CC ;;
- ,*,*) CC_FOR_BUILD=$HOST_CC ;;
-esac ; set_cc_for_build= ;'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
- PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- *:NetBSD:*:*)
- # NetBSD (nbsd) targets should (where applicable) match one or
- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
- # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
- # switched to ELF, *-*-netbsd* would select the old
- # object file format. This provides both forward
- # compatibility and a consistent mechanism for selecting the
- # object file format.
- #
- # Note: NetBSD doesn't particularly care about the vendor
- # portion of the name. We always set it to "unknown".
- sysctl="sysctl -n hw.machine_arch"
- UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
- /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
- case "${UNAME_MACHINE_ARCH}" in
- armeb) machine=armeb-unknown ;;
- arm*) machine=arm-unknown ;;
- sh3el) machine=shl-unknown ;;
- sh3eb) machine=sh-unknown ;;
- sh5el) machine=sh5le-unknown ;;
- *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
- esac
- # The Operating System including object format, if it has switched
- # to ELF recently, or will in the future.
- case "${UNAME_MACHINE_ARCH}" in
- arm*|i386|m68k|ns32k|sh3*|sparc|vax)
- eval $set_cc_for_build
- if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep -q __ELF__
- then
- # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
- # Return netbsd for either. FIX?
- os=netbsd
- else
- os=netbsdelf
- fi
- ;;
- *)
- os=netbsd
- ;;
- esac
- # The OS release
- # Debian GNU/NetBSD machines have a different userland, and
- # thus, need a distinct triplet. However, they do not need
- # kernel version information, so it can be replaced with a
- # suitable tag, in the style of linux-gnu.
- case "${UNAME_VERSION}" in
- Debian*)
- release='-gnu'
- ;;
- *)
- release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
- ;;
- esac
- # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
- # contains redundant information, the shorter form:
- # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
- exit ;;
- *:OpenBSD:*:*)
- UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
- echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
- exit ;;
- *:ekkoBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
- exit ;;
- *:SolidBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
- exit ;;
- macppc:MirBSD:*:*)
- echo powerpc-unknown-mirbsd${UNAME_RELEASE}
- exit ;;
- *:MirBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
- exit ;;
- alpha:OSF1:*:*)
- case $UNAME_RELEASE in
- *4.0)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
- ;;
- *5.*)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
- ;;
- esac
- # According to Compaq, /usr/sbin/psrinfo has been available on
- # OSF/1 and Tru64 systems produced since 1995. I hope that
- # covers most systems running today. This code pipes the CPU
- # types through head -n 1, so we only detect the type of CPU 0.
- ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
- case "$ALPHA_CPU_TYPE" in
- "EV4 (21064)")
- UNAME_MACHINE="alpha" ;;
- "EV4.5 (21064)")
- UNAME_MACHINE="alpha" ;;
- "LCA4 (21066/21068)")
- UNAME_MACHINE="alpha" ;;
- "EV5 (21164)")
- UNAME_MACHINE="alphaev5" ;;
- "EV5.6 (21164A)")
- UNAME_MACHINE="alphaev56" ;;
- "EV5.6 (21164PC)")
- UNAME_MACHINE="alphapca56" ;;
- "EV5.7 (21164PC)")
- UNAME_MACHINE="alphapca57" ;;
- "EV6 (21264)")
- UNAME_MACHINE="alphaev6" ;;
- "EV6.7 (21264A)")
- UNAME_MACHINE="alphaev67" ;;
- "EV6.8CB (21264C)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.8AL (21264B)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.8CX (21264D)")
- UNAME_MACHINE="alphaev68" ;;
- "EV6.9A (21264/EV69A)")
- UNAME_MACHINE="alphaev69" ;;
- "EV7 (21364)")
- UNAME_MACHINE="alphaev7" ;;
- "EV7.9 (21364A)")
- UNAME_MACHINE="alphaev79" ;;
- esac
- # A Pn.n version is a patched version.
- # A Vn.n version is a released version.
- # A Tn.n version is a released field test version.
- # A Xn.n version is an unreleased experimental baselevel.
- # 1.2 uses "1.2" for uname -r.
- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- exit ;;
- Alpha\ *:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # Should we change UNAME_MACHINE based on the output of uname instead
- # of the specific Alpha model?
- echo alpha-pc-interix
- exit ;;
- 21064:Windows_NT:50:3)
- echo alpha-dec-winnt3.5
- exit ;;
- Amiga*:UNIX_System_V:4.0:*)
- echo m68k-unknown-sysv4
- exit ;;
- *:[Aa]miga[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-amigaos
- exit ;;
- *:[Mm]orph[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-morphos
- exit ;;
- *:OS/390:*:*)
- echo i370-ibm-openedition
- exit ;;
- *:z/VM:*:*)
- echo s390-ibm-zvmoe
- exit ;;
- *:OS400:*:*)
- echo powerpc-ibm-os400
- exit ;;
- arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
- echo arm-acorn-riscix${UNAME_RELEASE}
- exit ;;
- arm:riscos:*:*|arm:RISCOS:*:*)
- echo arm-unknown-riscos
- exit ;;
- SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
- echo hppa1.1-hitachi-hiuxmpp
- exit ;;
- Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
- # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
- if test "`(/bin/universe) 2>/dev/null`" = att ; then
- echo pyramid-pyramid-sysv3
- else
- echo pyramid-pyramid-bsd
- fi
- exit ;;
- NILE*:*:*:dcosx)
- echo pyramid-pyramid-svr4
- exit ;;
- DRS?6000:unix:4.0:6*)
- echo sparc-icl-nx6
- exit ;;
- DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
- case `/usr/bin/uname -p` in
- sparc) echo sparc-icl-nx7; exit ;;
- esac ;;
- s390x:SunOS:*:*)
- echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- sun4H:SunOS:5.*:*)
- echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
- eval $set_cc_for_build
- SUN_ARCH="i386"
- # If there is a compiler, see if it is configured for 64-bit objects.
- # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
- # This test works for both compilers.
- if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
- if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
- (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_64BIT_ARCH >/dev/null
- then
- SUN_ARCH="x86_64"
- fi
- fi
- echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- sun4*:SunOS:6*:*)
- # According to config.sub, this is the proper way to canonicalize
- # SunOS6. Hard to guess exactly what SunOS6 will be like, but
- # it's likely to be more like Solaris than SunOS4.
- echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- sun4*:SunOS:*:*)
- case "`/usr/bin/arch -k`" in
- Series*|S4*)
- UNAME_RELEASE=`uname -v`
- ;;
- esac
- # Japanese Language versions have a version number like `4.1.3-JL'.
- echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
- exit ;;
- sun3*:SunOS:*:*)
- echo m68k-sun-sunos${UNAME_RELEASE}
- exit ;;
- sun*:*:4.2BSD:*)
- UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
- test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
- case "`/bin/arch`" in
- sun3)
- echo m68k-sun-sunos${UNAME_RELEASE}
- ;;
- sun4)
- echo sparc-sun-sunos${UNAME_RELEASE}
- ;;
- esac
- exit ;;
- aushp:SunOS:*:*)
- echo sparc-auspex-sunos${UNAME_RELEASE}
- exit ;;
- # The situation for MiNT is a little confusing. The machine name
- # can be virtually everything (everything which is not
- # "atarist" or "atariste" at least should have a processor
- # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
- # to the lowercase version "mint" (or "freemint"). Finally
- # the system name "TOS" denotes a system which is actually not
- # MiNT. But MiNT is downward compatible to TOS, so this should
- # be no problem.
- atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
- atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
- *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
- milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
- echo m68k-milan-mint${UNAME_RELEASE}
- exit ;;
- hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
- echo m68k-hades-mint${UNAME_RELEASE}
- exit ;;
- *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint${UNAME_RELEASE}
- exit ;;
- m68k:machten:*:*)
- echo m68k-apple-machten${UNAME_RELEASE}
- exit ;;
- powerpc:machten:*:*)
- echo powerpc-apple-machten${UNAME_RELEASE}
- exit ;;
- RISC*:Mach:*:*)
- echo mips-dec-mach_bsd4.3
- exit ;;
- RISC*:ULTRIX:*:*)
- echo mips-dec-ultrix${UNAME_RELEASE}
- exit ;;
- VAX*:ULTRIX*:*:*)
- echo vax-dec-ultrix${UNAME_RELEASE}
- exit ;;
- 2020:CLIX:*:* | 2430:CLIX:*:*)
- echo clipper-intergraph-clix${UNAME_RELEASE}
- exit ;;
- mips:*:*:UMIPS | mips:*:*:RISCos)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-#ifdef __cplusplus
-#include <stdio.h> /* for printf() prototype */
- int main (int argc, char *argv[]) {
-#else
- int main (argc, argv) int argc; char *argv[]; {
-#endif
- #if defined (host_mips) && defined (MIPSEB)
- #if defined (SYSTYPE_SYSV)
- printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_SVR4)
- printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
- printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
- #endif
- #endif
- exit (-1);
- }
-EOF
- $CC_FOR_BUILD -o $dummy $dummy.c &&
- dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
- SYSTEM_NAME=`$dummy $dummyarg` &&
- { echo "$SYSTEM_NAME"; exit; }
- echo mips-mips-riscos${UNAME_RELEASE}
- exit ;;
- Motorola:PowerMAX_OS:*:*)
- echo powerpc-motorola-powermax
- exit ;;
- Motorola:*:4.3:PL8-*)
- echo powerpc-harris-powermax
- exit ;;
- Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
- echo powerpc-harris-powermax
- exit ;;
- Night_Hawk:Power_UNIX:*:*)
- echo powerpc-harris-powerunix
- exit ;;
- m88k:CX/UX:7*:*)
- echo m88k-harris-cxux7
- exit ;;
- m88k:*:4*:R4*)
- echo m88k-motorola-sysv4
- exit ;;
- m88k:*:3*:R3*)
- echo m88k-motorola-sysv3
- exit ;;
- AViiON:dgux:*:*)
- # DG/UX returns AViiON for all architectures
- UNAME_PROCESSOR=`/usr/bin/uname -p`
- if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
- then
- if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
- [ ${TARGET_BINARY_INTERFACE}x = x ]
- then
- echo m88k-dg-dgux${UNAME_RELEASE}
- else
- echo m88k-dg-dguxbcs${UNAME_RELEASE}
- fi
- else
- echo i586-dg-dgux${UNAME_RELEASE}
- fi
- exit ;;
- M88*:DolphinOS:*:*) # DolphinOS (SVR3)
- echo m88k-dolphin-sysv3
- exit ;;
- M88*:*:R3*:*)
- # Delta 88k system running SVR3
- echo m88k-motorola-sysv3
- exit ;;
- XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
- echo m88k-tektronix-sysv3
- exit ;;
- Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
- echo m68k-tektronix-bsd
- exit ;;
- *:IRIX*:*:*)
- echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
- exit ;;
- ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
- i*86:AIX:*:*)
- echo i386-ibm-aix
- exit ;;
- ia64:AIX:*:*)
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
- exit ;;
- *:AIX:2:3)
- if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <sys/systemcfg.h>
-
- main()
- {
- if (!__power_pc())
- exit(1);
- puts("powerpc-ibm-aix3.2.5");
- exit(0);
- }
-EOF
- if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
- then
- echo "$SYSTEM_NAME"
- else
- echo rs6000-ibm-aix3.2.5
- fi
- elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
- echo rs6000-ibm-aix3.2.4
- else
- echo rs6000-ibm-aix3.2
- fi
- exit ;;
- *:AIX:*:[456])
- IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
- if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
- IBM_ARCH=rs6000
- else
- IBM_ARCH=powerpc
- fi
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${IBM_ARCH}-ibm-aix${IBM_REV}
- exit ;;
- *:AIX:*:*)
- echo rs6000-ibm-aix
- exit ;;
- ibmrt:4.4BSD:*|romp-ibm:BSD:*)
- echo romp-ibm-bsd4.4
- exit ;;
- ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
- echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
- exit ;; # report: romp-ibm BSD 4.3
- *:BOSX:*:*)
- echo rs6000-bull-bosx
- exit ;;
- DPX/2?00:B.O.S.:*:*)
- echo m68k-bull-sysv3
- exit ;;
- 9000/[34]??:4.3bsd:1.*:*)
- echo m68k-hp-bsd
- exit ;;
- hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
- echo m68k-hp-bsd4.4
- exit ;;
- 9000/[34678]??:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- case "${UNAME_MACHINE}" in
- 9000/31? ) HP_ARCH=m68000 ;;
- 9000/[34]?? ) HP_ARCH=m68k ;;
- 9000/[678][0-9][0-9])
- if [ -x /usr/bin/getconf ]; then
- sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
- case "${sc_cpu_version}" in
- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
- 532) # CPU_PA_RISC2_0
- case "${sc_kernel_bits}" in
- 32) HP_ARCH="hppa2.0n" ;;
- 64) HP_ARCH="hppa2.0w" ;;
- '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
- esac ;;
- esac
- fi
- if [ "${HP_ARCH}" = "" ]; then
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
-
- #define _HPUX_SOURCE
- #include <stdlib.h>
- #include <unistd.h>
-
- int main ()
- {
- #if defined(_SC_KERNEL_BITS)
- long bits = sysconf(_SC_KERNEL_BITS);
- #endif
- long cpu = sysconf (_SC_CPU_VERSION);
-
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
- case CPU_PA_RISC2_0:
- #if defined(_SC_KERNEL_BITS)
- switch (bits)
- {
- case 64: puts ("hppa2.0w"); break;
- case 32: puts ("hppa2.0n"); break;
- default: puts ("hppa2.0"); break;
- } break;
- #else /* !defined(_SC_KERNEL_BITS) */
- puts ("hppa2.0"); break;
- #endif
- default: puts ("hppa1.0"); break;
- }
- exit (0);
- }
-EOF
- (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
- test -z "$HP_ARCH" && HP_ARCH=hppa
- fi ;;
- esac
- if [ ${HP_ARCH} = "hppa2.0w" ]
- then
- eval $set_cc_for_build
-
- # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
- # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
- # generating 64-bit code. GNU and HP use different nomenclature:
- #
- # $ CC_FOR_BUILD=cc ./config.guess
- # => hppa2.0w-hp-hpux11.23
- # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
- # => hppa64-hp-hpux11.23
-
- if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
- grep -q __LP64__
- then
- HP_ARCH="hppa2.0w"
- else
- HP_ARCH="hppa64"
- fi
- fi
- echo ${HP_ARCH}-hp-hpux${HPUX_REV}
- exit ;;
- ia64:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- echo ia64-hp-hpux${HPUX_REV}
- exit ;;
- 3050*:HI-UX:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <unistd.h>
- int
- main ()
- {
- long cpu = sysconf (_SC_CPU_VERSION);
- /* The order matters, because CPU_IS_HP_MC68K erroneously returns
- true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
- results, however. */
- if (CPU_IS_PA_RISC (cpu))
- {
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
- default: puts ("hppa-hitachi-hiuxwe2"); break;
- }
- }
- else if (CPU_IS_HP_MC68K (cpu))
- puts ("m68k-hitachi-hiuxwe2");
- else puts ("unknown-hitachi-hiuxwe2");
- exit (0);
- }
-EOF
- $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
- { echo "$SYSTEM_NAME"; exit; }
- echo unknown-hitachi-hiuxwe2
- exit ;;
- 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
- echo hppa1.1-hp-bsd
- exit ;;
- 9000/8??:4.3bsd:*:*)
- echo hppa1.0-hp-bsd
- exit ;;
- *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
- echo hppa1.0-hp-mpeix
- exit ;;
- hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
- echo hppa1.1-hp-osf
- exit ;;
- hp8??:OSF1:*:*)
- echo hppa1.0-hp-osf
- exit ;;
- i*86:OSF1:*:*)
- if [ -x /usr/sbin/sysversion ] ; then
- echo ${UNAME_MACHINE}-unknown-osf1mk
- else
- echo ${UNAME_MACHINE}-unknown-osf1
- fi
- exit ;;
- parisc*:Lites*:*:*)
- echo hppa1.1-hp-lites
- exit ;;
- C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
- echo c1-convex-bsd
- exit ;;
- C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit ;;
- C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
- echo c34-convex-bsd
- exit ;;
- C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
- echo c38-convex-bsd
- exit ;;
- C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
- echo c4-convex-bsd
- exit ;;
- CRAY*Y-MP:*:*:*)
- echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*[A-Z]90:*:*:*)
- echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
- | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
- -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
- -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*TS:*:*:*)
- echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*T3E:*:*:*)
- echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- CRAY*SV1:*:*:*)
- echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- *:UNICOS/mp:*:*)
- echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit ;;
- F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
- FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
- 5000:UNIX_System_V:4.*:*)
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
- i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
- echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
- exit ;;
- sparc*:BSD/OS:*:*)
- echo sparc-unknown-bsdi${UNAME_RELEASE}
- exit ;;
- *:BSD/OS:*:*)
- echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
- exit ;;
- *:FreeBSD:*:*)
- case ${UNAME_MACHINE} in
- pc98)
- echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
- amd64)
- echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
- *)
- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
- esac
- exit ;;
- i*:CYGWIN*:*)
- echo ${UNAME_MACHINE}-pc-cygwin
- exit ;;
- *:MINGW*:*)
- echo ${UNAME_MACHINE}-pc-mingw32
- exit ;;
- i*:windows32*:*)
- # uname -m includes "-pc" on this system.
- echo ${UNAME_MACHINE}-mingw32
- exit ;;
- i*:PW*:*)
- echo ${UNAME_MACHINE}-pc-pw32
- exit ;;
- *:Interix*:[3456]*)
- case ${UNAME_MACHINE} in
- x86)
- echo i586-pc-interix${UNAME_RELEASE}
- exit ;;
- EM64T | authenticamd | genuineintel)
- echo x86_64-unknown-interix${UNAME_RELEASE}
- exit ;;
- IA64)
- echo ia64-unknown-interix${UNAME_RELEASE}
- exit ;;
- esac ;;
- [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
- echo i${UNAME_MACHINE}-pc-mks
- exit ;;
- 8664:Windows_NT:*)
- echo x86_64-pc-mks
- exit ;;
- i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
- # UNAME_MACHINE based on the output of uname instead of i386?
- echo i586-pc-interix
- exit ;;
- i*:UWIN*:*)
- echo ${UNAME_MACHINE}-pc-uwin
- exit ;;
- amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
- echo x86_64-unknown-cygwin
- exit ;;
- p*:CYGWIN*:*)
- echo powerpcle-unknown-cygwin
- exit ;;
- prep*:SunOS:5.*:*)
- echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit ;;
- *:GNU:*:*)
- # the GNU system
- echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
- exit ;;
- *:GNU/*:*:*)
- # other systems with GNU libc and userland
- echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
- exit ;;
- i*86:Minix:*:*)
- echo ${UNAME_MACHINE}-pc-minix
- exit ;;
- arm*:Linux:*:*)
- eval $set_cc_for_build
- if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep -q __ARM_EABI__
- then
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- else
- echo ${UNAME_MACHINE}-unknown-linux-gnueabi
- fi
- exit ;;
- avr32*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- cris:Linux:*:*)
- echo cris-axis-linux-gnu
- exit ;;
- crisv32:Linux:*:*)
- echo crisv32-axis-linux-gnu
- exit ;;
- frv:Linux:*:*)
- echo frv-unknown-linux-gnu
- exit ;;
- ia64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- m32r*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- m68*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- mips:Linux:*:* | mips64:Linux:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #undef CPU
- #undef ${UNAME_MACHINE}
- #undef ${UNAME_MACHINE}el
- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=${UNAME_MACHINE}el
- #else
- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=${UNAME_MACHINE}
- #else
- CPU=
- #endif
- #endif
-EOF
- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
- /^CPU/{
- s: ::g
- p
- }'`"
- test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
- ;;
- or32:Linux:*:*)
- echo or32-unknown-linux-gnu
- exit ;;
- ppc:Linux:*:*)
- echo powerpc-unknown-linux-gnu
- exit ;;
- ppc64:Linux:*:*)
- echo powerpc64-unknown-linux-gnu
- exit ;;
- alpha:Linux:*:*)
- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
- EV5) UNAME_MACHINE=alphaev5 ;;
- EV56) UNAME_MACHINE=alphaev56 ;;
- PCA56) UNAME_MACHINE=alphapca56 ;;
- PCA57) UNAME_MACHINE=alphapca56 ;;
- EV6) UNAME_MACHINE=alphaev6 ;;
- EV67) UNAME_MACHINE=alphaev67 ;;
- EV68*) UNAME_MACHINE=alphaev68 ;;
- esac
- objdump --private-headers /bin/sh | grep -q ld.so.1
- if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
- exit ;;
- padre:Linux:*:*)
- echo sparc-unknown-linux-gnu
- exit ;;
- parisc:Linux:*:* | hppa:Linux:*:*)
- # Look for CPU level
- case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
- PA7*) echo hppa1.1-unknown-linux-gnu ;;
- PA8*) echo hppa2.0-unknown-linux-gnu ;;
- *) echo hppa-unknown-linux-gnu ;;
- esac
- exit ;;
- parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-gnu
- exit ;;
- s390:Linux:*:* | s390x:Linux:*:*)
- echo ${UNAME_MACHINE}-ibm-linux
- exit ;;
- sh64*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- sh*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- sparc:Linux:*:* | sparc64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- vax:Linux:*:*)
- echo ${UNAME_MACHINE}-dec-linux-gnu
- exit ;;
- x86_64:Linux:*:*)
- echo x86_64-unknown-linux-gnu
- exit ;;
- xtensa*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit ;;
- i*86:Linux:*:*)
- # The BFD linker knows what the default object file format is, so
- # first see if it will tell us. cd to the root directory to prevent
- # problems with other programs or directories called `ld' in the path.
- # Set LC_ALL=C to ensure ld outputs messages in English.
- ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
- | sed -ne '/supported targets:/!d
- s/[ ][ ]*/ /g
- s/.*supported targets: *//
- s/ .*//
- p'`
- case "$ld_supported_targets" in
- elf32-i386)
- TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
- ;;
- esac
- # Determine whether the default compiler is a.out or elf
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <features.h>
- #ifdef __ELF__
- # ifdef __GLIBC__
- # if __GLIBC__ >= 2
- LIBC=gnu
- # else
- LIBC=gnulibc1
- # endif
- # else
- LIBC=gnulibc1
- # endif
- #else
- #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
- LIBC=gnu
- #else
- LIBC=gnuaout
- #endif
- #endif
- #ifdef __dietlibc__
- LIBC=dietlibc
- #endif
-EOF
- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
- /^LIBC/{
- s: ::g
- p
- }'`"
- test x"${LIBC}" != x && {
- echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
- exit
- }
- test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
- ;;
- i*86:DYNIX/ptx:4*:*)
- # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
- # earlier versions are messed up and put the nodename in both
- # sysname and nodename.
- echo i386-sequent-sysv4
- exit ;;
- i*86:UNIX_SV:4.2MP:2.*)
- # Unixware is an offshoot of SVR4, but it has its own version
- # number series starting with 2...
- # I am not positive that other SVR4 systems won't match this,
- # I just have to hope. -- rms.
- # Use sysv4.2uw... so that sysv4* matches it.
- echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
- exit ;;
- i*86:OS/2:*:*)
- # If we were able to find `uname', then EMX Unix compatibility
- # is probably installed.
- echo ${UNAME_MACHINE}-pc-os2-emx
- exit ;;
- i*86:XTS-300:*:STOP)
- echo ${UNAME_MACHINE}-unknown-stop
- exit ;;
- i*86:atheos:*:*)
- echo ${UNAME_MACHINE}-unknown-atheos
- exit ;;
- i*86:syllable:*:*)
- echo ${UNAME_MACHINE}-pc-syllable
- exit ;;
- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
- echo i386-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- i*86:*DOS:*:*)
- echo ${UNAME_MACHINE}-pc-msdosdjgpp
- exit ;;
- i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
- UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
- if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
- else
- echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
- fi
- exit ;;
- i*86:*:5:[678]*)
- # UnixWare 7.x, OpenUNIX and OpenServer 6.
- case `/bin/uname -X | grep "^Machine"` in
- *486*) UNAME_MACHINE=i486 ;;
- *Pentium) UNAME_MACHINE=i586 ;;
- *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
- esac
- echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
- exit ;;
- i*86:*:3.2:*)
- if test -f /usr/options/cb.name; then
- UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
- echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
- elif /bin/uname -X 2>/dev/null >/dev/null ; then
- UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
- (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
- (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
- && UNAME_MACHINE=i586
- (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
- && UNAME_MACHINE=i686
- (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
- && UNAME_MACHINE=i686
- echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
- else
- echo ${UNAME_MACHINE}-pc-sysv32
- fi
- exit ;;
- pc:*:*:*)
- # Left here for compatibility:
- # uname -m prints for DJGPP always 'pc', but it prints nothing about
- # the processor, so we play safe by assuming i586.
- # Note: whatever this is, it MUST be the same as what config.sub
- # prints for the "djgpp" host, or else GDB configury will decide that
- # this is a cross-build.
- echo i586-pc-msdosdjgpp
- exit ;;
- Intel:Mach:3*:*)
- echo i386-pc-mach3
- exit ;;
- paragon:*:*:*)
- echo i860-intel-osf1
- exit ;;
- i860:*:4.*:*) # i860-SVR4
- if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
- echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
- else # Add other i860-SVR4 vendors below as they are discovered.
- echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
- fi
- exit ;;
- mini*:CTIX:SYS*5:*)
- # "miniframe"
- echo m68010-convergent-sysv
- exit ;;
- mc68k:UNIX:SYSTEM5:3.51m)
- echo m68k-convergent-sysv
- exit ;;
- M680?0:D-NIX:5.3:*)
- echo m68k-diab-dnix
- exit ;;
- M68*:*:R3V[5678]*:*)
- test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
- 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
- OS_REL=''
- test -r /etc/.relid \
- && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
- 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4; exit; } ;;
- NCR*:*:4.2:* | MPRAS*:*:4.2:*)
- OS_REL='.3'
- test -r /etc/.relid \
- && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
- /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
- && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
- m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
- echo m68k-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- mc68030:UNIX_System_V:4.*:*)
- echo m68k-atari-sysv4
- exit ;;
- TSUNAMI:LynxOS:2.*:*)
- echo sparc-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- rs6000:LynxOS:2.*:*)
- echo rs6000-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
- echo powerpc-unknown-lynxos${UNAME_RELEASE}
- exit ;;
- SM[BE]S:UNIX_SV:*:*)
- echo mips-dde-sysv${UNAME_RELEASE}
- exit ;;
- RM*:ReliantUNIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
- RM*:SINIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
- *:SINIX-*:*:*)
- if uname -p 2>/dev/null >/dev/null ; then
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
- echo ${UNAME_MACHINE}-sni-sysv4
- else
- echo ns32k-sni-sysv
- fi
- exit ;;
- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
- # says <Richard.M.Bartel@ccMail.Census.GOV>
- echo i586-unisys-sysv4
- exit ;;
- *:UNIX_System_V:4*:FTX*)
- # From Gerald Hewes <hewes@openmarket.com>.
- # How about differentiating between stratus architectures? -djm
- echo hppa1.1-stratus-sysv4
- exit ;;
- *:*:*:FTX*)
- # From seanf@swdc.stratus.com.
- echo i860-stratus-sysv4
- exit ;;
- i*86:VOS:*:*)
- # From Paul.Green@stratus.com.
- echo ${UNAME_MACHINE}-stratus-vos
- exit ;;
- *:VOS:*:*)
- # From Paul.Green@stratus.com.
- echo hppa1.1-stratus-vos
- exit ;;
- mc68*:A/UX:*:*)
- echo m68k-apple-aux${UNAME_RELEASE}
- exit ;;
- news*:NEWS-OS:6*:*)
- echo mips-sony-newsos6
- exit ;;
- R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
- if [ -d /usr/nec ]; then
- echo mips-nec-sysv${UNAME_RELEASE}
- else
- echo mips-unknown-sysv${UNAME_RELEASE}
- fi
- exit ;;
- BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
- echo powerpc-be-beos
- exit ;;
- BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
- echo powerpc-apple-beos
- exit ;;
- BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
- echo i586-pc-beos
- exit ;;
- BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
- echo i586-pc-haiku
- exit ;;
- SX-4:SUPER-UX:*:*)
- echo sx4-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-5:SUPER-UX:*:*)
- echo sx5-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-6:SUPER-UX:*:*)
- echo sx6-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-7:SUPER-UX:*:*)
- echo sx7-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-8:SUPER-UX:*:*)
- echo sx8-nec-superux${UNAME_RELEASE}
- exit ;;
- SX-8R:SUPER-UX:*:*)
- echo sx8r-nec-superux${UNAME_RELEASE}
- exit ;;
- Power*:Rhapsody:*:*)
- echo powerpc-apple-rhapsody${UNAME_RELEASE}
- exit ;;
- *:Rhapsody:*:*)
- echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
- exit ;;
- *:Darwin:*:*)
- UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
- case $UNAME_PROCESSOR in
- unknown) UNAME_PROCESSOR=powerpc ;;
- esac
- echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
- exit ;;
- *:procnto*:*:* | *:QNX:[0123456789]*:*)
- UNAME_PROCESSOR=`uname -p`
- if test "$UNAME_PROCESSOR" = "x86"; then
- UNAME_PROCESSOR=i386
- UNAME_MACHINE=pc
- fi
- echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
- exit ;;
- *:QNX:*:4*)
- echo i386-pc-qnx
- exit ;;
- NSE-?:NONSTOP_KERNEL:*:*)
- echo nse-tandem-nsk${UNAME_RELEASE}
- exit ;;
- NSR-?:NONSTOP_KERNEL:*:*)
- echo nsr-tandem-nsk${UNAME_RELEASE}
- exit ;;
- *:NonStop-UX:*:*)
- echo mips-compaq-nonstopux
- exit ;;
- BS2000:POSIX*:*:*)
- echo bs2000-siemens-sysv
- exit ;;
- DS/*:UNIX_System_V:*:*)
- echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
- exit ;;
- *:Plan9:*:*)
- # "uname -m" is not consistent, so use $cputype instead. 386
- # is converted to i386 for consistency with other x86
- # operating systems.
- if test "$cputype" = "386"; then
- UNAME_MACHINE=i386
- else
- UNAME_MACHINE="$cputype"
- fi
- echo ${UNAME_MACHINE}-unknown-plan9
- exit ;;
- *:TOPS-10:*:*)
- echo pdp10-unknown-tops10
- exit ;;
- *:TENEX:*:*)
- echo pdp10-unknown-tenex
- exit ;;
- KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
- echo pdp10-dec-tops20
- exit ;;
- XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
- echo pdp10-xkl-tops20
- exit ;;
- *:TOPS-20:*:*)
- echo pdp10-unknown-tops20
- exit ;;
- *:ITS:*:*)
- echo pdp10-unknown-its
- exit ;;
- SEI:*:*:SEIUX)
- echo mips-sei-seiux${UNAME_RELEASE}
- exit ;;
- *:DragonFly:*:*)
- echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
- exit ;;
- *:*VMS:*:*)
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
- case "${UNAME_MACHINE}" in
- A*) echo alpha-dec-vms ; exit ;;
- I*) echo ia64-dec-vms ; exit ;;
- V*) echo vax-dec-vms ; exit ;;
- esac ;;
- *:XENIX:*:SysV)
- echo i386-pc-xenix
- exit ;;
- i*86:skyos:*:*)
- echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
- exit ;;
- i*86:rdos:*:*)
- echo ${UNAME_MACHINE}-pc-rdos
- exit ;;
- i*86:AROS:*:*)
- echo ${UNAME_MACHINE}-pc-aros
- exit ;;
-esac
-
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
- I don't know.... */
- printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
- printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
- "4"
-#else
- ""
-#endif
- ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
- printf ("arm-acorn-riscix\n"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
- printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
- int version;
- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
- if (version < 4)
- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
- else
- printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
- exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
- printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
- printf ("ns32k-encore-mach\n"); exit (0);
-#else
- printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
- printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
- printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
- printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
- struct utsname un;
-
- uname(&un);
-
- if (strncmp(un.version, "V2", 2) == 0) {
- printf ("i386-sequent-ptx2\n"); exit (0);
- }
- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
- printf ("i386-sequent-ptx1\n"); exit (0);
- }
- printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-# include <sys/param.h>
-# if defined (BSD)
-# if BSD == 43
- printf ("vax-dec-bsd4.3\n"); exit (0);
-# else
-# if BSD == 199006
- printf ("vax-dec-bsd4.3reno\n"); exit (0);
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# endif
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# else
- printf ("vax-dec-ultrix\n"); exit (0);
-# endif
-#endif
-
-#if defined (alliant) && defined (i860)
- printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
- exit (1);
-}
-EOF
-
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
- { echo "$SYSTEM_NAME"; exit; }
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
- case `getsysinfo -f cpu_type` in
- c1*)
- echo c1-convex-bsd
- exit ;;
- c2*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit ;;
- c34*)
- echo c34-convex-bsd
- exit ;;
- c38*)
- echo c38-convex-bsd
- exit ;;
- c4*)
- echo c4-convex-bsd
- exit ;;
- esac
-fi
-
-cat >&2 <<EOF
-$0: unable to guess system type
-
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
-
- http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
-and
- http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches@gnu.org> in order to provide the needed
-information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo = `(hostinfo) 2>/dev/null`
-/bin/universe = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/src/3rdparty/libconninet/config.sub b/src/3rdparty/libconninet/config.sub
deleted file mode 100755
index eb0389a693..0000000000
--- a/src/3rdparty/libconninet/config.sub
+++ /dev/null
@@ -1,1693 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-# Free Software Foundation, Inc.
-
-timestamp='2009-06-11'
-
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine. It does not imply ALL GNU software can.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Please send patches to <config-patches@gnu.org>. Submit a context
-# diff and a properly formatted ChangeLog entry.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support. The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
- $0 [OPTION] ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit ;;
- --version | -v )
- echo "$version" ; exit ;;
- --help | --h* | -h )
- echo "$usage"; exit ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help"
- exit 1 ;;
-
- *local*)
- # First pass through any local machine types.
- echo $1
- exit ;;
-
- * )
- break ;;
- esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
- exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
- exit 1;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
- nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
- uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
- kopensolaris*-gnu* | \
- storm-chaos* | os2-emx* | rtmk-nova*)
- os=-$maybe_os
- basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
- ;;
- *)
- basic_machine=`echo $1 | sed 's/-[^-]*$//'`
- if [ $basic_machine != $1 ]
- then os=`echo $1 | sed 's/.*-/-/'`
- else os=; fi
- ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work. We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
- -sun*os*)
- # Prevent following clause from handling this invalid input.
- ;;
- -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
- -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
- -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
- -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
- -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
- -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
- -apple | -axis | -knuth | -cray)
- os=
- basic_machine=$1
- ;;
- -bluegene*)
- os=-cnk
- ;;
- -sim | -cisco | -oki | -wec | -winbond)
- os=
- basic_machine=$1
- ;;
- -scout)
- ;;
- -wrs)
- os=-vxworks
- basic_machine=$1
- ;;
- -chorusos*)
- os=-chorusos
- basic_machine=$1
- ;;
- -chorusrdb)
- os=-chorusrdb
- basic_machine=$1
- ;;
- -hiux*)
- os=-hiuxwe2
- ;;
- -sco6)
- os=-sco5v6
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco5)
- os=-sco3.2v5
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco4)
- os=-sco3.2v4
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2.[4-9]*)
- os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2v[4-9]*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco5v6*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco*)
- os=-sco3.2v2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -udk*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -isc)
- os=-isc2.2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -clix*)
- basic_machine=clipper-intergraph
- ;;
- -isc*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -lynx*)
- os=-lynxos
- ;;
- -ptx*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
- ;;
- -windowsnt*)
- os=`echo $os | sed -e 's/windowsnt/winnt/'`
- ;;
- -psos*)
- os=-psos
- ;;
- -mint | -mint[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
- # Recognize the basic CPU types without company name.
- # Some are omitted here because they have special meanings below.
- 1750a | 580 \
- | a29k \
- | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
- | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
- | am33_2.0 \
- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
- | bfin \
- | c4x | clipper \
- | d10v | d30v | dlx | dsp16xx \
- | fido | fr30 | frv \
- | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
- | i370 | i860 | i960 | ia64 \
- | ip2k | iq2000 \
- | lm32 \
- | m32c | m32r | m32rle | m68000 | m68k | m88k \
- | maxq | mb | microblaze | mcore | mep | metag \
- | mips | mipsbe | mipseb | mipsel | mipsle \
- | mips16 \
- | mips64 | mips64el \
- | mips64octeon | mips64octeonel \
- | mips64orion | mips64orionel \
- | mips64r5900 | mips64r5900el \
- | mips64vr | mips64vrel \
- | mips64vr4100 | mips64vr4100el \
- | mips64vr4300 | mips64vr4300el \
- | mips64vr5000 | mips64vr5000el \
- | mips64vr5900 | mips64vr5900el \
- | mipsisa32 | mipsisa32el \
- | mipsisa32r2 | mipsisa32r2el \
- | mipsisa64 | mipsisa64el \
- | mipsisa64r2 | mipsisa64r2el \
- | mipsisa64sb1 | mipsisa64sb1el \
- | mipsisa64sr71k | mipsisa64sr71kel \
- | mipstx39 | mipstx39el \
- | mn10200 | mn10300 \
- | moxie \
- | mt \
- | msp430 \
- | nios | nios2 \
- | ns16k | ns32k \
- | or32 \
- | pdp10 | pdp11 | pj | pjl \
- | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
- | pyramid \
- | score \
- | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
- | sh64 | sh64le \
- | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
- | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
- | spu | strongarm \
- | tahoe | thumb | tic4x | tic80 | tron \
- | v850 | v850e \
- | we32k \
- | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
- | z8k | z80)
- basic_machine=$basic_machine-unknown
- ;;
- m6811 | m68hc11 | m6812 | m68hc12)
- # Motorola 68HC11/12.
- basic_machine=$basic_machine-unknown
- os=-none
- ;;
- m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
- ;;
- ms1)
- basic_machine=mt-unknown
- ;;
-
- # We use `pc' rather than `unknown'
- # because (1) that's what they normally are, and
- # (2) the word "unknown" tends to confuse beginning users.
- i*86 | x86_64)
- basic_machine=$basic_machine-pc
- ;;
- # Object if more than one company name word.
- *-*-*)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
- # Recognize the basic CPU types with company name.
- 580-* \
- | a29k-* \
- | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
- | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
- | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
- | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
- | avr-* | avr32-* \
- | bfin-* | bs2000-* \
- | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
- | clipper-* | craynv-* | cydra-* \
- | d10v-* | d30v-* | dlx-* \
- | elxsi-* \
- | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
- | h8300-* | h8500-* \
- | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
- | i*86-* | i860-* | i960-* | ia64-* \
- | ip2k-* | iq2000-* \
- | lm32-* \
- | m32c-* | m32r-* | m32rle-* \
- | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
- | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
- | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
- | mips16-* \
- | mips64-* | mips64el-* \
- | mips64octeon-* | mips64octeonel-* \
- | mips64orion-* | mips64orionel-* \
- | mips64r5900-* | mips64r5900el-* \
- | mips64vr-* | mips64vrel-* \
- | mips64vr4100-* | mips64vr4100el-* \
- | mips64vr4300-* | mips64vr4300el-* \
- | mips64vr5000-* | mips64vr5000el-* \
- | mips64vr5900-* | mips64vr5900el-* \
- | mipsisa32-* | mipsisa32el-* \
- | mipsisa32r2-* | mipsisa32r2el-* \
- | mipsisa64-* | mipsisa64el-* \
- | mipsisa64r2-* | mipsisa64r2el-* \
- | mipsisa64sb1-* | mipsisa64sb1el-* \
- | mipsisa64sr71k-* | mipsisa64sr71kel-* \
- | mipstx39-* | mipstx39el-* \
- | mmix-* \
- | mt-* \
- | msp430-* \
- | nios-* | nios2-* \
- | none-* | np1-* | ns16k-* | ns32k-* \
- | orion-* \
- | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
- | pyramid-* \
- | romp-* | rs6000-* \
- | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
- | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
- | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
- | sparclite-* \
- | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
- | tahoe-* | thumb-* \
- | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
- | tron-* \
- | v850-* | v850e-* | vax-* \
- | we32k-* \
- | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
- | xstormy16-* | xtensa*-* \
- | ymp-* \
- | z8k-* | z80-*)
- ;;
- # Recognize the basic CPU types without company name, with glob match.
- xtensa*)
- basic_machine=$basic_machine-unknown
- ;;
- # Recognize the various machine names and aliases which stand
- # for a CPU type and a company and sometimes even an OS.
- 386bsd)
- basic_machine=i386-unknown
- os=-bsd
- ;;
- 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
- basic_machine=m68000-att
- ;;
- 3b*)
- basic_machine=we32k-att
- ;;
- a29khif)
- basic_machine=a29k-amd
- os=-udi
- ;;
- abacus)
- basic_machine=abacus-unknown
- ;;
- adobe68k)
- basic_machine=m68010-adobe
- os=-scout
- ;;
- alliant | fx80)
- basic_machine=fx80-alliant
- ;;
- altos | altos3068)
- basic_machine=m68k-altos
- ;;
- am29k)
- basic_machine=a29k-none
- os=-bsd
- ;;
- amd64)
- basic_machine=x86_64-pc
- ;;
- amd64-*)
- basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- amdahl)
- basic_machine=580-amdahl
- os=-sysv
- ;;
- amiga | amiga-*)
- basic_machine=m68k-unknown
- ;;
- amigaos | amigados)
- basic_machine=m68k-unknown
- os=-amigaos
- ;;
- amigaunix | amix)
- basic_machine=m68k-unknown
- os=-sysv4
- ;;
- apollo68)
- basic_machine=m68k-apollo
- os=-sysv
- ;;
- apollo68bsd)
- basic_machine=m68k-apollo
- os=-bsd
- ;;
- aros)
- basic_machine=i386-pc
- os=-aros
- ;;
- aux)
- basic_machine=m68k-apple
- os=-aux
- ;;
- balance)
- basic_machine=ns32k-sequent
- os=-dynix
- ;;
- blackfin)
- basic_machine=bfin-unknown
- os=-linux
- ;;
- blackfin-*)
- basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
- os=-linux
- ;;
- bluegene*)
- basic_machine=powerpc-ibm
- os=-cnk
- ;;
- c90)
- basic_machine=c90-cray
- os=-unicos
- ;;
- cegcc)
- basic_machine=arm-unknown
- os=-cegcc
- ;;
- convex-c1)
- basic_machine=c1-convex
- os=-bsd
- ;;
- convex-c2)
- basic_machine=c2-convex
- os=-bsd
- ;;
- convex-c32)
- basic_machine=c32-convex
- os=-bsd
- ;;
- convex-c34)
- basic_machine=c34-convex
- os=-bsd
- ;;
- convex-c38)
- basic_machine=c38-convex
- os=-bsd
- ;;
- cray | j90)
- basic_machine=j90-cray
- os=-unicos
- ;;
- craynv)
- basic_machine=craynv-cray
- os=-unicosmp
- ;;
- cr16)
- basic_machine=cr16-unknown
- os=-elf
- ;;
- crds | unos)
- basic_machine=m68k-crds
- ;;
- crisv32 | crisv32-* | etraxfs*)
- basic_machine=crisv32-axis
- ;;
- cris | cris-* | etrax*)
- basic_machine=cris-axis
- ;;
- crx)
- basic_machine=crx-unknown
- os=-elf
- ;;
- da30 | da30-*)
- basic_machine=m68k-da30
- ;;
- decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
- basic_machine=mips-dec
- ;;
- decsystem10* | dec10*)
- basic_machine=pdp10-dec
- os=-tops10
- ;;
- decsystem20* | dec20*)
- basic_machine=pdp10-dec
- os=-tops20
- ;;
- delta | 3300 | motorola-3300 | motorola-delta \
- | 3300-motorola | delta-motorola)
- basic_machine=m68k-motorola
- ;;
- delta88)
- basic_machine=m88k-motorola
- os=-sysv3
- ;;
- dicos)
- basic_machine=i686-pc
- os=-dicos
- ;;
- djgpp)
- basic_machine=i586-pc
- os=-msdosdjgpp
- ;;
- dpx20 | dpx20-*)
- basic_machine=rs6000-bull
- os=-bosx
- ;;
- dpx2* | dpx2*-bull)
- basic_machine=m68k-bull
- os=-sysv3
- ;;
- ebmon29k)
- basic_machine=a29k-amd
- os=-ebmon
- ;;
- elxsi)
- basic_machine=elxsi-elxsi
- os=-bsd
- ;;
- encore | umax | mmax)
- basic_machine=ns32k-encore
- ;;
- es1800 | OSE68k | ose68k | ose | OSE)
- basic_machine=m68k-ericsson
- os=-ose
- ;;
- fx2800)
- basic_machine=i860-alliant
- ;;
- genix)
- basic_machine=ns32k-ns
- ;;
- gmicro)
- basic_machine=tron-gmicro
- os=-sysv
- ;;
- go32)
- basic_machine=i386-pc
- os=-go32
- ;;
- h3050r* | hiux*)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- h8300hms)
- basic_machine=h8300-hitachi
- os=-hms
- ;;
- h8300xray)
- basic_machine=h8300-hitachi
- os=-xray
- ;;
- h8500hms)
- basic_machine=h8500-hitachi
- os=-hms
- ;;
- harris)
- basic_machine=m88k-harris
- os=-sysv3
- ;;
- hp300-*)
- basic_machine=m68k-hp
- ;;
- hp300bsd)
- basic_machine=m68k-hp
- os=-bsd
- ;;
- hp300hpux)
- basic_machine=m68k-hp
- os=-hpux
- ;;
- hp3k9[0-9][0-9] | hp9[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k2[0-9][0-9] | hp9k31[0-9])
- basic_machine=m68000-hp
- ;;
- hp9k3[2-9][0-9])
- basic_machine=m68k-hp
- ;;
- hp9k6[0-9][0-9] | hp6[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k7[0-79][0-9] | hp7[0-79][0-9])
- basic_machine=hppa1.1-hp
- ;;
- hp9k78[0-9] | hp78[0-9])
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][13679] | hp8[0-9][13679])
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][0-9] | hp8[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hppa-next)
- os=-nextstep3
- ;;
- hppaosf)
- basic_machine=hppa1.1-hp
- os=-osf
- ;;
- hppro)
- basic_machine=hppa1.1-hp
- os=-proelf
- ;;
- i370-ibm* | ibm*)
- basic_machine=i370-ibm
- ;;
-# I'm not sure what "Sysv32" means. Should this be sysv3.2?
- i*86v32)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv32
- ;;
- i*86v4*)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv4
- ;;
- i*86v)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv
- ;;
- i*86sol2)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-solaris2
- ;;
- i386mach)
- basic_machine=i386-mach
- os=-mach
- ;;
- i386-vsta | vsta)
- basic_machine=i386-unknown
- os=-vsta
- ;;
- iris | iris4d)
- basic_machine=mips-sgi
- case $os in
- -irix*)
- ;;
- *)
- os=-irix4
- ;;
- esac
- ;;
- isi68 | isi)
- basic_machine=m68k-isi
- os=-sysv
- ;;
- m68knommu)
- basic_machine=m68k-unknown
- os=-linux
- ;;
- m68knommu-*)
- basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
- os=-linux
- ;;
- m88k-omron*)
- basic_machine=m88k-omron
- ;;
- magnum | m3230)
- basic_machine=mips-mips
- os=-sysv
- ;;
- merlin)
- basic_machine=ns32k-utek
- os=-sysv
- ;;
- mingw32)
- basic_machine=i386-pc
- os=-mingw32
- ;;
- mingw32ce)
- basic_machine=arm-unknown
- os=-mingw32ce
- ;;
- miniframe)
- basic_machine=m68000-convergent
- ;;
- *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
- mips3*-*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
- ;;
- mips3*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
- ;;
- monitor)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- morphos)
- basic_machine=powerpc-unknown
- os=-morphos
- ;;
- msdos)
- basic_machine=i386-pc
- os=-msdos
- ;;
- ms1-*)
- basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
- ;;
- mvs)
- basic_machine=i370-ibm
- os=-mvs
- ;;
- ncr3000)
- basic_machine=i486-ncr
- os=-sysv4
- ;;
- netbsd386)
- basic_machine=i386-unknown
- os=-netbsd
- ;;
- netwinder)
- basic_machine=armv4l-rebel
- os=-linux
- ;;
- news | news700 | news800 | news900)
- basic_machine=m68k-sony
- os=-newsos
- ;;
- news1000)
- basic_machine=m68030-sony
- os=-newsos
- ;;
- news-3600 | risc-news)
- basic_machine=mips-sony
- os=-newsos
- ;;
- necv70)
- basic_machine=v70-nec
- os=-sysv
- ;;
- next | m*-next )
- basic_machine=m68k-next
- case $os in
- -nextstep* )
- ;;
- -ns2*)
- os=-nextstep2
- ;;
- *)
- os=-nextstep3
- ;;
- esac
- ;;
- nh3000)
- basic_machine=m68k-harris
- os=-cxux
- ;;
- nh[45]000)
- basic_machine=m88k-harris
- os=-cxux
- ;;
- nindy960)
- basic_machine=i960-intel
- os=-nindy
- ;;
- mon960)
- basic_machine=i960-intel
- os=-mon960
- ;;
- nonstopux)
- basic_machine=mips-compaq
- os=-nonstopux
- ;;
- np1)
- basic_machine=np1-gould
- ;;
- nsr-tandem)
- basic_machine=nsr-tandem
- ;;
- op50n-* | op60c-*)
- basic_machine=hppa1.1-oki
- os=-proelf
- ;;
- openrisc | openrisc-*)
- basic_machine=or32-unknown
- ;;
- os400)
- basic_machine=powerpc-ibm
- os=-os400
- ;;
- OSE68000 | ose68000)
- basic_machine=m68000-ericsson
- os=-ose
- ;;
- os68k)
- basic_machine=m68k-none
- os=-os68k
- ;;
- pa-hitachi)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- paragon)
- basic_machine=i860-intel
- os=-osf
- ;;
- parisc)
- basic_machine=hppa-unknown
- os=-linux
- ;;
- parisc-*)
- basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
- os=-linux
- ;;
- pbd)
- basic_machine=sparc-tti
- ;;
- pbb)
- basic_machine=m68k-tti
- ;;
- pc532 | pc532-*)
- basic_machine=ns32k-pc532
- ;;
- pc98)
- basic_machine=i386-pc
- ;;
- pc98-*)
- basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentium | p5 | k5 | k6 | nexgen | viac3)
- basic_machine=i586-pc
- ;;
- pentiumpro | p6 | 6x86 | athlon | athlon_*)
- basic_machine=i686-pc
- ;;
- pentiumii | pentium2 | pentiumiii | pentium3)
- basic_machine=i686-pc
- ;;
- pentium4)
- basic_machine=i786-pc
- ;;
- pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
- basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumpro-* | p6-* | 6x86-* | athlon-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentium4-*)
- basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pn)
- basic_machine=pn-gould
- ;;
- power) basic_machine=power-ibm
- ;;
- ppc) basic_machine=powerpc-unknown
- ;;
- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppcle | powerpclittle | ppc-le | powerpc-little)
- basic_machine=powerpcle-unknown
- ;;
- ppcle-* | powerpclittle-*)
- basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64) basic_machine=powerpc64-unknown
- ;;
- ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppc64le | powerpc64little | ppc64-le | powerpc64-little)
- basic_machine=powerpc64le-unknown
- ;;
- ppc64le-* | powerpc64little-*)
- basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ps2)
- basic_machine=i386-ibm
- ;;
- pw32)
- basic_machine=i586-unknown
- os=-pw32
- ;;
- rdos)
- basic_machine=i386-pc
- os=-rdos
- ;;
- rom68k)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- rm[46]00)
- basic_machine=mips-siemens
- ;;
- rtpc | rtpc-*)
- basic_machine=romp-ibm
- ;;
- s390 | s390-*)
- basic_machine=s390-ibm
- ;;
- s390x | s390x-*)
- basic_machine=s390x-ibm
- ;;
- sa29200)
- basic_machine=a29k-amd
- os=-udi
- ;;
- sb1)
- basic_machine=mipsisa64sb1-unknown
- ;;
- sb1el)
- basic_machine=mipsisa64sb1el-unknown
- ;;
- sde)
- basic_machine=mipsisa32-sde
- os=-elf
- ;;
- sei)
- basic_machine=mips-sei
- os=-seiux
- ;;
- sequent)
- basic_machine=i386-sequent
- ;;
- sh)
- basic_machine=sh-hitachi
- os=-hms
- ;;
- sh5el)
- basic_machine=sh5le-unknown
- ;;
- sh64)
- basic_machine=sh64-unknown
- ;;
- sparclite-wrs | simso-wrs)
- basic_machine=sparclite-wrs
- os=-vxworks
- ;;
- sps7)
- basic_machine=m68k-bull
- os=-sysv2
- ;;
- spur)
- basic_machine=spur-unknown
- ;;
- st2000)
- basic_machine=m68k-tandem
- ;;
- stratus)
- basic_machine=i860-stratus
- os=-sysv4
- ;;
- sun2)
- basic_machine=m68000-sun
- ;;
- sun2os3)
- basic_machine=m68000-sun
- os=-sunos3
- ;;
- sun2os4)
- basic_machine=m68000-sun
- os=-sunos4
- ;;
- sun3os3)
- basic_machine=m68k-sun
- os=-sunos3
- ;;
- sun3os4)
- basic_machine=m68k-sun
- os=-sunos4
- ;;
- sun4os3)
- basic_machine=sparc-sun
- os=-sunos3
- ;;
- sun4os4)
- basic_machine=sparc-sun
- os=-sunos4
- ;;
- sun4sol2)
- basic_machine=sparc-sun
- os=-solaris2
- ;;
- sun3 | sun3-*)
- basic_machine=m68k-sun
- ;;
- sun4)
- basic_machine=sparc-sun
- ;;
- sun386 | sun386i | roadrunner)
- basic_machine=i386-sun
- ;;
- sv1)
- basic_machine=sv1-cray
- os=-unicos
- ;;
- symmetry)
- basic_machine=i386-sequent
- os=-dynix
- ;;
- t3e)
- basic_machine=alphaev5-cray
- os=-unicos
- ;;
- t90)
- basic_machine=t90-cray
- os=-unicos
- ;;
- tic54x | c54x*)
- basic_machine=tic54x-unknown
- os=-coff
- ;;
- tic55x | c55x*)
- basic_machine=tic55x-unknown
- os=-coff
- ;;
- tic6x | c6x*)
- basic_machine=tic6x-unknown
- os=-coff
- ;;
- tile*)
- basic_machine=tile-unknown
- os=-linux-gnu
- ;;
- tx39)
- basic_machine=mipstx39-unknown
- ;;
- tx39el)
- basic_machine=mipstx39el-unknown
- ;;
- toad1)
- basic_machine=pdp10-xkl
- os=-tops20
- ;;
- tower | tower-32)
- basic_machine=m68k-ncr
- ;;
- tpf)
- basic_machine=s390x-ibm
- os=-tpf
- ;;
- udi29k)
- basic_machine=a29k-amd
- os=-udi
- ;;
- ultra3)
- basic_machine=a29k-nyu
- os=-sym1
- ;;
- v810 | necv810)
- basic_machine=v810-nec
- os=-none
- ;;
- vaxv)
- basic_machine=vax-dec
- os=-sysv
- ;;
- vms)
- basic_machine=vax-dec
- os=-vms
- ;;
- vpp*|vx|vx-*)
- basic_machine=f301-fujitsu
- ;;
- vxworks960)
- basic_machine=i960-wrs
- os=-vxworks
- ;;
- vxworks68)
- basic_machine=m68k-wrs
- os=-vxworks
- ;;
- vxworks29k)
- basic_machine=a29k-wrs
- os=-vxworks
- ;;
- w65*)
- basic_machine=w65-wdc
- os=-none
- ;;
- w89k-*)
- basic_machine=hppa1.1-winbond
- os=-proelf
- ;;
- xbox)
- basic_machine=i686-pc
- os=-mingw32
- ;;
- xps | xps100)
- basic_machine=xps100-honeywell
- ;;
- ymp)
- basic_machine=ymp-cray
- os=-unicos
- ;;
- z8k-*-coff)
- basic_machine=z8k-unknown
- os=-sim
- ;;
- z80-*-coff)
- basic_machine=z80-unknown
- os=-sim
- ;;
- none)
- basic_machine=none-none
- os=-none
- ;;
-
-# Here we handle the default manufacturer of certain CPU types. It is in
-# some cases the only manufacturer, in others, it is the most popular.
- w89k)
- basic_machine=hppa1.1-winbond
- ;;
- op50n)
- basic_machine=hppa1.1-oki
- ;;
- op60c)
- basic_machine=hppa1.1-oki
- ;;
- romp)
- basic_machine=romp-ibm
- ;;
- mmix)
- basic_machine=mmix-knuth
- ;;
- rs6000)
- basic_machine=rs6000-ibm
- ;;
- vax)
- basic_machine=vax-dec
- ;;
- pdp10)
- # there are many clones, so DEC is not a safe bet
- basic_machine=pdp10-unknown
- ;;
- pdp11)
- basic_machine=pdp11-dec
- ;;
- we32k)
- basic_machine=we32k-att
- ;;
- sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
- basic_machine=sh-unknown
- ;;
- sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
- basic_machine=sparc-sun
- ;;
- cydra)
- basic_machine=cydra-cydrome
- ;;
- orion)
- basic_machine=orion-highlevel
- ;;
- orion105)
- basic_machine=clipper-highlevel
- ;;
- mac | mpw | mac-mpw)
- basic_machine=m68k-apple
- ;;
- pmac | pmac-mpw)
- basic_machine=powerpc-apple
- ;;
- *-unknown)
- # Make sure to match an already-canonicalized machine name.
- ;;
- *)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
- *-digital*)
- basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
- ;;
- *-commodore*)
- basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
- ;;
- *)
- ;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
- # First match some system type aliases
- # that might get confused with valid system types.
- # -solaris* is a basic system type, with this one exception.
- -solaris1 | -solaris1.*)
- os=`echo $os | sed -e 's|solaris1|sunos4|'`
- ;;
- -solaris)
- os=-solaris2
- ;;
- -svr4*)
- os=-sysv4
- ;;
- -unixware*)
- os=-sysv4.2uw
- ;;
- -gnu/linux*)
- os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
- ;;
- # First accept the basic system types.
- # The portable systems comes first.
- # Each alternative MUST END IN A *, to match a version number.
- # -sysv* is not here because it comes later, after sysvr4.
- -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
- | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
- | -kopensolaris* \
- | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* | -aros* \
- | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
- | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
- | -openbsd* | -solidbsd* \
- | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
- | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
- | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- | -chorusos* | -chorusrdb* | -cegcc* \
- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
- | -uxpv* | -beos* | -mpeix* | -udk* \
- | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
- | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
- | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
- | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
- | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
- | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
- | -skyos* | -haiku* | -rdos* | -toppers* | -drops*)
- # Remember, each alternative MUST END IN *, to match a version number.
- ;;
- -qnx*)
- case $basic_machine in
- x86-* | i*86-*)
- ;;
- *)
- os=-nto$os
- ;;
- esac
- ;;
- -nto-qnx*)
- ;;
- -nto*)
- os=`echo $os | sed -e 's|nto|nto-qnx|'`
- ;;
- -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
- | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
- | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
- ;;
- -mac*)
- os=`echo $os | sed -e 's|mac|macos|'`
- ;;
- -linux-dietlibc)
- os=-linux-dietlibc
- ;;
- -linux*)
- os=`echo $os | sed -e 's|linux|linux-gnu|'`
- ;;
- -sunos5*)
- os=`echo $os | sed -e 's|sunos5|solaris2|'`
- ;;
- -sunos6*)
- os=`echo $os | sed -e 's|sunos6|solaris3|'`
- ;;
- -opened*)
- os=-openedition
- ;;
- -os400*)
- os=-os400
- ;;
- -wince*)
- os=-wince
- ;;
- -osfrose*)
- os=-osfrose
- ;;
- -osf*)
- os=-osf
- ;;
- -utek*)
- os=-bsd
- ;;
- -dynix*)
- os=-bsd
- ;;
- -acis*)
- os=-aos
- ;;
- -atheos*)
- os=-atheos
- ;;
- -syllable*)
- os=-syllable
- ;;
- -386bsd)
- os=-bsd
- ;;
- -ctix* | -uts*)
- os=-sysv
- ;;
- -nova*)
- os=-rtmk-nova
- ;;
- -ns2 )
- os=-nextstep2
- ;;
- -nsk*)
- os=-nsk
- ;;
- # Preserve the version number of sinix5.
- -sinix5.*)
- os=`echo $os | sed -e 's|sinix|sysv|'`
- ;;
- -sinix*)
- os=-sysv4
- ;;
- -tpf*)
- os=-tpf
- ;;
- -triton*)
- os=-sysv3
- ;;
- -oss*)
- os=-sysv3
- ;;
- -svr4)
- os=-sysv4
- ;;
- -svr3)
- os=-sysv3
- ;;
- -sysvr4)
- os=-sysv4
- ;;
- # This must come after -sysvr4.
- -sysv*)
- ;;
- -ose*)
- os=-ose
- ;;
- -es1800*)
- os=-ose
- ;;
- -xenix)
- os=-xenix
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- os=-mint
- ;;
- -aros*)
- os=-aros
- ;;
- -kaos*)
- os=-kaos
- ;;
- -zvmoe)
- os=-zvmoe
- ;;
- -dicos*)
- os=-dicos
- ;;
- -none)
- ;;
- *)
- # Get rid of the `-' at the beginning of $os.
- os=`echo $os | sed 's/[^-]*-//'`
- echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
- exit 1
- ;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system. Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
- score-*)
- os=-elf
- ;;
- spu-*)
- os=-elf
- ;;
- *-acorn)
- os=-riscix1.2
- ;;
- arm*-rebel)
- os=-linux
- ;;
- arm*-semi)
- os=-aout
- ;;
- c4x-* | tic4x-*)
- os=-coff
- ;;
- # This must come before the *-dec entry.
- pdp10-*)
- os=-tops20
- ;;
- pdp11-*)
- os=-none
- ;;
- *-dec | vax-*)
- os=-ultrix4.2
- ;;
- m68*-apollo)
- os=-domain
- ;;
- i386-sun)
- os=-sunos4.0.2
- ;;
- m68000-sun)
- os=-sunos3
- # This also exists in the configure program, but was not the
- # default.
- # os=-sunos4
- ;;
- m68*-cisco)
- os=-aout
- ;;
- mep-*)
- os=-elf
- ;;
- mips*-cisco)
- os=-elf
- ;;
- mips*-*)
- os=-elf
- ;;
- or32-*)
- os=-coff
- ;;
- *-tti) # must be before sparc entry or we get the wrong os.
- os=-sysv3
- ;;
- sparc-* | *-sun)
- os=-sunos4.1.1
- ;;
- *-be)
- os=-beos
- ;;
- *-haiku)
- os=-haiku
- ;;
- *-ibm)
- os=-aix
- ;;
- *-knuth)
- os=-mmixware
- ;;
- *-wec)
- os=-proelf
- ;;
- *-winbond)
- os=-proelf
- ;;
- *-oki)
- os=-proelf
- ;;
- *-hp)
- os=-hpux
- ;;
- *-hitachi)
- os=-hiux
- ;;
- i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
- os=-sysv
- ;;
- *-cbm)
- os=-amigaos
- ;;
- *-dg)
- os=-dgux
- ;;
- *-dolphin)
- os=-sysv3
- ;;
- m68k-ccur)
- os=-rtu
- ;;
- m88k-omron*)
- os=-luna
- ;;
- *-next )
- os=-nextstep
- ;;
- *-sequent)
- os=-ptx
- ;;
- *-crds)
- os=-unos
- ;;
- *-ns)
- os=-genix
- ;;
- i370-*)
- os=-mvs
- ;;
- *-next)
- os=-nextstep3
- ;;
- *-gould)
- os=-sysv
- ;;
- *-highlevel)
- os=-bsd
- ;;
- *-encore)
- os=-bsd
- ;;
- *-sgi)
- os=-irix
- ;;
- *-siemens)
- os=-sysv4
- ;;
- *-masscomp)
- os=-rtu
- ;;
- f30[01]-fujitsu | f700-fujitsu)
- os=-uxpv
- ;;
- *-rom68k)
- os=-coff
- ;;
- *-*bug)
- os=-coff
- ;;
- *-apple)
- os=-macos
- ;;
- *-atari*)
- os=-mint
- ;;
- *)
- os=-none
- ;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer. We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
- *-unknown)
- case $os in
- -riscix*)
- vendor=acorn
- ;;
- -sunos*)
- vendor=sun
- ;;
- -cnk*|-aix*)
- vendor=ibm
- ;;
- -beos*)
- vendor=be
- ;;
- -hpux*)
- vendor=hp
- ;;
- -mpeix*)
- vendor=hp
- ;;
- -hiux*)
- vendor=hitachi
- ;;
- -unos*)
- vendor=crds
- ;;
- -dgux*)
- vendor=dg
- ;;
- -luna*)
- vendor=omron
- ;;
- -genix*)
- vendor=ns
- ;;
- -mvs* | -opened*)
- vendor=ibm
- ;;
- -os400*)
- vendor=ibm
- ;;
- -ptx*)
- vendor=sequent
- ;;
- -tpf*)
- vendor=ibm
- ;;
- -vxsim* | -vxworks* | -windiss*)
- vendor=wrs
- ;;
- -aux*)
- vendor=apple
- ;;
- -hms*)
- vendor=hitachi
- ;;
- -mpw* | -macos*)
- vendor=apple
- ;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- vendor=atari
- ;;
- -vos*)
- vendor=stratus
- ;;
- esac
- basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
- ;;
-esac
-
-echo $basic_machine$os
-exit
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/src/3rdparty/libconninet/configure.ac b/src/3rdparty/libconninet/configure.ac
index 2a383ee130..72fa98b08e 100644
--- a/src/3rdparty/libconninet/configure.ac
+++ b/src/3rdparty/libconninet/configure.ac
@@ -75,10 +75,6 @@ PKG_CHECK_MODULES(GCONF, gconf-2.0)
AC_SUBST(GCONF_CFLAGS)
AC_SUBST(GCONF_LIBS)
-PKG_CHECK_MODULES(QGCONF, gq-gconf)
-AC_SUBST(QGCONF_CFLAGS)
-AC_SUBST(QGCONF_LIBS)
-
CONCFLAGS="-Wall -Werror -Wmissing-prototypes"
AC_SUBST(CONCFLAGS)
diff --git a/src/3rdparty/libconninet/debian/changelog b/src/3rdparty/libconninet/debian/changelog
index 4063317d83..10e9dec218 100644
--- a/src/3rdparty/libconninet/debian/changelog
+++ b/src/3rdparty/libconninet/debian/changelog
@@ -1,9 +1,21 @@
-libconninet (0.42+0m6) unstable; urgency=low
+libconninet (0.45) unstable; urgency=low
- * This entry has been added by BIFH queue processor
- version has been changed to 0.42+0m6
+ * Fixes: NB#187470 - libconninet: add automake to build-deps
- -- Qing Jin <ext-qing.1.jin@nokia.com> Thu, 22 Jul 2010 14:04:58 +0300
+ -- Markus Silvan <ext-markus.p.silvan@nokia.com> Wed, 25 Aug 2010 09:02:55 +0300
+
+libconninet (0.44) unstable; urgency=low
+
+ * Added autoconf to build dependencies
+
+ -- Markus Silvan <ext-markus.p.silvan@nokia.com> Wed, 25 Aug 2010 09:02:55 +0300
+
+libconninet (0.43) unstable; urgency=low
+
+ * Fixes: NB#184824 - Getting all proxy variables from gconf in one go
+ which will speedup the HTTP requests done by Qt4.7 webkit
+
+ -- Jukka Rissanen <jukka.rissanen@nokia.com> Thu, 12 Aug 2010 10:15:20 +0300
libconninet (0.42) unstable; urgency=low
diff --git a/src/3rdparty/libconninet/debian/control b/src/3rdparty/libconninet/debian/control
index 2db660f4d5..a2343a0f7b 100644
--- a/src/3rdparty/libconninet/debian/control
+++ b/src/3rdparty/libconninet/debian/control
@@ -3,7 +3,7 @@ Priority: optional
Maintainer: Jukka Rissanen <jukka.rissanen@nokia.com>
Build-Depends: debhelper (>= 4.0.0), autotools-dev, libglib2.0-dev (>= 2.8),
libdbus-1-dev (>= 0.60), libconnsettings0-dev (>= 0.4), icd2-osso-ic-dev,
- icd2-dev, libqt4-dev, libgconf2-dev (>> 2.6.4), libgq-gconf-dev
+ icd2-dev, libqt4-dev, libgconf2-dev (>> 2.6.4), autoconf, automake
Standards-Version: 3.6.2
Section: libs
@@ -12,7 +12,7 @@ Section: libdevel
Architecture: any
Depends: libconninet0 (= ${Source-Version}), libdbus-1-dev (>= 0.60),
libglib2.0-dev (>= 2.8), libconnsettings0-dev (>= 0.4), libqt4-dev,
- icd2-osso-ic-dev, icd2-dev, libgconf2-dev (>> 2.6.4), libgq-gconf-dev
+ icd2-osso-ic-dev, icd2-dev, libgconf2-dev (>> 2.6.4)
Description: Internet Connectivity support library development files
Internet Connectivity support library (libconninet) provides common
support functions for connecting to icd2 and accessing configuration
diff --git a/src/3rdparty/libconninet/src/proxyconf.cpp b/src/3rdparty/libconninet/src/proxyconf.cpp
index 5b2756563b..d377a31075 100644
--- a/src/3rdparty/libconninet/src/proxyconf.cpp
+++ b/src/3rdparty/libconninet/src/proxyconf.cpp
@@ -20,11 +20,13 @@
02110-1301 USA
*/
+#include <QVariant>
+#include <QStringList>
#include <QDebug>
#include <QWriteLocker>
#include <QNetworkProxyFactory>
#include <QNetworkProxy>
-#include <GConfItem>
+#include <gconf/gconf-value.h>
#include <gconf/gconf-client.h>
#include "proxyconf.h"
@@ -34,6 +36,92 @@
namespace Maemo {
+static QString convertKey(const char *key)
+{
+ return QString::fromUtf8(key);
+}
+
+static QVariant convertValue(GConfValue *src)
+{
+ if (!src) {
+ return QVariant();
+ } else {
+ switch (src->type) {
+ case GCONF_VALUE_INVALID:
+ return QVariant(QVariant::Invalid);
+ case GCONF_VALUE_BOOL:
+ return QVariant((bool)gconf_value_get_bool(src));
+ case GCONF_VALUE_INT:
+ return QVariant(gconf_value_get_int(src));
+ case GCONF_VALUE_FLOAT:
+ return QVariant(gconf_value_get_float(src));
+ case GCONF_VALUE_STRING:
+ return QVariant(QString::fromUtf8(gconf_value_get_string(src)));
+ case GCONF_VALUE_LIST:
+ switch (gconf_value_get_list_type(src)) {
+ case GCONF_VALUE_STRING:
+ {
+ QStringList result;
+ for (GSList *elts = gconf_value_get_list(src); elts; elts = elts->next)
+ result.append(QString::fromUtf8(gconf_value_get_string((GConfValue *)elts->data)));
+ return QVariant(result);
+ }
+ default:
+ {
+ QList<QVariant> result;
+ for (GSList *elts = gconf_value_get_list(src); elts; elts = elts->next)
+ result.append(convertValue((GConfValue *)elts->data));
+ return QVariant(result);
+ }
+ }
+ case GCONF_VALUE_SCHEMA:
+ default:
+ return QVariant();
+ }
+ }
+}
+
+
+/* Fast version of GConfItem, allows reading subtree at a time */
+class GConfItemFast {
+public:
+ GConfItemFast(const QString &k) : key(k) {}
+ QHash<QString,QVariant> getEntries() const;
+
+private:
+ QString key;
+};
+
+#define withClient(c) for (GConfClient *c = gconf_client_get_default(); c; c=0)
+
+
+QHash<QString,QVariant> GConfItemFast::getEntries() const
+{
+ QHash<QString,QVariant> children;
+
+ withClient(client) {
+ QByteArray k = key.toUtf8();
+ GSList *entries = gconf_client_all_entries(client, k.data(), NULL);
+ for (GSList *e = entries; e; e = e->next) {
+ char *key_name = strrchr(((GConfEntry *)e->data)->key, '/');
+ if (!key_name)
+ key_name = ((GConfEntry *)e->data)->key;
+ else
+ key_name++;
+ QString key(convertKey(key_name));
+ QVariant value = convertValue(((GConfEntry *)e->data)->value);
+ gconf_entry_unref((GConfEntry *)e->data);
+ //qDebug()<<"key="<<key<<"value="<<value;
+ children.insert(key, value);
+ }
+ g_slist_free (entries);
+ }
+
+ return children;
+}
+
+
+
class NetworkProxyFactory : QNetworkProxyFactory {
public:
NetworkProxyFactory() { }
@@ -71,10 +159,6 @@ private:
QString rtsp_host;
quint16 rtsp_port;
- QVariant getValue(QString& name);
- QVariant getHttpValue(QString& name);
- QVariant getValue(const char *name);
- QVariant getHttpValue(const char *name);
bool isHostExcluded(const QString &host);
public:
@@ -86,51 +170,44 @@ public:
};
-QVariant ProxyConfPrivate::getValue(QString& name)
+static QHash<QString,QVariant> getValues(const QString& prefix)
{
- GConfItem item(prefix + name);
- return item.value();
+ GConfItemFast item(prefix);
+ return item.getEntries();
}
-QVariant ProxyConfPrivate::getHttpValue(QString& name)
+static QHash<QString,QVariant> getHttpValues(const QString& prefix)
{
- GConfItem item(http_prefix + name);
- return item.value();
+ GConfItemFast item(prefix);
+ return item.getEntries();
}
-
-QVariant ProxyConfPrivate::getValue(const char *name)
-{
- QString n = QString(name);
- return getValue(n);
-}
-
-QVariant ProxyConfPrivate::getHttpValue(const char *name)
-{
- QString n = QString(name);
- return getHttpValue(n);
-}
-
-
#define GET(var, type) \
do { \
- var = getValue(#var).to##type (); \
- /*qDebug()<<"var="<<var;*/ \
+ QVariant v = values.value(#var); \
+ if (v.isValid()) \
+ var = v.to##type (); \
} while(0)
-#define GET2(var, name, type) \
+#define GET_HTTP(var, name, type) \
do { \
- var = getHttpValue(#name).to##type (); \
- /*qDebug()<<"var="<<var;*/ \
+ QVariant v = httpValues.value(#name); \
+ if (v.isValid()) \
+ var = v.to##type (); \
} while(0)
void ProxyConfPrivate::readProxyData()
{
+ QHash<QString,QVariant> values = getValues(prefix);
+ QHash<QString,QVariant> httpValues = getHttpValues(http_prefix);
+
+ //qDebug()<<"values="<<values;
+
/* Read the proxy settings from /system/proxy* */
- GET2(http_proxy, host, String);
- GET2(http_port, port, Int);
- GET2(ignore_hosts, ignore_hosts, List);
+ GET_HTTP(http_proxy, host, String);
+ GET_HTTP(http_port, port, Int);
+ GET_HTTP(ignore_hosts, ignore_hosts, List);
GET(mode, String);
GET(autoconfig_url, String);
@@ -271,8 +348,8 @@ ProxyConf::ProxyConf()
: d_ptr(new ProxyConfPrivate)
{
g_type_init();
- d_ptr->prefix = CONF_PROXY "/";
- d_ptr->http_prefix = HTTP_PROXY "/";
+ d_ptr->prefix = CONF_PROXY;
+ d_ptr->http_prefix = HTTP_PROXY;
}
ProxyConf::~ProxyConf()
diff --git a/src/3rdparty/libjpeg.pri b/src/3rdparty/libjpeg.pri
index 4551d7bed1..63f2aca5dc 100644
--- a/src/3rdparty/libjpeg.pri
+++ b/src/3rdparty/libjpeg.pri
@@ -1,3 +1,18 @@
+wince*: {
+ DEFINES += NO_GETENV
+ contains(CE_ARCH,x86):CONFIG -= stl exceptions
+ contains(CE_ARCH,x86):CONFIG += exceptions_off
+}
+
+#Disable warnings in 3rdparty code due to unused arguments
+symbian: {
+ QMAKE_CXXFLAGS.CW += -W nounusedarg
+ TARGET.UID3=0x2001E61B
+} else:contains(QMAKE_CC, gcc): {
+ QMAKE_CFLAGS_WARN_ON += -Wno-unused-parameter -Wno-main
+}
+
+
INCLUDEPATH += $$PWD/libjpeg
SOURCES += \
$$PWD/libjpeg/jaricom.c \
diff --git a/src/3rdparty/webkit/.tag b/src/3rdparty/webkit/.tag
index 11483200bf..ae33228bad 100644
--- a/src/3rdparty/webkit/.tag
+++ b/src/3rdparty/webkit/.tag
@@ -1 +1 @@
-460b651cbe4f6994b492ff08614e57b0e31a24c8
+715b53069911a31a559aa0b3d94ffc6a5ac20988
diff --git a/src/3rdparty/webkit/JavaScriptCore/ChangeLog b/src/3rdparty/webkit/JavaScriptCore/ChangeLog
index 2be6f5a420..9922da666b 100644
--- a/src/3rdparty/webkit/JavaScriptCore/ChangeLog
+++ b/src/3rdparty/webkit/JavaScriptCore/ChangeLog
@@ -1,3 +1,60 @@
+2010-06-16 Thiago Macieira <thiago.macieira@nokia.com>
+
+ Reviewed by NOBODY (OOPS!).
+
+ Reindent the asm code I've moved to inside the function
+ (previous commit)
+
+ * jit/JITStubs.cpp:
+
+2010-06-16 Thiago Macieira <thiago.macieira@nokia.com>
+
+ Reviewed by NOBODY (OOPS!).
+
+ Fix the JIT compilation with the Intel 32-bit C++ compiler.
+
+ ICC doesn't understand the use of "asm" statements outside of
+ function bodies, so move the assembly code inside a dummy
+ function (and mark it so that the compiler doesn't remove it
+ altogether).
+
+ Also removed the ".text" entry that I had added because now
+ the assembly code is properly inside a code section (fixes
+ compilation with -ffunction-sections).
+
+ * jit/JITStubs.cpp:
+
+2010-06-16 Thiago Macieira <thiago.macieira@nokia.com>
+
+ Reviewed by NOBODY (OOPS!).
+
+ Don't use __attribute__((may_alias)) with the Intel compiler,
+ as it doesn't understand it.
+
+ * wtf/Vector.h:
+
+2010-06-16 Thiago Macieira <thiago.macieira@nokia.com>
+
+ Reviewed by NOBODY (OOPS!).
+
+ Fix compilation with the Intel C++ compiler (11.1.072).
+
+ Like RVCT, label pointers must be void*, not const void*.
+
+ * bytecode/Opcode.h:
+
+2010-06-16 Thiago Macieira <thiago.macieira@nokia.com>
+
+ Reviewed by NOBODY (OOPS!).
+
+ Add the WTF_COMPILER_INTEL for when the Intel compiler is used
+ for building. Usually, the Intel compiler masquerades as
+ another compiler in the system and gets away with it, but some
+ times specific fixes are required (such as when using language
+ extensions).
+
+ * wtf/Platform.h:
+
2010-07-08 Andreas Kling <andreas.kling@nokia.com>
Reviewed by Oliver Hunt.
diff --git a/src/3rdparty/webkit/JavaScriptCore/bytecode/Opcode.h b/src/3rdparty/webkit/JavaScriptCore/bytecode/Opcode.h
index 509daeb109..f7f53fd4d4 100644
--- a/src/3rdparty/webkit/JavaScriptCore/bytecode/Opcode.h
+++ b/src/3rdparty/webkit/JavaScriptCore/bytecode/Opcode.h
@@ -206,7 +206,7 @@ namespace JSC {
#undef VERIFY_OPCODE_ID
#if HAVE(COMPUTED_GOTO)
-#if COMPILER(RVCT)
+#if COMPILER(RVCT) || COMPILER(INTEL)
typedef void* Opcode;
#else
typedef const void* Opcode;
diff --git a/src/3rdparty/webkit/JavaScriptCore/jit/JITStubs.cpp b/src/3rdparty/webkit/JavaScriptCore/jit/JITStubs.cpp
index e5fcdc4e0f..23fcb96ee7 100644
--- a/src/3rdparty/webkit/JavaScriptCore/jit/JITStubs.cpp
+++ b/src/3rdparty/webkit/JavaScriptCore/jit/JITStubs.cpp
@@ -113,56 +113,59 @@ COMPILE_ASSERT(offsetof(struct JITStackFrame, savedEBX) == 0x3c, JITStackFrame_s
COMPILE_ASSERT(offsetof(struct JITStackFrame, callFrame) == 0x58, JITStackFrame_callFrame_offset_matches_ctiTrampoline);
COMPILE_ASSERT(offsetof(struct JITStackFrame, code) == 0x50, JITStackFrame_code_offset_matches_ctiTrampoline);
-asm volatile (
-".text\n"
-".globl " SYMBOL_STRING(ctiTrampoline) "\n"
-HIDE_SYMBOL(ctiTrampoline) "\n"
-SYMBOL_STRING(ctiTrampoline) ":" "\n"
- "pushl %ebp" "\n"
- "movl %esp, %ebp" "\n"
- "pushl %esi" "\n"
- "pushl %edi" "\n"
- "pushl %ebx" "\n"
- "subl $0x3c, %esp" "\n"
- "movl $512, %esi" "\n"
- "movl 0x58(%esp), %edi" "\n"
- "call *0x50(%esp)" "\n"
- "addl $0x3c, %esp" "\n"
- "popl %ebx" "\n"
- "popl %edi" "\n"
- "popl %esi" "\n"
- "popl %ebp" "\n"
- "ret" "\n"
-);
-
-asm volatile (
-".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n"
-HIDE_SYMBOL(ctiVMThrowTrampoline) "\n"
-SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n"
+static void __attribute__((used)) asm_wrapper()
+{
+ asm volatile (
+ ".text\n"
+ ".globl " SYMBOL_STRING(ctiTrampoline) "\n"
+ HIDE_SYMBOL(ctiTrampoline) "\n"
+ SYMBOL_STRING(ctiTrampoline) ":" "\n"
+ "pushl %ebp" "\n"
+ "movl %esp, %ebp" "\n"
+ "pushl %esi" "\n"
+ "pushl %edi" "\n"
+ "pushl %ebx" "\n"
+ "subl $0x3c, %esp" "\n"
+ "movl $512, %esi" "\n"
+ "movl 0x58(%esp), %edi" "\n"
+ "call *0x50(%esp)" "\n"
+ "addl $0x3c, %esp" "\n"
+ "popl %ebx" "\n"
+ "popl %edi" "\n"
+ "popl %esi" "\n"
+ "popl %ebp" "\n"
+ "ret" "\n"
+ );
+
+ asm volatile (
+ ".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n"
+ HIDE_SYMBOL(ctiVMThrowTrampoline) "\n"
+ SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n"
#if !USE(JIT_STUB_ARGUMENT_VA_LIST)
- "movl %esp, %ecx" "\n"
+ "movl %esp, %ecx" "\n"
#endif
- "call " SYMBOL_STRING_RELOCATION(cti_vm_throw) "\n"
- "addl $0x3c, %esp" "\n"
- "popl %ebx" "\n"
- "popl %edi" "\n"
- "popl %esi" "\n"
- "popl %ebp" "\n"
- "ret" "\n"
-);
-
-asm volatile (
-".globl " SYMBOL_STRING(ctiOpThrowNotCaught) "\n"
-HIDE_SYMBOL(ctiOpThrowNotCaught) "\n"
-SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n"
- "addl $0x3c, %esp" "\n"
- "popl %ebx" "\n"
- "popl %edi" "\n"
- "popl %esi" "\n"
- "popl %ebp" "\n"
- "ret" "\n"
-);
+ "call " SYMBOL_STRING_RELOCATION(cti_vm_throw) "\n"
+ "addl $0x3c, %esp" "\n"
+ "popl %ebx" "\n"
+ "popl %edi" "\n"
+ "popl %esi" "\n"
+ "popl %ebp" "\n"
+ "ret" "\n"
+ );
+ asm volatile (
+ ".globl " SYMBOL_STRING(ctiOpThrowNotCaught) "\n"
+ HIDE_SYMBOL(ctiOpThrowNotCaught) "\n"
+ SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n"
+ "addl $0x3c, %esp" "\n"
+ "popl %ebx" "\n"
+ "popl %edi" "\n"
+ "popl %esi" "\n"
+ "popl %ebp" "\n"
+ "ret" "\n"
+ );
+}
+
#elif COMPILER(GCC) && CPU(X86_64)
#if USE(JIT_STUB_ARGUMENT_VA_LIST)
diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h b/src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h
index 84b6153511..15f0ffcd30 100644
--- a/src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h
+++ b/src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h
@@ -99,7 +99,10 @@
#undef _WIN32
#endif
-
+/* COMPILER(INTEL) - Intel C++ Compiler */
+#if defined(__INTEL_COMPILER)
+#define WTF_COMPILER_INTEL 1
+#endif
/* ==== CPU() - the target CPU architecture ==== */
diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/Vector.h b/src/3rdparty/webkit/JavaScriptCore/wtf/Vector.h
index 4d9ea61991..c267050a8e 100644
--- a/src/3rdparty/webkit/JavaScriptCore/wtf/Vector.h
+++ b/src/3rdparty/webkit/JavaScriptCore/wtf/Vector.h
@@ -49,7 +49,7 @@ namespace WTF {
#error WTF_ALIGN macros need alignment control.
#endif
- #if COMPILER(GCC) && (((__GNUC__ * 100) + __GNUC_MINOR__) >= 303)
+ #if COMPILER(GCC) && !COMPILER(INTEL) && (((__GNUC__ * 100) + __GNUC_MINOR__) >= 303)
typedef char __attribute__((__may_alias__)) AlignedBufferChar;
#else
typedef char AlignedBufferChar;
diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION
index aff3f2a183..f919bdfc3f 100644
--- a/src/3rdparty/webkit/VERSION
+++ b/src/3rdparty/webkit/VERSION
@@ -4,4 +4,4 @@ This is a snapshot of the Qt port of WebKit from
and has the sha1 checksum
- 460b651cbe4f6994b492ff08614e57b0e31a24c8
+ 715b53069911a31a559aa0b3d94ffc6a5ac20988
diff --git a/src/3rdparty/webkit/WebCore/ChangeLog b/src/3rdparty/webkit/WebCore/ChangeLog
index 98d4d51615..2d20cbda6d 100644
--- a/src/3rdparty/webkit/WebCore/ChangeLog
+++ b/src/3rdparty/webkit/WebCore/ChangeLog
@@ -1,3 +1,105 @@
+2010-09-09 Kristian Amlie <kristian.amlie@nokia.com>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Fixed incorrect Symbian scoping.
+
+ The missing install functionality is only true for mmp based systems.
+
+ https://bugs.webkit.org/show_bug.cgi?id=45268
+
+ * WebCore.pro:
+
+2010-09-12 Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] fix qt_webkit_version.pri install for in-Qt builds
+
+ Always add the target, even if building inside Qt - as opposed to the
+ headers and libraries, there are no rules for that coming from
+ qbase.pri.
+
+ Task-number: QTBUG-13306
+
+ * WebCore.pro:
+
+2010-09-12 Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Let QtWebKit inject itself into the qt configuration
+
+ i.e., don't explicitly deal with qt_webkit_version.pri outside of the
+ webkit source directory.
+
+ Task-number: QTBUG-12379
+
+ * WebCore.pro:
+
+2010-08-20 Girish Ramakrishnan <girish@forwardbias.in>
+
+ Reviewed by Ariya Hidayat.
+
+ [Qt] When using the raster graphics system on Maemo5, allow
+ Flash to render directly into the raster window surface.
+ wmode=transparent is now supported as a result of this change.
+
+ https://bugs.webkit.org/show_bug.cgi?id=44043
+
+ * plugins/qt/PluginViewQt.cpp:
+ (WebCore::PluginView::paintUsingImageSurfaceExtension):
+
+2010-08-18 Girish Ramakrishnan <girish@forwardbias.in>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Implement Maemo5 local rendering NPAPI extension. See
+ https://wiki.mozilla.org/Plugins:NokiaMaemoImageSurface for details.
+
+ With the local rendering extension, Flash will paint into a 16-bit surface.
+ For wmode=transparent, Flash expects the surface to contain the contents
+ beneath it. As it is tricky to implement the content propagation across all
+ graphics systems, transparent Flash is not supported. We just fill the surface
+ with white and wmode=transparent behaves the same as wmode=opaque with a white
+ background.
+
+ https://bugs.webkit.org/show_bug.cgi?id=44043
+
+ * WebCore.pro:
+ * plugins/PluginView.cpp:
+ (WebCore::PluginView::setValue):
+ (WebCore::PluginView::PluginView):
+ * plugins/PluginView.h:
+ * plugins/qt/PluginViewQt.cpp:
+ (WebCore::PluginView::updatePluginWidget):
+ (WebCore::PluginView::paintUsingImageSurfaceExtension):
+ (WebCore::PluginView::paint):
+ (WebCore::PluginView::platformGetValueStatic):
+
+2010-08-17 Girish Ramakrishnan <girish@forwardbias.in>
+
+ Reviewed by Antonio Gomes.
+
+ [Qt] On Maemo5, there is no libgdk-x11-2.0.so symlink. Look for
+ libgdk-x11-2.0.so.0 instead on X11 and Maemo5.
+
+ https://bugs.webkit.org/show_bug.cgi?id=44043
+
+ * plugins/qt/PluginViewQt.cpp:
+ (WebCore::getPluginDisplay):
+
+2010-08-17 Girish Ramakrishnan <girish@forwardbias.in>
+
+ Reviewed by Kenneth Rohde Christiansen.
+ Set PluginQuirkRequiresDefaultScreenDepth for all Flash versions and not
+ just Flash 10.
+
+ https://bugs.webkit.org/show_bug.cgi?id=44043
+
+ * plugins/PluginPackage.cpp:
+ (WebCore::PluginPackage::determineQuirks):
+
2010-08-10 Tor Arne Vestbø <tor.arne.vestbo@nokia.com>
Reviewed by Simon Hausmann.
diff --git a/src/3rdparty/webkit/WebCore/WebCore.pro b/src/3rdparty/webkit/WebCore/WebCore.pro
index 7e57b9c660..4cda5bcb4a 100644
--- a/src/3rdparty/webkit/WebCore/WebCore.pro
+++ b/src/3rdparty/webkit/WebCore/WebCore.pro
@@ -105,7 +105,7 @@ freebsd-*: DEFINES += HAVE_PTHREAD_NP_H
DEFINES += BUILD_WEBKIT
# Remove whole program optimizations due to miscompilations
-win32-msvc2005|win32-msvc2008:{
+win32-msvc2005|win32-msvc2008|wince*:{
QMAKE_CFLAGS_RELEASE -= -GL
QMAKE_CXXFLAGS_RELEASE -= -GL
}
@@ -2193,6 +2193,9 @@ contains(DEFINES, ENABLE_NETSCAPE_PLUGIN_API=1) {
CONFIG += x11
LIBS += -lXrender
}
+ maemo5 {
+ DEFINES += MOZ_PLATFORM_MAEMO=5
+ }
SOURCES += \
plugins/qt/PluginContainerQt.cpp \
plugins/qt/PluginPackageQt.cpp \
@@ -2884,7 +2887,7 @@ HEADERS += $$WEBKIT_API_HEADERS
exists($$OUTPUT_DIR/include/QtWebKit/classheaders.pri): include($$OUTPUT_DIR/include/QtWebKit/classheaders.pri)
WEBKIT_INSTALL_HEADERS = $$WEBKIT_API_HEADERS $$WEBKIT_CLASS_HEADERS
- !symbian {
+ !symbian-abld:!symbian-sbsv2 {
headers.files = $$WEBKIT_INSTALL_HEADERS
!isEmpty(INSTALL_HEADERS): headers.path = $$INSTALL_HEADERS/QtWebKit
@@ -2895,7 +2898,7 @@ HEADERS += $$WEBKIT_API_HEADERS
INSTALLS += target headers
} else {
- # INSTALLS is not implemented in qmake's s60 generators, copy headers manually
+ # INSTALLS is not implemented in qmake's mmp generators, copy headers manually
inst_headers.commands = $$QMAKE_COPY ${QMAKE_FILE_NAME} ${QMAKE_FILE_OUT}
inst_headers.input = WEBKIT_INSTALL_HEADERS
inst_headers.CONFIG = no_clean
@@ -2950,7 +2953,7 @@ HEADERS += $$WEBKIT_API_HEADERS
}
}
-CONFIG(QTDIR_build) {
+!CONFIG(webkit-debug):CONFIG(QTDIR_build) {
# Remove the following 2 lines if you want debug information in WebCore
CONFIG -= separate_debug_info
CONFIG += no_debug_info
diff --git a/src/3rdparty/webkit/WebCore/bridge/npapi.h b/src/3rdparty/webkit/WebCore/bridge/npapi.h
index 533fcba4b7..daa3a36c05 100644
--- a/src/3rdparty/webkit/WebCore/bridge/npapi.h
+++ b/src/3rdparty/webkit/WebCore/bridge/npapi.h
@@ -247,6 +247,12 @@ typedef struct _NPRect
} NPRect;
+typedef struct _NPSize
+{
+ int32 width;
+ int32 height;
+} NPSize;
+
#ifdef XP_UNIX
/*
* Unix specific structures and definitions
@@ -373,6 +379,11 @@ typedef enum {
/* In the NPDrawingModelCoreAnimation drawing model, the browser asks the plug-in for a Core Animation layer. */
NPPVpluginCoreAnimationLayer = 1003
#endif
+
+
+#if defined(MOZ_PLATFORM_MAEMO) && (MOZ_PLATFORM_MAEMO == 5)
+ NPPVpluginWindowlessLocalBool = 2002
+#endif
} NPPVariable;
/*
@@ -419,6 +430,9 @@ typedef enum {
, NPNVsupportsCocoaBool = 3001 /* TRUE if the browser supports the Cocoa event model */
#endif /* XP_MACOSX */
+#if defined(MOZ_PLATFORM_MAEMO) && (MOZ_PLATFORM_MAEMO == 5)
+ , NPNVSupportsWindowlessLocal = 2002
+#endif
} NPNVariable;
typedef enum {
@@ -539,6 +553,23 @@ typedef struct _NPWindow
} NPWindow;
+typedef struct _NPImageExpose
+{
+ char* data; /* image pointer */
+ int32 stride; /* Stride of data image pointer */
+ int32 depth; /* Depth of image pointer */
+ int32 x; /* Expose x */
+ int32 y; /* Expose y */
+ uint32 width; /* Expose width */
+ uint32 height; /* Expose height */
+ NPSize dataSize; /* Data buffer size */
+ float translateX; /* translate X matrix value */
+ float translateY; /* translate Y matrix value */
+ float scaleX; /* scale X matrix value */
+ float scaleY; /* scale Y matrix value */
+} NPImageExpose;
+
+
typedef struct _NPFullPrint
{
NPBool pluginPrinted; /* Set TRUE if plugin handled fullscreen */
diff --git a/src/3rdparty/webkit/WebCore/plugins/PluginPackage.cpp b/src/3rdparty/webkit/WebCore/plugins/PluginPackage.cpp
index ad03ecd8d3..3881f54067 100644
--- a/src/3rdparty/webkit/WebCore/plugins/PluginPackage.cpp
+++ b/src/3rdparty/webkit/WebCore/plugins/PluginPackage.cpp
@@ -185,12 +185,12 @@ void PluginPackage::determineQuirks(const String& mimeType)
#if PLATFORM(QT)
m_quirks.add(PluginQuirkRequiresGtkToolKit);
#endif
- m_quirks.add(PluginQuirkRequiresDefaultScreenDepth);
} else {
// Flash 9 and older requests windowless plugins if we return a mozilla user agent
m_quirks.add(PluginQuirkWantsMozillaUserAgent);
}
+ m_quirks.add(PluginQuirkRequiresDefaultScreenDepth);
m_quirks.add(PluginQuirkThrottleInvalidate);
m_quirks.add(PluginQuirkThrottleWMUserPlusOneMessages);
m_quirks.add(PluginQuirkFlashURLNotifyBug);
diff --git a/src/3rdparty/webkit/WebCore/plugins/PluginView.cpp b/src/3rdparty/webkit/WebCore/plugins/PluginView.cpp
index df9a29bcf8..b8b2f2f1fc 100644
--- a/src/3rdparty/webkit/WebCore/plugins/PluginView.cpp
+++ b/src/3rdparty/webkit/WebCore/plugins/PluginView.cpp
@@ -1,6 +1,7 @@
/*
* Copyright (C) 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
* Copyright (C) 2008 Collabora Ltd. All rights reserved.
+ * Copyright (C) 2010 Girish Ramakrishnan <girish@forwardbias.in>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -679,6 +680,12 @@ NPError PluginView::setValue(NPPVariable variable, void* value)
}
#endif // defined(XP_MACOSX)
+#if PLATFORM(QT) && defined(MOZ_PLATFORM_MAEMO) && (MOZ_PLATFORM_MAEMO == 5)
+ case NPPVpluginWindowlessLocalBool:
+ m_renderToImage = true;
+ return NPERR_NO_ERROR;
+#endif
+
default:
notImplemented();
return NPERR_GENERIC_ERROR;
@@ -852,6 +859,9 @@ PluginView::PluginView(Frame* parentFrame, const IntSize& size, PluginPackage* p
, m_colormap(0)
, m_pluginDisplay(0)
#endif
+#if PLATFORM(QT) && defined(MOZ_PLATFORM_MAEMO) && (MOZ_PLATFORM_MAEMO == 5)
+ , m_renderToImage(false)
+#endif
, m_loadManually(loadManually)
, m_manualStream(0)
, m_isJavaScriptPaused(false)
diff --git a/src/3rdparty/webkit/WebCore/plugins/PluginView.h b/src/3rdparty/webkit/WebCore/plugins/PluginView.h
index 51b21272ab..f34613444f 100644
--- a/src/3rdparty/webkit/WebCore/plugins/PluginView.h
+++ b/src/3rdparty/webkit/WebCore/plugins/PluginView.h
@@ -54,6 +54,10 @@ typedef PlatformWidget PlatformPluginWidget;
#include <QPixmap>
#endif
#endif
+#if PLATFORM(QT) && defined(MOZ_PLATFORM_MAEMO) && (MOZ_PLATFORM_MAEMO == 5)
+#include <QImage>
+class QPainter;
+#endif
namespace JSC {
namespace Bindings {
@@ -371,6 +375,12 @@ private:
void initXEvent(XEvent* event);
#endif
+#if PLATFORM(QT) && defined(MOZ_PLATFORM_MAEMO) && (MOZ_PLATFORM_MAEMO == 5)
+ QImage m_image;
+ bool m_renderToImage;
+ void paintUsingImageSurfaceExtension(QPainter* painter, const IntRect& exposedRect);
+#endif
+
IntRect m_clipRect; // The clip rect to apply to a windowed plug-in
IntRect m_windowRect; // Our window rect.
diff --git a/src/3rdparty/webkit/WebCore/plugins/qt/PluginViewQt.cpp b/src/3rdparty/webkit/WebCore/plugins/qt/PluginViewQt.cpp
index fb88b87bd1..8dadc117e4 100644
--- a/src/3rdparty/webkit/WebCore/plugins/qt/PluginViewQt.cpp
+++ b/src/3rdparty/webkit/WebCore/plugins/qt/PluginViewQt.cpp
@@ -110,12 +110,20 @@ void PluginView::updatePluginWidget()
return;
if (!m_isWindowed && m_windowRect.size() != oldWindowRect.size()) {
- if (m_drawable)
- XFreePixmap(QX11Info::display(), m_drawable);
+#if defined(MOZ_PLATFORM_MAEMO) && (MOZ_PLATFORM_MAEMO == 5)
+ // On Maemo5, Flash always renders to 16-bit buffer
+ if (m_renderToImage)
+ m_image = QImage(m_windowRect.width(), m_windowRect.height(), QImage::Format_RGB16);
+ else
+#endif
+ {
+ if (m_drawable)
+ XFreePixmap(QX11Info::display(), m_drawable);
- m_drawable = XCreatePixmap(QX11Info::display(), QX11Info::appRootWindow(), m_windowRect.width(), m_windowRect.height(),
- ((NPSetWindowCallbackStruct*)m_npWindow.ws_info)->depth);
- QApplication::syncX(); // make sure that the server knows about the Drawable
+ m_drawable = XCreatePixmap(QX11Info::display(), QX11Info::appRootWindow(), m_windowRect.width(), m_windowRect.height(),
+ ((NPSetWindowCallbackStruct*)m_npWindow.ws_info)->depth);
+ QApplication::syncX(); // make sure that the server knows about the Drawable
+ }
}
// do not call setNPWindowIfNeeded immediately, will be called on paint()
@@ -154,6 +162,71 @@ void PluginView::hide()
Widget::hide();
}
+#if defined(MOZ_PLATFORM_MAEMO) && (MOZ_PLATFORM_MAEMO == 5)
+void PluginView::paintUsingImageSurfaceExtension(QPainter* painter, const IntRect& exposedRect)
+{
+ NPImageExpose imageExpose;
+ QPoint offset;
+ QWebPageClient* client = m_parentFrame->view()->hostWindow()->platformPageClient();
+ const bool surfaceHasUntransformedContents = client && qobject_cast<QWidget*>(client->pluginParent());
+
+ QPaintDevice* surface = QPainter::redirected(painter->device(), &offset);
+
+ // If the surface is a QImage, we can render directly into it
+ if (surfaceHasUntransformedContents && surface && surface->devType() == QInternal::Image) {
+ QImage* image = static_cast<QImage*>(surface);
+ offset = -offset; // negating the offset gives us the offset of the view within the surface
+ imageExpose.data = reinterpret_cast<char*>(image->bits());
+ imageExpose.dataSize.width = image->width();
+ imageExpose.dataSize.height = image->height();
+ imageExpose.stride = image->bytesPerLine();
+ imageExpose.depth = image->depth(); // this is guaranteed to be 16 on Maemo5
+ imageExpose.translateX = offset.x() + m_windowRect.x();
+ imageExpose.translateY = offset.y() + m_windowRect.y();
+ imageExpose.scaleX = 1;
+ imageExpose.scaleY = 1;
+ } else {
+ if (m_isTransparent) {
+ // On Maemo5, Flash expects the buffer to contain the contents that are below it.
+ // We don't support transparency for non-raster graphicssystem, so clean the image
+ // before giving to Flash.
+ QPainter imagePainter(&m_image);
+ imagePainter.fillRect(exposedRect, Qt::white);
+ }
+
+ imageExpose.data = reinterpret_cast<char*>(m_image.bits());
+ imageExpose.dataSize.width = m_image.width();
+ imageExpose.dataSize.height = m_image.height();
+ imageExpose.stride = m_image.bytesPerLine();
+ imageExpose.depth = m_image.depth();
+ imageExpose.translateX = 0;
+ imageExpose.translateY = 0;
+ imageExpose.scaleX = 1;
+ imageExpose.scaleY = 1;
+ }
+ imageExpose.x = exposedRect.x();
+ imageExpose.y = exposedRect.y();
+ imageExpose.width = exposedRect.width();
+ imageExpose.height = exposedRect.height();
+
+ XEvent xevent;
+ memset(&xevent, 0, sizeof(XEvent));
+ XGraphicsExposeEvent& exposeEvent = xevent.xgraphicsexpose;
+ exposeEvent.type = GraphicsExpose;
+ exposeEvent.display = 0;
+ exposeEvent.drawable = reinterpret_cast<XID>(&imageExpose);
+ exposeEvent.x = exposedRect.x();
+ exposeEvent.y = exposedRect.y();
+ exposeEvent.width = exposedRect.width();
+ exposeEvent.height = exposedRect.height();
+
+ dispatchNPEvent(xevent);
+
+ if (!surfaceHasUntransformedContents || !surface || surface->devType() != QInternal::Image)
+ painter->drawImage(QPoint(frameRect().x() + exposedRect.x(), frameRect().y() + exposedRect.y()), m_image, exposedRect);
+}
+#endif
+
void PluginView::paint(GraphicsContext* context, const IntRect& rect)
{
if (!m_isStarted) {
@@ -166,19 +239,32 @@ void PluginView::paint(GraphicsContext* context, const IntRect& rect)
setNPWindowIfNeeded();
- if (m_isWindowed || !m_drawable)
+ if (m_isWindowed)
return;
- const bool syncX = m_pluginDisplay && m_pluginDisplay != QX11Info::display();
+ if (!m_drawable
+#if defined(MOZ_PLATFORM_MAEMO) && (MOZ_PLATFORM_MAEMO == 5)
+ && m_image.isNull()
+#endif
+ )
+ return;
QPainter* painter = context->platformContext();
IntRect exposedRect(rect);
exposedRect.intersect(frameRect());
exposedRect.move(-frameRect().x(), -frameRect().y());
+#if defined(MOZ_PLATFORM_MAEMO) && (MOZ_PLATFORM_MAEMO == 5)
+ if (!m_image.isNull()) {
+ paintUsingImageSurfaceExtension(painter, exposedRect);
+ return;
+ }
+#endif
+
QPixmap qtDrawable = QPixmap::fromX11Pixmap(m_drawable, QPixmap::ExplicitlyShared);
const int drawableDepth = ((NPSetWindowCallbackStruct*)m_npWindow.ws_info)->depth;
ASSERT(drawableDepth == qtDrawable.depth());
+ const bool syncX = m_pluginDisplay && m_pluginDisplay != QX11Info::display();
// When printing, Qt uses a QPicture to capture the output in preview mode. The
// QPicture holds a reference to the X Pixmap. As a result, the print preview would
@@ -576,6 +662,13 @@ bool PluginView::platformGetValueStatic(NPNVariable variable, void* value, NPErr
*result = NPERR_NO_ERROR;
return true;
+#if defined(MOZ_PLATFORM_MAEMO) && (MOZ_PLATFORM_MAEMO == 5)
+ case NPNVSupportsWindowlessLocal:
+ *static_cast<NPBool*>(value) = true;
+ *result = NPERR_NO_ERROR;
+ return true;
+#endif
+
default:
return false;
}
@@ -651,7 +744,7 @@ static Display *getPluginDisplay()
// support gdk based plugins (like flash) that use a different X connection.
// The code below has the same effect as this one:
// Display *gdkDisplay = gdk_x11_display_get_xdisplay(gdk_display_get_default());
- QLibrary library("libgdk-x11-2.0");
+ QLibrary library("libgdk-x11-2.0.so.0");
if (!library.load())
return 0;
diff --git a/src/3rdparty/webkit/WebKit.pri b/src/3rdparty/webkit/WebKit.pri
index a080c437e9..bb3fd71660 100644
--- a/src/3rdparty/webkit/WebKit.pri
+++ b/src/3rdparty/webkit/WebKit.pri
@@ -79,5 +79,5 @@ contains(DEFINES, QT_NO_UITOOLS): CONFIG -= uitools
# Disable a few warnings on Windows. The warnings are also
# disabled in WebKitLibraries/win/tools/vsprops/common.vsprops
-win32-msvc*: QMAKE_CXXFLAGS += -wd4291 -wd4344 -wd4396 -wd4503 -wd4800 -wd4819 -wd4996
+win32-msvc*|wince*: QMAKE_CXXFLAGS += -wd4291 -wd4344 -wd4396 -wd4503 -wd4800 -wd4819 -wd4996
diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebkitglobal.h b/src/3rdparty/webkit/WebKit/qt/Api/qwebkitglobal.h
index 665bf1b802..63d9e55ba0 100644
--- a/src/3rdparty/webkit/WebKit/qt/Api/qwebkitglobal.h
+++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebkitglobal.h
@@ -22,9 +22,9 @@
#include <QtCore/qglobal.h>
-#define QTWEBKIT_VERSION_STR "2.0.0"
+#define QTWEBKIT_VERSION_STR "2.0.1"
// QTWEBKIT_VERSION is (major << 16) + (minor << 8) + patch. Similar to Qt.
-#define QTWEBKIT_VERSION 0x020000
+#define QTWEBKIT_VERSION 0x020001
// Use: #if (QTWEBKIT_VERSION >= QTWEBKIT_VERSION_CHECK(2, 0, 0)). Similar to Qt.
#define QTWEBKIT_VERSION_CHECK(major, minor, patch) ((major<<16)|(minor<<8)|(patch))
diff --git a/src/3rdparty/webkit/WebKit/qt/ChangeLog b/src/3rdparty/webkit/WebKit/qt/ChangeLog
index 5083ba539d..c6c3d72f30 100644
--- a/src/3rdparty/webkit/WebKit/qt/ChangeLog
+++ b/src/3rdparty/webkit/WebKit/qt/ChangeLog
@@ -1,3 +1,80 @@
+2010-09-12 Martin Smith <martin.smith@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ doc: Changed the title so lists of contents sort better.
+
+ * docs/qtwebkit.qdoc:
+
+2010-09-12 David Boddie <david.boddie@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Doc: More work on the QML documentation.
+
+ * declarative/qdeclarativewebview.cpp:
+
+2010-09-12 Martin Jones <martin.jones@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qml] Ensure WebView gets focus when an editable node is clicked on.
+
+ Task-number: QTBUG-13342
+
+ * declarative/qdeclarativewebview.cpp:
+ (GraphicsWebView::mousePressEvent):
+
+2010-09-12 David Boddie <david.boddie@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Doc: qdoc fixes.
+
+ * declarative/qdeclarativewebview.cpp:
+
+2010-09-12 Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] let WebKit inject itself into the qt configuration
+
+ Task-number: QTBUG-12379
+
+ * qt_webkit_version.pri: Use the faster + instead of *
+ operator to add webkit to the config.
+
+2010-09-12 Martin Smith <martin.smith@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Fix group of declarative web view in QML docs.
+
+ * declarative/qdeclarativewebview.cpp:
+
+2010-08-20 Girish Ramakrishnan <girish@forwardbias.in>
+
+ Reviewed by Ariya Hidayat.
+
+ [Qt] Allow wmode=transparent in QWebView on Maemo5 after r65775.
+
+ https://bugs.webkit.org/show_bug.cgi?id=44043
+
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::createPlugin):
+
+2010-08-19 Girish Ramakrishnan <girish@forwardbias.in>
+
+ Reviewed by Kenneth Christiansen.
+
+ [Qt] Inject wmode=opaque for both QWebView and QGraphicsWebView on Maemo5
+ as Flash XEmbed support is flaky.
+
+ https://bugs.webkit.org/show_bug.cgi?id=44043
+
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::createPlugin):
+
2010-08-05 David Leong <david.leong@nokia.com>
Reviewed by Simon Hausmann.
diff --git a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp
index 713fa3972d..dcbf614c23 100644
--- a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp
+++ b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp
@@ -4,7 +4,7 @@
* Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)
* Copyright (C) 2008 Collabora Ltd. All rights reserved.
* Coypright (C) 2008 Holger Hans Peter Freyther
- * Coypright (C) 2009 Girish Ramakrishnan <girish@forwardbias.in>
+ * Coypright (C) 2009, 2010 Girish Ramakrishnan <girish@forwardbias.in>
*
* All rights reserved.
*
@@ -1349,7 +1349,19 @@ PassRefPtr<Widget> FrameLoaderClientQt::createPlugin(const IntSize& pluginSize,
Vector<String> values = paramValues;
if (mimeType == "application/x-shockwave-flash") {
QWebPageClient* client = m_webFrame->page()->d->client;
- if (!client || !qobject_cast<QWidget*>(client->pluginParent())) {
+ const bool isQWebView = client && qobject_cast<QWidget*>(client->pluginParent());
+#if defined(MOZ_PLATFORM_MAEMO) && (MOZ_PLATFORM_MAEMO == 5)
+ size_t wmodeIndex = params.find("wmode");
+ if (wmodeIndex == -1) {
+ // Disable XEmbed mode and force it to opaque mode
+ params.append("wmode");
+ values.append("opaque");
+ } else if (!isQWebView) {
+ // Disable transparency if client is not a QWebView
+ values[wmodeIndex] = "opaque";
+ }
+#else
+ if (!isQWebView) {
// inject wmode=opaque when there is no client or the client is not a QWebView
size_t wmodeIndex = params.find("wmode");
if (wmodeIndex == -1) {
@@ -1358,6 +1370,7 @@ PassRefPtr<Widget> FrameLoaderClientQt::createPlugin(const IntSize& pluginSize,
} else
values[wmodeIndex] = "opaque";
}
+#endif
}
RefPtr<PluginView> pluginView = PluginView::create(m_frame, pluginSize, element, url,
diff --git a/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri b/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri
index 4594d1eec3..f2282f847d 100644
--- a/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri
+++ b/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri
@@ -1,5 +1,5 @@
-QT_WEBKIT_VERSION = 4.7.0
+QT_WEBKIT_VERSION = 4.7.1
QT_WEBKIT_MAJOR_VERSION = 4
QT_WEBKIT_MINOR_VERSION = 7
-QT_WEBKIT_PATCH_VERSION = 0
+QT_WEBKIT_PATCH_VERSION = 1
QT_CONFIG += webkit
diff --git a/src/corelib/arch/arch.pri b/src/corelib/arch/arch.pri
index 57bc80a725..971069f604 100644
--- a/src/corelib/arch/arch.pri
+++ b/src/corelib/arch/arch.pri
@@ -21,7 +21,9 @@ vxworks:HEADERS += arch/qatomic_vxworks.h
arch/qatomic_generic.h \
arch/qatomic_powerpc.h \
arch/qatomic_arm.h \
+ arch/qatomic_armv5.h \
arch/qatomic_armv6.h \
+ arch/qatomic_armv7.h \
arch/qatomic_i386.h \
arch/qatomic_mips.h \
arch/qatomic_s390.h \
diff --git a/src/corelib/arch/armv6/arch.pri b/src/corelib/arch/armv6/arch.pri
deleted file mode 100644
index fd0cce1520..0000000000
--- a/src/corelib/arch/armv6/arch.pri
+++ /dev/null
@@ -1,3 +0,0 @@
-#
-# ARMv6
-#
diff --git a/src/corelib/arch/qatomic_arm.h b/src/corelib/arch/qatomic_arm.h
index 9df02a24d4..f9d71e99f0 100644
--- a/src/corelib/arch/qatomic_arm.h
+++ b/src/corelib/arch/qatomic_arm.h
@@ -44,387 +44,32 @@
QT_BEGIN_HEADER
-QT_BEGIN_NAMESPACE
-
-#define Q_ATOMIC_INT_REFERENCE_COUNTING_IS_NOT_NATIVE
-
-inline bool QBasicAtomicInt::isReferenceCountingNative()
-{ return false; }
-inline bool QBasicAtomicInt::isReferenceCountingWaitFree()
-{ return false; }
-
-#define Q_ATOMIC_INT_TEST_AND_SET_IS_NOT_NATIVE
-
-inline bool QBasicAtomicInt::isTestAndSetNative()
-{ return false; }
-inline bool QBasicAtomicInt::isTestAndSetWaitFree()
-{ return false; }
-
-#define Q_ATOMIC_INT_FETCH_AND_STORE_IS_ALWAYS_NATIVE
-#define Q_ATOMIC_INT_FETCH_AND_STORE_IS_WAIT_FREE
-
-inline bool QBasicAtomicInt::isFetchAndStoreNative()
-{ return true; }
-inline bool QBasicAtomicInt::isFetchAndStoreWaitFree()
-{ return true; }
-
-#define Q_ATOMIC_INT_FETCH_AND_ADD_IS_NOT_NATIVE
-
-inline bool QBasicAtomicInt::isFetchAndAddNative()
-{ return false; }
-inline bool QBasicAtomicInt::isFetchAndAddWaitFree()
-{ return false; }
-
-#define Q_ATOMIC_POINTER_TEST_AND_SET_IS_NOT_NATIVE
-
-template <typename T>
-Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isTestAndSetNative()
-{ return false; }
-template <typename T>
-Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isTestAndSetWaitFree()
-{ return false; }
-
-#define Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_ALWAYS_NATIVE
-#define Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_WAIT_FREE
-
-template <typename T>
-Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isFetchAndStoreNative()
-{ return true; }
-template <typename T>
-Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isFetchAndStoreWaitFree()
-{ return true; }
-
-#define Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_NOT_NATIVE
-
-template <typename T>
-Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isFetchAndAddNative()
-{ return false; }
-template <typename T>
-Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isFetchAndAddWaitFree()
-{ return false; }
-
-#ifndef QT_NO_ARM_EABI
-
-// 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);
-#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))
-
-#else
-
-extern Q_CORE_EXPORT char q_atomic_lock;
-Q_CORE_EXPORT void qt_atomic_yield(int *);
-
-#ifdef Q_CC_RVCT
-
-Q_CORE_EXPORT __asm char q_atomic_swp(volatile char *ptr, char newval);
-
-#else
-
-inline char q_atomic_swp(volatile char *ptr, char newval)
-{
- register char ret;
- asm volatile("swpb %0,%2,[%3]"
- : "=&r"(ret), "=m" (*ptr)
- : "r"(newval), "r"(ptr)
- : "cc", "memory");
- return ret;
-}
-
-#endif // Q_CC_RVCT
-
-#endif // QT_NO_ARM_EABI
-
-// Reference counting
-
-inline bool QBasicAtomicInt::ref()
-{
-#ifndef QT_NO_ARM_EABI
- register int originalValue;
- register int newValue;
- do {
- originalValue = _q_value;
- newValue = originalValue + 1;
- } while (qt_atomic_eabi_cmpxchg_int(originalValue, newValue, &_q_value) != 0);
- return newValue != 0;
-#else
- int count = 0;
- while (q_atomic_swp(&q_atomic_lock, ~0) != 0)
- qt_atomic_yield(&count);
- int originalValue = _q_value++;
- q_atomic_swp(&q_atomic_lock, 0);
- return originalValue != -1;
-#endif
-}
-
-inline bool QBasicAtomicInt::deref()
-{
-#ifndef QT_NO_ARM_EABI
- register int originalValue;
- register int newValue;
- do {
- originalValue = _q_value;
- newValue = originalValue - 1;
- } while (qt_atomic_eabi_cmpxchg_int(originalValue, newValue, &_q_value) != 0);
- return newValue != 0;
-#else
- int count = 0;
- while (q_atomic_swp(&q_atomic_lock, ~0) != 0)
- qt_atomic_yield(&count);
- int originalValue = _q_value--;
- q_atomic_swp(&q_atomic_lock, 0);
- return originalValue != 1;
-#endif
-}
-
-// Test and set for integers
-
-inline bool QBasicAtomicInt::testAndSetOrdered(int expectedValue, int newValue)
-{
-#ifndef QT_NO_ARM_EABI
- register int originalValue;
- do {
- originalValue = _q_value;
- if (originalValue != expectedValue)
- return false;
- } while (qt_atomic_eabi_cmpxchg_int(expectedValue, newValue, &_q_value) != 0);
- return true;
-#else
- bool returnValue = false;
- int count = 0;
- while (q_atomic_swp(&q_atomic_lock, ~0) != 0)
- qt_atomic_yield(&count);
- if (_q_value == expectedValue) {
- _q_value = newValue;
- returnValue = true;
- }
- q_atomic_swp(&q_atomic_lock, 0);
- return returnValue;
-#endif
-}
-
-inline bool QBasicAtomicInt::testAndSetRelaxed(int expectedValue, int newValue)
-{
- return testAndSetOrdered(expectedValue, newValue);
-}
-
-inline bool QBasicAtomicInt::testAndSetAcquire(int expectedValue, int newValue)
-{
- return testAndSetOrdered(expectedValue, newValue);
-}
-
-inline bool QBasicAtomicInt::testAndSetRelease(int expectedValue, int newValue)
-{
- return testAndSetOrdered(expectedValue, newValue);
-}
-
-// Fetch and store for integers
-
-#ifndef Q_CC_RVCT
-
-inline int QBasicAtomicInt::fetchAndStoreOrdered(int newValue)
-{
- int originalValue;
- asm volatile("swp %0,%2,[%3]"
- : "=&r"(originalValue), "=m" (_q_value)
- : "r"(newValue), "r"(&_q_value)
- : "cc", "memory");
- return originalValue;
-}
-
-#endif
-
-inline int QBasicAtomicInt::fetchAndStoreRelaxed(int newValue)
-{
- return fetchAndStoreOrdered(newValue);
-}
-
-inline int QBasicAtomicInt::fetchAndStoreAcquire(int newValue)
-{
- return fetchAndStoreOrdered(newValue);
-}
-
-inline int QBasicAtomicInt::fetchAndStoreRelease(int newValue)
-{
- return fetchAndStoreOrdered(newValue);
-}
-
-// Fetch and add for integers
-
-inline int QBasicAtomicInt::fetchAndAddOrdered(int valueToAdd)
-{
-#ifndef QT_NO_ARM_EABI
- register int originalValue;
- register int newValue;
- do {
- originalValue = _q_value;
- newValue = originalValue + valueToAdd;
- } while (qt_atomic_eabi_cmpxchg_int(originalValue, newValue, &_q_value) != 0);
- return originalValue;
-#else
- int count = 0;
- while (q_atomic_swp(&q_atomic_lock, ~0) != 0)
- qt_atomic_yield(&count);
- int originalValue = _q_value;
- _q_value += valueToAdd;
- q_atomic_swp(&q_atomic_lock, 0);
- return originalValue;
-#endif
-}
-
-inline int QBasicAtomicInt::fetchAndAddRelaxed(int valueToAdd)
-{
- return fetchAndAddOrdered(valueToAdd);
-}
-
-inline int QBasicAtomicInt::fetchAndAddAcquire(int valueToAdd)
-{
- return fetchAndAddOrdered(valueToAdd);
-}
-
-inline int QBasicAtomicInt::fetchAndAddRelease(int valueToAdd)
-{
- return fetchAndAddOrdered(valueToAdd);
-}
-
-// Test and set for pointers
-
-template <typename T>
-Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetOrdered(T *expectedValue, T *newValue)
-{
-#ifndef QT_NO_ARM_EABI
- register T *originalValue;
- do {
- originalValue = _q_value;
- if (originalValue != expectedValue)
- return false;
- } while (qt_atomic_eabi_cmpxchg_ptr(expectedValue, newValue, &_q_value) != 0);
- return true;
+#if defined(__ARM_ARCH_7__) \
+ || defined(__ARM_ARCH_7A__) \
+ || defined(__ARM_ARCH_7R__) \
+ || defined(__ARM_ARCH_7M__)
+# define QT_ARCH_ARMV7
+QT_BEGIN_INCLUDE_HEADER
+# include "QtCore/qatomic_armv7.h"
+QT_END_INCLUDE_HEADER
+#elif defined(__ARM_ARCH_6__) \
+ || defined(__ARM_ARCH_6J__) \
+ || defined(__ARM_ARCH_6T2__) \
+ || defined(__ARM_ARCH_6Z__) \
+ || defined(__ARM_ARCH_6K__) \
+ || defined(__ARM_ARCH_6ZK__) \
+ || defined(__ARM_ARCH_6M__) \
+ || (__TARGET_ARCH_ARM-0 >= 6)
+# define QT_ARCH_ARMV6
+QT_BEGIN_INCLUDE_HEADER
+# include "QtCore/qatomic_armv6.h"
+QT_END_INCLUDE_HEADER
#else
- bool returnValue = false;
- int count = 0;
- while (q_atomic_swp(&q_atomic_lock, ~0) != 0)
- qt_atomic_yield(&count);
- if (_q_value == expectedValue) {
- _q_value = newValue;
- returnValue = true;
- }
- q_atomic_swp(&q_atomic_lock, 0);
- return returnValue;
+# define QT_ARCH_ARMV5
+QT_BEGIN_INCLUDE_HEADER
+# include "QtCore/qatomic_armv5.h"
+QT_END_INCLUDE_HEADERS
#endif
-}
-
-template <typename T>
-Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetRelaxed(T *expectedValue, T *newValue)
-{
- return testAndSetOrdered(expectedValue, newValue);
-}
-
-template <typename T>
-Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetAcquire(T *expectedValue, T *newValue)
-{
- return testAndSetOrdered(expectedValue, newValue);
-}
-
-template <typename T>
-Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetRelease(T *expectedValue, T *newValue)
-{
- return testAndSetOrdered(expectedValue, newValue);
-}
-
-// Fetch and store for pointers
-
-#ifdef Q_CC_RVCT
-
-template <typename T>
-__asm T *QBasicAtomicPointer<T>::fetchAndStoreOrdered(T *newValue)
-{
- add r2, pc, #0
- bx r2
- arm
- swp r2,r1,[r0]
- mov r0, r2
- bx lr
- thumb
-}
-
-#else
-
-template <typename T>
-Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreOrdered(T *newValue)
-{
- T *originalValue;
- asm volatile("swp %0,%2,[%3]"
- : "=&r"(originalValue), "=m" (_q_value)
- : "r"(newValue), "r"(&_q_value)
- : "cc", "memory");
- return originalValue;
-}
-
-#endif // Q_CC_RVCT
-
-template <typename T>
-Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreRelaxed(T *newValue)
-{
- return fetchAndStoreOrdered(newValue);
-}
-
-template <typename T>
-Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreAcquire(T *newValue)
-{
- return fetchAndStoreOrdered(newValue);
-}
-
-template <typename T>
-Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreRelease(T *newValue)
-{
- return fetchAndStoreOrdered(newValue);
-}
-
-// Fetch and add for pointers
-
-template <typename T>
-Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddOrdered(qptrdiff valueToAdd)
-{
-#ifndef QT_NO_ARM_EABI
- register T *originalValue;
- register T *newValue;
- do {
- originalValue = _q_value;
- newValue = originalValue + valueToAdd;
- } while (qt_atomic_eabi_cmpxchg_ptr(originalValue, newValue, &_q_value) != 0);
- return originalValue;
-#else
- int count = 0;
- while (q_atomic_swp(&q_atomic_lock, ~0) != 0)
- qt_atomic_yield(&count);
- T *originalValue = (_q_value);
- _q_value += valueToAdd;
- q_atomic_swp(&q_atomic_lock, 0);
- return originalValue;
-#endif
-}
-
-template <typename T>
-Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddRelaxed(qptrdiff valueToAdd)
-{
- return fetchAndAddOrdered(valueToAdd);
-}
-
-template <typename T>
-Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddAcquire(qptrdiff valueToAdd)
-{
- return fetchAndAddOrdered(valueToAdd);
-}
-
-template <typename T>
-Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddRelease(qptrdiff valueToAdd)
-{
- return fetchAndAddOrdered(valueToAdd);
-}
-
-QT_END_NAMESPACE
QT_END_HEADER
diff --git a/src/corelib/arch/qatomic_armv5.h b/src/corelib/arch/qatomic_armv5.h
new file mode 100644
index 0000000000..ab4838071d
--- /dev/null
+++ b/src/corelib/arch/qatomic_armv5.h
@@ -0,0 +1,431 @@
+/****************************************************************************
+**
+** 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 QtCore 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 QATOMIC_ARMV5_H
+#define QATOMIC_ARMV5_H
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+#define Q_ATOMIC_INT_REFERENCE_COUNTING_IS_NOT_NATIVE
+
+inline bool QBasicAtomicInt::isReferenceCountingNative()
+{ return false; }
+inline bool QBasicAtomicInt::isReferenceCountingWaitFree()
+{ return false; }
+
+#define Q_ATOMIC_INT_TEST_AND_SET_IS_NOT_NATIVE
+
+inline bool QBasicAtomicInt::isTestAndSetNative()
+{ return false; }
+inline bool QBasicAtomicInt::isTestAndSetWaitFree()
+{ return false; }
+
+#define Q_ATOMIC_INT_FETCH_AND_STORE_IS_ALWAYS_NATIVE
+#define Q_ATOMIC_INT_FETCH_AND_STORE_IS_WAIT_FREE
+
+inline bool QBasicAtomicInt::isFetchAndStoreNative()
+{ return true; }
+inline bool QBasicAtomicInt::isFetchAndStoreWaitFree()
+{ return true; }
+
+#define Q_ATOMIC_INT_FETCH_AND_ADD_IS_NOT_NATIVE
+
+inline bool QBasicAtomicInt::isFetchAndAddNative()
+{ return false; }
+inline bool QBasicAtomicInt::isFetchAndAddWaitFree()
+{ return false; }
+
+#define Q_ATOMIC_POINTER_TEST_AND_SET_IS_NOT_NATIVE
+
+template <typename T>
+Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isTestAndSetNative()
+{ return false; }
+template <typename T>
+Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isTestAndSetWaitFree()
+{ return false; }
+
+#define Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_ALWAYS_NATIVE
+#define Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_WAIT_FREE
+
+template <typename T>
+Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isFetchAndStoreNative()
+{ return true; }
+template <typename T>
+Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isFetchAndStoreWaitFree()
+{ return true; }
+
+#define Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_NOT_NATIVE
+
+template <typename T>
+Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isFetchAndAddNative()
+{ return false; }
+template <typename T>
+Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isFetchAndAddWaitFree()
+{ return false; }
+
+#ifndef QT_NO_ARM_EABI
+
+// 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);
+#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))
+
+#else
+
+extern Q_CORE_EXPORT char q_atomic_lock;
+Q_CORE_EXPORT void qt_atomic_yield(int *);
+
+#ifdef Q_CC_RVCT
+
+Q_CORE_EXPORT __asm char q_atomic_swp(volatile char *ptr, char newval);
+
+#else
+
+inline char q_atomic_swp(volatile char *ptr, char newval)
+{
+ register char ret;
+ asm volatile("swpb %0,%2,[%3]"
+ : "=&r"(ret), "=m" (*ptr)
+ : "r"(newval), "r"(ptr)
+ : "cc", "memory");
+ return ret;
+}
+
+#endif // Q_CC_RVCT
+
+#endif // QT_NO_ARM_EABI
+
+// Reference counting
+
+inline bool QBasicAtomicInt::ref()
+{
+#ifndef QT_NO_ARM_EABI
+ register int originalValue;
+ register int newValue;
+ do {
+ originalValue = _q_value;
+ newValue = originalValue + 1;
+ } while (qt_atomic_eabi_cmpxchg_int(originalValue, newValue, &_q_value) != 0);
+ return newValue != 0;
+#else
+ int count = 0;
+ while (q_atomic_swp(&q_atomic_lock, ~0) != 0)
+ qt_atomic_yield(&count);
+ int originalValue = _q_value++;
+ q_atomic_swp(&q_atomic_lock, 0);
+ return originalValue != -1;
+#endif
+}
+
+inline bool QBasicAtomicInt::deref()
+{
+#ifndef QT_NO_ARM_EABI
+ register int originalValue;
+ register int newValue;
+ do {
+ originalValue = _q_value;
+ newValue = originalValue - 1;
+ } while (qt_atomic_eabi_cmpxchg_int(originalValue, newValue, &_q_value) != 0);
+ return newValue != 0;
+#else
+ int count = 0;
+ while (q_atomic_swp(&q_atomic_lock, ~0) != 0)
+ qt_atomic_yield(&count);
+ int originalValue = _q_value--;
+ q_atomic_swp(&q_atomic_lock, 0);
+ return originalValue != 1;
+#endif
+}
+
+// Test and set for integers
+
+inline bool QBasicAtomicInt::testAndSetOrdered(int expectedValue, int newValue)
+{
+#ifndef QT_NO_ARM_EABI
+ register int originalValue;
+ do {
+ originalValue = _q_value;
+ if (originalValue != expectedValue)
+ return false;
+ } while (qt_atomic_eabi_cmpxchg_int(expectedValue, newValue, &_q_value) != 0);
+ return true;
+#else
+ bool returnValue = false;
+ int count = 0;
+ while (q_atomic_swp(&q_atomic_lock, ~0) != 0)
+ qt_atomic_yield(&count);
+ if (_q_value == expectedValue) {
+ _q_value = newValue;
+ returnValue = true;
+ }
+ q_atomic_swp(&q_atomic_lock, 0);
+ return returnValue;
+#endif
+}
+
+inline bool QBasicAtomicInt::testAndSetRelaxed(int expectedValue, int newValue)
+{
+ return testAndSetOrdered(expectedValue, newValue);
+}
+
+inline bool QBasicAtomicInt::testAndSetAcquire(int expectedValue, int newValue)
+{
+ return testAndSetOrdered(expectedValue, newValue);
+}
+
+inline bool QBasicAtomicInt::testAndSetRelease(int expectedValue, int newValue)
+{
+ return testAndSetOrdered(expectedValue, newValue);
+}
+
+// Fetch and store for integers
+
+#ifndef Q_CC_RVCT
+
+inline int QBasicAtomicInt::fetchAndStoreOrdered(int newValue)
+{
+ int originalValue;
+ asm volatile("swp %0,%2,[%3]"
+ : "=&r"(originalValue), "=m" (_q_value)
+ : "r"(newValue), "r"(&_q_value)
+ : "cc", "memory");
+ return originalValue;
+}
+
+#endif
+
+inline int QBasicAtomicInt::fetchAndStoreRelaxed(int newValue)
+{
+ return fetchAndStoreOrdered(newValue);
+}
+
+inline int QBasicAtomicInt::fetchAndStoreAcquire(int newValue)
+{
+ return fetchAndStoreOrdered(newValue);
+}
+
+inline int QBasicAtomicInt::fetchAndStoreRelease(int newValue)
+{
+ return fetchAndStoreOrdered(newValue);
+}
+
+// Fetch and add for integers
+
+inline int QBasicAtomicInt::fetchAndAddOrdered(int valueToAdd)
+{
+#ifndef QT_NO_ARM_EABI
+ register int originalValue;
+ register int newValue;
+ do {
+ originalValue = _q_value;
+ newValue = originalValue + valueToAdd;
+ } while (qt_atomic_eabi_cmpxchg_int(originalValue, newValue, &_q_value) != 0);
+ return originalValue;
+#else
+ int count = 0;
+ while (q_atomic_swp(&q_atomic_lock, ~0) != 0)
+ qt_atomic_yield(&count);
+ int originalValue = _q_value;
+ _q_value += valueToAdd;
+ q_atomic_swp(&q_atomic_lock, 0);
+ return originalValue;
+#endif
+}
+
+inline int QBasicAtomicInt::fetchAndAddRelaxed(int valueToAdd)
+{
+ return fetchAndAddOrdered(valueToAdd);
+}
+
+inline int QBasicAtomicInt::fetchAndAddAcquire(int valueToAdd)
+{
+ return fetchAndAddOrdered(valueToAdd);
+}
+
+inline int QBasicAtomicInt::fetchAndAddRelease(int valueToAdd)
+{
+ return fetchAndAddOrdered(valueToAdd);
+}
+
+// Test and set for pointers
+
+template <typename T>
+Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetOrdered(T *expectedValue, T *newValue)
+{
+#ifndef QT_NO_ARM_EABI
+ register T *originalValue;
+ do {
+ originalValue = _q_value;
+ if (originalValue != expectedValue)
+ return false;
+ } while (qt_atomic_eabi_cmpxchg_ptr(expectedValue, newValue, &_q_value) != 0);
+ return true;
+#else
+ bool returnValue = false;
+ int count = 0;
+ while (q_atomic_swp(&q_atomic_lock, ~0) != 0)
+ qt_atomic_yield(&count);
+ if (_q_value == expectedValue) {
+ _q_value = newValue;
+ returnValue = true;
+ }
+ q_atomic_swp(&q_atomic_lock, 0);
+ return returnValue;
+#endif
+}
+
+template <typename T>
+Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetRelaxed(T *expectedValue, T *newValue)
+{
+ return testAndSetOrdered(expectedValue, newValue);
+}
+
+template <typename T>
+Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetAcquire(T *expectedValue, T *newValue)
+{
+ return testAndSetOrdered(expectedValue, newValue);
+}
+
+template <typename T>
+Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetRelease(T *expectedValue, T *newValue)
+{
+ return testAndSetOrdered(expectedValue, newValue);
+}
+
+// Fetch and store for pointers
+
+#ifdef Q_CC_RVCT
+
+template <typename T>
+__asm T *QBasicAtomicPointer<T>::fetchAndStoreOrdered(T *newValue)
+{
+ add r2, pc, #0
+ bx r2
+ arm
+ swp r2,r1,[r0]
+ mov r0, r2
+ bx lr
+ thumb
+}
+
+#else
+
+template <typename T>
+Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreOrdered(T *newValue)
+{
+ T *originalValue;
+ asm volatile("swp %0,%2,[%3]"
+ : "=&r"(originalValue), "=m" (_q_value)
+ : "r"(newValue), "r"(&_q_value)
+ : "cc", "memory");
+ return originalValue;
+}
+
+#endif // Q_CC_RVCT
+
+template <typename T>
+Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreRelaxed(T *newValue)
+{
+ return fetchAndStoreOrdered(newValue);
+}
+
+template <typename T>
+Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreAcquire(T *newValue)
+{
+ return fetchAndStoreOrdered(newValue);
+}
+
+template <typename T>
+Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreRelease(T *newValue)
+{
+ return fetchAndStoreOrdered(newValue);
+}
+
+// Fetch and add for pointers
+
+template <typename T>
+Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddOrdered(qptrdiff valueToAdd)
+{
+#ifndef QT_NO_ARM_EABI
+ register T *originalValue;
+ register T *newValue;
+ do {
+ originalValue = _q_value;
+ newValue = originalValue + valueToAdd;
+ } while (qt_atomic_eabi_cmpxchg_ptr(originalValue, newValue, &_q_value) != 0);
+ return originalValue;
+#else
+ int count = 0;
+ while (q_atomic_swp(&q_atomic_lock, ~0) != 0)
+ qt_atomic_yield(&count);
+ T *originalValue = (_q_value);
+ _q_value += valueToAdd;
+ q_atomic_swp(&q_atomic_lock, 0);
+ return originalValue;
+#endif
+}
+
+template <typename T>
+Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddRelaxed(qptrdiff valueToAdd)
+{
+ return fetchAndAddOrdered(valueToAdd);
+}
+
+template <typename T>
+Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddAcquire(qptrdiff valueToAdd)
+{
+ return fetchAndAddOrdered(valueToAdd);
+}
+
+template <typename T>
+Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddRelease(qptrdiff valueToAdd)
+{
+ return fetchAndAddOrdered(valueToAdd);
+}
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QATOMIC_ARMV5_H
diff --git a/src/corelib/arch/qatomic_armv6.h b/src/corelib/arch/qatomic_armv6.h
index 38b7069943..1aa3b8825e 100644
--- a/src/corelib/arch/qatomic_armv6.h
+++ b/src/corelib/arch/qatomic_armv6.h
@@ -45,6 +45,7 @@
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
+
#define Q_ATOMIC_INT_REFERENCE_COUNTING_IS_ALWAYS_NATIVE
inline bool QBasicAtomicInt::isReferenceCountingNative()
@@ -102,6 +103,13 @@ Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isFetchAndAddWaitFree()
#ifndef Q_CC_RVCT
+#ifndef Q_DATA_MEMORY_BARRIER
+# define Q_DATA_MEMORY_BARRIER asm volatile("":::"memory")
+#endif
+#ifndef Q_COMPILER_MEMORY_BARRIER
+# define Q_COMPILER_MEMORY_BARRIER asm volatile("":::"memory")
+#endif
+
inline bool QBasicAtomicInt::ref()
{
register int newValue;
@@ -138,7 +146,7 @@ inline bool QBasicAtomicInt::deref()
return newValue != 0;
}
-inline bool QBasicAtomicInt::testAndSetOrdered(int expectedValue, int newValue)
+inline bool QBasicAtomicInt::testAndSetRelaxed(int expectedValue, int newValue)
{
register int result;
asm volatile("0:\n"
@@ -152,11 +160,11 @@ inline bool QBasicAtomicInt::testAndSetOrdered(int expectedValue, int newValue)
: [expectedValue] "r" (expectedValue),
[newValue] "r" (newValue),
[_q_value] "r" (&_q_value)
- : "cc", "memory");
+ : "cc");
return result == 0;
}
-inline int QBasicAtomicInt::fetchAndStoreOrdered(int newValue)
+inline int QBasicAtomicInt::fetchAndStoreRelaxed(int newValue)
{
register int originalValue;
register int result;
@@ -170,11 +178,11 @@ inline int QBasicAtomicInt::fetchAndStoreOrdered(int newValue)
"+m" (_q_value)
: [newValue] "r" (newValue),
[_q_value] "r" (&_q_value)
- : "cc", "memory");
+ : "cc");
return originalValue;
}
-inline int QBasicAtomicInt::fetchAndAddOrdered(int valueToAdd)
+inline int QBasicAtomicInt::fetchAndAddRelaxed(int valueToAdd)
{
register int originalValue;
register int newValue;
@@ -191,12 +199,12 @@ inline int QBasicAtomicInt::fetchAndAddOrdered(int valueToAdd)
"+m" (_q_value)
: [valueToAdd] "r" (valueToAdd),
[_q_value] "r" (&_q_value)
- : "cc", "memory");
+ : "cc");
return originalValue;
}
template <typename T>
-Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetOrdered(T *expectedValue, T *newValue)
+Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetRelaxed(T *expectedValue, T *newValue)
{
register T *result;
asm volatile("0:\n"
@@ -210,12 +218,12 @@ Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetOrdered(T *expectedValu
: [expectedValue] "r" (expectedValue),
[newValue] "r" (newValue),
[_q_value] "r" (&_q_value)
- : "cc", "memory");
+ : "cc");
return result == 0;
}
template <typename T>
-Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreOrdered(T *newValue)
+Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreRelaxed(T *newValue)
{
register T *originalValue;
register int result;
@@ -229,12 +237,12 @@ Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreOrdered(T *newValue)
"+m" (_q_value)
: [newValue] "r" (newValue),
[_q_value] "r" (&_q_value)
- : "cc", "memory");
+ : "cc");
return originalValue;
}
template <typename T>
-Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddOrdered(qptrdiff valueToAdd)
+Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddRelaxed(qptrdiff valueToAdd)
{
register T *originalValue;
register T *newValue;
@@ -251,7 +259,7 @@ Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddOrdered(qptrdiff valueTo
"+m" (_q_value)
: [valueToAdd] "r" (valueToAdd * sizeof(T)),
[_q_value] "r" (&_q_value)
- : "cc", "memory");
+ : "cc");
return originalValue;
}
@@ -263,9 +271,18 @@ Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddOrdered(qptrdiff valueTo
// RVCT embedded assembly documentation:
// http://www.keil.com/support/man/docs/armcc/armcc_chddbeib.htm
-// save our pragma state and switch to ARM mode
-#pragma push
-#pragma arm
+#if __TARGET_ARCH_THUMB-0 < 4
+// save our pragma state and switch to ARM mode (unless using Thumb2)
+# pragma push
+# pragma arm
+#endif
+
+#ifndef Q_DATA_MEMORY_BARRIER
+# define Q_DATA_MEMORY_BARRIER __schedule_barrier()
+#endif
+#ifndef Q_COMPILER_MEMORY_BARRIER
+# define Q_COMPILER_MEMORY_BARRIER __schedule_barrier()
+#endif
inline bool QBasicAtomicInt::ref()
{
@@ -297,7 +314,7 @@ inline bool QBasicAtomicInt::deref()
return newValue != 0;
}
-inline bool QBasicAtomicInt::testAndSetOrdered(int expectedValue, int newValue)
+inline bool QBasicAtomicInt::testAndSetRelaxed(int expectedValue, int newValue)
{
register int result;
retry:
@@ -311,7 +328,7 @@ inline bool QBasicAtomicInt::testAndSetOrdered(int expectedValue, int newValue)
return result == 0;
}
-inline int QBasicAtomicInt::fetchAndStoreOrdered(int newValue)
+inline int QBasicAtomicInt::fetchAndStoreRelaxed(int newValue)
{
register int originalValue;
register int result;
@@ -325,7 +342,7 @@ inline int QBasicAtomicInt::fetchAndStoreOrdered(int newValue)
return originalValue;
}
-inline int QBasicAtomicInt::fetchAndAddOrdered(int valueToAdd)
+inline int QBasicAtomicInt::fetchAndAddRelaxed(int valueToAdd)
{
register int originalValue;
register int newValue;
@@ -342,7 +359,7 @@ inline int QBasicAtomicInt::fetchAndAddOrdered(int valueToAdd)
}
template <typename T>
-Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetOrdered(T *expectedValue, T *newValue)
+Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetRelaxed(T *expectedValue, T *newValue)
{
register T *result;
retry:
@@ -357,7 +374,7 @@ Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetOrdered(T *expectedValu
}
template <typename T>
-Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreOrdered(T *newValue)
+Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreRelaxed(T *newValue)
{
register T *originalValue;
register int result;
@@ -372,7 +389,7 @@ Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreOrdered(T *newValue)
}
template <typename T>
-Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddOrdered(qptrdiff valueToAdd)
+Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddRelaxed(qptrdiff valueToAdd)
{
register T *originalValue;
register T *newValue;
@@ -388,111 +405,153 @@ Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddOrdered(qptrdiff valueTo
return originalValue;
}
-// go back to the previous pragma state (probably Thumb mode)
-#pragma pop
+#if __TARGET_ARCH_THUMB-0 < 4
+# pragma pop
#endif
-// common code
+#endif
-inline bool QBasicAtomicInt::testAndSetRelaxed(int expectedValue, int newValue)
-{
- return testAndSetOrdered(expectedValue, newValue);
-}
+// common code
inline bool QBasicAtomicInt::testAndSetAcquire(int expectedValue, int newValue)
{
- return testAndSetOrdered(expectedValue, newValue);
+ bool returnValue = testAndSetRelaxed(expectedValue, newValue);
+ Q_DATA_MEMORY_BARRIER;
+ return returnValue;
}
inline bool QBasicAtomicInt::testAndSetRelease(int expectedValue, int newValue)
{
- return testAndSetOrdered(expectedValue, newValue);
+ Q_DATA_MEMORY_BARRIER;
+ return testAndSetRelaxed(expectedValue, newValue);
}
-inline int QBasicAtomicInt::fetchAndStoreRelaxed(int newValue)
+inline bool QBasicAtomicInt::testAndSetOrdered(int expectedValue, int newValue)
{
- return fetchAndStoreOrdered(newValue);
+ Q_DATA_MEMORY_BARRIER;
+ bool returnValue = testAndSetRelaxed(expectedValue, newValue);
+ Q_COMPILER_MEMORY_BARRIER;
+ return returnValue;
}
inline int QBasicAtomicInt::fetchAndStoreAcquire(int newValue)
{
- return fetchAndStoreOrdered(newValue);
+ int returnValue = fetchAndStoreRelaxed(newValue);
+ Q_DATA_MEMORY_BARRIER;
+ return returnValue;
}
inline int QBasicAtomicInt::fetchAndStoreRelease(int newValue)
{
- return fetchAndStoreOrdered(newValue);
+ Q_DATA_MEMORY_BARRIER;
+ return fetchAndStoreRelaxed(newValue);
}
-inline int QBasicAtomicInt::fetchAndAddRelaxed(int valueToAdd)
+inline int QBasicAtomicInt::fetchAndStoreOrdered(int newValue)
{
- return fetchAndAddOrdered(valueToAdd);
+ Q_DATA_MEMORY_BARRIER;
+ int returnValue = fetchAndStoreRelaxed(newValue);
+ Q_COMPILER_MEMORY_BARRIER;
+ return returnValue;
}
+
inline int QBasicAtomicInt::fetchAndAddAcquire(int valueToAdd)
{
- return fetchAndAddOrdered(valueToAdd);
+ int returnValue = fetchAndAddRelaxed(valueToAdd);
+ Q_DATA_MEMORY_BARRIER;
+ return returnValue;
}
inline int QBasicAtomicInt::fetchAndAddRelease(int valueToAdd)
{
- return fetchAndAddOrdered(valueToAdd);
+ Q_DATA_MEMORY_BARRIER;
+ return fetchAndAddRelaxed(valueToAdd);
}
-template <typename T>
-Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetRelaxed(T *expectedValue, T *newValue)
+inline int QBasicAtomicInt::fetchAndAddOrdered(int valueToAdd)
{
- return testAndSetOrdered(expectedValue, newValue);
+ Q_DATA_MEMORY_BARRIER;
+ int returnValue = fetchAndAddRelaxed(valueToAdd);
+ Q_COMPILER_MEMORY_BARRIER;
+ return returnValue;
}
template <typename T>
Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetAcquire(T *expectedValue, T *newValue)
{
- return testAndSetOrdered(expectedValue, newValue);
+ bool returnValue = testAndSetRelaxed(expectedValue, newValue);
+ Q_DATA_MEMORY_BARRIER;
+ return returnValue;
}
template <typename T>
Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetRelease(T *expectedValue, T *newValue)
{
- return testAndSetOrdered(expectedValue, newValue);
+ Q_DATA_MEMORY_BARRIER;
+ return testAndSetRelaxed(expectedValue, newValue);
}
template <typename T>
-Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreRelaxed(T *newValue)
+Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetOrdered(T *expectedValue, T *newValue)
{
- return fetchAndStoreOrdered(newValue);
+ Q_DATA_MEMORY_BARRIER;
+ bool returnValue = testAndSetAcquire(expectedValue, newValue);
+ Q_COMPILER_MEMORY_BARRIER;
+ return returnValue;
}
template <typename T>
Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreAcquire(T *newValue)
{
- return fetchAndStoreOrdered(newValue);
+ T *returnValue = fetchAndStoreRelaxed(newValue);
+ Q_DATA_MEMORY_BARRIER;
+ return returnValue;
}
template <typename T>
Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreRelease(T *newValue)
{
- return fetchAndStoreOrdered(newValue);
+ Q_DATA_MEMORY_BARRIER;
+ return fetchAndStoreRelaxed(newValue);
}
template <typename T>
-Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddRelaxed(qptrdiff valueToAdd)
+Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreOrdered(T *newValue)
{
- return fetchAndAddOrdered(valueToAdd);
+ Q_DATA_MEMORY_BARRIER;
+ T *returnValue = fetchAndStoreRelaxed(newValue);
+ Q_COMPILER_MEMORY_BARRIER;
+ return returnValue;
}
template <typename T>
Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddAcquire(qptrdiff valueToAdd)
{
- return fetchAndAddOrdered(valueToAdd);
+ T *returnValue = fetchAndAddRelaxed(valueToAdd);
+ Q_DATA_MEMORY_BARRIER;
+ return returnValue;
}
template <typename T>
Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddRelease(qptrdiff valueToAdd)
{
- return fetchAndAddOrdered(valueToAdd);
+ Q_DATA_MEMORY_BARRIER;
+ return fetchAndAddRelaxed(valueToAdd);
}
+template <typename T>
+Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddOrdered(qptrdiff valueToAdd)
+{
+ Q_DATA_MEMORY_BARRIER;
+ T *returnValue = fetchAndAddRelaxed(valueToAdd);
+ Q_COMPILER_MEMORY_BARRIER;
+ return returnValue;
+}
+
+#undef Q_DATA_MEMORY_BARRIER
+#undef Q_COMPILER_MEMORY_BARRIER
+
QT_END_NAMESPACE
QT_END_HEADER
diff --git a/src/corelib/arch/qatomic_armv7.h b/src/corelib/arch/qatomic_armv7.h
new file mode 100644
index 0000000000..a95c4eaf8a
--- /dev/null
+++ b/src/corelib/arch/qatomic_armv7.h
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** 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 QtCore 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 QATOMIC_ARMV7_H
+#define QATOMIC_ARMV7_H
+
+QT_BEGIN_HEADER
+
+// use the DMB instruction when compiling for ARMv7, ...
+#ifndef Q_CC_RCVT
+# define Q_DATA_MEMORY_BARRIER asm volatile("dmb\n":::"memory")
+#else
+# define Q_DATA_MEMORY_BARRIER do{__asm { dmb } __schedule_barrier();}while(0)
+#endif
+
+// ... but the implementation is otherwise identical to that for ARMv6
+QT_BEGIN_INCLUDE_HEADER
+#include "QtCore/qatomic_armv6.h"
+QT_END_INCLUDE_HEADER
+
+QT_END_HEADER
+
+#endif // QATOMIC_ARMV7_H
diff --git a/src/corelib/arch/symbian/arch.pri b/src/corelib/arch/symbian/arch.pri
index 3ef1c9e6a9..84a4984ffa 100644
--- a/src/corelib/arch/symbian/arch.pri
+++ b/src/corelib/arch/symbian/arch.pri
@@ -2,4 +2,4 @@
# Symbian architecture
#
SOURCES += $$QT_ARCH_CPP/qatomic_symbian.cpp \
- $$QT_ARCH_CPP/../armv6/qatomic_generic_armv6.cpp
+ $$QT_ARCH_CPP/qatomic_generic_armv6.cpp
diff --git a/src/corelib/arch/armv6/qatomic_generic_armv6.cpp b/src/corelib/arch/symbian/qatomic_generic_armv6.cpp
index 39d966ab42..39d966ab42 100644
--- a/src/corelib/arch/armv6/qatomic_generic_armv6.cpp
+++ b/src/corelib/arch/symbian/qatomic_generic_armv6.cpp
diff --git a/src/corelib/codecs/qtextcodec_symbian.cpp b/src/corelib/codecs/qtextcodec_symbian.cpp
index 20e0cfc4bd..9d7e85681f 100644
--- a/src/corelib/codecs/qtextcodec_symbian.cpp
+++ b/src/corelib/codecs/qtextcodec_symbian.cpp
@@ -59,8 +59,8 @@ struct QSymbianCodecInitData {
It is ordered by charsetId to allow binary search lookup
*/
static const QSymbianCodecInitData codecsData[] = {
- { /*268439485*/ KCharacterSetIdentifierShiftJis, 17, "Shift_JIS\0MS_Kanji\0csShiftJIS\0MS_KANJI\0SJIS\0" },
- { /*268439486*/ KCharacterSetIdentifierGb2312, 57, "GB2312\0csGB2312\0CN-GB\0EUC-CN\0" },
+ { /*268439485*/ KCharacterSetIdentifierShiftJis, 17, "Shift_JIS\0MS_Kanji\0csShiftJIS\0SJIS\0" },
+ { /*268439486*/ KCharacterSetIdentifierGb2312, 57, "GB2312\0csGB2312\0CN-GB\0EUC-CN\0" }, // Note: ConvertCharacterSetIdentifierToMibEnumL returns Mib 0 instaead of 57
{ /*268439487*/ KCharacterSetIdentifierBig5, 2026, "Big5\0csBig5\0Big5-ETen\0CP950\0BIG-FIVE\0CN-BIG5\0" },
{ /*268440246*/ KCharacterSetIdentifierCodePage1252, 2252, "windows-1252\0Code Page 1252\0CP1252\0MS-ANSI\0" },
// { /*268450576*/ KCharacterSetIdentifierIso88591, 4, "ISO-8859-1\0ISO_8859-1:1987\0iso-ir-100\0ISO_8859-1\0latin1\0l1\0IBM819\0CP819\0csISOLatin1\0ISO-IR-100\0ISO8859-1\0L1\0LATIN1\0CSISOLATIN1\0" },
@@ -110,15 +110,20 @@ static const QSymbianCodecInitData codecsData[] = {
{ /*270562232*/ 270562232, 2258, "Windows-1258\0CP1258\0WINDOWS-1258\0" },
{ /*270586888*/ 270586888, 0, "J5\0" },
{ /*271011982*/ 271011982, 0, "ISCII\0" },
- { /*271066541*/ 271066541, 2009, "CP850\0IBM850\0""850\0csPC850Multilingual\0" },
+ { /*271066541*/ 271066541, 2009, "CP850\0IBM850\0""850\0csPC850Multilingual\0" }, // Note: ConvertCharacterSetIdentifierToMibEnumL returns Mib 0 instead of 2009
{ /*271082493*/ 271082493, 0, "EXTENDED_SMS_7BIT\0" },
{ /*271082494*/ 271082494, 0, "gsm7_turkish_single\0" },
{ /*271082495*/ 271082495, 0, "turkish_locking_gsm7ext\0" },
{ /*271082496*/ 271082496, 0, "turkish_locking_single\0" },
+ { /*271082503*/ 271082503, 0, "portuguese_gsm7_single\0" },
+ { /*271082504*/ 271082504, 0, "portuguese_locking_gsm7ext\0" },
+ { /*271082505*/ 271082505, 0, "portuguese_locking_single\0" },
+ { /*271082506*/ 271082506, 0, "spanish_gsm7_single\0" },
+ { /*271085624*/ 271085624, 114, "GB18030\0" },
{ /*536929574*/ 536929574, 38, "EUC-KR\0" },
{ /*536936703*/ 536936703, 0, "CP949\0" },
- { /*536936705*/ 536936705, 37, "ISO-2022-KR\0" },
- { /*536941517*/ 536941517, 36, "KS_C_5601-1987\0" }
+ { /*536936705*/ 536936705, 37, "ISO-2022-KR\0csISO2022KR\0" },
+ { /*536941517*/ 536941517, 36, "KS_C_5601-1987\0iso-ir-149\0KS_C_5601-1989\0KSC_5601\0Korean\0csKSC56011987\0" }
};
@@ -659,6 +664,10 @@ QSymbianTextCodec *QSymbianTextCodec::init()
if (charsetId == localeMapperId)
localeMapper = c;
} else {
+ // We did not find the charsetId in our codecsData[], therefore we ask
+ // the OS for the codec name. We first try to get a "standard name" and fall
+ // back to array->At(i).Name(), if really needed. array->At(i).Name() is not
+ // guaranteed to be a correct name for QTextCodec::codecFromName().
QScopedPointer<HBufC8> buf;
QT_TRAP_THROWING(buf.reset(converter->ConvertCharacterSetIdentifierToStandardNameL(charsetId, qt_s60GetRFs())))
QByteArray name;
diff --git a/src/corelib/concurrent/qthreadpool.cpp b/src/corelib/concurrent/qthreadpool.cpp
index f25a4944ae..265de33e84 100644
--- a/src/corelib/concurrent/qthreadpool.cpp
+++ b/src/corelib/concurrent/qthreadpool.cpp
@@ -250,6 +250,7 @@ bool QThreadPoolPrivate::tooManyThreadsActive() const
void QThreadPoolPrivate::startThread(QRunnable *runnable)
{
QScopedPointer <QThreadPoolThread> thread(new QThreadPoolThread(this));
+ thread->setObjectName(QLatin1String("Thread (pooled)"));
allThreads.insert(thread.data());
++activeThreads;
diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h
index 74bb3090ca..1bf2dd3526 100644
--- a/src/corelib/global/qglobal.h
+++ b/src/corelib/global/qglobal.h
@@ -402,6 +402,19 @@ namespace QT_NAMESPACE {}
# undef QT_HAVE_3DNOW
# endif
+#if defined(Q_CC_MSVC) && _MSC_VER >= 1600
+# define Q_COMPILER_RVALUE_REFS
+# define Q_COMPILER_INITIALIZER_LISTS
+# define Q_COMPILER_AUTO_TYPE
+# define Q_COMPILER_LAMBDA
+//# define Q_COMPILER_VARIADIC_TEMPLATES
+//# define Q_COMPILER_CLASS_ENUM
+//# define Q_COMPILER_DEFAULT_DELETE_MEMBERS
+//# define Q_COMPILER_UNICODE_STRINGS
+//# define Q_COMPILER_EXTERN_TEMPLATES
+# endif
+
+
#elif defined(__BORLANDC__) || defined(__TURBOC__)
# define Q_CC_BOR
# define Q_INLINE_TEMPLATE
diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp
index 957abbfe60..d493390bd0 100644
--- a/src/corelib/global/qlibraryinfo.cpp
+++ b/src/corelib/global/qlibraryinfo.cpp
@@ -517,6 +517,9 @@ void qt_core_boilerplate()
#ifdef QT_BUILD_KEY_COMPAT2
"| " QT_BUILD_KEY_COMPAT2 " "
#endif
+#ifdef QT_BUILD_KEY_COMPAT3
+ "| " QT_BUILD_KEY_COMPAT3 " "
+#endif
"|\n"
"Build date: %s\n"
"Installation prefix: %s\n"
diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h
index bb41073246..3ed6291233 100644
--- a/src/corelib/global/qnamespace.h
+++ b/src/corelib/global/qnamespace.h
@@ -92,6 +92,7 @@ Qt {
Q_ENUMS(ConnectionType)
#ifndef QT_NO_GESTURES
Q_ENUMS(GestureState)
+ Q_ENUMS(GestureType)
#endif
#endif // (defined(Q_MOC_RUN) || defined(QT_JAMBI_RUN))
diff --git a/src/corelib/global/qnumeric.cpp b/src/corelib/global/qnumeric.cpp
index 75fd31e8bd..7ddb9e2902 100644
--- a/src/corelib/global/qnumeric.cpp
+++ b/src/corelib/global/qnumeric.cpp
@@ -44,14 +44,49 @@
QT_BEGIN_NAMESPACE
+/*!
+ Returns true if the double \a {d} is equivalent to infinity.
+*/
Q_CORE_EXPORT bool qIsInf(double d) { return qt_is_inf(d); }
+
+/*!
+ Returns true if the double \a {d} is not a number (NaN).
+*/
Q_CORE_EXPORT bool qIsNaN(double d) { return qt_is_nan(d); }
+
+/*!
+ Returns true if the double \a {d} is a finite number.
+*/
Q_CORE_EXPORT bool qIsFinite(double d) { return qt_is_finite(d); }
+
+/*!
+ Returns true if the float \a {f} is equivalent to infinity.
+*/
Q_CORE_EXPORT bool qIsInf(float f) { return qt_is_inf(f); }
+
+/*!
+ Returns true if the float \a {f} is not a number (NaN).
+*/
Q_CORE_EXPORT bool qIsNaN(float f) { return qt_is_nan(f); }
+
+/*!
+ Returns true if the float \a {f} is a finite number.
+*/
Q_CORE_EXPORT bool qIsFinite(float f) { return qt_is_finite(f); }
+
+/*!
+ Returns the bit pattern of a signalling NaN as a double.
+*/
Q_CORE_EXPORT double qSNaN() { return qt_snan(); }
+
+/*!
+ Returns the bit pattern of a quiet NaN as a double.
+*/
Q_CORE_EXPORT double qQNaN() { return qt_qnan(); }
+
+/*!
+ Returns the bit pattern for an infinite number as a double.
+*/
Q_CORE_EXPORT double qInf() { return qt_inf(); }
diff --git a/src/corelib/io/qdir.cpp b/src/corelib/io/qdir.cpp
index f6f4b1928d..426f61ee89 100644
--- a/src/corelib/io/qdir.cpp
+++ b/src/corelib/io/qdir.cpp
@@ -1552,10 +1552,11 @@ bool QDir::makeAbsolute() // ### What do the return values signify?
QScopedPointer<QDirPrivate> dir(new QDirPrivate(*d_ptr.constData()));
dir->setPath(absolutePath);
- if (!(dir->fileEngine->fileFlags(QAbstractFileEngine::TypesMask) & QAbstractFileEngine::DirectoryType))
+ d_ptr = dir.take();
+
+ if (!(d_ptr->fileEngine->fileFlags(QAbstractFileEngine::TypesMask) & QAbstractFileEngine::DirectoryType))
return false;
- d_ptr = dir.take();
return true;
}
diff --git a/src/corelib/io/qsettings_win.cpp b/src/corelib/io/qsettings_win.cpp
index de96e06230..b3fe734e1b 100644
--- a/src/corelib/io/qsettings_win.cpp
+++ b/src/corelib/io/qsettings_win.cpp
@@ -535,6 +535,15 @@ bool QWinSettingsPrivate::readKey(HKEY parentHandle, const QString &rSubKey, QVa
break;
}
+ case REG_QWORD: {
+ Q_ASSERT(data.size() == sizeof(qint64));
+ qint64 i;
+ memcpy((char*)&i, data.constData(), sizeof(qint64));
+ if (value != 0)
+ *value = i;
+ break;
+ }
+
default:
qWarning("QSettings: Unknown data %d type in Windows registry", static_cast<int>(dataType));
if (value != 0)
@@ -683,10 +692,19 @@ void QWinSettingsPrivate::set(const QString &uKey, const QVariant &value)
break;
}
- case QVariant::Int: {
+ case QVariant::Int:
+ case QVariant::UInt: {
type = REG_DWORD;
- int i = value.toInt();
- regValueBuff = QByteArray((const char*)&i, sizeof(int));
+ qint32 i = value.toInt();
+ regValueBuff = QByteArray((const char*)&i, sizeof(qint32));
+ break;
+ }
+
+ case QVariant::LongLong:
+ case QVariant::ULongLong: {
+ type = REG_QWORD;
+ qint64 i = value.toLongLong();
+ regValueBuff = QByteArray((const char*)&i, sizeof(qint64));
break;
}
diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp
index b320624b28..6452c0fc80 100644
--- a/src/corelib/io/qurl.cpp
+++ b/src/corelib/io/qurl.cpp
@@ -176,7 +176,6 @@
*/
#include "qplatformdefs.h"
#include "qurl.h"
-#include "private/qunicodetables_p.h"
#include "qatomic.h"
#include "qbytearray.h"
#include "qdir.h"
@@ -3464,9 +3463,8 @@ QString QUrlPrivate::canonicalHost() const
that->host = host.toLower();
} else {
that->host = qt_ACE_do(host, NormalizeAce);
- if (that->host.isNull())
- that->isHostValid = false;
}
+ that->isHostValid = !that->host.isNull();
return that->host;
}
@@ -3781,6 +3779,10 @@ void QUrlPrivate::validate() const
QString auth = authority(); // causes the non-encoded forms to be valid
+ // authority() calls canonicalHost() which sets this
+ if (!isHostValid)
+ return;
+
if (scheme == QLatin1String("mailto")) {
if (!host.isEmpty() || port != -1 || !userName.isEmpty() || !password.isEmpty()) {
that->isValid = false;
@@ -3954,9 +3956,10 @@ QByteArray QUrlPrivate::toEncoded(QUrl::FormattingOptions options) const
url += scheme.toLatin1();
url += ':';
}
+ QString savedHost = host; // pre-validation, may be invalid!
QString auth = authority();
bool doFileScheme = scheme == QLatin1String("file") && encodedPath.startsWith('/');
- if ((options & QUrl::RemoveAuthority) != QUrl::RemoveAuthority && (!auth.isEmpty() || doFileScheme)) {
+ if ((options & QUrl::RemoveAuthority) != QUrl::RemoveAuthority && (!auth.isEmpty() || doFileScheme || !savedHost.isEmpty())) {
if (doFileScheme && !encodedPath.startsWith('/'))
url += '/';
url += "//";
@@ -3982,6 +3985,12 @@ QByteArray QUrlPrivate::toEncoded(QUrl::FormattingOptions options) const
url += '[';
url += host.toLatin1();
url += ']';
+ } else if (host.isEmpty() && !savedHost.isEmpty()) {
+ // this case is only possible with an invalid URL
+ // it's here only so that we can keep the original, invalid hostname
+ // in encodedOriginal.
+ // QUrl::isValid() will return false, so toEncoded() can be anything (it's not valid)
+ url += savedHost.toUtf8();
} else {
url += QUrl::toAce(host);
}
@@ -4101,7 +4110,7 @@ const QByteArray &QUrlPrivate::normalized() const
QString QUrlPrivate::createErrorString()
{
- if (isValid)
+ if (isValid && isHostValid)
return QString();
QString errorString(QLatin1String(QT_TRANSLATE_NOOP(QUrl, "Invalid URL \"")));
@@ -4125,7 +4134,10 @@ QString QUrlPrivate::createErrorString()
errorString += QLatin1String(QT_TRANSLATE_NOOP(QUrl, "\'"));
} else {
errorString += QLatin1String(QT_TRANSLATE_NOOP(QUrl, ": "));
- errorString += QLatin1String(errorInfo._message);
+ if (isHostValid)
+ errorString += QLatin1String(errorInfo._message);
+ else
+ errorString += QLatin1String(QT_TRANSLATE_NOOP(QUrl, "invalid hostname"));
}
if (errorInfo._found) {
errorString += QLatin1String(QT_TRANSLATE_NOOP(QUrl, ", but found \'"));
@@ -4488,7 +4500,7 @@ void QUrl::setAuthority(const QString &authority)
if (!QURL_HASFLAG(d->stateFlags, QUrlPrivate::Parsed)) d->parse();
detach();
- QURL_UNSETFLAG(d->stateFlags, QUrlPrivate::Validated | QUrlPrivate::Normalized);
+ QURL_UNSETFLAG(d->stateFlags, QUrlPrivate::Validated | QUrlPrivate::Normalized | QUrlPrivate::HostCanonicalized);
d->setAuthority(authority);
}
diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp
index ad645e32c7..e967884241 100644
--- a/src/corelib/kernel/qcoreapplication.cpp
+++ b/src/corelib/kernel/qcoreapplication.cpp
@@ -2115,7 +2115,8 @@ QStringList QCoreApplication::arguments()
l1arg == "-stylesheet" ||
l1arg == "-widgetcount")
;
- else if (l1arg.startsWith("-style="))
+ else if (l1arg.startsWith("-style=") ||
+ l1arg.startsWith("-qmljsdebugger="))
;
else if (l1arg == "-style" ||
l1arg == "-session" ||
diff --git a/src/corelib/kernel/qeventdispatcher_unix.cpp b/src/corelib/kernel/qeventdispatcher_unix.cpp
index 72f3c0ea97..b2b980666d 100644
--- a/src/corelib/kernel/qeventdispatcher_unix.cpp
+++ b/src/corelib/kernel/qeventdispatcher_unix.cpp
@@ -557,18 +557,22 @@ int QTimerInfoList::activateTimers()
if (qt_disable_lowpriority_timers || isEmpty())
return 0; // nothing to do
- bool firstTime = true;
- timeval currentTime;
- int n_act = 0, maxCount = count();
+ int n_act = 0, maxCount = 0;
firstTimerInfo = 0;
- while (maxCount--) {
- currentTime = updateCurrentTime();
- if (firstTime) {
- repairTimersIfNeeded();
- firstTime = false;
- }
+ timeval currentTime = updateCurrentTime();
+ repairTimersIfNeeded();
+
+ // Find out how many timer have expired
+ for (QTimerInfoList::const_iterator it = constBegin(); it != constEnd(); ++it) {
+ if (currentTime < (*it)->timeout)
+ break;
+ maxCount++;
+ }
+
+ //fire the timers.
+ while (maxCount--) {
if (isEmpty())
break;
diff --git a/src/corelib/kernel/qmath.qdoc b/src/corelib/kernel/qmath.qdoc
new file mode 100644
index 0000000000..48f74b6426
--- /dev/null
+++ b/src/corelib/kernel/qmath.qdoc
@@ -0,0 +1,155 @@
+/****************************************************************************
+**
+** 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 documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:FDL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in a
+** written agreement between you and Nokia.
+**
+** GNU Free Documentation License
+** Alternatively, this file may be used under the terms of the GNU Free
+** Documentation License version 1.3 as published by the Free Software
+** Foundation and appearing in the file included in the packaging of this
+** file.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*!
+ \headerfile <QtCore/qmath.h>
+ \title Math Functions
+ \ingroup funclists
+ \brief The <QtCore/qmath.h> header provides various math functions.
+ \pagekeywords math trigonometry qmath floor ceiling absolute sine cosine tangent inverse tan exponent power natural logarithm
+*/
+
+/*!
+ \fn int qCeil(qreal v)
+ Return the ceiling of the value \a v.
+
+ The ceiling is the smallest integer that is not less than \a v.
+ For example, if \a v is 41.2, then the ceiling is 42.
+
+ \relates <QtCore/qmath.h>
+ \sa qFloor()
+*/
+
+/*!
+ \fn int qFloor(qreal v)
+ Return the floor of the value \a v.
+
+ The floor is the largest integer that is not greater than \a v.
+ For example, if \a v is 41.2, then the floor is 41.
+
+ \relates <QtCore/qmath.h>
+ \sa qCeil()
+*/
+
+/*!
+ \fn qreal qFabs(qreal v)
+ Returns the absolute value of \a v as a qreal.
+*/
+
+/*!
+ \fn qreal qSin(qreal v)
+ Returns the sine of the angle \a v in radians.
+
+ \relates <QtCore/qmath.h>
+ \sa qCos(), qTan()
+*/
+
+/*!
+ \fn qreal qCos(qreal v)
+ Returns the cosine of an angle \a v in radians.
+
+ \relates <QtCore/qmath.h>
+ \sa qSin(), qTan()
+*/
+
+/*!
+ \fn qreal qTan(qreal v)
+ Returns the tangent of an angle \a v in radians.
+
+ \relates <QtCore/qmath.h>
+ \sa qSin(), qCos()
+*/
+
+/*!
+ \fn qreal qAcos(qreal v)
+ Returns the arccosine of \a v as an angle in radians.
+ Arccosine is the inverse operation of cosine.
+
+ \relates <QtCore/qmath.h>
+ \sa qAtan(), qAsin(), qCos()
+*/
+
+/*!
+ \fn qreal qAsin(qreal v)
+ Returns the arcsine of \a v as an angle in radians.
+ Arcsine is the inverse operation of sine.
+
+ \relates <QtCore/qmath.h>
+ \sa qSin(), qAtan(), qAcos()
+*/
+
+/*!
+ \fn qreal qAtan(qreal v)
+ Returns the arctangent of \a v as an angle in radians.
+ Arctangent is the inverse operation of tangent.
+
+ \relates <QtCore/qmath.h>
+ \sa qTan(), qAcos(), qAsin()
+*/
+
+/*!
+ \fn qreal qAtan2(qreal x, qreal y)
+ Returns the arctangent of a point specified by the coordinates \a x and \a y.
+ This function will return the angle and its direction.
+
+ \relates <QtCore/qmath.h>
+ \sa qAtan()
+*/
+
+/*!
+ \fn qreal qSqrt(qreal v)
+ Returns the square root of \a v.
+ This function returns a NaN if \a v is a negative number.
+
+ \relates <QtCore/qmath.h>
+ \sa qPow()
+*/
+
+/*!
+ \fn qreal qLn(qreal v)
+ Returns the natural logarithm of \a v. Natural logarithm uses base e.
+
+ \relates <QtCore/qmath.h>
+ \sa qExp()
+*/
+
+/*!
+ \fn qreal qExp(qreal v)
+ Returns the exponential function of \c e to the power of \a v.
+
+ \relates <QtCore/qmath.h>
+ \sa qLn()
+*/
+
+/*!
+ \fn qreal qPow(qreal x, qreal y)
+ Returns the value of \a x raised to the power of \a y.
+ That is, \a x is the base and \a y is the exponent.
+
+ \relates <QtCore/qmath.h>
+ \sa qSqrt()
+*/
diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp
index a70772feb3..ceb2a9c9c8 100644
--- a/src/corelib/kernel/qmetaobject.cpp
+++ b/src/corelib/kernel/qmetaobject.cpp
@@ -266,7 +266,25 @@ QObject *QMetaObject::cast(QObject *obj) const
const QMetaObject *m = obj->metaObject();
do {
if (m == this)
- return const_cast<QObject*>(obj);
+ return obj;
+ } while ((m = m->d.superdata));
+ }
+ return 0;
+}
+
+/*!
+ \internal
+
+ Returns \a obj if object \a obj inherits from this
+ meta-object; otherwise returns 0.
+*/
+const QObject *QMetaObject::cast(const QObject *obj) const
+{
+ if (obj) {
+ const QMetaObject *m = obj->metaObject();
+ do {
+ if (m == this)
+ return obj;
} while ((m = m->d.superdata));
}
return 0;
diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h
index 52efcd0613..eebb3dbc62 100644
--- a/src/corelib/kernel/qmetatype.h
+++ b/src/corelib/kernel/qmetatype.h
@@ -156,7 +156,18 @@ void qMetaTypeLoadHelper(QDataStream &stream, T *t)
}
#endif // QT_NO_DATASTREAM
-template <typename T> struct QMetaTypeId2;
+template <typename T>
+struct QMetaTypeId
+{
+ enum { Defined = 0 };
+};
+
+template <typename T>
+struct QMetaTypeId2
+{
+ enum { Defined = QMetaTypeId<T>::Defined };
+ static inline int qt_metatype_id() { return QMetaTypeId<T>::qt_metatype_id(); }
+};
namespace QtPrivate {
template <typename T, bool Defined = QMetaTypeId2<T>::Defined>
@@ -210,19 +221,6 @@ void qRegisterMetaTypeStreamOperators(const char *typeName
#endif // QT_NO_DATASTREAM
template <typename T>
-struct QMetaTypeId
-{
- enum { Defined = 0 };
-};
-
-template <typename T>
-struct QMetaTypeId2
-{
- enum { Defined = QMetaTypeId<T>::Defined };
- static inline int qt_metatype_id() { return QMetaTypeId<T>::qt_metatype_id(); }
-};
-
-template <typename T>
inline int qMetaTypeId(
#ifndef qdoc
T * /* dummy */ = 0
diff --git a/src/corelib/kernel/qobject.h b/src/corelib/kernel/qobject.h
index b5db936c2b..63fdf76801 100644
--- a/src/corelib/kernel/qobject.h
+++ b/src/corelib/kernel/qobject.h
@@ -351,7 +351,7 @@ inline QT_DEPRECATED T qFindChild(const QObject *o, const QString &name = QStrin
{ return o->findChild<T>(name); }
template<typename T>
-inline QList<T> qFindChildren(const QObject *o, const QString &name = QString())
+inline QT_DEPRECATED QList<T> qFindChildren(const QObject *o, const QString &name = QString())
{
return o->findChildren<T>(name);
}
@@ -378,14 +378,10 @@ inline T qobject_cast(QObject *object)
template <class T>
inline T qobject_cast(const QObject *object)
{
- // this will cause a compilation error if T is not const
- register T ptr = static_cast<T>(object);
- Q_UNUSED(ptr);
-
#if !defined(QT_NO_QOBJECT_CHECK)
reinterpret_cast<T>(0)->qt_check_for_QOBJECT_macro(*reinterpret_cast<T>(const_cast<QObject *>(object)));
#endif
- return static_cast<T>(const_cast<QObject *>(reinterpret_cast<T>(0)->staticMetaObject.cast(const_cast<QObject *>(object))));
+ return static_cast<T>(reinterpret_cast<T>(0)->staticMetaObject.cast(object));
}
diff --git a/src/corelib/kernel/qobjectdefs.h b/src/corelib/kernel/qobjectdefs.h
index 996fce2fbb..db46ba5c9c 100644
--- a/src/corelib/kernel/qobjectdefs.h
+++ b/src/corelib/kernel/qobjectdefs.h
@@ -298,6 +298,7 @@ struct Q_CORE_EXPORT QMetaObject
const QMetaObject *superClass() const;
QObject *cast(QObject *obj) const;
+ const QObject *cast(const QObject *obj) const;
#ifndef QT_NO_TRANSLATION
// ### Qt 4: Merge overloads
diff --git a/src/corelib/kernel/qpointer.cpp b/src/corelib/kernel/qpointer.cpp
index 5cd022024f..fbfb961fa4 100644
--- a/src/corelib/kernel/qpointer.cpp
+++ b/src/corelib/kernel/qpointer.cpp
@@ -41,7 +41,7 @@
/*!
\class QPointer
- \brief The QPointer class is a template class that provides guarded pointers to QObjects.
+ \brief The QPointer class is a template class that provides guarded pointers to QObject.
\ingroup objectmodel
diff --git a/src/corelib/plugin/qfactoryloader.cpp b/src/corelib/plugin/qfactoryloader.cpp
index 62d565adb2..a26dcd8465 100644
--- a/src/corelib/plugin/qfactoryloader.cpp
+++ b/src/corelib/plugin/qfactoryloader.cpp
@@ -244,6 +244,14 @@ QObject *QFactoryLoader::instance(const QString &key) const
return 0;
}
+#ifdef Q_WS_X11
+QLibraryPrivate *QFactoryLoader::library(const QString &key) const
+{
+ Q_D(const QFactoryLoader);
+ return d->keyMap.value(d->cs ? key : key.toLower());
+}
+#endif
+
void QFactoryLoader::refreshAll()
{
QMutexLocker locker(qt_factoryloader_mutex());
diff --git a/src/corelib/plugin/qfactoryloader_p.h b/src/corelib/plugin/qfactoryloader_p.h
index 10e6e2a100..068c6c7c0f 100644
--- a/src/corelib/plugin/qfactoryloader_p.h
+++ b/src/corelib/plugin/qfactoryloader_p.h
@@ -77,6 +77,10 @@ public:
QStringList keys() const;
QObject *instance(const QString &key) const;
+#ifdef Q_WS_X11
+ QLibraryPrivate *library(const QString &key) const;
+#endif
+
void update();
static void refreshAll();
diff --git a/src/corelib/plugin/qlibrary.cpp b/src/corelib/plugin/qlibrary.cpp
index 239509e49a..f812275f17 100644
--- a/src/corelib/plugin/qlibrary.cpp
+++ b/src/corelib/plugin/qlibrary.cpp
@@ -854,6 +854,9 @@ bool QLibraryPrivate::isPlugin(QSettings *settings)
#ifdef QT_BUILD_KEY_COMPAT2
&& key != QT_BUILD_KEY_COMPAT2
#endif
+#ifdef QT_BUILD_KEY_COMPAT3
+ && key != QT_BUILD_KEY_COMPAT3
+#endif
) {
if (qt_debug_component()) {
qWarning("In %s:\n"
diff --git a/src/corelib/plugin/qsystemlibrary.cpp b/src/corelib/plugin/qsystemlibrary.cpp
index a11ed50c10..eeb142bbfc 100644
--- a/src/corelib/plugin/qsystemlibrary.cpp
+++ b/src/corelib/plugin/qsystemlibrary.cpp
@@ -78,7 +78,7 @@
(http://msdn.microsoft.com/en-us/library/ms886736.aspx)
*/
#if defined(Q_OS_WINCE)
-HINSTANCE QSystemLibrary::load(const wchar_t *libraryName, bool onlySystemDirectory/*= true*/)
+HINSTANCE QSystemLibrary::load(const wchar_t *libraryName, bool onlySystemDirectory /* = true */)
{
return ::LoadLibrary(libraryName);
}
@@ -101,7 +101,7 @@ static QString qSystemDirectory()
return QString::fromWCharArray(fullPath.constData(), int(retLen));
}
-HINSTANCE QSystemLibrary::load(const wchar_t *libraryName, bool onlySystemDirectory/*= true*/)
+HINSTANCE QSystemLibrary::load(const wchar_t *libraryName, bool onlySystemDirectory /* = true */)
{
QStringList searchOrder;
diff --git a/src/corelib/statemachine/qstatemachine.cpp b/src/corelib/statemachine/qstatemachine.cpp
index a3c702a312..d704615b9c 100644
--- a/src/corelib/statemachine/qstatemachine.cpp
+++ b/src/corelib/statemachine/qstatemachine.cpp
@@ -2135,6 +2135,7 @@ void QStateMachine::endMicrostep(QEvent *event)
/*!
\reimp
+ This function will call start() to start the state machine.
*/
void QStateMachine::onEntry(QEvent *event)
{
@@ -2144,6 +2145,8 @@ void QStateMachine::onEntry(QEvent *event)
/*!
\reimp
+ This function will call stop() to stop the state machine and
+ subsequently emit the stopped() signal.
*/
void QStateMachine::onExit(QEvent *event)
{
diff --git a/src/corelib/thread/qatomic.cpp b/src/corelib/thread/qatomic.cpp
index 743da24f78..697da38278 100644
--- a/src/corelib/thread/qatomic.cpp
+++ b/src/corelib/thread/qatomic.cpp
@@ -48,10 +48,9 @@
For atomic operations on pointers, see the QAtomicPointer class.
- An complex operation that completes without interruption is said
- to be \e atomic. The QAtomicInt class provides atomic reference
- counting, test-and-set, fetch-and-store, and fetch-and-add for
- integers.
+ An \e atomic operation is a complex operation that completes without interruption.
+ The QAtomicInt class provides atomic reference counting, test-and-set, fetch-and-store,
+ and fetch-and-add for integers.
\section1 Non-atomic convenience operators
@@ -635,9 +634,8 @@
For atomic operations on integers, see the QAtomicInt class.
- An complex operation that completes without interruption is said
- to be \e atomic. The QAtomicPointer class provides atomic
- test-and-set, fetch-and-store, and fetch-and-add for pointers.
+ An \e atomic operation is a complex operation that completes without interruption.
+ The QAtomicPointer class provides atomic test-and-set, fetch-and-store, and fetch-and-add for pointers.
\section1 Non-atomic convenience operators
diff --git a/src/corelib/thread/qthread_unix.cpp b/src/corelib/thread/qthread_unix.cpp
index f8cf67d50e..eaba3f3795 100644
--- a/src/corelib/thread/qthread_unix.cpp
+++ b/src/corelib/thread/qthread_unix.cpp
@@ -142,6 +142,20 @@ static void destroy_current_thread_data_key()
}
Q_DESTRUCTOR_FUNCTION(destroy_current_thread_data_key)
+#ifdef Q_OS_SYMBIAN
+static void init_symbian_thread_handle(RThread &thread)
+{
+ thread = RThread();
+ TThreadId threadId = thread.Id();
+ thread.Open(threadId);
+
+ // Make thread handle accessible process wide
+ RThread originalCloser = thread;
+ thread.Duplicate(thread, EOwnerProcess);
+ originalCloser.Close();
+}
+#endif
+
QThreadData *QThreadData::current()
{
pthread_once(&current_thread_data_once, create_current_thread_data_key);
@@ -182,9 +196,7 @@ void QAdoptedThread::init()
Q_D(QThread);
d->thread_id = pthread_self();
#ifdef Q_OS_SYMBIAN
- d->data->symbian_thread_handle = RThread();
- TThreadId threadId = d->data->symbian_thread_handle.Id();
- d->data->symbian_thread_handle.Open(threadId);
+ init_symbian_thread_handle(d->data->symbian_thread_handle);
#endif
}
@@ -244,9 +256,8 @@ void *QThreadPrivate::start(void *arg)
// RThread and pthread_t, we must delay initialization of the RThread
// handle when creating a thread, until we are running in the new thread.
// Here, we pick up the current thread and assign that to the handle.
- data->symbian_thread_handle = RThread();
- TThreadId threadId = data->symbian_thread_handle.Id();
- data->symbian_thread_handle.Open(threadId);
+ init_symbian_thread_handle(data->symbian_thread_handle);
+
// On symbian, threads other than the main thread are non critical by default
// This means a worker thread can crash without crashing the application - to
// use this feature, we would need to use RThread::Logon in the main thread
@@ -659,6 +670,18 @@ bool QThread::wait(unsigned long time)
return true;
while (d->running) {
+#ifdef Q_OS_SYMBIAN
+ // Check if thread still exists. Needed because kernel will kill it without notification
+ // before global statics are deleted at application exit.
+ if (d->data->symbian_thread_handle.Handle()
+ && d->data->symbian_thread_handle.ExitType() != EExitPending) {
+ // Cannot call finish here as wait is typically called from another thread.
+ // It won't be necessary anyway, as we should never get here under normal operations;
+ // all QThreads are EProcessCritical and therefore cannot normally exit
+ // undetected (i.e. panic) as long as all thread control is via QThread.
+ return true;
+ }
+#endif
if (!d->thread_done.wait(locker.mutex(), time))
return false;
}
diff --git a/src/corelib/tools/qbytearray.cpp b/src/corelib/tools/qbytearray.cpp
index 0a4aad2295..6be3416020 100644
--- a/src/corelib/tools/qbytearray.cpp
+++ b/src/corelib/tools/qbytearray.cpp
@@ -46,7 +46,6 @@
#include "qlist.h"
#include "qlocale.h"
#include "qlocale_p.h"
-#include "qunicodetables_p.h"
#include "qscopedpointer.h"
#include <qdatastream.h>
diff --git a/src/corelib/tools/qchar.cpp b/src/corelib/tools/qchar.cpp
index ed0af4ec33..bb777cde4c 100644
--- a/src/corelib/tools/qchar.cpp
+++ b/src/corelib/tools/qchar.cpp
@@ -1630,21 +1630,4 @@ static void canonicalOrderHelper(QString *str, QChar::UnicodeVersion version, in
}
}
-int QT_FASTCALL QUnicodeTables::script(unsigned int uc)
-{
- if (uc > 0xffff)
- return Common;
- int script = uc_scripts[uc >> 7];
- if (script < ScriptSentinel)
- return script;
- script = (((script - ScriptSentinel) * UnicodeBlockSize) + UnicodeBlockCount);
- script = uc_scripts[script + (uc & 0x7f)];
- return script;
-}
-
-Q_CORE_EXPORT QUnicodeTables::LineBreakClass QT_FASTCALL QUnicodeTables::lineBreakClass(uint ucs4)
-{
- return (QUnicodeTables::LineBreakClass) qGetProp(ucs4)->line_break_class;
-}
-
QT_END_NAMESPACE
diff --git a/src/corelib/tools/qcryptographichash.cpp b/src/corelib/tools/qcryptographichash.cpp
index f418de9f22..043d6a304d 100644
--- a/src/corelib/tools/qcryptographichash.cpp
+++ b/src/corelib/tools/qcryptographichash.cpp
@@ -147,7 +147,7 @@ void QCryptographicHash::addData(const char *data, int length)
}
/*!
- /overload
+ \overload addData()
*/
void QCryptographicHash::addData(const QByteArray &data)
{
diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp
index cc90b3ab13..7589f59efb 100644
--- a/src/corelib/tools/qstring.cpp
+++ b/src/corelib/tools/qstring.cpp
@@ -3735,7 +3735,7 @@ QByteArray QString::toUtf8() const
Returns a UCS-4/UTF-32 representation of the string as a QVector<uint>.
UCS-4 is a Unicode codec and is lossless. All characters from this string
- can be encoded in UCS-4.
+ can be encoded in UCS-4. The vector is not null terminated.
\sa fromUtf8(), toAscii(), toLatin1(), toLocal8Bit(), QTextCodec, fromUcs4(), toWCharArray()
*/
@@ -3965,8 +3965,8 @@ QString QString::fromUtf8(const char *str, int size)
This function checks for a Byte Order Mark (BOM). If it is missing,
host byte order is assumed.
- This function is comparatively slow.
- Use QString(const ushort *, int) or QString(const ushort *) if possible.
+ This function is slow compared to the other Unicode conversions.
+ Use QString(const QChar *, int) or QString(const QChar *) if possible.
QString makes a deep copy of the Unicode data.
diff --git a/src/corelib/tools/qstringmatcher.cpp b/src/corelib/tools/qstringmatcher.cpp
index 80a8457b70..d445ed4b80 100644
--- a/src/corelib/tools/qstringmatcher.cpp
+++ b/src/corelib/tools/qstringmatcher.cpp
@@ -40,7 +40,6 @@
****************************************************************************/
#include "qstringmatcher.h"
-#include "qunicodetables_p.h"
QT_BEGIN_NAMESPACE
diff --git a/src/corelib/tools/qunicodetables.cpp b/src/corelib/tools/qunicodetables.cpp
index 9df31e5dd1..68e72cc889 100644
--- a/src/corelib/tools/qunicodetables.cpp
+++ b/src/corelib/tools/qunicodetables.cpp
@@ -4345,6 +4345,11 @@ Q_CORE_EXPORT const QUnicodeTables::Properties * QT_FASTCALL QUnicodeTables::pro
return uc_properties + index;
}
+Q_CORE_EXPORT QUnicodeTables::LineBreakClass QT_FASTCALL QUnicodeTables::lineBreakClass(uint ucs4)
+{
+ return (QUnicodeTables::LineBreakClass)qGetProp(ucs4)->line_break_class;
+}
+
static const ushort specialCaseMap[] = {
0x53, 0x73, 0x0,
0x53, 0x53, 0x0,
@@ -8561,7 +8566,7 @@ static const unsigned char uc_scripts[] = {
Inherited, Inherited, Inherited, Inherited, Inherited, Inherited, Inherited, Inherited,
Inherited, Inherited, Inherited, Inherited, Inherited, Inherited, Inherited, Inherited,
Common, Common, Common, Common, Greek, Greek, Common, Common,
- Common, Common, Greek, Greek, Greek, Greek, Common, Common,
+ Common, Common, Greek, Greek, Greek, Greek, Common, Common,
/* U+0380-03ff at offset 640 */
Common, Common, Common, Common, Greek, Greek, Greek, Common,
@@ -8579,7 +8584,7 @@ static const unsigned char uc_scripts[] = {
Greek, Greek, Coptic, Coptic, Coptic, Coptic, Coptic, Coptic,
Coptic, Coptic, Coptic, Coptic, Coptic, Coptic, Coptic, Coptic,
Greek, Greek, Greek, Greek, Greek, Greek, Greek, Greek,
- Greek, Greek, Greek, Greek, Greek, Greek, Greek, Greek,
+ Greek, Greek, Greek, Greek, Greek, Greek, Greek, Greek,
/* U+0480-04ff at offset 768 */
Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Common,
@@ -8597,7 +8602,7 @@ static const unsigned char uc_scripts[] = {
Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic,
Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic,
Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic,
- Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic,
+ Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic,
/* U+0500-057f at offset 896 */
Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic,
@@ -8615,7 +8620,7 @@ static const unsigned char uc_scripts[] = {
Common, Armenian, Armenian, Armenian, Armenian, Armenian, Armenian, Armenian,
Armenian, Armenian, Armenian, Armenian, Armenian, Armenian, Armenian, Armenian,
Armenian, Armenian, Armenian, Armenian, Armenian, Armenian, Armenian, Armenian,
- Armenian, Armenian, Armenian, Armenian, Armenian, Armenian, Armenian, Armenian,
+ Armenian, Armenian, Armenian, Armenian, Armenian, Armenian, Armenian, Armenian,
/* U+0580-05ff at offset 1024 */
Armenian, Armenian, Armenian, Armenian, Armenian, Armenian, Armenian, Armenian,
@@ -8633,7 +8638,7 @@ static const unsigned char uc_scripts[] = {
Hebrew, Hebrew, Hebrew, Hebrew, Hebrew, Hebrew, Hebrew, Hebrew,
Hebrew, Hebrew, Hebrew, Common, Common, Common, Common, Common,
Hebrew, Hebrew, Hebrew, Hebrew, Hebrew, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+0600-067f at offset 1152 */
Common, Common, Common, Common, Common, Common, Common, Common,
@@ -8651,7 +8656,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
Inherited, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
- Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
+ Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
/* U+0680-06ff at offset 1280 */
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
@@ -8669,7 +8674,7 @@ static const unsigned char uc_scripts[] = {
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
- Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
+ Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
/* U+0700-077f at offset 1408 */
Syriac, Syriac, Syriac, Syriac, Syriac, Syriac, Syriac, Syriac,
@@ -8687,7 +8692,7 @@ static const unsigned char uc_scripts[] = {
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+0780-07ff at offset 1536 */
Thaana, Thaana, Thaana, Thaana, Thaana, Thaana, Thaana, Thaana,
@@ -8705,7 +8710,7 @@ static const unsigned char uc_scripts[] = {
Nko, Nko, Nko, Nko, Nko, Nko, Nko, Nko,
Nko, Nko, Nko, Nko, Nko, Nko, Nko, Nko,
Nko, Nko, Nko, Nko, Nko, Nko, Nko, Nko,
- Nko, Nko, Nko, Common, Common, Common, Common, Common,
+ Nko, Nko, Nko, Common, Common, Common, Common, Common,
/* U+0900-097f at offset 1664 */
Common, Devanagari, Devanagari, Devanagari, Devanagari, Devanagari, Devanagari, Devanagari,
@@ -8723,7 +8728,7 @@ static const unsigned char uc_scripts[] = {
Devanagari, Devanagari, Devanagari, Devanagari, Common, Common, Devanagari, Devanagari,
Devanagari, Devanagari, Devanagari, Devanagari, Devanagari, Devanagari, Devanagari, Devanagari,
Common, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Devanagari, Devanagari, Devanagari, Devanagari, Devanagari,
+ Common, Common, Common, Devanagari, Devanagari, Devanagari, Devanagari, Devanagari,
/* U+0980-09ff at offset 1792 */
Common, Bengali, Bengali, Bengali, Common, Bengali, Bengali, Bengali,
@@ -8741,7 +8746,7 @@ static const unsigned char uc_scripts[] = {
Bengali, Bengali, Bengali, Bengali, Common, Common, Bengali, Bengali,
Bengali, Bengali, Bengali, Bengali, Bengali, Bengali, Bengali, Bengali,
Bengali, Bengali, Bengali, Bengali, Bengali, Bengali, Bengali, Bengali,
- Bengali, Bengali, Bengali, Common, Common, Common, Common, Common,
+ Bengali, Bengali, Bengali, Common, Common, Common, Common, Common,
/* U+0a00-0a7f at offset 1920 */
Common, Gurmukhi, Gurmukhi, Gurmukhi, Common, Gurmukhi, Gurmukhi, Gurmukhi,
@@ -8759,7 +8764,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Gurmukhi, Gurmukhi,
Gurmukhi, Gurmukhi, Gurmukhi, Gurmukhi, Gurmukhi, Gurmukhi, Gurmukhi, Gurmukhi,
Gurmukhi, Gurmukhi, Gurmukhi, Gurmukhi, Gurmukhi, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+0a80-0aff at offset 2048 */
Common, Gujarati, Gujarati, Gujarati, Common, Gujarati, Gujarati, Gujarati,
@@ -8777,7 +8782,7 @@ static const unsigned char uc_scripts[] = {
Gujarati, Gujarati, Gujarati, Gujarati, Common, Common, Gujarati, Gujarati,
Gujarati, Gujarati, Gujarati, Gujarati, Gujarati, Gujarati, Gujarati, Gujarati,
Common, Gujarati, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+0b00-0b7f at offset 2176 */
Common, Oriya, Oriya, Oriya, Common, Oriya, Oriya, Oriya,
@@ -8795,7 +8800,7 @@ static const unsigned char uc_scripts[] = {
Oriya, Oriya, Common, Common, Common, Common, Oriya, Oriya,
Oriya, Oriya, Oriya, Oriya, Oriya, Oriya, Oriya, Oriya,
Oriya, Oriya, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+0b80-0bff at offset 2304 */
Common, Common, Tamil, Tamil, Common, Tamil, Tamil, Tamil,
@@ -8813,7 +8818,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Tamil, Tamil,
Tamil, Tamil, Tamil, Tamil, Tamil, Tamil, Tamil, Tamil,
Tamil, Tamil, Tamil, Tamil, Tamil, Tamil, Tamil, Tamil,
- Tamil, Tamil, Tamil, Common, Common, Common, Common, Common,
+ Tamil, Tamil, Tamil, Common, Common, Common, Common, Common,
/* U+0c00-0c7f at offset 2432 */
Common, Telugu, Telugu, Telugu, Common, Telugu, Telugu, Telugu,
@@ -8831,7 +8836,7 @@ static const unsigned char uc_scripts[] = {
Telugu, Telugu, Common, Common, Common, Common, Telugu, Telugu,
Telugu, Telugu, Telugu, Telugu, Telugu, Telugu, Telugu, Telugu,
Common, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+0c80-0cff at offset 2560 */
Common, Common, Kannada, Kannada, Common, Kannada, Kannada, Kannada,
@@ -8849,7 +8854,7 @@ static const unsigned char uc_scripts[] = {
Kannada, Kannada, Kannada, Kannada, Common, Common, Kannada, Kannada,
Kannada, Kannada, Kannada, Kannada, Kannada, Kannada, Kannada, Kannada,
Common, Kannada, Kannada, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+0d00-0d7f at offset 2688 */
Common, Common, Malayalam, Malayalam, Common, Malayalam, Malayalam, Malayalam,
@@ -8867,7 +8872,7 @@ static const unsigned char uc_scripts[] = {
Malayalam, Malayalam, Common, Common, Common, Common, Malayalam, Malayalam,
Malayalam, Malayalam, Malayalam, Malayalam, Malayalam, Malayalam, Malayalam, Malayalam,
Common, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+0d80-0dff at offset 2816 */
Common, Common, Sinhala, Sinhala, Common, Sinhala, Sinhala, Sinhala,
@@ -8885,7 +8890,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Sinhala, Sinhala, Sinhala, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+0e00-0e7f at offset 2944 */
Common, Thai, Thai, Thai, Thai, Thai, Thai, Thai,
@@ -8903,7 +8908,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+0e80-0eff at offset 3072 */
Common, Lao, Lao, Common, Lao, Common, Common, Lao,
@@ -8921,7 +8926,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+0f00-0f7f at offset 3200 */
Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan,
@@ -8939,7 +8944,7 @@ static const unsigned char uc_scripts[] = {
Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan,
Tibetan, Tibetan, Tibetan, Common, Common, Common, Common, Common,
Common, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan,
- Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan,
+ Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan,
/* U+0f80-0fff at offset 3328 */
Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan,
@@ -8957,7 +8962,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+1000-107f at offset 3456 */
Myanmar, Myanmar, Myanmar, Myanmar, Myanmar, Myanmar, Myanmar, Myanmar,
@@ -8975,7 +8980,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+1080-10ff at offset 3584 */
Common, Common, Common, Common, Common, Common, Common, Common,
@@ -8993,7 +8998,7 @@ static const unsigned char uc_scripts[] = {
Georgian, Georgian, Georgian, Georgian, Georgian, Georgian, Georgian, Georgian,
Georgian, Georgian, Georgian, Georgian, Georgian, Georgian, Georgian, Georgian,
Georgian, Georgian, Georgian, Georgian, Georgian, Georgian, Georgian, Georgian,
- Georgian, Georgian, Georgian, Common, Georgian, Common, Common, Common,
+ Georgian, Georgian, Georgian, Common, Georgian, Common, Common, Common,
/* U+1100-117f at offset 3712 */
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
@@ -9011,7 +9016,7 @@ static const unsigned char uc_scripts[] = {
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
- Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
+ Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
/* U+1180-11ff at offset 3840 */
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
@@ -9029,7 +9034,7 @@ static const unsigned char uc_scripts[] = {
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
- Hangul, Hangul, Common, Common, Common, Common, Common, Common,
+ Hangul, Hangul, Common, Common, Common, Common, Common, Common,
/* U+1680-16ff at offset 3968 */
Ogham, Ogham, Ogham, Ogham, Ogham, Ogham, Ogham, Ogham,
@@ -9047,7 +9052,7 @@ static const unsigned char uc_scripts[] = {
Runic, Runic, Runic, Runic, Runic, Runic, Runic, Runic,
Runic, Runic, Runic, Common, Common, Common, Runic, Runic,
Runic, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+1780-17ff at offset 4096 */
Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer,
@@ -9065,7 +9070,7 @@ static const unsigned char uc_scripts[] = {
Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer,
Khmer, Khmer, Common, Common, Common, Common, Common, Common,
Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer,
- Khmer, Khmer, Common, Common, Common, Common, Common, Common,
+ Khmer, Khmer, Common, Common, Common, Common, Common, Common,
/* U+1980-19ff at offset 4224 */
NewTaiLue, NewTaiLue, NewTaiLue, NewTaiLue, NewTaiLue, NewTaiLue, NewTaiLue, NewTaiLue,
@@ -9083,7 +9088,7 @@ static const unsigned char uc_scripts[] = {
Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer,
Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer,
Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer,
- Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer,
+ Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer,
/* U+1d00-1d7f at offset 4352 */
Latin, Latin, Latin, Latin, Latin, Latin, Latin, Latin,
@@ -9101,7 +9106,7 @@ static const unsigned char uc_scripts[] = {
Greek, Greek, Latin, Latin, Latin, Latin, Greek, Greek,
Greek, Greek, Greek, Latin, Latin, Latin, Latin, Latin,
Latin, Latin, Latin, Latin, Latin, Latin, Latin, Latin,
- Cyrillic, Latin, Latin, Latin, Latin, Latin, Latin, Latin,
+ Cyrillic, Latin, Latin, Latin, Latin, Latin, Latin, Latin,
/* U+1d80-1dff at offset 4480 */
Latin, Latin, Latin, Latin, Latin, Latin, Latin, Latin,
@@ -9119,7 +9124,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Inherited, Inherited,
+ Common, Common, Common, Common, Common, Common, Inherited, Inherited,
/* U+1f00-1f7f at offset 4608 */
Greek, Greek, Greek, Greek, Greek, Greek, Greek, Greek,
@@ -9137,7 +9142,7 @@ static const unsigned char uc_scripts[] = {
Greek, Greek, Greek, Greek, Greek, Greek, Greek, Greek,
Greek, Greek, Greek, Greek, Greek, Greek, Greek, Greek,
Greek, Greek, Greek, Greek, Greek, Greek, Greek, Greek,
- Greek, Greek, Greek, Greek, Greek, Greek, Common, Common,
+ Greek, Greek, Greek, Greek, Greek, Greek, Common, Common,
/* U+1f80-1fff at offset 4736 */
Greek, Greek, Greek, Greek, Greek, Greek, Greek, Greek,
@@ -9155,7 +9160,7 @@ static const unsigned char uc_scripts[] = {
Greek, Greek, Greek, Greek, Greek, Greek, Greek, Greek,
Greek, Greek, Greek, Greek, Greek, Greek, Greek, Greek,
Common, Common, Greek, Greek, Greek, Common, Greek, Greek,
- Greek, Greek, Greek, Greek, Greek, Greek, Greek, Common,
+ Greek, Greek, Greek, Greek, Greek, Greek, Greek, Common,
/* U+2000-207f at offset 4864 */
Common, Common, Common, Common, Common, Common, Common, Common,
@@ -9173,7 +9178,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Latin, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Latin,
+ Common, Common, Common, Common, Common, Common, Common, Latin,
/* U+2080-20ff at offset 4992 */
Common, Common, Common, Common, Common, Common, Common, Common,
@@ -9191,7 +9196,7 @@ static const unsigned char uc_scripts[] = {
Inherited, Inherited, Inherited, Inherited, Inherited, Inherited, Inherited, Inherited,
Inherited, Inherited, Inherited, Inherited, Inherited, Inherited, Inherited, Inherited,
Common, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+2100-217f at offset 5120 */
Common, Common, Common, Common, Common, Common, Common, Common,
@@ -9209,7 +9214,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+2d00-2d7f at offset 5248 */
Georgian, Georgian, Georgian, Georgian, Georgian, Georgian, Georgian, Georgian,
@@ -9227,7 +9232,7 @@ static const unsigned char uc_scripts[] = {
Tifinagh, Tifinagh, Tifinagh, Tifinagh, Tifinagh, Tifinagh, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Tifinagh,
Common, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+3000-307f at offset 5376 */
Common, Common, Common, Common, Common, Han, Common, Han,
@@ -9245,7 +9250,7 @@ static const unsigned char uc_scripts[] = {
Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana,
Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana,
Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana,
- Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana,
+ Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana,
/* U+3080-30ff at offset 5504 */
Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana,
@@ -9263,7 +9268,7 @@ static const unsigned char uc_scripts[] = {
Katakana, Katakana, Katakana, Katakana, Katakana, Katakana, Katakana, Katakana,
Katakana, Katakana, Katakana, Katakana, Katakana, Katakana, Katakana, Katakana,
Katakana, Katakana, Katakana, Katakana, Katakana, Katakana, Katakana, Katakana,
- Katakana, Katakana, Katakana, Common, Common, Katakana, Katakana, Katakana,
+ Katakana, Katakana, Katakana, Common, Common, Katakana, Katakana, Katakana,
/* U+3100-317f at offset 5632 */
Common, Common, Common, Common, Common, Bopomofo, Bopomofo, Bopomofo,
@@ -9281,7 +9286,7 @@ static const unsigned char uc_scripts[] = {
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
- Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
+ Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
/* U+3180-31ff at offset 5760 */
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
@@ -9299,7 +9304,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
Katakana, Katakana, Katakana, Katakana, Katakana, Katakana, Katakana, Katakana,
- Katakana, Katakana, Katakana, Katakana, Katakana, Katakana, Katakana, Katakana,
+ Katakana, Katakana, Katakana, Katakana, Katakana, Katakana, Katakana, Katakana,
/* U+3200-327f at offset 5888 */
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
@@ -9317,7 +9322,7 @@ static const unsigned char uc_scripts[] = {
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
- Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Common, Common,
+ Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Common, Common,
/* U+d780-d7ff at offset 6016 */
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
@@ -9335,7 +9340,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+fb00-fb7f at offset 6144 */
Latin, Latin, Latin, Latin, Latin, Latin, Latin, Common,
@@ -9353,7 +9358,7 @@ static const unsigned char uc_scripts[] = {
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
- Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
+ Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
/* U+fb80-fbff at offset 6272 */
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
@@ -9371,7 +9376,7 @@ static const unsigned char uc_scripts[] = {
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
- Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
+ Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
/* U+fd00-fd7f at offset 6400 */
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
@@ -9389,7 +9394,7 @@ static const unsigned char uc_scripts[] = {
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
- Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
+ Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
/* U+fd80-fdff at offset 6528 */
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
@@ -9407,7 +9412,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
- Arabic, Arabic, Arabic, Arabic, Arabic, Common, Common, Common,
+ Arabic, Arabic, Arabic, Arabic, Arabic, Common, Common, Common,
/* U+fe00-fe7f at offset 6656 */
Inherited, Inherited, Inherited, Inherited, Inherited, Inherited, Inherited, Inherited,
@@ -9425,7 +9430,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
Arabic, Arabic, Arabic, Arabic, Arabic, Common, Arabic, Arabic,
- Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
+ Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
/* U+fe80-feff at offset 6784 */
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
@@ -9443,7 +9448,7 @@ static const unsigned char uc_scripts[] = {
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
- Arabic, Arabic, Arabic, Arabic, Arabic, Common, Common, Common,
+ Arabic, Arabic, Arabic, Arabic, Arabic, Common, Common, Common,
/* U+ff80-ffff at offset 6912 */
Katakana, Katakana, Katakana, Katakana, Katakana, Katakana, Katakana, Katakana,
@@ -9461,9 +9466,21 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common
+ Common, Common, Common, Common, Common, Common, Common, Common
};
} // namespace QUnicodeTables
+Q_CORE_EXPORT int QT_FASTCALL QUnicodeTables::script(uint ucs4)
+{
+ if (ucs4 > 0xffff)
+ return Common;
+ int script = uc_scripts[ucs4 >> 7];
+ if (script < ScriptSentinel)
+ return script;
+ script = (((script - ScriptSentinel) * UnicodeBlockSize) + UnicodeBlockCount);
+ script = uc_scripts[script + (ucs4 & 0x7f)];
+ return script;
+}
+
QT_END_NAMESPACE
diff --git a/src/corelib/tools/qunicodetables_p.h b/src/corelib/tools/qunicodetables_p.h
index 5c7cc08e1f..be52bf995a 100644
--- a/src/corelib/tools/qunicodetables_p.h
+++ b/src/corelib/tools/qunicodetables_p.h
@@ -162,20 +162,6 @@ namespace QUnicodeTables {
enum { ScriptSentinel = 32 };
- // see http://www.unicode.org/reports/tr14/tr14-19.html
- // we don't use the XX, AI and CB properties and map them to AL instead.
- // as we don't support any EBDIC based OS'es, NL is ignored and mapped to AL as well.
- enum LineBreakClass {
- LineBreak_OP, LineBreak_CL, LineBreak_QU, LineBreak_GL, LineBreak_NS,
- LineBreak_EX, LineBreak_SY, LineBreak_IS, LineBreak_PR, LineBreak_PO,
- LineBreak_NU, LineBreak_AL, LineBreak_ID, LineBreak_IN, LineBreak_HY,
- LineBreak_BA, LineBreak_BB, LineBreak_B2, LineBreak_ZW, LineBreak_CM,
- LineBreak_WJ, LineBreak_H2, LineBreak_H3, LineBreak_JL, LineBreak_JV,
- LineBreak_JT, LineBreak_SA, LineBreak_SG,
- LineBreak_SP, LineBreak_CR, LineBreak_LF, LineBreak_BK
- };
-
-
enum GraphemeBreak {
GraphemeBreakOther,
GraphemeBreakCR,
@@ -217,6 +203,20 @@ namespace QUnicodeTables {
};
+ // see http://www.unicode.org/reports/tr14/tr14-19.html
+ // we don't use the XX, AI and CB properties and map them to AL instead.
+ // as we don't support any EBDIC based OS'es, NL is ignored and mapped to AL as well.
+ enum LineBreakClass {
+ LineBreak_OP, LineBreak_CL, LineBreak_QU, LineBreak_GL, LineBreak_NS,
+ LineBreak_EX, LineBreak_SY, LineBreak_IS, LineBreak_PR, LineBreak_PO,
+ LineBreak_NU, LineBreak_AL, LineBreak_ID, LineBreak_IN, LineBreak_HY,
+ LineBreak_BA, LineBreak_BB, LineBreak_B2, LineBreak_ZW, LineBreak_CM,
+ LineBreak_WJ, LineBreak_H2, LineBreak_H3, LineBreak_JL, LineBreak_JV,
+ LineBreak_JT, LineBreak_SA, LineBreak_SG,
+ LineBreak_SP, LineBreak_CR, LineBreak_LF, LineBreak_BK
+ };
+
+
Q_CORE_EXPORT QUnicodeTables::LineBreakClass QT_FASTCALL lineBreakClass(uint ucs4);
inline int lineBreakClass(const QChar &ch)
{ return lineBreakClass(ch.unicode()); }
diff --git a/src/corelib/tools/qvector.h b/src/corelib/tools/qvector.h
index 7eee33dc76..c16aefb2ef 100644
--- a/src/corelib/tools/qvector.h
+++ b/src/corelib/tools/qvector.h
@@ -439,7 +439,7 @@ QVector<T>::QVector(int asize, const T &t)
template <typename T>
QVector<T>::QVector(std::initializer_list<T> args)
{
- p = malloc(args.size());
+ d = malloc(args.size());
d->ref = 1;
d->alloc = d->size = args.size();
d->sharable = true;
diff --git a/src/declarative/debugger/qdeclarativedebugservice.cpp b/src/declarative/debugger/qdeclarativedebugservice.cpp
index 1bbfcf4a25..1f2bf4fa3b 100644
--- a/src/declarative/debugger/qdeclarativedebugservice.cpp
+++ b/src/declarative/debugger/qdeclarativedebugservice.cpp
@@ -49,6 +49,8 @@
#include <QtCore/qstringlist.h>
#include <private/qobject_p.h>
+#include <private/qapplication_p.h>
+#include <QtGui/qapplication.h>
QT_BEGIN_NAMESPACE
@@ -147,24 +149,41 @@ bool QDeclarativeDebugServer::hasDebuggingClient() const
QDeclarativeDebugServer *QDeclarativeDebugServer::instance()
{
- static bool envTested = false;
+ static bool commandLineTested = false;
static QDeclarativeDebugServer *server = 0;
- if (!envTested) {
- envTested = true;
- QByteArray env = qgetenv("QML_DEBUG_SERVER_PORT");
- QByteArray block = qgetenv("QML_DEBUG_SERVER_BLOCK");
+ if (!commandLineTested) {
+ commandLineTested = true;
+#ifndef QDECLARATIVE_NO_DEBUG_PROTOCOL
+ QApplicationPrivate *appD = static_cast<QApplicationPrivate*>(QObjectPrivate::get(qApp));
+ // ### remove port definition when protocol is changed
+ int port = 0;
+ bool block = false;
bool ok = false;
- int port = env.toInt(&ok);
- if (ok && port > 1024) {
- server = new QDeclarativeDebugServer(port);
- server->listen();
- if (!block.isEmpty()) {
- server->waitForConnection();
+ // format: qmljsdebugger=port:3768[,block]
+ if (!appD->qmljsDebugArguments.isEmpty()) {
+
+ if (appD->qmljsDebugArguments.indexOf(QLatin1String("port:")) == 0) {
+ int separatorIndex = appD->qmljsDebugArguments.indexOf(QLatin1Char(','));
+ port = appD->qmljsDebugArguments.mid(5, separatorIndex - 5).toInt(&ok);
+ }
+ block = appD->qmljsDebugArguments.contains(QLatin1String("block"));
+
+ if (ok) {
+ server = new QDeclarativeDebugServer(port);
+ server->listen();
+ if (block) {
+ server->waitForConnection();
+ }
+ } else {
+ qWarning(QString("QDeclarativeDebugServer: Ignoring \"-qmljsdebugger=%1\". "
+ "Format is -qmljsdebugger=port:<port>[,block]").arg(
+ appD->qmljsDebugArguments).toAscii().constData());
}
}
+#endif
}
return server;
diff --git a/src/declarative/graphicsitems/qdeclarativeflickable.cpp b/src/declarative/graphicsitems/qdeclarativeflickable.cpp
index d4c65aef08..c5077954b0 100644
--- a/src/declarative/graphicsitems/qdeclarativeflickable.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeflickable.cpp
@@ -128,8 +128,8 @@ QDeclarativeFlickablePrivate::QDeclarativeFlickablePrivate()
, flickingHorizontally(false), flickingVertically(false)
, hMoved(false), vMoved(false)
, movingHorizontally(false), movingVertically(false)
- , stealMouse(false), pressed(false)
- , interactive(true), deceleration(500), maxVelocity(2000), reportedVelocitySmoothing(100)
+ , stealMouse(false), pressed(false), interactive(true), calcVelocity(false)
+ , deceleration(500), maxVelocity(2000), reportedVelocitySmoothing(100)
, delayedPressEvent(0), delayedPressTarget(0), pressDelay(0), fixupDuration(600)
, vTime(0), visibleArea(0)
, flickableDirection(QDeclarativeFlickable::AutoFlickDirection)
@@ -372,11 +372,12 @@ void QDeclarativeFlickablePrivate::updateBeginningEnd()
\inlineimage flickable.gif
\endfloat
- The following example shows a large
+ The following example shows a small view onto a large image in which the
+ user can drag or flick the image in order to view different parts of it.
- \clearfloat
\snippet doc/src/snippets/declarative/flickable.qml document
+ \clearfloat
\section1 Limitations
\note Due to an implementation detail, items placed inside a Flickable cannot anchor to it by
@@ -981,7 +982,7 @@ void QDeclarativeFlickable::viewportMoved()
qreal prevY = d->lastFlickablePosition.x();
qreal prevX = d->lastFlickablePosition.y();
d->velocityTimeline.clear();
- if (d->pressed) {
+ if (d->pressed || d->calcVelocity) {
int elapsed = QDeclarativeItemPrivate::restart(d->velocityTime);
if (elapsed > 0) {
qreal horizontalVelocity = (prevX - d->hData.move.value()) * 1000 / elapsed;
diff --git a/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h b/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h
index 261b271ef5..beee741a29 100644
--- a/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h
+++ b/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h
@@ -141,6 +141,7 @@ public:
bool stealMouse : 1;
bool pressed : 1;
bool interactive : 1;
+ bool calcVelocity : 1;
QElapsedTimer lastPosTime;
QPointF lastPos;
QPointF pressPos;
@@ -173,7 +174,7 @@ public:
// flickableData property
static void data_append(QDeclarativeListProperty<QObject> *, QObject *);
static int data_count(QDeclarativeListProperty<QObject> *);
- static QObject * data_at(QDeclarativeListProperty<QObject> *, int);
+ static QObject *data_at(QDeclarativeListProperty<QObject> *, int);
static void data_clear(QDeclarativeListProperty<QObject> *);
};
diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp
index a0faf14a6c..8d08c998d4 100644
--- a/src/declarative/graphicsitems/qdeclarativegridview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp
@@ -1070,27 +1070,41 @@ void QDeclarativeGridViewPrivate::flick(AxisData &data, qreal minExtent, qreal m
GridView are laid out horizontally or vertically. Grid views are inherently flickable
as GridView inherits from \l Flickable.
- For example, if there is a simple list model defined in a file \c ContactModel.qml like this:
+ \section1 Example Usage
+
+ The following example shows the definition of a simple list model defined
+ in a file called \c ContactModel.qml:
\snippet doc/src/snippets/declarative/gridview/ContactModel.qml 0
- Another component can display this model data in a GridView, like this:
+ \beginfloatright
+ \inlineimage gridview-simple.png
+ \endfloat
+
+ This model can be referenced as \c ContactModel in other QML files. See \l{QML Modules}
+ for more information about creating reusable components like this.
+
+ Another component can display this model data in a GridView, as in the following
+ example, which creates a \c ContactModel component for its model, and a \l Column element
+ (containing \l Image and \l Text elements) for its delegate.
+ \clearfloat
\snippet doc/src/snippets/declarative/gridview/gridview.qml import
\codeline
\snippet doc/src/snippets/declarative/gridview/gridview.qml classdocs simple
- \image gridview-simple.png
- Here, the GridView creates a \c ContactModel component for its model, and a \l Column element
- (containing \l Image and \ Text elements) for its delegate. The view will create a new delegate
- for each item in the model. Notice the delegate is able to access the model's \c name and
- \c portrait data directly.
+ \beginfloatright
+ \inlineimage gridview-highlight.png
+ \endfloat
+
+ The view will create a new delegate for each item in the model. Note that the delegate
+ is able to access the model's \c name and \c portrait data directly.
An improved grid view is shown below. The delegate is visually improved and is moved
into a separate \c contactDelegate component.
-
+
+ \clearfloat
\snippet doc/src/snippets/declarative/gridview/gridview.qml classdocs advanced
- \image gridview-highlight.png
The currently selected item is highlighted with a blue \l Rectangle using the \l highlight property,
and \c focus is set to \c true to enable keyboard navigation for the grid view.
@@ -1099,10 +1113,10 @@ void QDeclarativeGridViewPrivate::flick(AxisData &data, qreal minExtent, qreal m
Delegates are instantiated as needed and may be destroyed at any time.
State should \e never be stored in a delegate.
- \note Views do not enable \e clip automatically. If the view
- is not clipped by another item or the screen, it will be necessary
- to set \e {clip: true} in order to have the out of view items clipped
- nicely.
+ \note Views do not set the \l{Item::}{clip} property automatically.
+ If the view is not clipped by another item or the screen, it will be necessary
+ to set this property to true in order to clip the items that are partially or
+ fully outside the view.
\sa {declarative/modelviews/gridview}{GridView example}
*/
@@ -2241,7 +2255,9 @@ void QDeclarativeGridView::trackedPositionChanged()
}
if (viewPos != pos) {
cancelFlick();
+ d->calcVelocity = true;
d->setPosition(pos);
+ d->calcVelocity = false;
}
}
}
diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp
index 11f9179270..e9da4f774b 100644
--- a/src/declarative/graphicsitems/qdeclarativeitem.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp
@@ -44,6 +44,7 @@
#include "private/qdeclarativeevents_p_p.h"
#include <private/qdeclarativeengine_p.h>
+#include <private/qgraphicsitem_p.h>
#include <qdeclarativeengine.h>
#include <qdeclarativeopenmetaobject_p.h>
@@ -1619,6 +1620,51 @@ void QDeclarativeItemPrivate::data_append(QDeclarativeListProperty<QObject> *pro
}
}
+static inline int children_count_helper(QDeclarativeListProperty<QObject> *prop)
+{
+ QGraphicsItemPrivate *d = QGraphicsItemPrivate::get(static_cast<QGraphicsObject *>(prop->object));
+ return d->children.count();
+}
+
+static inline QObject *children_at_helper(QDeclarativeListProperty<QObject> *prop, int index)
+{
+ QGraphicsItemPrivate *d = QGraphicsItemPrivate::get(static_cast<QGraphicsObject *>(prop->object));
+ if (index >= 0 && index < d->children.count())
+ return d->children.at(index)->toGraphicsObject();
+ else
+ return 0;
+}
+
+static inline void children_clear_helper(QDeclarativeListProperty<QObject> *prop)
+{
+ QGraphicsItemPrivate *d = QGraphicsItemPrivate::get(static_cast<QGraphicsObject *>(prop->object));
+ int childCount = d->children.count();
+ for (int index = 0 ;index < childCount; index++)
+ QGraphicsItemPrivate::get(d->children.at(0))->setParentItemHelper(0, /*newParentVariant=*/0, /*thisPointerVariant=*/0);
+}
+
+int QDeclarativeItemPrivate::data_count(QDeclarativeListProperty<QObject> *prop)
+{
+ return resources_count(prop) + children_count_helper(prop);
+}
+
+QObject *QDeclarativeItemPrivate::data_at(QDeclarativeListProperty<QObject> *prop, int i)
+{
+ int resourcesCount = resources_count(prop);
+ if (i < resourcesCount)
+ return resources_at(prop, i);
+ const int j = i - resourcesCount;
+ if (j < children_count_helper(prop))
+ return children_at_helper(prop, j);
+ return 0;
+}
+
+void QDeclarativeItemPrivate::data_clear(QDeclarativeListProperty<QObject> *prop)
+{
+ resources_clear(prop);
+ children_clear_helper(prop);
+}
+
QObject *QDeclarativeItemPrivate::resources_at(QDeclarativeListProperty<QObject> *prop, int index)
{
const QObjectList children = prop->object->children();
@@ -1638,6 +1684,13 @@ int QDeclarativeItemPrivate::resources_count(QDeclarativeListProperty<QObject> *
return prop->object->children().count();
}
+void QDeclarativeItemPrivate::resources_clear(QDeclarativeListProperty<QObject> *prop)
+{
+ const QObjectList children = prop->object->children();
+ for (int index = 0; index < children.count(); index++)
+ children.at(index)->setParent(0);
+}
+
int QDeclarativeItemPrivate::transform_count(QDeclarativeListProperty<QGraphicsTransform> *list)
{
QGraphicsObject *object = qobject_cast<QGraphicsObject *>(list->object);
@@ -1724,7 +1777,11 @@ void QDeclarativeItemPrivate::parentProperty(QObject *o, void *rv, QDeclarativeN
QDeclarativeListProperty<QObject> QDeclarativeItemPrivate::data()
{
- return QDeclarativeListProperty<QObject>(q_func(), 0, QDeclarativeItemPrivate::data_append);
+ return QDeclarativeListProperty<QObject>(q_func(), 0, QDeclarativeItemPrivate::data_append,
+ QDeclarativeItemPrivate::data_count,
+ QDeclarativeItemPrivate::data_at,
+ QDeclarativeItemPrivate::data_clear
+ );
}
/*!
@@ -2413,7 +2470,9 @@ QDeclarativeListProperty<QObject> QDeclarativeItemPrivate::resources()
{
return QDeclarativeListProperty<QObject>(q_func(), 0, QDeclarativeItemPrivate::resources_append,
QDeclarativeItemPrivate::resources_count,
- QDeclarativeItemPrivate::resources_at);
+ QDeclarativeItemPrivate::resources_at,
+ QDeclarativeItemPrivate::resources_clear
+ );
}
/*!
@@ -2484,7 +2543,7 @@ QDeclarativeListProperty<QDeclarativeTransition> QDeclarativeItemPrivate::transi
/*!
\qmlproperty bool Item::clip
- This property holds whether clipping is enabled.
+ This property holds whether clipping is enabled. The default clip value is \c false.
If clipping is enabled, an item will clip its own painting, as well
as the painting of its children, to its bounding rectangle.
@@ -2494,9 +2553,9 @@ QDeclarativeListProperty<QDeclarativeTransition> QDeclarativeItemPrivate::transi
/*!
\property QDeclarativeItem::clip
- This property holds whether clipping is enabled.
+ This property holds whether clipping is enabled. The default clip value is \c false.
- if clipping is enabled, an item will clip its own painting, as well
+ If clipping is enabled, an item will clip its own painting, as well
as the painting of its children, to its bounding rectangle. If you set
clipping during an item's paint operation, remember to re-set it to
prevent clipping the rest of your scene.
diff --git a/src/declarative/graphicsitems/qdeclarativeitem_p.h b/src/declarative/graphicsitems/qdeclarativeitem_p.h
index fffb4f7dce..f85fa27874 100644
--- a/src/declarative/graphicsitems/qdeclarativeitem_p.h
+++ b/src/declarative/graphicsitems/qdeclarativeitem_p.h
@@ -176,11 +176,15 @@ public:
// data property
static void data_append(QDeclarativeListProperty<QObject> *, QObject *);
+ static int data_count(QDeclarativeListProperty<QObject> *);
+ static QObject *data_at(QDeclarativeListProperty<QObject> *, int);
+ static void data_clear(QDeclarativeListProperty<QObject> *);
// resources property
static QObject *resources_at(QDeclarativeListProperty<QObject> *, int);
static void resources_append(QDeclarativeListProperty<QObject> *, QObject *);
static int resources_count(QDeclarativeListProperty<QObject> *);
+ static void resources_clear(QDeclarativeListProperty<QObject> *);
// transform property
static int transform_count(QDeclarativeListProperty<QGraphicsTransform> *list);
diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp
index 177c5b362f..c1e6aaade5 100644
--- a/src/declarative/graphicsitems/qdeclarativelistview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp
@@ -1394,11 +1394,14 @@ void QDeclarativeListViewPrivate::flick(AxisData &data, qreal minExtent, qreal m
QAbstractListModel.
A ListView has a \l model, which defines the data to be displayed, and
- a \l delegate, which defines how the data should be displayed. Items in a
- ListView are laid out horizontally or vertically. List views are inherently flickable
- as ListView inherits from \l Flickable.
+ a \l delegate, which defines how the data should be displayed. Items in a
+ ListView are laid out horizontally or vertically. List views are inherently
+ flickable because ListView inherits from \l Flickable.
- For example, if there is a simple list model defined in a file \c ContactModel.qml like this:
+ \section1 Example Usage
+
+ The following example shows the definition of a simple list model defined
+ in a file called \c ContactModel.qml:
\snippet doc/src/snippets/declarative/listview/ContactModel.qml 0
@@ -1416,7 +1419,7 @@ void QDeclarativeListViewPrivate::flick(AxisData &data, qreal minExtent, qreal m
An improved list view is shown below. The delegate is visually improved and is moved
into a separate \c contactDelegate component.
-
+
\snippet doc/src/snippets/declarative/listview/listview.qml classdocs advanced
\image listview-highlight.png
@@ -2732,7 +2735,9 @@ void QDeclarativeListView::trackedPositionChanged()
}
if (viewPos != pos) {
cancelFlick();
+ d->calcVelocity = true;
d->setPosition(pos);
+ d->calcVelocity = false;
}
}
}
diff --git a/src/declarative/graphicsitems/qdeclarativeloader.cpp b/src/declarative/graphicsitems/qdeclarativeloader.cpp
index 5d71625b1c..1066c2bdc1 100644
--- a/src/declarative/graphicsitems/qdeclarativeloader.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeloader.cpp
@@ -212,8 +212,8 @@ QDeclarativeLoader::~QDeclarativeLoader()
\qmlproperty url Loader::source
This property holds the URL of the QML component to instantiate.
- Note the QML component must be an \l Item-based component. Loader cannot
- load non-visual components.
+ Note the QML component must be an \l{Item}-based component. The loader
+ cannot load non-visual components.
To unload the currently loaded item, set this property to an empty string,
or set \l sourceComponent to \c undefined.
@@ -275,8 +275,8 @@ void QDeclarativeLoader::setSource(const QUrl &url)
}
\endqml
- To unload the currently loaded item, set this property to an empty string,
- or set \l sourceComponent to \c undefined.
+ To unload the currently loaded item, set this property to an empty string
+ or \c undefined.
\sa source, progress
*/
diff --git a/src/declarative/graphicsitems/qdeclarativemousearea.cpp b/src/declarative/graphicsitems/qdeclarativemousearea.cpp
index 5516611b0d..a0208efeb3 100644
--- a/src/declarative/graphicsitems/qdeclarativemousearea.cpp
+++ b/src/declarative/graphicsitems/qdeclarativemousearea.cpp
@@ -185,27 +185,57 @@ QDeclarativeMouseAreaPrivate::~QDeclarativeMouseAreaPrivate()
\brief The MouseArea item enables simple mouse handling.
\inherits Item
- A MouseArea is typically used in conjunction with a visible item,
- where the MouseArea effectively 'proxies' mouse handling for that
- item. For example, we can put a MouseArea in a \l Rectangle that changes
+ A MouseArea is an invisible item that is typically used in conjunction with
+ a visible item in order to provide mouse handling for that item.
+ By effectively acting as a proxy, the logic for mouse handling can be
+ contained within a MouseArea item.
+
+ For basic key handling, see the \l{Keys}{Keys attached property}.
+
+ The \l enabled property is used to enable and disable mouse handling for
+ the proxied item. When disabled, the mouse area becomes transparent to
+ mouse events.
+
+ The \l pressed read-only property indicates whether or not the user is
+ holding down a mouse button over the mouse area. This property is often
+ used in bindings between properties in a user interface. The containsMouse
+ read-only property indicates the presence of the mouse cursor over the
+ mouse area but, by default, only when a mouse button is held down; see below
+ for further details.
+
+ Information about the mouse position and button clicks are provided via
+ signals for which event handler properties are defined. The most commonly
+ used involved handling mouse presses and clicks: onClicked, onDoubleClicked,
+ onPressed, onReleased and onPressAndHold.
+
+ By default, MouseArea items only report mouse clicks and not changes to the
+ position of the mouse cursor. Setting the hoverEnabled property ensures that
+ handlers defined for onPositionChanged, onEntered and onExited are used and
+ that the containsMouse property is updated even when no mouse buttons are
+ pressed.
+
+ \section1 Example Usage
+
+ \beginfloatright
+ \inlineimage qml-mousearea-snippet.png
+ \endfloat
+
+ The following example uses a MouseArea in a \l Rectangle that changes
the \l Rectangle color to red when clicked:
- \snippet doc/src/snippets/declarative/mousearea.qml import
+ \snippet doc/src/snippets/declarative/mousearea/mousearea.qml import
\codeline
- \snippet doc/src/snippets/declarative/mousearea.qml intro
+ \snippet doc/src/snippets/declarative/mousearea/mousearea.qml intro
- Many MouseArea signals pass a \l {MouseEvent}{mouse} parameter that contains
+ \clearfloat
+ Many MouseArea signals pass a \l{MouseEvent}{mouse} parameter that contains
additional information about the mouse event, such as the position, button,
and any key modifiers.
Here is an extension of the previous example that produces a different
color when the area is right clicked:
- \snippet doc/src/snippets/declarative/mousearea.qml intro-extended
-
- For basic key handling, see the \l {Keys}{Keys attached property}.
-
- MouseArea is an invisible item: it is never painted.
+ \snippet doc/src/snippets/declarative/mousearea/mousearea.qml intro-extended
\sa MouseEvent, {declarative/touchinteraction/mousearea}{MouseArea example}
*/
@@ -303,18 +333,23 @@ QDeclarativeMouseAreaPrivate::~QDeclarativeMouseAreaPrivate()
The \l {MouseEvent}{mouse} parameter provides information about the click, including the x and y
position of the release of the click, and whether the click was held.
- The \e accepted property of the MouseEvent parameter is ignored in this handler.
+ If the \e accepted property of the \l {MouseEvent}{mouse} parameter is set to false
+ in the handler, the onPressed/onReleased/onClicked handlers will be called for the second
+ click; otherwise they are supressed. The accepted property defaults to true.
*/
/*!
\qmlsignal MouseArea::onCanceled()
This handler is called when mouse events have been canceled, either because an event was not accepted, or
- because another element stole the mouse event handling. This signal is for advanced use: it is useful when
- there is more than one MouseArea that is handling input, or when there is a MouseArea inside a \l Flickable. In the latter
- case, if you execute some logic on the pressed signal and then start dragging, the \l Flickable will steal the mouse handling
- from the MouseArea. In these cases, to reset the logic when the MouseArea has lost the mouse handling to the
- \l Flickable, \c onCanceled should be used in addition to onReleased.
+ because another element stole the mouse event handling.
+
+ This signal is for advanced use: it is useful when there is more than one MouseArea
+ that is handling input, or when there is a MouseArea inside a \l Flickable. In the latter
+ case, if you execute some logic on the pressed signal and then start dragging, the
+ \l Flickable will steal the mouse handling from the MouseArea. In these cases, to reset
+ the logic when the MouseArea has lost the mouse handling to the \l Flickable,
+ \c onCanceled should be used in addition to onReleased.
*/
QDeclarativeMouseArea::QDeclarativeMouseArea(QDeclarativeItem *parent)
@@ -331,11 +366,13 @@ QDeclarativeMouseArea::~QDeclarativeMouseArea()
/*!
\qmlproperty real MouseArea::mouseX
\qmlproperty real MouseArea::mouseY
- These properties hold the coordinates of the mouse.
+ These properties hold the coordinates of the mouse cursor.
If the hoverEnabled property is false then these properties will only be valid
while a button is pressed, and will remain valid as long as the button is held
- even if the mouse is moved outside the area.
+ down even if the mouse is moved outside the area.
+
+ By default, this property is false.
If hoverEnabled is true then these properties will be valid when:
\list
@@ -360,6 +397,8 @@ qreal QDeclarativeMouseArea::mouseY() const
/*!
\qmlproperty bool MouseArea::enabled
This property holds whether the item accepts mouse events.
+
+ By default, this property is true.
*/
bool QDeclarativeMouseArea::isEnabled() const
{
@@ -387,7 +426,8 @@ void QDeclarativeMouseArea::setEnabled(bool a)
\endlist
The code below displays "right" when the right mouse buttons is pressed:
- \snippet doc/src/snippets/declarative/mousearea.qml mousebuttons
+
+ \snippet doc/src/snippets/declarative/mousearea/mousearea.qml mousebuttons
\sa acceptedButtons
*/
@@ -525,12 +565,13 @@ void QDeclarativeMouseArea::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *even
if (!d->absorb) {
QDeclarativeItem::mouseDoubleClickEvent(event);
} else {
- QDeclarativeItem::mouseDoubleClickEvent(event);
- if (event->isAccepted()) {
- // Only deliver the event if we have accepted the press.
- d->saveEvent(event);
- QDeclarativeMouseEvent me(d->lastPos.x(), d->lastPos.y(), d->lastButton, d->lastButtons, d->lastModifiers, true, false);
- emit this->doubleClicked(&me);
+ 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);
}
}
}
@@ -704,7 +745,8 @@ QVariant QDeclarativeMouseArea::itemChange(GraphicsItemChange change,
pressed. Hover enables handling of all mouse events even when no mouse button is
pressed.
- This property affects the containsMouse property and the onEntered, onExited and onPositionChanged signals.
+ This property affects the containsMouse property and the onEntered, onExited and
+ onPositionChanged signals.
*/
bool QDeclarativeMouseArea::hoverEnabled() const
{
@@ -847,7 +889,7 @@ QDeclarativeDrag *QDeclarativeMouseArea::drag()
The following example displays a \l Rectangle that can be dragged along the X-axis. The opacity
of the rectangle is reduced when it is dragged to the right.
- \snippet doc/src/snippets/declarative/mousearea.qml drag
+ \snippet doc/src/snippets/declarative/mousearea/mousearea.qml drag
\note Items cannot be dragged if they are anchored for the requested
\c drag.axis. For example, if \c anchors.left or \c anchors.right was set
@@ -858,7 +900,7 @@ QDeclarativeDrag *QDeclarativeMouseArea::drag()
If \c drag.filterChildren is set to true, a drag can override descendant MouseAreas. This
enables a parent MouseArea to handle drags, for example, while descendants handle clicks:
- \snippet doc/src/snippets/declarative/mouseareadragfilter.qml dragfilter
+ \snippet doc/src/snippets/declarative/mousearea/mouseareadragfilter.qml dragfilter
*/
diff --git a/src/declarative/graphicsitems/qdeclarativemousearea_p_p.h b/src/declarative/graphicsitems/qdeclarativemousearea_p_p.h
index cf9dc183fa..48a56d95b3 100644
--- a/src/declarative/graphicsitems/qdeclarativemousearea_p_p.h
+++ b/src/declarative/graphicsitems/qdeclarativemousearea_p_p.h
@@ -95,6 +95,12 @@ public:
return QObjectPrivate::get(q)->isSignalConnected(idx);
}
+ bool isDoubleClickConnected() {
+ Q_Q(QDeclarativeMouseArea);
+ static int idx = QObjectPrivate::get(q)->signalIndex("doubleClicked(QDeclarativeMouseEvent*)");
+ return QObjectPrivate::get(q)->isSignalConnected(idx);
+ }
+
bool absorb : 1;
bool hovered : 1;
bool pressed : 1;
diff --git a/src/declarative/graphicsitems/qdeclarativepathview.cpp b/src/declarative/graphicsitems/qdeclarativepathview.cpp
index de3f9faffd..d13492999c 100644
--- a/src/declarative/graphicsitems/qdeclarativepathview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativepathview.cpp
@@ -141,11 +141,13 @@ void QDeclarativePathViewPrivate::releaseItem(QDeclarativeItem *item)
{
if (!item || !model)
return;
- if (QDeclarativePathViewAttached *att = attached(item))
- att->setOnPath(false);
QDeclarativeItemPrivate *itemPrivate = static_cast<QDeclarativeItemPrivate*>(QGraphicsItemPrivate::get(item));
itemPrivate->removeItemChangeListener(this, QDeclarativeItemPrivate::Geometry);
- model->release(item);
+ if (model->release(item) == 0) {
+ // item was not destroyed, and we no longer reference it.
+ if (QDeclarativePathViewAttached *att = attached(item))
+ att->setOnPath(false);
+ }
}
QDeclarativePathViewAttached *QDeclarativePathViewPrivate::attached(QDeclarativeItem *item)
@@ -404,14 +406,14 @@ QDeclarativePathView::~QDeclarativePathView()
be instantiated, but not considered to be currently on the path.
Usually, these items would be set invisible, for example:
- \code
+ \qml
Component {
Rectangle {
visible: PathView.onPath
...
}
}
- \endcode
+ \endqml
It is attached to each instance of the delegate.
*/
@@ -1033,103 +1035,138 @@ QPointF QDeclarativePathViewPrivate::pointNear(const QPointF &point, qreal *near
return nearPoint;
}
-
void QDeclarativePathView::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
Q_D(QDeclarativePathView);
- if (!d->interactive || !d->items.count())
+ if (d->interactive) {
+ d->handleMousePressEvent(event);
+ event->accept();
+ } else {
+ QDeclarativeItem::mousePressEvent(event);
+ }
+}
+
+void QDeclarativePathViewPrivate::handleMousePressEvent(QGraphicsSceneMouseEvent *event)
+{
+ Q_Q(QDeclarativePathView);
+ if (!interactive || !items.count())
return;
- QPointF scenePoint = mapToScene(event->pos());
+ QPointF scenePoint = q->mapToScene(event->pos());
int idx = 0;
- for (; idx < d->items.count(); ++idx) {
- QRectF rect = d->items.at(idx)->boundingRect();
- rect = d->items.at(idx)->mapToScene(rect).boundingRect();
+ for (; idx < items.count(); ++idx) {
+ QRectF rect = items.at(idx)->boundingRect();
+ rect = items.at(idx)->mapToScene(rect).boundingRect();
if (rect.contains(scenePoint))
break;
}
- if (idx == d->items.count() && d->dragMargin == 0.) // didn't click on an item
+ if (idx == items.count() && dragMargin == 0.) // didn't click on an item
return;
- d->startPoint = d->pointNear(event->pos(), &d->startPc);
- if (idx == d->items.count()) {
- qreal distance = qAbs(event->pos().x() - d->startPoint.x()) + qAbs(event->pos().y() - d->startPoint.y());
- if (distance > d->dragMargin)
+ startPoint = pointNear(event->pos(), &startPc);
+ if (idx == items.count()) {
+ qreal distance = qAbs(event->pos().x() - startPoint.x()) + qAbs(event->pos().y() - startPoint.y());
+ if (distance > dragMargin)
return;
}
- if (d->tl.isActive() && d->flicking)
- d->stealMouse = true; // If we've been flicked then steal the click.
+ if (tl.isActive() && flicking)
+ stealMouse = true; // If we've been flicked then steal the click.
else
- d->stealMouse = false;
+ stealMouse = false;
- d->lastElapsed = 0;
- d->lastDist = 0;
- QDeclarativeItemPrivate::start(d->lastPosTime);
- d->tl.clear();
+ lastElapsed = 0;
+ lastDist = 0;
+ QDeclarativeItemPrivate::start(lastPosTime);
+ tl.clear();
}
void QDeclarativePathView::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
Q_D(QDeclarativePathView);
- if (!d->interactive || !d->lastPosTime.isValid())
+ if (d->interactive) {
+ d->handleMouseMoveEvent(event);
+ if (d->stealMouse)
+ setKeepMouseGrab(true);
+ event->accept();
+ } else {
+ QDeclarativeItem::mouseMoveEvent(event);
+ }
+}
+
+void QDeclarativePathViewPrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent *event)
+{
+ Q_Q(QDeclarativePathView);
+ if (!interactive || !lastPosTime.isValid())
return;
- if (!d->stealMouse) {
- QPointF delta = event->pos() - d->startPoint;
+ if (!stealMouse) {
+ QPointF delta = event->pos() - startPoint;
if (qAbs(delta.x()) > QApplication::startDragDistance() || qAbs(delta.y()) > QApplication::startDragDistance())
- d->stealMouse = true;
+ stealMouse = true;
}
- if (d->stealMouse) {
- d->moveReason = QDeclarativePathViewPrivate::Mouse;
+ if (stealMouse) {
+ moveReason = QDeclarativePathViewPrivate::Mouse;
qreal newPc;
- d->pointNear(event->pos(), &newPc);
- qreal diff = (newPc - d->startPc)*d->modelCount*d->mappedRange;
+ pointNear(event->pos(), &newPc);
+ qreal diff = (newPc - startPc)*modelCount*mappedRange;
if (diff) {
- setOffset(d->offset + diff);
+ setOffset(offset + diff);
- if (diff > d->modelCount/2)
- diff -= d->modelCount;
- else if (diff < -d->modelCount/2)
- diff += d->modelCount;
+ if (diff > modelCount/2)
+ diff -= modelCount;
+ else if (diff < -modelCount/2)
+ diff += modelCount;
- d->lastElapsed = QDeclarativeItemPrivate::restart(d->lastPosTime);
- d->lastDist = diff;
- d->startPc = newPc;
+ lastElapsed = QDeclarativeItemPrivate::restart(lastPosTime);
+ lastDist = diff;
+ startPc = newPc;
}
- if (!d->moving) {
- d->moving = true;
- emit movingChanged();
- emit movementStarted();
+ if (!moving) {
+ moving = true;
+ emit q->movingChanged();
+ emit q->movementStarted();
}
}
}
-void QDeclarativePathView::mouseReleaseEvent(QGraphicsSceneMouseEvent *)
+void QDeclarativePathView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
Q_D(QDeclarativePathView);
- d->stealMouse = false;
- setKeepMouseGrab(false);
- if (!d->interactive || !d->lastPosTime.isValid())
+ if (d->interactive) {
+ d->handleMouseReleaseEvent(event);
+ event->accept();
+ ungrabMouse();
+ } else {
+ QDeclarativeItem::mouseReleaseEvent(event);
+ }
+}
+
+void QDeclarativePathViewPrivate::handleMouseReleaseEvent(QGraphicsSceneMouseEvent *)
+{
+ Q_Q(QDeclarativePathView);
+ stealMouse = false;
+ q->setKeepMouseGrab(false);
+ if (!interactive || !lastPosTime.isValid())
return;
- qreal elapsed = qreal(d->lastElapsed + QDeclarativeItemPrivate::elapsed(d->lastPosTime)) / 1000.;
- qreal velocity = elapsed > 0. ? d->lastDist / elapsed : 0;
- if (d->model && d->modelCount && qAbs(velocity) > 1.) {
- qreal count = d->pathItems == -1 ? d->modelCount : d->pathItems;
+ qreal elapsed = qreal(lastElapsed + QDeclarativeItemPrivate::elapsed(lastPosTime)) / 1000.;
+ qreal velocity = elapsed > 0. ? lastDist / elapsed : 0;
+ if (model && modelCount && qAbs(velocity) > 1.) {
+ qreal count = pathItems == -1 ? modelCount : pathItems;
if (qAbs(velocity) > count * 2) // limit velocity
velocity = (velocity > 0 ? count : -count) * 2;
// Calculate the distance to be travelled
qreal v2 = velocity*velocity;
- qreal accel = d->deceleration/10;
+ qreal accel = deceleration/10;
// + 0.25 to encourage moving at least one item in the flick direction
- qreal dist = qMin(qreal(d->modelCount-1), qreal(v2 / (accel * 2.0) + 0.25));
- if (d->haveHighlightRange && d->highlightRangeMode == QDeclarativePathView::StrictlyEnforceRange) {
+ qreal dist = qMin(qreal(modelCount-1), qreal(v2 / (accel * 2.0) + 0.25));
+ if (haveHighlightRange && highlightRangeMode == QDeclarativePathView::StrictlyEnforceRange) {
// round to nearest item.
if (velocity > 0.)
- dist = qRound(dist + d->offset) - d->offset;
+ dist = qRound(dist + offset) - offset;
else
- dist = qRound(dist - d->offset) + d->offset;
+ dist = qRound(dist - offset) + offset;
// Calculate accel required to stop on item boundary
if (dist <= 0.) {
dist = 0.;
@@ -1138,23 +1175,22 @@ void QDeclarativePathView::mouseReleaseEvent(QGraphicsSceneMouseEvent *)
accel = v2 / (2.0f * qAbs(dist));
}
}
- d->offsetAdj = 0.0;
- d->moveOffset.setValue(d->offset);
- d->tl.accel(d->moveOffset, velocity, accel, dist);
- d->tl.callback(QDeclarativeTimeLineCallback(&d->moveOffset, d->fixOffsetCallback, d));
- if (!d->flicking) {
- d->flicking = true;
- emit flickingChanged();
- emit flickStarted();
+ offsetAdj = 0.0;
+ moveOffset.setValue(offset);
+ tl.accel(moveOffset, velocity, accel, dist);
+ tl.callback(QDeclarativeTimeLineCallback(&moveOffset, fixOffsetCallback, this));
+ if (!flicking) {
+ flicking = true;
+ emit q->flickingChanged();
+ emit q->flickStarted();
}
} else {
- d->fixOffset();
+ fixOffset();
}
- d->lastPosTime.invalidate();
- ungrabMouse();
- if (!d->tl.isActive())
- movementEnding();
+ lastPosTime.invalidate();
+ if (!tl.isActive())
+ q->movementEnding();
}
bool QDeclarativePathView::sendMouseEvent(QGraphicsSceneMouseEvent *event)
@@ -1164,7 +1200,8 @@ bool QDeclarativePathView::sendMouseEvent(QGraphicsSceneMouseEvent *event)
QRectF myRect = mapToScene(QRectF(0, 0, width(), height())).boundingRect();
QGraphicsScene *s = scene();
QDeclarativeItem *grabber = s ? qobject_cast<QDeclarativeItem*>(s->mouseGrabberItem()) : 0;
- if ((d->stealMouse || myRect.contains(event->scenePos().toPoint())) && (!grabber || !grabber->keepMouseGrab())) {
+ bool stealThisEvent = d->stealMouse;
+ if ((stealThisEvent || myRect.contains(event->scenePos().toPoint())) && (!grabber || !grabber->keepMouseGrab())) {
mouseEvent.setAccepted(false);
for (int i = 0x1; i <= 0x10; i <<= 1) {
if (event->buttons() & i) {
@@ -1179,25 +1216,28 @@ bool QDeclarativePathView::sendMouseEvent(QGraphicsSceneMouseEvent *event)
switch(mouseEvent.type()) {
case QEvent::GraphicsSceneMouseMove:
- mouseMoveEvent(&mouseEvent);
+ d->handleMouseMoveEvent(&mouseEvent);
break;
case QEvent::GraphicsSceneMousePress:
- mousePressEvent(&mouseEvent);
+ d->handleMousePressEvent(&mouseEvent);
+ stealThisEvent = d->stealMouse; // Update stealThisEvent in case changed by function call above
break;
case QEvent::GraphicsSceneMouseRelease:
- mouseReleaseEvent(&mouseEvent);
+ d->handleMouseReleaseEvent(&mouseEvent);
break;
default:
break;
}
grabber = qobject_cast<QDeclarativeItem*>(s->mouseGrabberItem());
- if (grabber && d->stealMouse && !grabber->keepMouseGrab() && grabber != this)
+ if (grabber && stealThisEvent && !grabber->keepMouseGrab() && grabber != this)
grabMouse();
return d->stealMouse;
} else if (d->lastPosTime.isValid()) {
d->lastPosTime.invalidate();
}
+ if (mouseEvent.type() == QEvent::GraphicsSceneMouseRelease)
+ d->stealMouse = false;
return false;
}
@@ -1211,12 +1251,7 @@ bool QDeclarativePathView::sceneEventFilter(QGraphicsItem *i, QEvent *e)
case QEvent::GraphicsSceneMousePress:
case QEvent::GraphicsSceneMouseMove:
case QEvent::GraphicsSceneMouseRelease:
- {
- bool ret = sendMouseEvent(static_cast<QGraphicsSceneMouseEvent *>(e));
- if (e->type() == QEvent::GraphicsSceneMouseRelease)
- return ret;
- break;
- }
+ return sendMouseEvent(static_cast<QGraphicsSceneMouseEvent *>(e));
default:
break;
}
diff --git a/src/declarative/graphicsitems/qdeclarativepathview_p_p.h b/src/declarative/graphicsitems/qdeclarativepathview_p_p.h
index dfebe359e5..b21721635b 100644
--- a/src/declarative/graphicsitems/qdeclarativepathview_p_p.h
+++ b/src/declarative/graphicsitems/qdeclarativepathview_p_p.h
@@ -123,6 +123,10 @@ public:
return model && model->count() > 0 && model->isValid() && path;
}
+ void handleMousePressEvent(QGraphicsSceneMouseEvent *event);
+ void handleMouseMoveEvent(QGraphicsSceneMouseEvent *event);
+ void handleMouseReleaseEvent(QGraphicsSceneMouseEvent *);
+
int calcCurrentIndex();
void updateCurrent();
static void fixOffsetCallback(void*);
diff --git a/src/declarative/graphicsitems/qdeclarativerectangle.cpp b/src/declarative/graphicsitems/qdeclarativerectangle.cpp
index d027924d07..9831d5fdd2 100644
--- a/src/declarative/graphicsitems/qdeclarativerectangle.cpp
+++ b/src/declarative/graphicsitems/qdeclarativerectangle.cpp
@@ -85,8 +85,8 @@ void QDeclarativePen::setWidth(int w)
/*!
\qmlclass GradientStop QDeclarativeGradientStop
\ingroup qml-basic-visual-elements
- \since 4.7
- \brief The GradientStop item defines the color at a position in a Gradient
+ \since 4.7
+ \brief The GradientStop item defines the color at a position in a Gradient.
\sa Gradient
*/
@@ -95,7 +95,12 @@ void QDeclarativePen::setWidth(int w)
\qmlproperty real GradientStop::position
\qmlproperty color GradientStop::color
- Sets a \e color at a \e position in a gradient.
+ The position and color properties describe the color used at a given
+ position in a gradient, as represented by a gradient stop.
+
+ The default position is 0.0; the default color is black.
+
+ \sa Gradient
*/
void QDeclarativeGradientStop::updateGradient()
@@ -107,20 +112,50 @@ void QDeclarativeGradientStop::updateGradient()
/*!
\qmlclass Gradient QDeclarativeGradient
\ingroup qml-basic-visual-elements
- \since 4.7
+ \since 4.7
\brief The Gradient item defines a gradient fill.
- A gradient is defined by two or more colors, which will be blended seemlessly. The
- colors are specified at their position in the range 0.0 - 1.0 via
- the GradientStop item. For example, the following code paints a
- rectangle with a gradient starting with red, blending to yellow at 1/3 of the
- size of the rectangle, and ending with Green:
+ A gradient is defined by two or more colors, which will be blended seamlessly.
- \snippet doc/src/snippets/declarative/gradient.qml code
+ The colors are specified as a set of GradientStop child items, each of
+ which defines a position on the gradient from 0.0 to 1.0 and a color.
+ The position of each GradientStop is defined by setting its
+ \l{GradientStop::}{position} property; its color is defined using its
+ \l{GradientStop::}{color} property.
+
+ A gradient without any gradient stops is rendered as a solid white fill.
Note that this item is not a visual representation of a gradient. To display a
- gradient use a visual item (like rectangle) which supports having a gradient set
- on it for display.
+ gradient, use a visual element (like \l Rectangle) which supports the use
+ of gradients.
+
+ \section1 Example Usage
+
+ \beginfloatright
+ \inlineimage qml-gradient.png
+ \endfloat
+
+ The following example declares a \l Rectangle item with a gradient starting
+ with red, blending to yellow at one third of the height of the rectangle,
+ and ending with green:
+
+ \snippet doc/src/snippets/declarative/gradient.qml code
+
+ \clearfloat
+ \section1 Performance and Limitations
+
+ Calculating gradients can be computationally expensive compared to the use
+ of solid color fills or images. Consider using gradients for static items
+ in a user interface.
+
+ In Qt 4.7, only vertical, linear gradients can be applied to items. If you
+ need to apply different orientations of gradients, a combination of rotation
+ and clipping will need to be applied to the relevant items. This can
+ introduce additional performance requirements for your application.
+
+ The use of animations involving gradient stops may not give the desired
+ result. An alternative way to animate gradients is to use pre-generated
+ images or SVG drawings containing gradients.
\sa GradientStop
*/
@@ -128,6 +163,10 @@ void QDeclarativeGradientStop::updateGradient()
/*!
\qmlproperty list<GradientStop> Gradient::stops
This property holds the gradient stops describing the gradient.
+
+ By default, this property contains an empty list.
+
+ To set the gradient stops, define them as children of the Gradient element.
*/
const QGradient *QDeclarativeGradient::gradient() const
@@ -155,27 +194,46 @@ void QDeclarativeGradient::doUpdate()
/*!
\qmlclass Rectangle QDeclarativeRectangle
\ingroup qml-basic-visual-elements
- \since 4.7
- \brief The Rectangle item allows you to add rectangles to a scene.
+ \since 4.7
+ \brief The Rectangle item provides a filled rectangle with an optional border.
\inherits Item
- A Rectangle is painted using a solid fill (color) and an optional border.
- You can also create rounded rectangles using the \l radius property.
+ Rectangle items are used to fill areas with solid color or gradients, and are
+ often used to hold other items.
- \qml
- import Qt 4.7
-
- Rectangle {
- width: 100
- height: 100
- color: "red"
- border.color: "black"
- border.width: 5
- radius: 10
- }
- \endqml
+ \section1 Appearance
+
+ Each Rectangle item is painted using either a solid fill color, specified using
+ the \l color property, or a gradient, defined using a Gradient element and set
+ using the \l gradient property. If both a color and a gradient are specified,
+ the gradient is used.
+
+ You can add an optional border to a rectangle with its own color and thickness
+ by settting the \l border.color and \l border.width properties.
+
+ You can also create rounded rectangles using the \l radius property. Since this
+ introduces curved edges to the corners of a rectangle, it may be appropriate to
+ set the \l smooth property to improve its appearance.
- \image declarative-rect.png
+ \section1 Example Usage
+
+ \beginfloatright
+ \inlineimage declarative-rect.png
+ \endfloat
+
+ The following example shows the effects of some of the common properties on a
+ Rectangle item, which in this case is used to create a square:
+
+ \snippet doc/src/snippets/declarative/rectangle/rectangle.qml document
+
+ \clearfloat
+ \section1 Performance
+
+ Using the \l smooth property improves the appearance of a rounded rectangle at
+ the cost of rendering performance. You should consider unsetting this property
+ for rectangles in motion, and only set it when they are stationary.
+
+ \sa Image
*/
int QDeclarativeRectanglePrivate::doUpdateSlotIdx = -1;
@@ -207,13 +265,14 @@ void QDeclarativeRectangle::doUpdate()
rectangle's boundaries, and the spare pixel is rendered to the right and below the
rectangle (as documented for QRect rendering). This can cause unintended effects if
\c border.width is 1 and the rectangle is \l{Item::clip}{clipped} by a parent item:
-
- \table
- \row
- \o \snippet doc/src/snippets/declarative/rect-border-width.qml 0
- \o \image rect-border-width.png
- \endtable
+ \beginfloatright
+ \inlineimage rect-border-width.png
+ \endfloat
+
+ \snippet doc/src/snippets/declarative/rectangle/rect-border-width.qml 0
+
+ \clearfloat
Here, the innermost rectangle's border is clipped on the bottom and right edges by its
parent. To avoid this, the border width can be set to two instead of one.
*/
@@ -231,34 +290,12 @@ QDeclarativePen *QDeclarativeRectangle::border()
This property allows for the construction of simple vertical gradients.
Other gradients may by formed by adding rotation to the rectangle.
- \table
- \row
- \o \image declarative-rect_gradient.png
- \o
- \qml
- Rectangle {
- y: 0; width: 80; height: 80
- color: "lightsteelblue"
- }
-
- Rectangle {
- y: 100; width: 80; height: 80
- gradient: Gradient {
- GradientStop { position: 0.0; color: "lightsteelblue" }
- GradientStop { position: 1.0; color: "blue" }
- }
- }
+ \beginfloatleft
+ \inlineimage declarative-rect_gradient.png
+ \endfloat
- Rectangle {
- y: 200; width: 80; height: 80
- rotation: 90
- gradient: Gradient {
- GradientStop { position: 0.0; color: "lightsteelblue" }
- GradientStop { position: 1.0; color: "blue" }
- }
- }
- \endqml
- \endtable
+ \snippet doc/src/snippets/declarative/rectangle/rectangle-gradient.qml rectangles
+ \clearfloat
If both a gradient and a color are specified, the gradient will be used.
@@ -319,17 +356,21 @@ void QDeclarativeRectangle::setRadius(qreal radius)
\qmlproperty color Rectangle::color
This property holds the color used to fill the rectangle.
- \qml
- // green rectangle using hexidecimal notation
- Rectangle { color: "#00FF00" }
+ The default color is white.
- // steelblue rectangle using SVG color name
- Rectangle { color: "steelblue" }
- \endqml
+ \beginfloatright
+ \inlineimage rect-color.png
+ \endfloat
- The default color is white.
+ The following example shows rectangles with colors specified
+ using hexadecimal and named color notation:
+ \snippet doc/src/snippets/declarative/rectangle/rectangle-colors.qml rectangles
+
+ \clearfloat
If both a gradient and a color are specified, the gradient will be used.
+
+ \sa gradient
*/
QColor QDeclarativeRectangle::color() const
{
diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp
index 14194a0f4b..1f4c1c7df3 100644
--- a/src/declarative/graphicsitems/qdeclarativetext.cpp
+++ b/src/declarative/graphicsitems/qdeclarativetext.cpp
@@ -1206,6 +1206,16 @@ 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.
*/
/*!
diff --git a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp
index a46ee73d83..a70886e2f4 100644
--- a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp
+++ b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp
@@ -287,16 +287,12 @@ public:
m_roles = m_listModelInterface->roles();
for (int ii = 0; ii < m_roles.count(); ++ii)
m_roleNames.insert(m_listModelInterface->toString(m_roles.at(ii)).toUtf8(), m_roles.at(ii));
- if (m_roles.count() == 1)
- m_roleNames.insert("modelData", m_roles.at(0));
} else if (m_abstractItemModel) {
for (QHash<int,QByteArray>::const_iterator it = m_abstractItemModel->roleNames().begin();
it != m_abstractItemModel->roleNames().end(); ++it) {
m_roles.append(it.key());
m_roleNames.insert(*it, it.key());
}
- if (m_roles.count() == 1)
- m_roleNames.insert("modelData", m_roles.at(0));
if (m_roles.count())
m_roleNames.insert("hasModelChildren", -1);
} else if (m_listAccessor) {
@@ -314,7 +310,8 @@ public:
}
}
- QHash<int,int> roleToPropId;
+ QHash<int,int> m_roleToPropId;
+ int m_modelDataPropId;
void createMetaData() {
if (!m_metaDataCreated) {
ensureRoles();
@@ -322,9 +319,12 @@ public:
QHash<QByteArray, int>::const_iterator it = m_roleNames.begin();
while (it != m_roleNames.end()) {
int propId = m_delegateDataType->createProperty(it.key()) - m_delegateDataType->propertyOffset();
- roleToPropId.insert(*it, propId);
+ m_roleToPropId.insert(*it, propId);
++it;
}
+ // Add modelData property
+ if (m_roles.count() == 1)
+ m_modelDataPropId = m_delegateDataType->createProperty("modelData") - m_delegateDataType->propertyOffset();
m_metaDataCreated = true;
}
}
@@ -430,6 +430,11 @@ public:
void setIndex(int index);
int propForRole(int) const;
+ int modelDataPropertyId() const {
+ QDeclarativeVisualDataModelPrivate *model = QDeclarativeVisualDataModelPrivate::get(m_model);
+ return model->m_modelDataPropId;
+ }
+
void setValue(int, const QVariant &);
bool hasValue(int id) const {
return m_meta->hasValue(id);
@@ -450,8 +455,8 @@ private:
int QDeclarativeVisualDataModelData::propForRole(int id) const
{
QDeclarativeVisualDataModelPrivate *model = QDeclarativeVisualDataModelPrivate::get(m_model);
- QHash<int,int>::const_iterator it = model->roleToPropId.find(id);
- if (it != model->roleToPropId.end())
+ QHash<int,int>::const_iterator it = model->m_roleToPropId.find(id);
+ if (it != model->m_roleToPropId.end())
return *it;
return -1;
@@ -518,14 +523,16 @@ QVariant QDeclarativeVisualDataModelDataMetaObject::initialValue(int propId)
}
} else if (model->m_abstractItemModel) {
model->ensureRoles();
+ QModelIndex index = model->m_abstractItemModel->index(data->m_index, 0, model->m_root);
if (propName == "hasModelChildren") {
- QModelIndex index = model->m_abstractItemModel->index(data->m_index, 0, model->m_root);
return model->m_abstractItemModel->hasChildren(index);
} else {
QHash<QByteArray,int>::const_iterator it = model->m_roleNames.find(propName);
if (it != model->m_roleNames.end()) {
- QModelIndex index = model->m_abstractItemModel->index(data->m_index, 0, model->m_root);
return model->m_abstractItemModel->data(index, *it);
+ } else if (model->m_roles.count() == 1 && propName == "modelData") {
+ //for compatibility with other lists, assign modelData if there is only a single role
+ return model->m_abstractItemModel->data(index, model->m_roles.first());
}
}
}
@@ -1195,6 +1202,19 @@ void QDeclarativeVisualDataModel::_q_itemsChanged(int index, int count,
qmlInfo(this) << "Changing role not present in item: " << roleName;
}
}
+ if (roles.count() == 1) {
+ // Handle the modelData role we add if there is just one role.
+ int propId = data->modelDataPropertyId();
+ if (data->hasValue(propId)) {
+ int role = roles.at(0);
+ if (d->m_listModelInterface) {
+ data->setValue(propId, d->m_listModelInterface->data(idx, QList<int>() << role).value(role));
+ } else if (d->m_abstractItemModel) {
+ QModelIndex index = d->m_abstractItemModel->index(idx, 0, d->m_root);
+ data->setValue(propId, d->m_abstractItemModel->data(index, role));
+ }
+ }
+ }
}
}
}
diff --git a/src/declarative/qml/qdeclarative.h b/src/declarative/qml/qdeclarative.h
index c6b64ae863..985ab72479 100644
--- a/src/declarative/qml/qdeclarative.h
+++ b/src/declarative/qml/qdeclarative.h
@@ -269,7 +269,7 @@ int qmlRegisterInterface(const char *typeName)
QByteArray pointerName(name + '*');
QByteArray listName("QDeclarativeListProperty<" + name + ">");
- QDeclarativePrivate::RegisterInterface interface = {
+ QDeclarativePrivate::RegisterInterface qmlInterface = {
0,
qRegisterMetaType<T *>(pointerName.constData()),
@@ -278,7 +278,7 @@ int qmlRegisterInterface(const char *typeName)
qobject_interface_iid<T *>()
};
- return QDeclarativePrivate::qmlregister(QDeclarativePrivate::InterfaceRegistration, &interface);
+ return QDeclarativePrivate::qmlregister(QDeclarativePrivate::InterfaceRegistration, &qmlInterface);
}
template<typename T>
diff --git a/src/declarative/qml/qdeclarativebinding.cpp b/src/declarative/qml/qdeclarativebinding.cpp
index e096305c97..cb6ad8c76f 100644
--- a/src/declarative/qml/qdeclarativebinding.cpp
+++ b/src/declarative/qml/qdeclarativebinding.cpp
@@ -48,6 +48,7 @@
#include "private/qdeclarativecontext_p.h"
#include "private/qdeclarativedata_p.h"
#include "private/qdeclarativestringconverters_p.h"
+#include "private/qdeclarativestate_p_p.h"
#include <QVariant>
#include <QtCore/qdebug.h>
@@ -373,6 +374,18 @@ void QDeclarativeAbstractBinding::removeFromObject()
}
}
+static void bindingDummyDeleter(QDeclarativeAbstractBinding *)
+{
+}
+
+QDeclarativeAbstractBinding::Pointer QDeclarativeAbstractBinding::weakPointer()
+{
+ if (m_selfPointer.isNull())
+ m_selfPointer = QSharedPointer<QDeclarativeAbstractBinding>(this, bindingDummyDeleter);
+
+ return m_selfPointer.toWeakRef();
+}
+
void QDeclarativeAbstractBinding::clear()
{
if (m_mePtr) {
diff --git a/src/declarative/qml/qdeclarativebinding_p.h b/src/declarative/qml/qdeclarativebinding_p.h
index 598f09faa7..941a1b3bfe 100644
--- a/src/declarative/qml/qdeclarativebinding_p.h
+++ b/src/declarative/qml/qdeclarativebinding_p.h
@@ -67,6 +67,8 @@ QT_BEGIN_NAMESPACE
class Q_DECLARATIVE_EXPORT QDeclarativeAbstractBinding
{
public:
+ typedef QWeakPointer<QDeclarativeAbstractBinding> Pointer;
+
QDeclarativeAbstractBinding();
virtual void destroy();
@@ -86,21 +88,26 @@ public:
void addToObject(QObject *);
void removeFromObject();
+ static Pointer getPointer(QDeclarativeAbstractBinding *p) { return p ? p->weakPointer() : Pointer(); }
+
protected:
virtual ~QDeclarativeAbstractBinding();
void clear();
private:
+ Pointer weakPointer();
friend class QDeclarativeData;
friend class QDeclarativeValueTypeProxyBinding;
friend class QDeclarativePropertyPrivate;
friend class QDeclarativeVME;
+ friend class QtSharedPointer::ExternalRefCount<QDeclarativeAbstractBinding>;
QObject *m_object;
QDeclarativeAbstractBinding **m_mePtr;
QDeclarativeAbstractBinding **m_prevBinding;
QDeclarativeAbstractBinding *m_nextBinding;
+ QSharedPointer<QDeclarativeAbstractBinding> m_selfPointer;
};
class QDeclarativeValueTypeProxyBinding : public QDeclarativeAbstractBinding
diff --git a/src/declarative/qml/qdeclarativecomponent_p.h b/src/declarative/qml/qdeclarativecomponent_p.h
index 1b1454b6bf..a551cc8072 100644
--- a/src/declarative/qml/qdeclarativecomponent_p.h
+++ b/src/declarative/qml/qdeclarativecomponent_p.h
@@ -74,7 +74,7 @@ class QDeclarativeEngine;
class QDeclarativeCompiledData;
class QDeclarativeComponentAttached;
-class QDeclarativeComponentPrivate : public QObjectPrivate, public QDeclarativeTypeData::TypeDataCallback
+class Q_AUTOTEST_EXPORT QDeclarativeComponentPrivate : public QObjectPrivate, public QDeclarativeTypeData::TypeDataCallback
{
Q_DECLARE_PUBLIC(QDeclarativeComponent)
diff --git a/src/declarative/qml/qdeclarativecustomparser_p.h b/src/declarative/qml/qdeclarativecustomparser_p.h
index 509e30a593..c3f9dd2660 100644
--- a/src/declarative/qml/qdeclarativecustomparser_p.h
+++ b/src/declarative/qml/qdeclarativecustomparser_p.h
@@ -117,7 +117,7 @@ public:
NoFlag = 0x00000000,
AcceptsAttachedProperties = 0x00000001
};
- Q_DECLARE_FLAGS(Flags, Flag);
+ Q_DECLARE_FLAGS(Flags, Flag)
QDeclarativeCustomParser() : compiler(0), object(0), m_flags(NoFlag) {}
QDeclarativeCustomParser(Flags f) : compiler(0), object(0), m_flags(f) {}
diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp
index dd8e9cd4de..06b1ed355a 100644
--- a/src/declarative/qml/qdeclarativeengine.cpp
+++ b/src/declarative/qml/qdeclarativeengine.cpp
@@ -906,7 +906,7 @@ QDeclarativeEngine::ObjectOwnership QDeclarativeEngine::objectOwnership(QObject
return ddata->indestructible?CppOwnership:JavaScriptOwnership;
}
-void qmlExecuteDeferred(QObject *object)
+Q_AUTOTEST_EXPORT void qmlExecuteDeferred(QObject *object)
{
QDeclarativeData *data = QDeclarativeData::get(object);
diff --git a/src/declarative/qml/qdeclarativeobjectscriptclass.cpp b/src/declarative/qml/qdeclarativeobjectscriptclass.cpp
index 9d742381e4..ab6ff74b95 100644
--- a/src/declarative/qml/qdeclarativeobjectscriptclass.cpp
+++ b/src/declarative/qml/qdeclarativeobjectscriptclass.cpp
@@ -843,7 +843,7 @@ QDeclarativeObjectMethodScriptClass::Value QDeclarativeObjectMethodScriptClass::
for (int ii = 0; ii < argTypeNames.count(); ++ii) {
argTypes[ii] = QMetaType::type(argTypeNames.at(ii));
if (argTypes[ii] == QVariant::Invalid)
- argTypes[ii] = enumType(method->object->metaObject(), argTypeNames.at(ii));
+ argTypes[ii] = enumType(method->object->metaObject(), QString::fromLatin1(argTypeNames.at(ii)));
if (argTypes[ii] == QVariant::Invalid)
return Value(ctxt, ctxt->throwError(QString::fromLatin1("Unknown method parameter type: %1").arg(QLatin1String(argTypeNames.at(ii)))));
}
diff --git a/src/declarative/qml/qdeclarativescriptparser.cpp b/src/declarative/qml/qdeclarativescriptparser.cpp
index c956051060..57cc9ab13b 100644
--- a/src/declarative/qml/qdeclarativescriptparser.cpp
+++ b/src/declarative/qml/qdeclarativescriptparser.cpp
@@ -895,7 +895,7 @@ QList<QDeclarativeError> QDeclarativeScriptParser::errors() const
static void replaceWithSpace(QString &str, int idx, int n)
{
QChar *data = str.data() + idx;
- QChar space(' ');
+ const QChar space(QLatin1Char(' '));
for (int ii = 0; ii < n; ++ii)
*data++ = space;
}
diff --git a/src/declarative/qml/qdeclarativetypeloader.cpp b/src/declarative/qml/qdeclarativetypeloader.cpp
index 9b420657e2..061f309476 100644
--- a/src/declarative/qml/qdeclarativetypeloader.cpp
+++ b/src/declarative/qml/qdeclarativetypeloader.cpp
@@ -804,7 +804,7 @@ void QDeclarativeTypeData::done()
error.setUrl(finalUrl());
error.setLine(script.location.line);
error.setColumn(script.location.column);
- error.setDescription(typeLoader()->tr("Script %1 unavailable").arg(script.script->url().toString()));
+ error.setDescription(QDeclarativeTypeLoader::tr("Script %1 unavailable").arg(script.script->url().toString()));
errors.prepend(error);
setError(errors);
}
@@ -822,7 +822,7 @@ void QDeclarativeTypeData::done()
error.setUrl(finalUrl());
error.setLine(type.location.line);
error.setColumn(type.location.column);
- error.setDescription(typeLoader()->tr("Type %1 unavailable").arg(typeName));
+ error.setDescription(QDeclarativeTypeLoader::tr("Type %1 unavailable").arg(typeName));
errors.prepend(error);
setError(errors);
}
@@ -995,9 +995,9 @@ void QDeclarativeTypeData::resolveTypes()
QString userTypeName = parserRef->name;
userTypeName.replace(QLatin1Char('/'),QLatin1Char('.'));
if (typeNamespace)
- error.setDescription(typeLoader()->tr("Namespace %1 cannot be used as a type").arg(userTypeName));
+ error.setDescription(QDeclarativeTypeLoader::tr("Namespace %1 cannot be used as a type").arg(userTypeName));
else
- error.setDescription(typeLoader()->tr("%1 %2").arg(userTypeName).arg(errorString));
+ error.setDescription(QDeclarativeTypeLoader::tr("%1 %2").arg(userTypeName).arg(errorString));
if (!parserRef->refObjects.isEmpty()) {
QDeclarativeParser::Object *obj = parserRef->refObjects.first();
diff --git a/src/declarative/qml/qdeclarativevaluetype.cpp b/src/declarative/qml/qdeclarativevaluetype.cpp
index 98e9a585fb..fda62ee6f7 100644
--- a/src/declarative/qml/qdeclarativevaluetype.cpp
+++ b/src/declarative/qml/qdeclarativevaluetype.cpp
@@ -47,7 +47,7 @@
QT_BEGIN_NAMESPACE
-Q_DECL_IMPORT extern int qt_defaultDpi();
+Q_GUI_EXPORT int qt_defaultDpi();
template<typename T>
int qmlRegisterValueTypeEnums(const char *qmlName)
diff --git a/src/declarative/qml/qdeclarativexmlhttprequest.cpp b/src/declarative/qml/qdeclarativexmlhttprequest.cpp
index 301ea1de44..adfdbb380b 100644
--- a/src/declarative/qml/qdeclarativexmlhttprequest.cpp
+++ b/src/declarative/qml/qdeclarativexmlhttprequest.cpp
@@ -1641,8 +1641,8 @@ static QScriptValue qmlxmlhttprequest_responseXML(QScriptContext *context, QScri
THROW_REFERENCE("Not an XMLHttpRequest object");
if (!request->receivedXml() ||
- request->readyState() != QDeclarativeXMLHttpRequest::Loading &&
- request->readyState() != QDeclarativeXMLHttpRequest::Done)
+ (request->readyState() != QDeclarativeXMLHttpRequest::Loading &&
+ request->readyState() != QDeclarativeXMLHttpRequest::Done))
return engine->nullValue();
else
return Document::load(engine, request->rawResponseBody());
diff --git a/src/declarative/util/qdeclarativeanimation.cpp b/src/declarative/util/qdeclarativeanimation.cpp
index 6637282d77..3a96f98063 100644
--- a/src/declarative/util/qdeclarativeanimation.cpp
+++ b/src/declarative/util/qdeclarativeanimation.cpp
@@ -2699,14 +2699,15 @@ void QDeclarativeParentAnimation::transition(QDeclarativeStateActions &actions,
qreal scale = 1;
qreal rotation = 0;
- if (ok && transform.type() != QTransform::TxRotate) {
+ bool isRotate = (transform.type() == QTransform::TxRotate) || (transform.m11() < 0);
+ if (ok && !isRotate) {
if (transform.m11() == transform.m22())
scale = transform.m11();
else {
qmlInfo(this) << QDeclarativeParentAnimation::tr("Unable to preserve appearance under non-uniform scale");
ok = false;
}
- } else if (ok && transform.type() == QTransform::TxRotate) {
+ } else if (ok && isRotate) {
if (transform.m11() == transform.m22())
scale = qSqrt(transform.m11()*transform.m11() + transform.m12()*transform.m12());
else {
diff --git a/src/declarative/util/qdeclarativefontloader.cpp b/src/declarative/util/qdeclarativefontloader.cpp
index 1755855aae..6879494488 100644
--- a/src/declarative/util/qdeclarativefontloader.cpp
+++ b/src/declarative/util/qdeclarativefontloader.cpp
@@ -58,23 +58,91 @@
QT_BEGIN_NAMESPACE
+#define FONTLOADER_MAXIMUM_REDIRECT_RECURSION 16
+
+class QDeclarativeFontObject : public QObject
+{
+Q_OBJECT
+
+public:
+ QDeclarativeFontObject(int _id);
+
+ void download(const QUrl &url, QNetworkAccessManager *manager);
+
+Q_SIGNALS:
+ void fontDownloaded(const QString&, QDeclarativeFontLoader::Status);
+
+private Q_SLOTS:
+ void replyFinished();
+
+public:
+ int id;
+
+private:
+ QNetworkReply *reply;
+ int redirectCount;
+
+ Q_DISABLE_COPY(QDeclarativeFontObject)
+};
+
+QDeclarativeFontObject::QDeclarativeFontObject(int _id = -1)
+ : QObject(0), id(_id), reply(0), redirectCount(0) {}
+
+
+void QDeclarativeFontObject::download(const QUrl &url, QNetworkAccessManager *manager)
+{
+ QNetworkRequest req(url);
+ req.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true);
+ reply = manager->get(req);
+ QObject::connect(reply, SIGNAL(finished()), this, SLOT(replyFinished()));
+}
+
+void QDeclarativeFontObject::replyFinished()
+{
+ if (reply) {
+ redirectCount++;
+ if (redirectCount < FONTLOADER_MAXIMUM_REDIRECT_RECURSION) {
+ QVariant redirect = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
+ if (redirect.isValid()) {
+ QUrl url = reply->url().resolved(redirect.toUrl());
+ QNetworkAccessManager *manager = reply->manager();
+ reply->deleteLater();
+ reply = 0;
+ download(url, manager);
+ return;
+ }
+ }
+ redirectCount = 0;
+
+ if (!reply->error()) {
+ id = QFontDatabase::addApplicationFontFromData(reply->readAll());
+ if (id != -1)
+ emit fontDownloaded(QFontDatabase::applicationFontFamilies(id).at(0), QDeclarativeFontLoader::Ready);
+ else
+ emit fontDownloaded(QString(), QDeclarativeFontLoader::Error);
+ } else {
+ emit fontDownloaded(QString(), QDeclarativeFontLoader::Error);
+ }
+ reply->deleteLater();
+ reply = 0;
+ }
+}
+
+
class QDeclarativeFontLoaderPrivate : public QObjectPrivate
{
Q_DECLARE_PUBLIC(QDeclarativeFontLoader)
public:
- QDeclarativeFontLoaderPrivate() : reply(0), status(QDeclarativeFontLoader::Null), redirectCount(0) {}
-
- void addFontToDatabase(const QByteArray &);
+ QDeclarativeFontLoaderPrivate() : status(QDeclarativeFontLoader::Null) {}
QUrl url;
QString name;
- QNetworkReply *reply;
QDeclarativeFontLoader::Status status;
- int redirectCount;
+ static QHash<QUrl, QDeclarativeFontObject*> fonts;
};
-
+QHash<QUrl, QDeclarativeFontObject*> QDeclarativeFontLoaderPrivate::fonts;
/*!
\qmlclass FontLoader QDeclarativeFontLoader
@@ -127,30 +195,61 @@ void QDeclarativeFontLoader::setSource(const QUrl &url)
if (url == d->url)
return;
d->url = qmlContext(this)->resolvedUrl(url);
-
- d->status = Loading;
- emit statusChanged();
emit sourceChanged();
+
#ifndef QT_NO_LOCALFILE_OPTIMIZED_QML
- QString lf = QDeclarativeEnginePrivate::urlToLocalFileOrQrc(d->url);
- if (!lf.isEmpty()) {
- int id = QFontDatabase::addApplicationFont(lf);
- if (id != -1) {
- d->name = QFontDatabase::applicationFontFamilies(id).at(0);
- emit nameChanged();
- d->status = QDeclarativeFontLoader::Ready;
+ QString localFile = QDeclarativeEnginePrivate::urlToLocalFileOrQrc(d->url);
+ if (!localFile.isEmpty()) {
+ if (!d->fonts.contains(d->url)) {
+ int id = QFontDatabase::addApplicationFont(localFile);
+ if (id != -1) {
+ updateFontInfo(QFontDatabase::applicationFontFamilies(id).at(0), Ready);
+ QDeclarativeFontObject *fo = new QDeclarativeFontObject(id);
+ d->fonts[d->url] = fo;
+ } else {
+ updateFontInfo(QString(), Error);
+ }
} else {
- d->status = QDeclarativeFontLoader::Error;
- qmlInfo(this) << "Cannot load font: \"" << url.toString() << "\"";
+ updateFontInfo(QFontDatabase::applicationFontFamilies(d->fonts[d->url]->id).at(0), Ready);
}
- emit statusChanged();
} else
#endif
{
- QNetworkRequest req(d->url);
- req.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true);
- d->reply = qmlEngine(this)->networkAccessManager()->get(req);
- QObject::connect(d->reply, SIGNAL(finished()), this, SLOT(replyFinished()));
+ if (!d->fonts.contains(d->url)) {
+ QDeclarativeFontObject *fo = new QDeclarativeFontObject;
+ d->fonts[d->url] = fo;
+ fo->download(d->url, qmlEngine(this)->networkAccessManager());
+ d->status = Loading;
+ emit statusChanged();
+ QObject::connect(fo, SIGNAL(fontDownloaded(QString, QDeclarativeFontLoader::Status)),
+ this, SLOT(updateFontInfo(QString, QDeclarativeFontLoader::Status)));
+ } else {
+ QDeclarativeFontObject *fo = d->fonts[d->url];
+ if (fo->id == -1) {
+ d->status = Loading;
+ emit statusChanged();
+ QObject::connect(fo, SIGNAL(fontDownloaded(QString, QDeclarativeFontLoader::Status)),
+ this, SLOT(updateFontInfo(QString, QDeclarativeFontLoader::Status)));
+ }
+ else
+ updateFontInfo(QFontDatabase::applicationFontFamilies(fo->id).at(0), Ready);
+ }
+ }
+}
+
+void QDeclarativeFontLoader::updateFontInfo(const QString& name, QDeclarativeFontLoader::Status status)
+{
+ Q_D(QDeclarativeFontLoader);
+
+ if (name != d->name) {
+ d->name = name;
+ emit nameChanged();
+ }
+ if (status != d->status) {
+ if (status == Error)
+ qmlInfo(this) << "Cannot load font: \"" << d->url.toString() << "\"";
+ d->status = status;
+ emit statusChanged();
}
}
@@ -177,7 +276,7 @@ QString QDeclarativeFontLoader::name() const
void QDeclarativeFontLoader::setName(const QString &name)
{
Q_D(QDeclarativeFontLoader);
- if (d->name == name )
+ if (d->name == name)
return;
d->name = name;
emit nameChanged();
@@ -223,52 +322,6 @@ QDeclarativeFontLoader::Status QDeclarativeFontLoader::status() const
return d->status;
}
-#define FONTLOADER_MAXIMUM_REDIRECT_RECURSION 16
-
-void QDeclarativeFontLoader::replyFinished()
-{
- Q_D(QDeclarativeFontLoader);
- if (d->reply) {
- d->redirectCount++;
- if (d->redirectCount < FONTLOADER_MAXIMUM_REDIRECT_RECURSION) {
- QVariant redirect = d->reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
- if (redirect.isValid()) {
- QUrl url = d->reply->url().resolved(redirect.toUrl());
- d->reply->deleteLater();
- d->reply = 0;
- setSource(url);
- return;
- }
- }
- d->redirectCount=0;
-
- if (!d->reply->error()) {
- QByteArray ba = d->reply->readAll();
- d->addFontToDatabase(ba);
- } else {
- d->status = Error;
- qmlInfo(this) << "Cannot load font: \"" << d->reply->url().toString() << "\"";
- emit statusChanged();
- }
- d->reply->deleteLater();
- d->reply = 0;
- }
-}
-
-void QDeclarativeFontLoaderPrivate::addFontToDatabase(const QByteArray &ba)
-{
- Q_Q(QDeclarativeFontLoader);
-
- int id = QFontDatabase::addApplicationFontFromData(ba);
- if (id != -1) {
- name = QFontDatabase::applicationFontFamilies(id).at(0);
- emit q->nameChanged();
- status = QDeclarativeFontLoader::Ready;
- } else {
- status = QDeclarativeFontLoader::Error;
- qmlInfo(q) << "Cannot load font: \"" << url.toString() << "\"";
- }
- emit q->statusChanged();
-}
-
QT_END_NAMESPACE
+
+#include <qdeclarativefontloader.moc>
diff --git a/src/declarative/util/qdeclarativefontloader_p.h b/src/declarative/util/qdeclarativefontloader_p.h
index 0344d99b73..bebd5a0623 100644
--- a/src/declarative/util/qdeclarativefontloader_p.h
+++ b/src/declarative/util/qdeclarativefontloader_p.h
@@ -79,7 +79,7 @@ public:
Status status() const;
private Q_SLOTS:
- void replyFinished();
+ void updateFontInfo(const QString&, QDeclarativeFontLoader::Status);
Q_SIGNALS:
void sourceChanged();
diff --git a/src/declarative/util/qdeclarativelistmodel.cpp b/src/declarative/util/qdeclarativelistmodel.cpp
index c7d5024fd4..5ce95e90f4 100644
--- a/src/declarative/util/qdeclarativelistmodel.cpp
+++ b/src/declarative/util/qdeclarativelistmodel.cpp
@@ -58,6 +58,28 @@ Q_DECLARE_METATYPE(QListModelInterface *)
QT_BEGIN_NAMESPACE
+template<typename T>
+void qdeclarativelistmodel_move(int from, int to, int n, T *items)
+{
+ if (n == 1) {
+ items->move(from, to);
+ } else {
+ T replaced;
+ int i=0;
+ typename T::ConstIterator it=items->begin(); it += from+n;
+ for (; i<to-from; ++i,++it)
+ replaced.append(*it);
+ i=0;
+ it=items->begin(); it += from;
+ for (; i<n; ++i,++it)
+ replaced.append(*it);
+ typename T::ConstIterator f=replaced.begin();
+ typename T::Iterator t=items->begin(); t += from;
+ for (; f != replaced.end(); ++f, ++t)
+ *t = *f;
+ }
+}
+
QDeclarativeListModelParser::ListInstruction *QDeclarativeListModelParser::ListModelData::instructions() const
{
return (QDeclarativeListModelParser::ListInstruction *)((char *)this + sizeof(ListModelData));
@@ -69,49 +91,67 @@ QDeclarativeListModelParser::ListInstruction *QDeclarativeListModelParser::ListM
\since 4.7
\brief The ListModel element defines a free-form list data source.
- The ListModel is a simple hierarchy of elements containing data roles. The contents can
- be defined dynamically, or explicitly in QML:
+ The ListModel is a simple container of ListElement definitions, each containing data roles.
+ The contents can be defined dynamically, or explicitly in QML.
- For example:
+ The number of elements in the model can be obtained from its \l count property.
+ A number of familiar methods are also provided to manipulate the contents of the
+ model, including append(), insert(), move(), remove() and set(). These methods
+ accept dictionaries as their arguments; these are translated to ListElement objects
+ by the model.
- \snippet doc/src/snippets/declarative/listmodel.qml 0
+ Elements can be manipulated via the model using the setProperty() method, which
+ allows the roles of the specified element to be set and changed.
- Roles (properties) must begin with a lower-case letter. The above example defines a
- ListModel containing three elements, with the roles "name" and "cost".
+ \section1 Example Usage
- Values must be simple constants - either strings (quoted and optionally within a call to QT_TR_NOOP),
- bools (true, false), numbers, or enum values (like Text.AlignHCenter).
+ The following example shows a ListModel containing three elements, with the roles
+ "name" and "cost".
+
+ \beginfloatright
+ \inlineimage listmodel.png
+ \endfloat
+
+ \snippet doc/src/snippets/declarative/listmodel.qml 0
- The defined model can be used in views such as ListView:
+ \clearfloat
+ Roles (properties) in each element must begin with a lower-case letter and
+ should be common to all elements in a model. The ListElement documentation
+ provides more guidelines for how elements should be defined.
+
+ Since the example model contains an \c id property, it can be referenced
+ by views, such as the ListView in this example:
\snippet doc/src/snippets/declarative/listmodel-simple.qml 0
\dots 8
\snippet doc/src/snippets/declarative/listmodel-simple.qml 1
- \image listmodel.png
- It is possible for roles to contain list data. In the example below we create a list of fruit attributes:
+ It is possible for roles to contain list data. In the following example we
+ create a list of fruit attributes:
\snippet doc/src/snippets/declarative/listmodel-nested.qml model
- The delegate below displays all the fruit attributes:
+ The delegate displays all the fruit attributes:
- \snippet doc/src/snippets/declarative/listmodel-nested.qml delegate
- \image listmodel-nested.png
+ \beginfloatright
+ \inlineimage listmodel-nested.png
+ \endfloat
+ \snippet doc/src/snippets/declarative/listmodel-nested.qml delegate
- \section2 Modifying list models
+ \clearfloat
+ \section1 Modifying List Models
The content of a ListModel may be created and modified using the clear(),
append(), set() and setProperty() methods. For example:
-
- \snippet doc/src/snippets/declarative/listmodel-modify.qml delegate
- Note that when creating content dynamically the set of available properties cannot be changed
- once set. Whatever properties are first added to the model are the
- only permitted properties in the model.
+ \snippet doc/src/snippets/declarative/listmodel-modify.qml delegate
+ Note that when creating content dynamically the set of available properties
+ cannot be changed once set. Whatever properties are first added to the model
+ are the only permitted properties in the model.
- \section2 Using threaded list models with WorkerScript
+ \section1 Using Threaded List Models with WorkerScript
ListModel can be used together with WorkerScript access a list model
from multiple threads. This is useful if list modifications are
@@ -127,19 +167,19 @@ QDeclarativeListModelParser::ListInstruction *QDeclarativeListModelParser::ListM
\snippet examples/declarative/threading/threadedlistmodel/dataloader.js 0
-working-with-data
- worker script by calling \l WorkerScript::sendMessage(). When this message
- is received, \l {WorkerScript::onMessage}{WorkerScript.onMessage()} is invoked in
- \tt dataloader.js, which appends the current time to the list model.
+ The timer in the main example sends messages to the worker script by calling
+ \l WorkerScript::sendMessage(). When this message is received,
+ \l{WorkerScript::onMessage}{WorkerScript.onMessage()} is invoked in \c dataloader.js,
+ which appends the current time to the list model.
- Note the call to sync() from the \l {WorkerScript::onMessage}{WorkerScript.onMessage()} handler.
- You must call sync() or else the changes made to the list from the external
+ Note the call to sync() from the \l{WorkerScript::onMessage}{WorkerScript.onMessage()}
+ handler. You must call sync() or else the changes made to the list from the external
thread will not be reflected in the list model in the main thread.
- \section3 Limitations
+ \section1 Restrictions
- If a list model is to be accessed from a WorkerScript, it \bold cannot
- contain list data. So, the following model cannot be used from a WorkerScript
+ If a list model is to be accessed from a WorkerScript, it cannot
+ contain list-type data. So, the following model cannot be used from a WorkerScript
because of the list contained in the "attributes" property:
\code
@@ -156,7 +196,7 @@ working-with-data
}
\endcode
- In addition, the WorkerScript cannot add any list data to the model.
+ In addition, the WorkerScript cannot add list-type data to the model.
\sa {qmlmodels}{Data Models}, {declarative/threading/threadedlistmodel}{Threaded ListModel example}, QtDeclarative
*/
@@ -177,17 +217,25 @@ working-with-data
*/
QDeclarativeListModel::QDeclarativeListModel(QObject *parent)
-: QListModelInterface(parent), m_agent(0), m_nested(new NestedListModel(this)), m_flat(0), m_isWorkerCopy(false)
+: QListModelInterface(parent), m_agent(0), m_nested(new NestedListModel(this)), m_flat(0)
{
}
-QDeclarativeListModel::QDeclarativeListModel(bool workerCopy, QObject *parent)
-: QListModelInterface(parent), m_agent(0), m_nested(0), m_flat(0), m_isWorkerCopy(workerCopy)
+QDeclarativeListModel::QDeclarativeListModel(const QDeclarativeListModel *orig, QDeclarativeListModelWorkerAgent *parent)
+: QListModelInterface(parent), m_agent(0), m_nested(0), m_flat(0)
{
- if (workerCopy)
- m_flat = new FlatListModel(this);
- else
- m_nested = new NestedListModel(this);
+ m_flat = new FlatListModel(this);
+ m_flat->m_parentAgent = parent;
+
+ if (orig->m_flat) {
+ m_flat->m_roles = orig->m_flat->m_roles;
+ m_flat->m_strings = orig->m_flat->m_strings;
+ m_flat->m_values = orig->m_flat->m_values;
+
+ m_flat->m_nodeData.reserve(m_flat->m_values.count());
+ for (int i=0; i<m_flat->m_values.count(); i++)
+ m_flat->m_nodeData << 0;
+ }
}
QDeclarativeListModel::~QDeclarativeListModel()
@@ -223,19 +271,28 @@ bool QDeclarativeListModel::flatten()
flat->m_strings.insert(s, roles[i]);
}
+ flat->m_nodeData.reserve(flat->m_values.count());
+ for (int i=0; i<flat->m_values.count(); i++)
+ flat->m_nodeData << 0;
+
m_flat = flat;
delete m_nested;
m_nested = 0;
return true;
}
+bool QDeclarativeListModel::inWorkerThread() const
+{
+ return m_flat && m_flat->m_parentAgent;
+}
+
QDeclarativeListModelWorkerAgent *QDeclarativeListModel::agent()
{
if (m_agent)
return m_agent;
if (!flatten()) {
- qmlInfo(this) << "List contains nested list values and cannot be used from a worker script";
+ qmlInfo(this) << "List contains list-type data and cannot be used from a worker script";
return 0;
}
@@ -293,12 +350,43 @@ void QDeclarativeListModel::clear()
else
m_nested->clear();
- if (!m_isWorkerCopy) {
+ if (!inWorkerThread()) {
emit itemsRemoved(0, cleared);
emit countChanged();
}
}
+QDeclarativeListModel *ModelNode::model(const NestedListModel *model)
+{
+ if (!modelCache) {
+ modelCache = new QDeclarativeListModel;
+ QDeclarativeEngine::setContextForObject(modelCache,QDeclarativeEngine::contextForObject(model->m_listModel));
+ modelCache->m_nested->_root = this; // ListModel defaults to nestable model
+
+ for (int i=0; i<values.count(); ++i) {
+ ModelNode *subNode = qvariant_cast<ModelNode *>(values.at(i));
+ if (subNode)
+ subNode->m_model = modelCache->m_nested;
+ }
+ }
+ return modelCache;
+}
+
+ModelObject *ModelNode::object(const NestedListModel *model)
+{
+ if (!objectCache) {
+ objectCache = new ModelObject(this,
+ const_cast<NestedListModel*>(model),
+ QDeclarativeEnginePrivate::getScriptEngine(qmlEngine(model->m_listModel)));
+ QHash<QString, ModelNode *>::iterator it;
+ for (it = properties.begin(); it != properties.end(); ++it) {
+ objectCache->setValue(it.key().toUtf8(), model->valueForNode(*it));
+ }
+ objectCache->setNodeUpdatesEnabled(true);
+ }
+ return objectCache;
+}
+
/*!
\qmlmethod ListModel::remove(int index)
@@ -318,7 +406,7 @@ void QDeclarativeListModel::remove(int index)
else
m_nested->remove(index);
- if (!m_isWorkerCopy) {
+ if (!inWorkerThread()) {
emit itemsRemoved(index, 1);
emit countChanged();
}
@@ -352,7 +440,7 @@ void QDeclarativeListModel::insert(int index, const QScriptValue& valuemap)
}
bool ok = m_flat ? m_flat->insert(index, valuemap) : m_nested->insert(index, valuemap);
- if (ok && !m_isWorkerCopy) {
+ if (ok && !inWorkerThread()) {
emit itemsInserted(index, 1);
emit countChanged();
}
@@ -376,7 +464,7 @@ void QDeclarativeListModel::move(int from, int to, int n)
{
if (n==0 || from==to)
return;
- if (from+n > count() || to+n > count() || from < 0 || to < 0 || n < 0) {
+ if (!canMove(from, to, n)) {
qmlInfo(this) << tr("move: out of range");
return;
}
@@ -398,7 +486,7 @@ void QDeclarativeListModel::move(int from, int to, int n)
else
m_nested->move(from, to, n);
- if (!m_isWorkerCopy)
+ if (!inWorkerThread())
emit itemsMoved(origfrom, origto, orign);
}
@@ -427,11 +515,15 @@ void QDeclarativeListModel::append(const QScriptValue& valuemap)
/*!
\qmlmethod object ListModel::get(int index)
- Returns the item at \a index in the list model.
+ Returns the item at \a index in the list model. This allows the item
+ data to be accessed or modified from JavaScript:
\code
- fruitModel.append({"cost": 5.95, "name":"Jackfruit"})
- fruitModel.get(0).cost
+ Component.onCompleted: {
+ fruitModel.append({"cost": 5.95, "name":"Jackfruit"});
+ console.log(fruitModel.get(0).cost);
+ fruitModel.get(0).cost = 10.95;
+ }
\endcode
The \a index must be an element in the list.
@@ -446,6 +538,9 @@ void QDeclarativeListModel::append(const QScriptValue& valuemap)
fruitModel.get(0).attributes.get(1).value; // == "green"
\endcode
+ \warning The returned object is not guaranteed to remain valid. It
+ should not be used in \l{Property Binding}{property bindings}.
+
\sa append()
*/
QScriptValue QDeclarativeListModel::get(int index) const
@@ -489,7 +584,7 @@ void QDeclarativeListModel::set(int index, const QScriptValue& valuemap)
else
m_nested->set(index, valuemap, &roles);
- if (!m_isWorkerCopy)
+ if (!inWorkerThread())
emit itemsChanged(index, 1, roles);
}
}
@@ -520,7 +615,7 @@ void QDeclarativeListModel::setProperty(int index, const QString& property, cons
else
m_nested->setProperty(index, property, value, &roles);
- if (!m_isWorkerCopy)
+ if (!inWorkerThread())
emit itemsChanged(index, 1, roles);
}
@@ -687,7 +782,7 @@ void QDeclarativeListModelParser::setCustomData(QObject *obj, const QByteArray &
{
QDeclarativeListModel *rv = static_cast<QDeclarativeListModel *>(obj);
- ModelNode *root = new ModelNode;
+ ModelNode *root = new ModelNode(rv->m_nested);
rv->m_nested->_root = root;
QStack<ModelNode *> nodes;
nodes << root;
@@ -704,7 +799,7 @@ void QDeclarativeListModelParser::setCustomData(QObject *obj, const QByteArray &
case ListInstruction::Push:
{
ModelNode *n = nodes.top();
- ModelNode *n2 = new ModelNode;
+ ModelNode *n2 = new ModelNode(rv->m_nested);
n->values << QVariant::fromValue(n2);
nodes.push(n2);
if (processingSet)
@@ -743,7 +838,7 @@ void QDeclarativeListModelParser::setCustomData(QObject *obj, const QByteArray &
case ListInstruction::Set:
{
ModelNode *n = nodes.top();
- ModelNode *n2 = new ModelNode;
+ ModelNode *n2 = new ModelNode(rv->m_nested);
n->properties.insert(QString::fromUtf8(data + instr.dataIdx), n2);
nodes.push(n2);
processingSet = true;
@@ -751,6 +846,13 @@ void QDeclarativeListModelParser::setCustomData(QObject *obj, const QByteArray &
break;
}
}
+
+ ModelNode *rootNode = rv->m_nested->_root;
+ for (int i=0; i<rootNode->values.count(); ++i) {
+ ModelNode *node = qvariant_cast<ModelNode *>(rootNode->values[i]);
+ node->listIndex = i;
+ node->updateListIndexes();
+ }
}
bool QDeclarativeListModelParser::definesEmptyList(const QString &s)
@@ -765,22 +867,57 @@ bool QDeclarativeListModelParser::definesEmptyList(const QString &s)
return false;
}
+
/*!
\qmlclass ListElement QDeclarativeListElement
\ingroup qml-working-with-data
\since 4.7
\brief The ListElement element defines a data item in a ListModel.
+ List elements are defined inside ListModel definitions, and represent items in a
+ list that will be displayed using ListView or \l Repeater items.
+
+ List elements are defined like other QML elements except that they contain
+ a collection of \e role definitions instead of properties. Using the same
+ syntax as property definitions, roles both define how the data is accessed
+ and include the data itself.
+
+ The names used for roles must begin with a lower-case letter and should be
+ common to all elements in a given model. Values must be simple constants; either
+ strings (quoted and optionally within a call to QT_TR_NOOP), boolean values
+ (true, false), numbers, or enumeration values (such as AlignText.AlignHCenter).
+
+ \section1 Referencing Roles
+
+ The role names are used by delegates to obtain data from list elements.
+ Each role name is accessible in the delegate's scope, and refers to the
+ corresponding role in the current element. Where a role name would be
+ ambiguous to use, it can be accessed via the \l{ListView::}{model}
+ property (e.g., \c{model.cost} instead of \c{cost}).
+
+ \section1 Example Usage
+
+ The following model defines a series of list elements, each of which
+ contain "name" and "cost" roles and their associated values.
+
+ \snippet doc/src/snippets/declarative/qml-data-models/listelements.qml model
+
+ The delegate obtains the name and cost for each element by simply referring
+ to \c name and \c cost:
+
+ \snippet doc/src/snippets/declarative/qml-data-models/listelements.qml view
+
\sa ListModel
*/
FlatListModel::FlatListModel(QDeclarativeListModel *base)
- : m_scriptEngine(0), m_listModel(base)
+ : m_scriptEngine(0), m_listModel(base), m_scriptClass(0), m_parentAgent(0)
{
}
FlatListModel::~FlatListModel()
{
+ qDeleteAll(m_nodeData);
}
QHash<int,QVariant> FlatListModel::data(int index, const QList<int> &roles) const
@@ -824,11 +961,15 @@ int FlatListModel::count() const
void FlatListModel::clear()
{
m_values.clear();
+
+ qDeleteAll(m_nodeData);
+ m_nodeData.clear();
}
void FlatListModel::remove(int index)
{
m_values.removeAt(index);
+ removedNode(index);
}
bool FlatListModel::append(const QScriptValue &value)
@@ -845,6 +986,8 @@ bool FlatListModel::insert(int index, const QScriptValue &value)
return false;
m_values.insert(index, row);
+ insertedNode(index);
+
return true;
}
@@ -858,13 +1001,17 @@ QScriptValue FlatListModel::get(int index) const
if (index < 0 || index >= m_values.count())
return scriptEngine->undefinedValue();
- QScriptValue rv = scriptEngine->newObject();
+ FlatListModel *that = const_cast<FlatListModel*>(this);
+ if (!m_scriptClass)
+ that->m_scriptClass = new FlatListScriptClass(that, scriptEngine);
- QHash<int, QVariant> row = m_values.at(index);
- for (QHash<int, QVariant>::ConstIterator iter = row.begin(); iter != row.end(); ++iter)
- rv.setProperty(m_roles.value(iter.key()), scriptEngine->toScriptValue(iter.value()));
+ FlatNodeData *data = m_nodeData.value(index);
+ if (!data) {
+ data = new FlatNodeData(index);
+ that->m_nodeData.replace(index, data);
+ }
- return rv;
+ return QScriptDeclarativeClass::newObject(scriptEngine, m_scriptClass, new FlatNodeObjectData(data));
}
void FlatListModel::set(int index, const QScriptValue &value, QList<int> *roles)
@@ -896,23 +1043,8 @@ void FlatListModel::setProperty(int index, const QString& property, const QVaria
void FlatListModel::move(int from, int to, int n)
{
- if (n == 1) {
- m_values.move(from, to);
- } else {
- QList<QHash<int, QVariant> > replaced;
- int i=0;
- QList<QHash<int, QVariant> >::ConstIterator it=m_values.begin(); it += from+n;
- for (; i<to-from; ++i,++it)
- replaced.append(*it);
- i=0;
- it=m_values.begin(); it += from;
- for (; i<n; ++i,++it)
- replaced.append(*it);
- QList<QHash<int, QVariant> >::ConstIterator f=replaced.begin();
- QList<QHash<int, QVariant> >::Iterator t=m_values.begin(); t += from;
- for (; f != replaced.end(); ++f, ++t)
- *t = *f;
- }
+ qdeclarativelistmodel_move<QList<QHash<int, QVariant> > >(from, to, n, &m_values);
+ moveNodes(from, to, n);
}
bool FlatListModel::addValue(const QScriptValue &value, QHash<int, QVariant> *row, QList<int> *roles)
@@ -922,7 +1054,7 @@ bool FlatListModel::addValue(const QScriptValue &value, QHash<int, QVariant> *ro
it.next();
QScriptValue value = it.value();
if (!value.isVariant() && !value.isRegExp() && !value.isDate() && value.isObject()) {
- qmlInfo(m_listModel) << "Cannot add nested list values when modifying or after modification from a worker script";
+ qmlInfo(m_listModel) << "Cannot add list-type data when modifying or after modification from a worker script";
return false;
}
@@ -942,6 +1074,139 @@ bool FlatListModel::addValue(const QScriptValue &value, QHash<int, QVariant> *ro
return true;
}
+void FlatListModel::insertedNode(int index)
+{
+ if (index >= 0 && index <= m_values.count()) {
+ m_nodeData.insert(index, 0);
+
+ for (int i=index + 1; i<m_nodeData.count(); i++) {
+ if (m_nodeData[i])
+ m_nodeData[i]->index = i;
+ }
+ }
+}
+
+void FlatListModel::removedNode(int index)
+{
+ if (index >= 0 && index < m_nodeData.count()) {
+ delete m_nodeData.takeAt(index);
+
+ for (int i=index; i<m_nodeData.count(); i++) {
+ if (m_nodeData[i])
+ m_nodeData[i]->index = i;
+ }
+ }
+}
+
+void FlatListModel::moveNodes(int from, int to, int n)
+{
+ if (!m_listModel->canMove(from, to, n))
+ return;
+
+ qdeclarativelistmodel_move<QList<FlatNodeData *> >(from, to, n, &m_nodeData);
+
+ for (int i=from; i<from + (to-from); i++) {
+ if (m_nodeData[i])
+ m_nodeData[i]->index = i;
+ }
+}
+
+
+
+FlatNodeData::~FlatNodeData()
+{
+ for (QSet<FlatNodeObjectData *>::Iterator iter = objects.begin(); iter != objects.end(); ++iter) {
+ FlatNodeObjectData *data = *iter;
+ data->nodeData = 0;
+ }
+}
+
+void FlatNodeData::addData(FlatNodeObjectData *data)
+{
+ objects.insert(data);
+}
+
+void FlatNodeData::removeData(FlatNodeObjectData *data)
+{
+ objects.remove(data);
+}
+
+
+FlatListScriptClass::FlatListScriptClass(FlatListModel *model, QScriptEngine *seng)
+ : QScriptDeclarativeClass(seng),
+ m_model(model)
+{
+}
+
+QScriptDeclarativeClass::Value FlatListScriptClass::property(Object *obj, const Identifier &name)
+{
+ FlatNodeObjectData *objData = static_cast<FlatNodeObjectData*>(obj);
+ if (!objData->nodeData) // item at this index has been deleted
+ return QScriptDeclarativeClass::Value(engine(), engine()->undefinedValue());
+
+ int index = objData->nodeData->index;
+ QString propName = toString(name);
+ int role = m_model->m_strings.value(propName, -1);
+
+ if (role >= 0 && index >=0 ) {
+ const QHash<int, QVariant> &row = m_model->m_values[index];
+ QScriptValue sv = engine()->toScriptValue<QVariant>(row[role]);
+ return QScriptDeclarativeClass::Value(engine(), sv);
+ }
+
+ return QScriptDeclarativeClass::Value(engine(), engine()->undefinedValue());
+}
+
+void FlatListScriptClass::setProperty(Object *obj, const Identifier &name, const QScriptValue &value)
+{
+ if (!value.isVariant() && !value.isRegExp() && !value.isDate() && value.isObject()) {
+ qmlInfo(m_model->m_listModel) << "Cannot add list-type data when modifying or after modification from a worker script";
+ return;
+ }
+
+ FlatNodeObjectData *objData = static_cast<FlatNodeObjectData*>(obj);
+ if (!objData->nodeData) // item at this index has been deleted
+ return;
+
+ int index = objData->nodeData->index;
+ QString propName = toString(name);
+
+ int role = m_model->m_strings.value(propName, -1);
+ if (role >= 0 && index >= 0) {
+ QHash<int, QVariant> &row = m_model->m_values[index];
+ row[role] = value.toVariant();
+
+ if (m_model->m_parentAgent) {
+ // This is the list in the worker thread, so tell the agent to
+ // emit itemsChanged() later
+ m_model->m_parentAgent->changedData(index, 1);
+ } else {
+ // This is the list in the main thread, so emit itemsChanged()
+ QList<int> roles;
+ roles << role;
+ emit m_model->m_listModel->itemsChanged(index, 1, roles);
+ }
+ }
+}
+
+QScriptClass::QueryFlags FlatListScriptClass::queryProperty(Object *, const Identifier &, QScriptClass::QueryFlags)
+{
+ return (QScriptClass::HandlesReadAccess | QScriptClass::HandlesWriteAccess);
+}
+
+bool FlatListScriptClass::compare(Object *obj1, Object *obj2)
+{
+ FlatNodeObjectData *data1 = static_cast<FlatNodeObjectData*>(obj1);
+ FlatNodeObjectData *data2 = static_cast<FlatNodeObjectData*>(obj2);
+
+ if (!data1->nodeData || !data2->nodeData)
+ return false;
+
+ return data1->nodeData->index == data2->nodeData->index;
+}
+
+
+
NestedListModel::NestedListModel(QDeclarativeListModel *base)
: _root(0), m_ownsRoot(false), m_listModel(base), _rolesOk(false)
{
@@ -1067,11 +1332,12 @@ void NestedListModel::remove(int index)
bool NestedListModel::insert(int index, const QScriptValue& valuemap)
{
if (!_root) {
- _root = new ModelNode;
+ _root = new ModelNode(this);
m_ownsRoot = true;
}
- ModelNode *mn = new ModelNode;
+ ModelNode *mn = new ModelNode(this);
+ mn->listIndex = index;
mn->setObjectValue(valuemap);
_root->values.insert(index,QVariant::fromValue(mn));
return true;
@@ -1079,34 +1345,19 @@ bool NestedListModel::insert(int index, const QScriptValue& valuemap)
void NestedListModel::move(int from, int to, int n)
{
- if (n==1) {
- _root->values.move(from,to);
- } else {
- QList<QVariant> replaced;
- int i=0;
- QVariantList::const_iterator it=_root->values.begin(); it += from+n;
- for (; i<to-from; ++i,++it)
- replaced.append(*it);
- i=0;
- it=_root->values.begin(); it += from;
- for (; i<n; ++i,++it)
- replaced.append(*it);
- QVariantList::const_iterator f=replaced.begin();
- QVariantList::iterator t=_root->values.begin(); t += from;
- for (; f != replaced.end(); ++f, ++t)
- *t = *f;
- }
+ if (!_root)
+ return;
+ qdeclarativelistmodel_move<QVariantList>(from, to, n, &_root->values);
}
bool NestedListModel::append(const QScriptValue& valuemap)
{
if (!_root) {
- _root = new ModelNode;
+ _root = new ModelNode(this);
m_ownsRoot = true;
}
- ModelNode *mn = new ModelNode;
- mn->setObjectValue(valuemap);
- _root->values << QVariant::fromValue(mn);
+
+ insert(count(), valuemap);
return true;
}
@@ -1201,8 +1452,8 @@ QString NestedListModel::toString(int role) const
}
-ModelNode::ModelNode()
-: modelCache(0), objectCache(0), isArray(false)
+ModelNode::ModelNode(NestedListModel *model)
+: modelCache(0), objectCache(0), isArray(false), m_model(model), listIndex(-1)
{
}
@@ -1226,18 +1477,18 @@ void ModelNode::clear()
properties.clear();
}
-void ModelNode::setObjectValue(const QScriptValue& valuemap) {
+void ModelNode::setObjectValue(const QScriptValue& valuemap, bool writeToCache) {
QScriptValueIterator it(valuemap);
while (it.hasNext()) {
it.next();
- ModelNode *value = new ModelNode;
+ ModelNode *value = new ModelNode(m_model);
QScriptValue v = it.value();
if (v.isArray()) {
value->isArray = true;
value->setListValue(v);
} else {
value->values << v.toVariant();
- if (objectCache)
+ if (writeToCache && objectCache)
objectCache->setValue(it.name().toUtf8(), value->values.last());
}
if (properties.contains(it.name()))
@@ -1250,14 +1501,16 @@ void ModelNode::setListValue(const QScriptValue& valuelist) {
values.clear();
int size = valuelist.property(QLatin1String("length")).toInt32();
for (int i=0; i<size; i++) {
- ModelNode *value = new ModelNode;
+ ModelNode *value = new ModelNode(m_model);
QScriptValue v = valuelist.property(i);
if (v.isArray()) {
value->isArray = true;
value->setListValue(v);
} else if (v.isObject()) {
+ value->listIndex = i;
value->setObjectValue(v);
} else {
+ value->listIndex = i;
value->values << v.toVariant();
}
values.append(QVariant::fromValue(value));
@@ -1269,7 +1522,7 @@ void ModelNode::setProperty(const QString& prop, const QVariant& val) {
if (it != properties.end()) {
(*it)->values[0] = val;
} else {
- ModelNode *n = new ModelNode;
+ ModelNode *n = new ModelNode(m_model);
n->values << val;
properties.insert(prop,n);
}
@@ -1277,6 +1530,40 @@ void ModelNode::setProperty(const QString& prop, const QVariant& val) {
objectCache->setValue(prop.toUtf8(), val);
}
+void ModelNode::updateListIndexes()
+{
+ for (QHash<QString, ModelNode *>::ConstIterator iter = properties.begin(); iter != properties.end(); ++iter) {
+ ModelNode *node = iter.value();
+ if (node->isArray) {
+ for (int i=0; i<node->values.count(); ++i) {
+ ModelNode *subNode = qvariant_cast<ModelNode *>(node->values.at(i));
+ if (subNode)
+ subNode->listIndex = i;
+ }
+ }
+ node->updateListIndexes();
+ }
+}
+
+/*
+ Need to call this to emit itemsChanged() for modifications outside of set()
+ and setProperty(), i.e. if an item returned from get() is modified
+*/
+void ModelNode::changedProperty(const QString &name) const
+{
+ if (listIndex < 0)
+ return;
+
+ m_model->checkRoles();
+ QList<int> roles;
+ int role = m_model->roleStrings.indexOf(name);
+ if (role < 0)
+ roles = m_model->roles();
+ else
+ roles << role;
+ emit m_model->m_listModel->itemsChanged(listIndex, 1, roles);
+}
+
void ModelNode::dump(ModelNode *node, int ind)
{
QByteArray indentBa(ind * 4, ' ');
@@ -1298,16 +1585,47 @@ void ModelNode::dump(ModelNode *node, int ind)
}
}
-ModelObject::ModelObject()
-: _mo(new QDeclarativeOpenMetaObject(this))
+ModelObject::ModelObject(ModelNode *node, NestedListModel *model, QScriptEngine *seng)
+ : m_model(model),
+ m_node(node),
+ m_meta(new ModelNodeMetaObject(seng, this))
{
}
void ModelObject::setValue(const QByteArray &name, const QVariant &val)
{
- _mo->setValue(name, val);
+ m_meta->setValue(name, val);
setProperty(name.constData(), val);
}
+void ModelObject::setNodeUpdatesEnabled(bool enable)
+{
+ m_meta->m_enabled = enable;
+}
+
+
+ModelNodeMetaObject::ModelNodeMetaObject(QScriptEngine *seng, ModelObject *object)
+ : QDeclarativeOpenMetaObject(object),
+ m_enabled(false),
+ m_seng(seng),
+ m_obj(object)
+{
+}
+
+void ModelNodeMetaObject::propertyWritten(int index)
+{
+ if (!m_enabled)
+ return;
+
+ QString propName = QString::fromUtf8(name(index));
+ QVariant value = operator[](index);
+
+ QScriptValue sv = m_seng->newObject();
+ sv.setProperty(propName, m_seng->newVariant(value));
+ m_obj->m_node->setObjectValue(sv, false);
+
+ m_obj->m_node->changedProperty(propName);
+}
+
QT_END_NAMESPACE
diff --git a/src/declarative/util/qdeclarativelistmodel_p.h b/src/declarative/util/qdeclarativelistmodel_p.h
index 6aff9c60cc..fe42ef6586 100644
--- a/src/declarative/util/qdeclarativelistmodel_p.h
+++ b/src/declarative/util/qdeclarativelistmodel_p.h
@@ -63,6 +63,7 @@ class FlatListModel;
class NestedListModel;
class QDeclarativeListModelWorkerAgent;
struct ModelNode;
+class FlatListScriptClass;
class Q_DECLARATIVE_EXPORT QDeclarativeListModel : public QListModelInterface
{
Q_OBJECT
@@ -96,16 +97,21 @@ Q_SIGNALS:
private:
friend class QDeclarativeListModelParser;
friend class QDeclarativeListModelWorkerAgent;
+ friend class FlatListModel;
+ friend class FlatListScriptClass;
friend struct ModelNode;
- QDeclarativeListModel(bool workerCopy, QObject *parent=0);
+ // Constructs a flat list model for a worker agent
+ QDeclarativeListModel(const QDeclarativeListModel *orig, QDeclarativeListModelWorkerAgent *parent);
+
bool flatten();
- bool modifyCheck();
+ bool inWorkerThread() const;
+
+ inline bool canMove(int from, int to, int n) const { return !(from+n > count() || to+n > count() || from < 0 || to < 0 || n < 0); }
QDeclarativeListModelWorkerAgent *m_agent;
NestedListModel *m_nested;
FlatListModel *m_flat;
- bool m_isWorkerCopy;
};
// ### FIXME
diff --git a/src/declarative/util/qdeclarativelistmodel_p_p.h b/src/declarative/util/qdeclarativelistmodel_p_p.h
index 8231414d63..d2d40ee67a 100644
--- a/src/declarative/util/qdeclarativelistmodel_p_p.h
+++ b/src/declarative/util/qdeclarativelistmodel_p_p.h
@@ -54,9 +54,11 @@
//
#include "private/qdeclarativelistmodel_p.h"
-
-#include "qdeclarative.h"
#include "private/qdeclarativeengine_p.h"
+#include "private/qdeclarativeopenmetaobject_p.h"
+#include "qdeclarative.h"
+
+#include <private/qscriptdeclarativeclass_p.h>
QT_BEGIN_HEADER
@@ -68,6 +70,8 @@ class QDeclarativeOpenMetaObject;
class QScriptEngine;
class QDeclarativeListModelWorkerAgent;
struct ModelNode;
+class FlatListScriptClass;
+class FlatNodeData;
class FlatListModel
{
@@ -94,16 +98,82 @@ public:
private:
friend class QDeclarativeListModelWorkerAgent;
friend class QDeclarativeListModel;
+ friend class FlatListScriptClass;
+ friend class FlatNodeData;
bool addValue(const QScriptValue &value, QHash<int, QVariant> *row, QList<int> *roles);
+ void insertedNode(int index);
+ void removedNode(int index);
+ void moveNodes(int from, int to, int n);
QScriptEngine *m_scriptEngine;
QHash<int, QString> m_roles;
QHash<QString, int> m_strings;
QList<QHash<int, QVariant> > m_values;
QDeclarativeListModel *m_listModel;
+
+ FlatListScriptClass *m_scriptClass;
+ QList<FlatNodeData *> m_nodeData;
+ QDeclarativeListModelWorkerAgent *m_parentAgent;
+};
+
+
+/*
+ Created when get() is called on a FlatListModel. This allows changes to the
+ object returned by get() to be tracked, and passed onto the model.
+*/
+class FlatListScriptClass : public QScriptDeclarativeClass
+{
+public:
+ FlatListScriptClass(FlatListModel *model, QScriptEngine *seng);
+
+ Value property(Object *, const Identifier &);
+ void setProperty(Object *, const Identifier &name, const QScriptValue &);
+ QScriptClass::QueryFlags queryProperty(Object *, const Identifier &, QScriptClass::QueryFlags flags);
+ bool compare(Object *, Object *);
+
+private:
+ FlatListModel *m_model;
+};
+
+/*
+ FlatNodeData and FlatNodeObjectData allow objects returned by get() to still
+ point to the correct list index if move(), insert() or remove() are called.
+*/
+struct FlatNodeObjectData;
+class FlatNodeData
+{
+public:
+ FlatNodeData(int i)
+ : index(i) {}
+
+ ~FlatNodeData();
+
+ void addData(FlatNodeObjectData *data);
+ void removeData(FlatNodeObjectData *data);
+
+ int index;
+
+private:
+ QSet<FlatNodeObjectData*> objects;
+};
+
+struct FlatNodeObjectData : public QScriptDeclarativeClass::Object
+{
+ FlatNodeObjectData(FlatNodeData *data) : nodeData(data) {
+ nodeData->addData(this);
+ }
+
+ ~FlatNodeObjectData() {
+ if (nodeData)
+ nodeData->removeData(this);
+ }
+
+ FlatNodeData *nodeData;
};
+
+
class NestedListModel
{
public:
@@ -134,25 +204,50 @@ public:
QDeclarativeListModel *m_listModel;
private:
+ friend struct ModelNode;
mutable QStringList roleStrings;
mutable bool _rolesOk;
};
+class ModelNodeMetaObject;
class ModelObject : public QObject
{
Q_OBJECT
public:
- ModelObject();
+ ModelObject(ModelNode *node, NestedListModel *model, QScriptEngine *seng);
void setValue(const QByteArray &name, const QVariant &val);
+ void setNodeUpdatesEnabled(bool enable);
+
+ NestedListModel *m_model;
+ ModelNode *m_node;
private:
- QDeclarativeOpenMetaObject *_mo;
+ ModelNodeMetaObject *m_meta;
};
+class ModelNodeMetaObject : public QDeclarativeOpenMetaObject
+{
+public:
+ ModelNodeMetaObject(QScriptEngine *seng, ModelObject *object);
+
+ bool m_enabled;
+
+protected:
+ void propertyWritten(int index);
+
+private:
+ QScriptEngine *m_seng;
+ ModelObject *m_obj;
+};
+
+
+/*
+ A ModelNode is created for each item in a NestedListModel.
+*/
struct ModelNode
{
- ModelNode();
+ ModelNode(NestedListModel *model);
~ModelNode();
QList<QVariant> values;
@@ -160,35 +255,22 @@ struct ModelNode
void clear();
- QDeclarativeListModel *model(const NestedListModel *model) {
- if (!modelCache) {
- modelCache = new QDeclarativeListModel;
- QDeclarativeEngine::setContextForObject(modelCache,QDeclarativeEngine::contextForObject(model->m_listModel));
- modelCache->m_nested->_root = this; // ListModel defaults to nestable model
- }
- return modelCache;
- }
-
- ModelObject *object(const NestedListModel *model) {
- if (!objectCache) {
- objectCache = new ModelObject();
- QHash<QString, ModelNode *>::iterator it;
- for (it = properties.begin(); it != properties.end(); ++it) {
- objectCache->setValue(it.key().toUtf8(), model->valueForNode(*it));
- }
- }
- return objectCache;
- }
+ QDeclarativeListModel *model(const NestedListModel *model);
+ ModelObject *object(const NestedListModel *model);
-
- void setObjectValue(const QScriptValue& valuemap);
+ void setObjectValue(const QScriptValue& valuemap, bool writeToCache = true);
void setListValue(const QScriptValue& valuelist);
void setProperty(const QString& prop, const QVariant& val);
+ void changedProperty(const QString &name) const;
+ void updateListIndexes();
static void dump(ModelNode *node, int ind);
QDeclarativeListModel *modelCache;
ModelObject *objectCache;
bool isArray;
+
+ NestedListModel *m_model;
+ int listIndex; // only used for top-level nodes within a list
};
diff --git a/src/declarative/util/qdeclarativelistmodelworkeragent.cpp b/src/declarative/util/qdeclarativelistmodelworkeragent.cpp
index d9df16989f..6804d4af6e 100644
--- a/src/declarative/util/qdeclarativelistmodelworkeragent.cpp
+++ b/src/declarative/util/qdeclarativelistmodelworkeragent.cpp
@@ -83,11 +83,11 @@ void QDeclarativeListModelWorkerAgent::Data::changedChange(int index, int count)
}
QDeclarativeListModelWorkerAgent::QDeclarativeListModelWorkerAgent(QDeclarativeListModel *model)
-: m_engine(0), m_ref(1), m_orig(model), m_copy(new QDeclarativeListModel(true, this))
+ : m_engine(0),
+ m_ref(1),
+ m_orig(model),
+ m_copy(new QDeclarativeListModel(model, this))
{
- m_copy->m_flat->m_roles = m_orig->m_flat->m_roles;
- m_copy->m_flat->m_strings = m_orig->m_flat->m_strings;
- m_copy->m_flat->m_values = m_orig->m_flat->m_values;
}
QDeclarativeListModelWorkerAgent::~QDeclarativeListModelWorkerAgent()
@@ -194,6 +194,11 @@ void QDeclarativeListModelWorkerAgent::sync()
mutex.unlock();
}
+void QDeclarativeListModelWorkerAgent::changedData(int index, int count)
+{
+ data.changedChange(index, count);
+}
+
bool QDeclarativeListModelWorkerAgent::event(QEvent *e)
{
if (e->type() == QEvent::User) {
@@ -216,6 +221,24 @@ bool QDeclarativeListModelWorkerAgent::event(QEvent *e)
orig->m_strings = copy->m_strings;
orig->m_values = copy->m_values;
+ // update the orig->m_nodeData list
+ for (int ii = 0; ii < changes.count(); ++ii) {
+ const Change &change = changes.at(ii);
+ switch (change.type) {
+ case Change::Inserted:
+ orig->insertedNode(change.index);
+ break;
+ case Change::Removed:
+ orig->removedNode(change.index);
+ break;
+ case Change::Moved:
+ orig->moveNodes(change.index, change.to, change.count);
+ break;
+ case Change::Changed:
+ break;
+ }
+ }
+
syncDone.wakeAll();
locker.unlock();
@@ -232,7 +255,7 @@ bool QDeclarativeListModelWorkerAgent::event(QEvent *e)
emit m_orig->itemsMoved(change.index, change.to, change.count);
break;
case Change::Changed:
- emit m_orig->itemsChanged(change.index, change.to, orig->m_roles.keys());
+ emit m_orig->itemsChanged(change.index, change.count, orig->m_roles.keys());
break;
}
}
diff --git a/src/declarative/util/qdeclarativelistmodelworkeragent_p.h b/src/declarative/util/qdeclarativelistmodelworkeragent_p.h
index 01da3741f5..10c3bca549 100644
--- a/src/declarative/util/qdeclarativelistmodelworkeragent_p.h
+++ b/src/declarative/util/qdeclarativelistmodelworkeragent_p.h
@@ -67,6 +67,7 @@ QT_BEGIN_NAMESPACE
QT_MODULE(Declarative)
class QDeclarativeListModel;
+class FlatListScriptClass;
class QDeclarativeListModelWorkerAgent : public QObject
{
@@ -115,6 +116,7 @@ protected:
private:
friend class QDeclarativeWorkerScriptEnginePrivate;
+ friend class FlatListScriptClass;
QScriptEngine *m_engine;
struct Change {
@@ -141,6 +143,8 @@ private:
QDeclarativeListModel *list;
};
+ void changedData(int index, int count);
+
QAtomicInt m_ref;
QDeclarativeListModel *m_orig;
QDeclarativeListModel *m_copy;
diff --git a/src/declarative/util/qdeclarativepixmapcache_p.h b/src/declarative/util/qdeclarativepixmapcache_p.h
index b4d88bdaf4..2e83cc423f 100644
--- a/src/declarative/util/qdeclarativepixmapcache_p.h
+++ b/src/declarative/util/qdeclarativepixmapcache_p.h
@@ -98,7 +98,7 @@ public:
bool connectDownloadProgress(QObject *, int);
private:
- Q_DISABLE_COPY(QDeclarativePixmap);
+ Q_DISABLE_COPY(QDeclarativePixmap)
QDeclarativePixmapData *d;
};
diff --git a/src/declarative/util/qdeclarativepropertychanges.cpp b/src/declarative/util/qdeclarativepropertychanges.cpp
index e897458744..8d01b80af2 100644
--- a/src/declarative/util/qdeclarativepropertychanges.cpp
+++ b/src/declarative/util/qdeclarativepropertychanges.cpp
@@ -52,6 +52,7 @@
#include <qdeclarativeguard_p.h>
#include <qdeclarativeproperty_p.h>
#include <qdeclarativecontext_p.h>
+#include <qdeclarativestate_p_p.h>
#include <QtCore/qdebug.h>
@@ -200,14 +201,14 @@ public:
};
-class QDeclarativePropertyChangesPrivate : public QObjectPrivate
+class QDeclarativePropertyChangesPrivate : public QDeclarativeStateOperationPrivate
{
Q_DECLARE_PUBLIC(QDeclarativePropertyChanges)
public:
- QDeclarativePropertyChangesPrivate() : object(0), decoded(true), restore(true),
+ QDeclarativePropertyChangesPrivate() : decoded(true), restore(true),
isExplicit(false) {}
- QObject *object;
+ QDeclarativeGuard<QObject> object;
QByteArray data;
bool decoded : 1;
@@ -497,4 +498,272 @@ void QDeclarativePropertyChanges::setIsExplicit(bool e)
d->isExplicit = e;
}
+bool QDeclarativePropertyChanges::containsValue(const QByteArray &name) const
+{
+ Q_D(const QDeclarativePropertyChanges);
+ typedef QPair<QByteArray, QVariant> PropertyEntry;
+
+ QListIterator<PropertyEntry> propertyIterator(d->properties);
+ while (propertyIterator.hasNext()) {
+ const PropertyEntry &entry = propertyIterator.next();
+ if (entry.first == name) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+bool QDeclarativePropertyChanges::containsExpression(const QByteArray &name) const
+{
+ Q_D(const QDeclarativePropertyChanges);
+ typedef QPair<QByteArray, QDeclarativeExpression *> ExpressionEntry;
+
+ QListIterator<ExpressionEntry> expressionIterator(d->expressions);
+ while (expressionIterator.hasNext()) {
+ const ExpressionEntry &entry = expressionIterator.next();
+ if (entry.first == name) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+bool QDeclarativePropertyChanges::containsProperty(const QByteArray &name) const
+{
+ return containsValue(name) || containsExpression(name);
+}
+
+void QDeclarativePropertyChanges::changeValue(const QByteArray &name, const QVariant &value)
+{
+ Q_D(QDeclarativePropertyChanges);
+ typedef QPair<QByteArray, QVariant> PropertyEntry;
+ typedef QPair<QByteArray, QDeclarativeExpression *> ExpressionEntry;
+
+ QMutableListIterator<ExpressionEntry> expressionIterator(d->expressions);
+ while (expressionIterator.hasNext()) {
+ const ExpressionEntry &entry = expressionIterator.next();
+ if (entry.first == name) {
+ expressionIterator.remove();
+ if (state() && state()->isStateActive()) {
+ QDeclarativeAbstractBinding *oldBinding = QDeclarativePropertyPrivate::binding(d->property(name));
+ if (oldBinding) {
+ QDeclarativePropertyPrivate::setBinding(d->property(name), 0);
+ oldBinding->destroy();
+ }
+ d->property(name).write(value);
+ }
+
+ d->properties.append(PropertyEntry(name, value));
+ return;
+ }
+ }
+
+ QMutableListIterator<PropertyEntry> propertyIterator(d->properties);
+ while (propertyIterator.hasNext()) {
+ PropertyEntry &entry = propertyIterator.next();
+ if (entry.first == name) {
+ entry.second = value;
+ if (state() && state()->isStateActive())
+ d->property(name).write(value);
+ return;
+ }
+ }
+
+ QDeclarativeAction action;
+ action.restore = restoreEntryValues();
+ action.property = d->property(name);
+ action.fromValue = action.property.read();
+ action.specifiedObject = object();
+ action.specifiedProperty = QString::fromUtf8(name);
+ action.toValue = value;
+
+ propertyIterator.insert(PropertyEntry(name, value));
+ if (state() && state()->isStateActive()) {
+ state()->addEntryToRevertList(action);
+ QDeclarativeAbstractBinding *oldBinding = QDeclarativePropertyPrivate::binding(action.property);
+ if (oldBinding)
+ oldBinding->setEnabled(false, QDeclarativePropertyPrivate::DontRemoveBinding | QDeclarativePropertyPrivate::BypassInterceptor);
+ d->property(name).write(value);
+ }
+}
+
+void QDeclarativePropertyChanges::changeExpression(const QByteArray &name, const QString &expression)
+{
+ Q_D(QDeclarativePropertyChanges);
+ typedef QPair<QByteArray, QVariant> PropertyEntry;
+ typedef QPair<QByteArray, QDeclarativeExpression *> ExpressionEntry;
+
+ bool hadValue = false;
+
+ QMutableListIterator<PropertyEntry> propertyIterator(d->properties);
+ while (propertyIterator.hasNext()) {
+ PropertyEntry &entry = propertyIterator.next();
+ if (entry.first == name) {
+ propertyIterator.remove();
+ hadValue = true;
+ break;
+ }
+ }
+
+ QMutableListIterator<ExpressionEntry> expressionIterator(d->expressions);
+ while (expressionIterator.hasNext()) {
+ const ExpressionEntry &entry = expressionIterator.next();
+ if (entry.first == name) {
+ entry.second->setExpression(expression);
+ if (state() && state()->isStateActive()) {
+ QDeclarativeAbstractBinding *oldBinding = QDeclarativePropertyPrivate::binding(d->property(name));
+ if (oldBinding) {
+ QDeclarativePropertyPrivate::setBinding(d->property(name), 0);
+ oldBinding->destroy();
+ }
+
+ QDeclarativeBinding *newBinding = new QDeclarativeBinding(expression, object(), qmlContext(this));
+ newBinding->setTarget(d->property(name));
+ QDeclarativePropertyPrivate::setBinding(d->property(name), newBinding, QDeclarativePropertyPrivate::DontRemoveBinding | QDeclarativePropertyPrivate::BypassInterceptor);
+ }
+ return;
+ }
+ }
+
+ QDeclarativeExpression *newExpression = new QDeclarativeExpression(qmlContext(this), d->object, expression);
+ expressionIterator.insert(ExpressionEntry(name, newExpression));
+
+ if (state() && state()->isStateActive()) {
+ if (hadValue) {
+ QDeclarativeAbstractBinding *oldBinding = QDeclarativePropertyPrivate::binding(d->property(name));
+ if (oldBinding) {
+ oldBinding->setEnabled(false, QDeclarativePropertyPrivate::DontRemoveBinding | QDeclarativePropertyPrivate::BypassInterceptor);
+ state()->changeBindingInRevertList(object(), name, oldBinding);
+ }
+
+ QDeclarativeBinding *newBinding = new QDeclarativeBinding(expression, object(), qmlContext(this));
+ newBinding->setTarget(d->property(name));
+ QDeclarativePropertyPrivate::setBinding(d->property(name), newBinding, QDeclarativePropertyPrivate::DontRemoveBinding | QDeclarativePropertyPrivate::BypassInterceptor);
+ } else {
+ QDeclarativeAction action;
+ action.restore = restoreEntryValues();
+ action.property = d->property(name);
+ action.fromValue = action.property.read();
+ action.specifiedObject = object();
+ action.specifiedProperty = QString::fromUtf8(name);
+
+
+ if (d->isExplicit) {
+ action.toValue = newExpression->evaluate();
+ } else {
+ QDeclarativeBinding *newBinding = new QDeclarativeBinding(newExpression->expression(), object(), qmlContext(this));
+ newBinding->setTarget(d->property(name));
+ action.toBinding = newBinding;
+ action.deletableToBinding = true;
+
+ state()->addEntryToRevertList(action);
+ QDeclarativeAbstractBinding *oldBinding = QDeclarativePropertyPrivate::binding(action.property);
+ if (oldBinding)
+ oldBinding->setEnabled(false, QDeclarativePropertyPrivate::DontRemoveBinding | QDeclarativePropertyPrivate::BypassInterceptor);
+
+ QDeclarativePropertyPrivate::setBinding(action.property, newBinding, QDeclarativePropertyPrivate::DontRemoveBinding | QDeclarativePropertyPrivate::BypassInterceptor);
+ }
+ }
+ }
+ // what about the signal handler?
+}
+
+QVariant QDeclarativePropertyChanges::property(const QByteArray &name) const
+{
+ Q_D(const QDeclarativePropertyChanges);
+ typedef QPair<QByteArray, QVariant> PropertyEntry;
+ typedef QPair<QByteArray, QDeclarativeExpression *> ExpressionEntry;
+
+ QListIterator<PropertyEntry> propertyIterator(d->properties);
+ while (propertyIterator.hasNext()) {
+ const PropertyEntry &entry = propertyIterator.next();
+ if (entry.first == name) {
+ return entry.second;
+ }
+ }
+
+ QListIterator<ExpressionEntry> expressionIterator(d->expressions);
+ while (expressionIterator.hasNext()) {
+ const ExpressionEntry &entry = expressionIterator.next();
+ if (entry.first == name) {
+ return QVariant(entry.second->expression());
+ }
+ }
+
+ return QVariant();
+}
+
+void QDeclarativePropertyChanges::removeProperty(const QByteArray &name)
+{
+ Q_D(QDeclarativePropertyChanges);
+ typedef QPair<QByteArray, QVariant> PropertyEntry;
+ typedef QPair<QByteArray, QDeclarativeExpression *> ExpressionEntry;
+
+ QMutableListIterator<ExpressionEntry> expressionIterator(d->expressions);
+ while (expressionIterator.hasNext()) {
+ const ExpressionEntry &entry = expressionIterator.next();
+ if (entry.first == name) {
+ expressionIterator.remove();
+ state()->removeEntryFromRevertList(object(), name);
+ return;
+ }
+ }
+
+ QMutableListIterator<PropertyEntry> propertyIterator(d->properties);
+ while (propertyIterator.hasNext()) {
+ const PropertyEntry &entry = propertyIterator.next();
+ if (entry.first == name) {
+ propertyIterator.remove();
+ state()->removeEntryFromRevertList(object(), name);
+ return;
+ }
+ }
+}
+
+QVariant QDeclarativePropertyChanges::value(const QByteArray &name) const
+{
+ Q_D(const QDeclarativePropertyChanges);
+ typedef QPair<QByteArray, QVariant> PropertyEntry;
+
+ QListIterator<PropertyEntry> propertyIterator(d->properties);
+ while (propertyIterator.hasNext()) {
+ const PropertyEntry &entry = propertyIterator.next();
+ if (entry.first == name) {
+ return entry.second;
+ }
+ }
+
+ return QVariant();
+}
+
+QString QDeclarativePropertyChanges::expression(const QByteArray &name) const
+{
+ Q_D(const QDeclarativePropertyChanges);
+ typedef QPair<QByteArray, QDeclarativeExpression *> ExpressionEntry;
+
+ QListIterator<ExpressionEntry> expressionIterator(d->expressions);
+ while (expressionIterator.hasNext()) {
+ const ExpressionEntry &entry = expressionIterator.next();
+ if (entry.first == name) {
+ return entry.second->expression();
+ }
+ }
+
+ return QString();
+}
+
+void QDeclarativePropertyChanges::detachFromState()
+{
+ if (state())
+ state()->removeAllEntriesFromRevertList(object());
+}
+
+void QDeclarativePropertyChanges::attachToState()
+{
+ if (state())
+ state()->addEntriesToRevertList(actions());
+}
+
QT_END_NAMESPACE
diff --git a/src/declarative/util/qdeclarativepropertychanges_p.h b/src/declarative/util/qdeclarativepropertychanges_p.h
index 8578086ef2..199928fef3 100644
--- a/src/declarative/util/qdeclarativepropertychanges_p.h
+++ b/src/declarative/util/qdeclarativepropertychanges_p.h
@@ -52,7 +52,7 @@ QT_BEGIN_NAMESPACE
QT_MODULE(Declarative)
class QDeclarativePropertyChangesPrivate;
-class Q_AUTOTEST_EXPORT QDeclarativePropertyChanges : public QDeclarativeStateOperation
+class Q_DECLARATIVE_EXPORT QDeclarativePropertyChanges : public QDeclarativeStateOperation
{
Q_OBJECT
Q_DECLARE_PRIVATE(QDeclarativePropertyChanges)
@@ -74,6 +74,20 @@ public:
void setIsExplicit(bool);
virtual ActionList actions();
+
+ bool containsProperty(const QByteArray &name) const;
+ bool containsValue(const QByteArray &name) const;
+ bool containsExpression(const QByteArray &name) const;
+ void changeValue(const QByteArray &name, const QVariant &value);
+ void changeExpression(const QByteArray &name, const QString &expression);
+ void removeProperty(const QByteArray &name);
+ QVariant value(const QByteArray &name) const;
+ QString expression(const QByteArray &name) const;
+
+ void detachFromState();
+ void attachToState();
+
+ QVariant property(const QByteArray &name) const;
};
class QDeclarativePropertyChangesParser : public QDeclarativeCustomParser
diff --git a/src/declarative/util/qdeclarativestate.cpp b/src/declarative/util/qdeclarativestate.cpp
index 1ed7923447..0f5413ec46 100644
--- a/src/declarative/util/qdeclarativestate.cpp
+++ b/src/declarative/util/qdeclarativestate.cpp
@@ -304,7 +304,7 @@ void QDeclarativeStatePrivate::complete()
for (int ii = 0; ii < reverting.count(); ++ii) {
for (int jj = 0; jj < revertList.count(); ++jj) {
- if (revertList.at(jj).property == reverting.at(ii)) {
+ if (revertList.at(jj).property() == reverting.at(ii)) {
revertList.removeAt(jj);
break;
}
@@ -370,6 +370,192 @@ void QDeclarativeAction::deleteFromBinding()
}
}
+bool QDeclarativeState::containsPropertyInRevertList(QObject *target, const QByteArray &name) const
+{
+ Q_D(const QDeclarativeState);
+
+ if (isStateActive()) {
+ QListIterator<QDeclarativeSimpleAction> revertListIterator(d->revertList);
+
+ while (revertListIterator.hasNext()) {
+ const QDeclarativeSimpleAction &simpleAction = revertListIterator.next();
+ if (simpleAction.specifiedObject() == target && simpleAction.specifiedProperty().toUtf8() == name)
+ return true;
+ }
+ }
+
+ return false;
+}
+
+bool QDeclarativeState::changeValueInRevertList(QObject *target, const QByteArray &name, const QVariant &revertValue)
+{
+ Q_D(QDeclarativeState);
+
+ if (isStateActive()) {
+ QMutableListIterator<QDeclarativeSimpleAction> revertListIterator(d->revertList);
+
+ while (revertListIterator.hasNext()) {
+ QDeclarativeSimpleAction &simpleAction = revertListIterator.next();
+ if (simpleAction.specifiedObject() == target && simpleAction.specifiedProperty().toUtf8() == name) {
+ simpleAction.setValue(revertValue);
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+bool QDeclarativeState::changeBindingInRevertList(QObject *target, const QByteArray &name, QDeclarativeAbstractBinding *binding)
+{
+ Q_D(QDeclarativeState);
+
+ if (isStateActive()) {
+ QMutableListIterator<QDeclarativeSimpleAction> revertListIterator(d->revertList);
+
+ while (revertListIterator.hasNext()) {
+ QDeclarativeSimpleAction &simpleAction = revertListIterator.next();
+ if (simpleAction.specifiedObject() == target && simpleAction.specifiedProperty().toUtf8() == name) {
+ if (simpleAction.binding())
+ simpleAction.binding()->destroy();
+
+ simpleAction.setBinding(binding);
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+bool QDeclarativeState::removeEntryFromRevertList(QObject *target, const QByteArray &name)
+{
+ Q_D(QDeclarativeState);
+
+ if (isStateActive()) {
+ QMutableListIterator<QDeclarativeSimpleAction> revertListIterator(d->revertList);
+
+ while (revertListIterator.hasNext()) {
+ QDeclarativeSimpleAction &simpleAction = revertListIterator.next();
+ if (simpleAction.property().object() == target && simpleAction.property().name().toUtf8() == name) {
+ QDeclarativeAbstractBinding *oldBinding = QDeclarativePropertyPrivate::binding(simpleAction.property());
+ if (oldBinding) {
+ QDeclarativePropertyPrivate::setBinding(simpleAction.property(), 0);
+ oldBinding->destroy();
+ }
+
+ simpleAction.property().write(simpleAction.value());
+ if (simpleAction.binding())
+ QDeclarativePropertyPrivate::setBinding(simpleAction.property(), simpleAction.binding());
+
+ revertListIterator.remove();
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+void QDeclarativeState::addEntryToRevertList(const QDeclarativeAction &action)
+{
+ Q_D(QDeclarativeState);
+
+ QDeclarativeSimpleAction simpleAction(action);
+
+ d->revertList.append(simpleAction);
+}
+
+void QDeclarativeState::removeAllEntriesFromRevertList(QObject *target)
+{
+ Q_D(QDeclarativeState);
+
+ if (isStateActive()) {
+ QMutableListIterator<QDeclarativeSimpleAction> revertListIterator(d->revertList);
+
+ while (revertListIterator.hasNext()) {
+ QDeclarativeSimpleAction &simpleAction = revertListIterator.next();
+ if (simpleAction.property().object() == target) {
+ QDeclarativeAbstractBinding *oldBinding = QDeclarativePropertyPrivate::binding(simpleAction.property());
+ if (oldBinding) {
+ QDeclarativePropertyPrivate::setBinding(simpleAction.property(), 0);
+ oldBinding->destroy();
+ }
+
+ simpleAction.property().write(simpleAction.value());
+ if (simpleAction.binding())
+ QDeclarativePropertyPrivate::setBinding(simpleAction.property(), simpleAction.binding());
+
+ revertListIterator.remove();
+ }
+ }
+ }
+}
+
+void QDeclarativeState::addEntriesToRevertList(const QList<QDeclarativeAction> &actionList)
+{
+ Q_D(QDeclarativeState);
+ if (isStateActive()) {
+ QList<QDeclarativeSimpleAction> simpleActionList;
+
+ QListIterator<QDeclarativeAction> actionListIterator(actionList);
+ while(actionListIterator.hasNext()) {
+ const QDeclarativeAction &action = actionListIterator.next();
+ QDeclarativeSimpleAction simpleAction(action);
+ action.property.write(action.toValue);
+ if (action.toBinding) {
+ QDeclarativeAbstractBinding *oldBinding = QDeclarativePropertyPrivate::binding(simpleAction.property());
+ if (oldBinding)
+ QDeclarativePropertyPrivate::setBinding(simpleAction.property(), 0);
+ QDeclarativePropertyPrivate::setBinding(simpleAction.property(), action.toBinding, QDeclarativePropertyPrivate::DontRemoveBinding);
+ }
+
+ simpleActionList.append(simpleAction);
+ }
+
+ d->revertList.append(simpleActionList);
+ }
+}
+
+QVariant QDeclarativeState::valueInRevertList(QObject *target, const QByteArray &name) const
+{
+ Q_D(const QDeclarativeState);
+
+ if (isStateActive()) {
+ QListIterator<QDeclarativeSimpleAction> revertListIterator(d->revertList);
+
+ while (revertListIterator.hasNext()) {
+ const QDeclarativeSimpleAction &simpleAction = revertListIterator.next();
+ if (simpleAction.specifiedObject() == target && simpleAction.specifiedProperty().toUtf8() == name)
+ return simpleAction.value();
+ }
+ }
+
+ return QVariant();
+}
+
+QDeclarativeAbstractBinding *QDeclarativeState::bindingInRevertList(QObject *target, const QByteArray &name) const
+{
+ Q_D(const QDeclarativeState);
+
+ if (isStateActive()) {
+ QListIterator<QDeclarativeSimpleAction> revertListIterator(d->revertList);
+
+ while (revertListIterator.hasNext()) {
+ const QDeclarativeSimpleAction &simpleAction = revertListIterator.next();
+ if (simpleAction.specifiedObject() == target && simpleAction.specifiedProperty().toUtf8() == name)
+ return simpleAction.binding();
+ }
+ }
+
+ return 0;
+}
+
+bool QDeclarativeState::isStateActive() const
+{
+ return stateGroup() && stateGroup()->state() == name();
+}
+
void QDeclarativeState::apply(QDeclarativeStateGroup *group, QDeclarativeTransition *trans, QDeclarativeState *revert)
{
Q_D(QDeclarativeState);
@@ -403,13 +589,13 @@ void QDeclarativeState::apply(QDeclarativeStateGroup *group, QDeclarativeTransit
continue;
bool found = false;
for (int jj = 0; jj < d->revertList.count(); ++jj) {
- QDeclarativeActionEvent *event = d->revertList.at(jj).event;
+ QDeclarativeActionEvent *event = d->revertList.at(jj).event();
if (event && event->typeName() == action.event->typeName()) {
if (action.event->override(event)) {
found = true;
- if (action.event != d->revertList.at(jj).event && action.event->needsCopy()) {
- action.event->copyOriginals(d->revertList.at(jj).event);
+ if (action.event != d->revertList.at(jj).event() && action.event->needsCopy()) {
+ action.event->copyOriginals(d->revertList.at(jj).event());
QDeclarativeSimpleAction r(action);
additionalReverts << r;
@@ -434,9 +620,9 @@ void QDeclarativeState::apply(QDeclarativeStateGroup *group, QDeclarativeTransit
action.fromBinding = QDeclarativePropertyPrivate::binding(action.property);
for (int jj = 0; jj < d->revertList.count(); ++jj) {
- if (d->revertList.at(jj).property == action.property) {
+ if (d->revertList.at(jj).property() == action.property) {
found = true;
- if (d->revertList.at(jj).binding != action.fromBinding) {
+ if (d->revertList.at(jj).binding() != action.fromBinding) {
action.deleteFromBinding();
}
break;
@@ -445,7 +631,7 @@ void QDeclarativeState::apply(QDeclarativeStateGroup *group, QDeclarativeTransit
if (!found) {
if (!action.restore) {
- action.deleteFromBinding();
+ action.deleteFromBinding();;
} else {
// Only need to revert the applyList action if the previous
// state doesn't have a higher priority revert already
@@ -460,8 +646,8 @@ void QDeclarativeState::apply(QDeclarativeStateGroup *group, QDeclarativeTransit
// into this state need to be translated into apply actions
for (int ii = 0; ii < d->revertList.count(); ++ii) {
bool found = false;
- if (d->revertList.at(ii).event) {
- QDeclarativeActionEvent *event = d->revertList.at(ii).event;
+ if (d->revertList.at(ii).event()) {
+ QDeclarativeActionEvent *event = d->revertList.at(ii).event();
if (!event->isReversable())
continue;
for (int jj = 0; !found && jj < applyList.count(); ++jj) {
@@ -474,31 +660,31 @@ void QDeclarativeState::apply(QDeclarativeStateGroup *group, QDeclarativeTransit
} else {
for (int jj = 0; !found && jj < applyList.count(); ++jj) {
const QDeclarativeAction &action = applyList.at(jj);
- if (action.property == d->revertList.at(ii).property)
+ if (action.property == d->revertList.at(ii).property())
found = true;
}
}
if (!found) {
- QVariant cur = d->revertList.at(ii).property.read();
+ QVariant cur = d->revertList.at(ii).property().read();
QDeclarativeAbstractBinding *delBinding =
- QDeclarativePropertyPrivate::setBinding(d->revertList.at(ii).property, 0);
+ QDeclarativePropertyPrivate::setBinding(d->revertList.at(ii).property(), 0);
if (delBinding)
delBinding->destroy();
QDeclarativeAction a;
- a.property = d->revertList.at(ii).property;
+ a.property = d->revertList.at(ii).property();
a.fromValue = cur;
- a.toValue = d->revertList.at(ii).value;
- a.toBinding = d->revertList.at(ii).binding;
- a.specifiedObject = d->revertList.at(ii).specifiedObject;
- a.specifiedProperty = d->revertList.at(ii).specifiedProperty;
- a.event = d->revertList.at(ii).event;
- a.reverseEvent = d->revertList.at(ii).reverseEvent;
+ a.toValue = d->revertList.at(ii).value();
+ a.toBinding = d->revertList.at(ii).binding();
+ a.specifiedObject = d->revertList.at(ii).specifiedObject();
+ a.specifiedProperty = d->revertList.at(ii).specifiedProperty();
+ a.event = d->revertList.at(ii).event();
+ a.reverseEvent = d->revertList.at(ii).reverseEvent();
if (a.event && a.event->isRewindable())
a.event->saveCurrentValues();
applyList << a;
// Store these special reverts in the reverting list
- d->reverting << d->revertList.at(ii).property;
+ d->reverting << d->revertList.at(ii).property();
}
}
// All the local reverts now become part of the ongoing revertList
@@ -526,4 +712,16 @@ QDeclarativeStateOperation::ActionList QDeclarativeStateOperation::actions()
return ActionList();
}
+QDeclarativeState *QDeclarativeStateOperation::state() const
+{
+ Q_D(const QDeclarativeStateOperation);
+ return d->m_state;
+}
+
+void QDeclarativeStateOperation::setState(QDeclarativeState *state)
+{
+ Q_D(QDeclarativeStateOperation);
+ d->m_state = state;
+}
+
QT_END_NAMESPACE
diff --git a/src/declarative/util/qdeclarativestate_p.h b/src/declarative/util/qdeclarativestate_p.h
index 2e2ce7b0c9..a0ab11b867 100644
--- a/src/declarative/util/qdeclarativestate_p.h
+++ b/src/declarative/util/qdeclarativestate_p.h
@@ -111,6 +111,8 @@ public:
//### rename to QDeclarativeStateChange?
class QDeclarativeStateGroup;
+class QDeclarativeState;
+class QDeclarativeStateOperationPrivate;
class Q_DECLARATIVE_EXPORT QDeclarativeStateOperation : public QObject
{
Q_OBJECT
@@ -121,8 +123,15 @@ public:
virtual ActionList actions();
+ QDeclarativeState *state() const;
+ void setState(QDeclarativeState *state);
+
protected:
QDeclarativeStateOperation(QObjectPrivate &dd, QObject *parent = 0);
+
+private:
+ Q_DECLARE_PRIVATE(QDeclarativeStateOperation)
+ Q_DISABLE_COPY(QDeclarativeStateOperation)
};
typedef QDeclarativeStateOperation::ActionList QDeclarativeStateActions;
@@ -169,6 +178,18 @@ public:
QDeclarativeStateGroup *stateGroup() const;
void setStateGroup(QDeclarativeStateGroup *);
+ bool containsPropertyInRevertList(QObject *target, const QByteArray &name) const;
+ bool changeValueInRevertList(QObject *target, const QByteArray &name, const QVariant &revertValue);
+ bool changeBindingInRevertList(QObject *target, const QByteArray &name, QDeclarativeAbstractBinding *binding);
+ bool removeEntryFromRevertList(QObject *target, const QByteArray &name);
+ void addEntryToRevertList(const QDeclarativeAction &action);
+ void removeAllEntriesFromRevertList(QObject *target);
+ void addEntriesToRevertList(const QList<QDeclarativeAction> &actions);
+ QVariant valueInRevertList(QObject *target, const QByteArray &name) const;
+ QDeclarativeAbstractBinding *bindingInRevertList(QObject *target, const QByteArray &name) const;
+
+ bool isStateActive() const;
+
Q_SIGNALS:
void completed();
diff --git a/src/declarative/util/qdeclarativestate_p_p.h b/src/declarative/util/qdeclarativestate_p_p.h
index 2ef9bb084d..4fd8f217c9 100644
--- a/src/declarative/util/qdeclarativestate_p_p.h
+++ b/src/declarative/util/qdeclarativestate_p_p.h
@@ -61,6 +61,8 @@
#include <private/qdeclarativeproperty_p.h>
#include <private/qdeclarativeguard_p.h>
+#include <private/qdeclarativebinding_p.h>
+
#include <private/qobject_p.h>
QT_BEGIN_NAMESPACE
@@ -69,30 +71,123 @@ class QDeclarativeSimpleAction
{
public:
enum State { StartState, EndState };
- QDeclarativeSimpleAction(const QDeclarativeAction &a, State state = StartState)
+ QDeclarativeSimpleAction(const QDeclarativeAction &a, State state = StartState)
{
- property = a.property;
- specifiedObject = a.specifiedObject;
- specifiedProperty = a.specifiedProperty;
- event = a.event;
+ m_property = a.property;
+ m_specifiedObject = a.specifiedObject;
+ m_specifiedProperty = a.specifiedProperty;
+ m_event = a.event;
if (state == StartState) {
- value = a.fromValue;
- binding = QDeclarativePropertyPrivate::binding(property);
- reverseEvent = true;
+ m_value = a.fromValue;
+ if (QDeclarativePropertyPrivate::binding(m_property)) {
+ m_binding = QDeclarativeAbstractBinding::getPointer(QDeclarativePropertyPrivate::binding(m_property));
+ }
+ m_reverseEvent = true;
} else {
- value = a.toValue;
- binding = a.toBinding;
- reverseEvent = false;
+ m_value = a.toValue;
+ m_binding = QDeclarativeAbstractBinding::getPointer(a.toBinding);
+ m_reverseEvent = false;
}
}
- QDeclarativeProperty property;
- QVariant value;
- QDeclarativeAbstractBinding *binding;
- QObject *specifiedObject;
- QString specifiedProperty;
- QDeclarativeActionEvent *event;
- bool reverseEvent;
+ ~QDeclarativeSimpleAction()
+ {
+ }
+
+ QDeclarativeSimpleAction(const QDeclarativeSimpleAction &other)
+ : m_property(other.m_property),
+ m_value(other.m_value),
+ m_binding(QDeclarativeAbstractBinding::getPointer(other.binding())),
+ m_specifiedObject(other.m_specifiedObject),
+ m_specifiedProperty(other.m_specifiedProperty),
+ m_event(other.m_event),
+ m_reverseEvent(other.m_reverseEvent)
+ {
+ }
+
+ QDeclarativeSimpleAction &operator =(const QDeclarativeSimpleAction &other)
+ {
+ m_property = other.m_property;
+ m_value = other.m_value;
+ m_binding = QDeclarativeAbstractBinding::getPointer(other.binding());
+ m_specifiedObject = other.m_specifiedObject;
+ m_specifiedProperty = other.m_specifiedProperty;
+ m_event = other.m_event;
+ m_reverseEvent = other.m_reverseEvent;
+
+ return *this;
+ }
+
+ void setProperty(const QDeclarativeProperty &property)
+ {
+ m_property = property;
+ }
+
+ const QDeclarativeProperty &property() const
+ {
+ return m_property;
+ }
+
+ void setValue(const QVariant &value)
+ {
+ m_value = value;
+ }
+
+ const QVariant &value() const
+ {
+ return m_value;
+ }
+
+ void setBinding(QDeclarativeAbstractBinding *binding)
+ {
+ m_binding = QDeclarativeAbstractBinding::getPointer(binding);
+ }
+
+ QDeclarativeAbstractBinding *binding() const
+ {
+ return m_binding.data();
+ }
+
+ QObject *specifiedObject() const
+ {
+ return m_specifiedObject;
+ }
+
+ const QString &specifiedProperty() const
+ {
+ return m_specifiedProperty;
+ }
+
+ QDeclarativeActionEvent *event() const
+ {
+ return m_event;
+ }
+
+ bool reverseEvent() const
+ {
+ return m_reverseEvent;
+ }
+
+private:
+ QDeclarativeProperty m_property;
+ QVariant m_value;
+ QDeclarativeAbstractBinding::Pointer m_binding;
+ QObject *m_specifiedObject;
+ QString m_specifiedProperty;
+ QDeclarativeActionEvent *m_event;
+ bool m_reverseEvent;
+};
+
+class QDeclarativeStateOperationPrivate : public QObjectPrivate
+{
+ Q_DECLARE_PUBLIC(QDeclarativeStateOperation)
+
+public:
+
+ QDeclarativeStateOperationPrivate()
+ : m_state(0) {}
+
+ QDeclarativeState *m_state;
};
class QDeclarativeStatePrivate : public QObjectPrivate
@@ -122,10 +217,14 @@ public:
static void operations_append(QDeclarativeListProperty<QDeclarativeStateOperation> *prop, QDeclarativeStateOperation *op) {
QList<OperationGuard> *list = static_cast<QList<OperationGuard> *>(prop->data);
+ op->setState(qobject_cast<QDeclarativeState*>(prop->object));
list->append(OperationGuard(op, list));
}
static void operations_clear(QDeclarativeListProperty<QDeclarativeStateOperation> *prop) {
QList<OperationGuard> *list = static_cast<QList<OperationGuard> *>(prop->data);
+ QMutableListIterator<OperationGuard> listIterator(*list);
+ while(listIterator.hasNext())
+ listIterator.next()->setState(0);
list->clear();
}
static int operations_count(QDeclarativeListProperty<QDeclarativeStateOperation> *prop) {
diff --git a/src/declarative/util/qdeclarativestateoperations.cpp b/src/declarative/util/qdeclarativestateoperations.cpp
index 845b3da7af..8cb813c675 100644
--- a/src/declarative/util/qdeclarativestateoperations.cpp
+++ b/src/declarative/util/qdeclarativestateoperations.cpp
@@ -52,6 +52,7 @@
#include "private/qdeclarativecontext_p.h"
#include "private/qdeclarativeproperty_p.h"
#include "private/qdeclarativebinding_p.h"
+#include "private/qdeclarativestate_p_p.h"
#include <QtCore/qdebug.h>
#include <QtGui/qgraphicsitem.h>
@@ -61,7 +62,7 @@
QT_BEGIN_NAMESPACE
-class QDeclarativeParentChangePrivate : public QObjectPrivate
+class QDeclarativeParentChangePrivate : public QDeclarativeStateOperationPrivate
{
Q_DECLARE_PUBLIC(QDeclarativeParentChange)
public:
@@ -98,14 +99,15 @@ void QDeclarativeParentChangePrivate::doChange(QDeclarativeItem *targetParent, Q
qreal scale = 1;
qreal rotation = 0;
- if (ok && transform.type() != QTransform::TxRotate) {
+ bool isRotate = (transform.type() == QTransform::TxRotate) || (transform.m11() < 0);
+ if (ok && !isRotate) {
if (transform.m11() == transform.m22())
scale = transform.m11();
else {
qmlInfo(q) << QDeclarativeParentChange::tr("Unable to preserve appearance under non-uniform scale");
ok = false;
}
- } else if (ok && transform.type() == QTransform::TxRotate) {
+ } else if (ok && isRotate) {
if (transform.m11() == transform.m22())
scale = qSqrt(transform.m11()*transform.m11() + transform.m12()*transform.m12());
else {
@@ -579,7 +581,7 @@ void QDeclarativeParentChange::rewind()
d->doChange(d->rewindParent, d->rewindStackBefore);
}
-class QDeclarativeStateChangeScriptPrivate : public QObjectPrivate
+class QDeclarativeStateChangeScriptPrivate : public QDeclarativeStateOperationPrivate
{
public:
QDeclarativeStateChangeScriptPrivate() {}
@@ -964,7 +966,7 @@ void QDeclarativeAnchorSet::resetCenterIn()
}
-class QDeclarativeAnchorChangesPrivate : public QObjectPrivate
+class QDeclarativeAnchorChangesPrivate : public QDeclarativeStateOperationPrivate
{
public:
QDeclarativeAnchorChangesPrivate()
@@ -1029,6 +1031,11 @@ public:
bool applyOrigVCenter;
bool applyOrigBaseline;
+ QDeclarativeNullableValue<qreal> origWidth;
+ QDeclarativeNullableValue<qreal> origHeight;
+ qreal origX;
+ qreal origY;
+
QList<QDeclarativeAbstractBinding*> oldBindings;
QDeclarativeProperty leftProp;
@@ -1320,6 +1327,42 @@ void QDeclarativeAnchorChanges::reverse(Reason reason)
QDeclarativePropertyPrivate::setBinding(d->vCenterProp, d->origVCenterBinding);
if (d->origBaselineBinding)
QDeclarativePropertyPrivate::setBinding(d->baselineProp, d->origBaselineBinding);
+
+ //restore any absolute geometry changed by the state's anchors
+ QDeclarativeAnchors::Anchors stateVAnchors = d->anchorSet->d_func()->usedAnchors & QDeclarativeAnchors::Vertical_Mask;
+ QDeclarativeAnchors::Anchors origVAnchors = targetPrivate->anchors()->usedAnchors() & QDeclarativeAnchors::Vertical_Mask;
+ QDeclarativeAnchors::Anchors stateHAnchors = d->anchorSet->d_func()->usedAnchors & QDeclarativeAnchors::Horizontal_Mask;
+ QDeclarativeAnchors::Anchors origHAnchors = targetPrivate->anchors()->usedAnchors() & QDeclarativeAnchors::Horizontal_Mask;
+
+ bool stateSetWidth = (stateHAnchors &&
+ stateHAnchors != QDeclarativeAnchors::LeftAnchor &&
+ stateHAnchors != QDeclarativeAnchors::RightAnchor &&
+ stateHAnchors != QDeclarativeAnchors::HCenterAnchor);
+ bool origSetWidth = (origHAnchors &&
+ origHAnchors != QDeclarativeAnchors::LeftAnchor &&
+ origHAnchors != QDeclarativeAnchors::RightAnchor &&
+ origHAnchors != QDeclarativeAnchors::HCenterAnchor);
+ if (d->origWidth.isValid() && stateSetWidth && !origSetWidth)
+ d->target->setWidth(d->origWidth.value);
+
+ bool stateSetHeight = (stateVAnchors &&
+ stateVAnchors != QDeclarativeAnchors::TopAnchor &&
+ stateVAnchors != QDeclarativeAnchors::BottomAnchor &&
+ stateVAnchors != QDeclarativeAnchors::VCenterAnchor &&
+ stateVAnchors != QDeclarativeAnchors::BaselineAnchor);
+ bool origSetHeight = (origVAnchors &&
+ origVAnchors != QDeclarativeAnchors::TopAnchor &&
+ origVAnchors != QDeclarativeAnchors::BottomAnchor &&
+ origVAnchors != QDeclarativeAnchors::VCenterAnchor &&
+ origVAnchors != QDeclarativeAnchors::BaselineAnchor);
+ if (d->origHeight.isValid() && stateSetHeight && !origSetHeight)
+ d->target->setHeight(d->origHeight.value);
+
+ if (stateHAnchors && !origHAnchors)
+ d->target->setX(d->origX);
+
+ if (stateVAnchors && !origVAnchors)
+ d->target->setY(d->origY);
}
QString QDeclarativeAnchorChanges::typeName() const
@@ -1382,6 +1425,14 @@ void QDeclarativeAnchorChanges::saveOriginals()
d->origVCenterBinding = QDeclarativePropertyPrivate::binding(d->vCenterProp);
d->origBaselineBinding = QDeclarativePropertyPrivate::binding(d->baselineProp);
+ QDeclarativeItemPrivate *targetPrivate = QDeclarativeItemPrivate::get(d->target);
+ if (targetPrivate->widthValid)
+ d->origWidth = d->target->width();
+ if (targetPrivate->heightValid)
+ d->origHeight = d->target->height();
+ d->origX = d->target->x();
+ d->origY = d->target->y();
+
d->applyOrigLeft = d->applyOrigRight = d->applyOrigHCenter = d->applyOrigTop
= d->applyOrigBottom = d->applyOrigVCenter = d->applyOrigBaseline = false;
@@ -1414,6 +1465,11 @@ void QDeclarativeAnchorChanges::copyOriginals(QDeclarativeActionEvent *other)
d->origVCenterBinding = acp->origVCenterBinding;
d->origBaselineBinding = acp->origBaselineBinding;
+ d->origWidth = acp->origWidth;
+ d->origHeight = acp->origHeight;
+ d->origX = acp->origX;
+ d->origY = acp->origY;
+
d->oldBindings.clear();
d->oldBindings << acp->leftBinding << acp->rightBinding << acp->hCenterBinding
<< acp->topBinding << acp->bottomBinding << acp->baselineBinding;
diff --git a/src/declarative/util/qdeclarativetransitionmanager.cpp b/src/declarative/util/qdeclarativetransitionmanager.cpp
index d82c4bb89f..89b00440a0 100644
--- a/src/declarative/util/qdeclarativetransitionmanager.cpp
+++ b/src/declarative/util/qdeclarativetransitionmanager.cpp
@@ -86,8 +86,8 @@ void QDeclarativeTransitionManager::complete()
d->applyBindings();
for (int ii = 0; ii < d->completeList.count(); ++ii) {
- const QDeclarativeProperty &prop = d->completeList.at(ii).property;
- prop.write(d->completeList.at(ii).value);
+ const QDeclarativeProperty &prop = d->completeList.at(ii).property();
+ prop.write(d->completeList.at(ii).value());
}
d->completeList.clear();
diff --git a/src/declarative/util/qdeclarativexmllistmodel.cpp b/src/declarative/util/qdeclarativexmllistmodel.cpp
index 905ef1eb53..870a523af0 100644
--- a/src/declarative/util/qdeclarativexmllistmodel.cpp
+++ b/src/declarative/util/qdeclarativexmllistmodel.cpp
@@ -209,8 +209,9 @@ Q_SIGNALS:
protected:
void run() {
+ m_mutex.lock();
+
while (!m_quit) {
- m_mutex.lock();
if (!m_jobs.isEmpty())
m_currentJob = m_jobs.dequeue();
m_mutex.unlock();
@@ -230,12 +231,13 @@ protected:
m_mutex.lock();
if (m_currentJob.queryId != -1 && m_abortQueryId != m_currentJob.queryId)
emit queryCompleted(r);
- if (m_jobs.isEmpty())
+ if (m_jobs.isEmpty() && !m_quit)
m_condition.wait(&m_mutex);
m_currentJob.queryId = -1;
m_abortQueryId = -1;
- m_mutex.unlock();
}
+
+ m_mutex.unlock();
}
private:
diff --git a/src/gui/accessible/qaccessible_win.cpp b/src/gui/accessible/qaccessible_win.cpp
index 132d01fa97..31e7245c61 100644
--- a/src/gui/accessible/qaccessible_win.cpp
+++ b/src/gui/accessible/qaccessible_win.cpp
@@ -76,71 +76,71 @@ QT_END_INCLUDE_NAMESPACE
static const char *roleString(QAccessible::Role role)
{
static const char *roles[] = {
- "NoRole" /*= 0x00000000*/,
- "TitleBar" /*= 0x00000001*/,
- "MenuBar" /*= 0x00000002*/,
- "ScrollBar" /*= 0x00000003*/,
- "Grip" /*= 0x00000004*/,
- "Sound" /*= 0x00000005*/,
- "Cursor" /*= 0x00000006*/,
- "Caret" /*= 0x00000007*/,
- "AlertMessage" /*= 0x00000008*/,
- "Window" /*= 0x00000009*/,
- "Client" /*= 0x0000000A*/,
- "PopupMenu" /*= 0x0000000B*/,
- "MenuItem" /*= 0x0000000C*/,
- "ToolTip" /*= 0x0000000D*/,
- "Application" /*= 0x0000000E*/,
- "Document" /*= 0x0000000F*/,
- "Pane" /*= 0x00000010*/,
- "Chart" /*= 0x00000011*/,
- "Dialog" /*= 0x00000012*/,
- "Border" /*= 0x00000013*/,
- "Grouping" /*= 0x00000014*/,
- "Separator" /*= 0x00000015*/,
- "ToolBar" /*= 0x00000016*/,
- "StatusBar" /*= 0x00000017*/,
- "Table" /*= 0x00000018*/,
- "ColumnHeader" /*= 0x00000019*/,
- "RowHeader" /*= 0x0000001A*/,
- "Column" /*= 0x0000001B*/,
- "Row" /*= 0x0000001C*/,
- "Cell" /*= 0x0000001D*/,
- "Link" /*= 0x0000001E*/,
- "HelpBalloon" /*= 0x0000001F*/,
- "Assistant" /*= 0x00000020*/,
- "List" /*= 0x00000021*/,
- "ListItem" /*= 0x00000022*/,
- "Tree" /*= 0x00000023*/,
- "TreeItem" /*= 0x00000024*/,
- "PageTab" /*= 0x00000025*/,
- "PropertyPage" /*= 0x00000026*/,
- "Indicator" /*= 0x00000027*/,
- "Graphic" /*= 0x00000028*/,
- "StaticText" /*= 0x00000029*/,
- "EditableText" /*= 0x0000002A*/, // Editable, selectable, etc.
- "PushButton" /*= 0x0000002B*/,
- "CheckBox" /*= 0x0000002C*/,
- "RadioButton" /*= 0x0000002D*/,
- "ComboBox" /*= 0x0000002E*/,
- "DropList" /*= 0x0000002F*/, // commented out
- "ProgressBar" /*= 0x00000030*/,
- "Dial" /*= 0x00000031*/,
- "HotkeyField" /*= 0x00000032*/,
- "Slider" /*= 0x00000033*/,
- "SpinBox" /*= 0x00000034*/,
- "Canvas" /*= 0x00000035*/,
- "Animation" /*= 0x00000036*/,
- "Equation" /*= 0x00000037*/,
- "ButtonDropDown" /*= 0x00000038*/,
- "ButtonMenu" /*= 0x00000039*/,
- "ButtonDropGrid" /*= 0x0000003A*/,
- "Whitespace" /*= 0x0000003B*/,
- "PageTabList" /*= 0x0000003C*/,
- "Clock" /*= 0x0000003D*/,
- "Splitter" /*= 0x0000003E*/,
- "LayeredPane" /*= 0x0000003F*/,
- "UserRole" /*= 0x0000ffff*/
+ "NoRole" /* = 0x00000000 */,
+ "TitleBar" /* = 0x00000001 */,
+ "MenuBar" /* = 0x00000002 */,
+ "ScrollBar" /* = 0x00000003 */,
+ "Grip" /* = 0x00000004 */,
+ "Sound" /* = 0x00000005 */,
+ "Cursor" /* = 0x00000006 */,
+ "Caret" /* = 0x00000007 */,
+ "AlertMessage" /* = 0x00000008 */,
+ "Window" /* = 0x00000009 */,
+ "Client" /* = 0x0000000A */,
+ "PopupMenu" /* = 0x0000000B */,
+ "MenuItem" /* = 0x0000000C */,
+ "ToolTip" /* = 0x0000000D */,
+ "Application" /* = 0x0000000E */,
+ "Document" /* = 0x0000000F */,
+ "Pane" /* = 0x00000010 */,
+ "Chart" /* = 0x00000011 */,
+ "Dialog" /* = 0x00000012 */,
+ "Border" /* = 0x00000013 */,
+ "Grouping" /* = 0x00000014 */,
+ "Separator" /* = 0x00000015 */,
+ "ToolBar" /* = 0x00000016 */,
+ "StatusBar" /* = 0x00000017 */,
+ "Table" /* = 0x00000018 */,
+ "ColumnHeader" /* = 0x00000019 */,
+ "RowHeader" /* = 0x0000001A */,
+ "Column" /* = 0x0000001B */,
+ "Row" /* = 0x0000001C */,
+ "Cell" /* = 0x0000001D */,
+ "Link" /* = 0x0000001E */,
+ "HelpBalloon" /* = 0x0000001F */,
+ "Assistant" /* = 0x00000020 */,
+ "List" /* = 0x00000021 */,
+ "ListItem" /* = 0x00000022 */,
+ "Tree" /* = 0x00000023 */,
+ "TreeItem" /* = 0x00000024 */,
+ "PageTab" /* = 0x00000025 */,
+ "PropertyPage" /* = 0x00000026 */,
+ "Indicator" /* = 0x00000027 */,
+ "Graphic" /* = 0x00000028 */,
+ "StaticText" /* = 0x00000029 */,
+ "EditableText" /* = 0x0000002A */, // Editable, selectable, etc.
+ "PushButton" /* = 0x0000002B */,
+ "CheckBox" /* = 0x0000002C */,
+ "RadioButton" /* = 0x0000002D */,
+ "ComboBox" /* = 0x0000002E */,
+ "DropList" /* = 0x0000002F */, // commented out
+ "ProgressBar" /* = 0x00000030 */,
+ "Dial" /* = 0x00000031 */,
+ "HotkeyField" /* = 0x00000032 */,
+ "Slider" /* = 0x00000033 */,
+ "SpinBox" /* = 0x00000034 */,
+ "Canvas" /* = 0x00000035 */,
+ "Animation" /* = 0x00000036 */,
+ "Equation" /* = 0x00000037 */,
+ "ButtonDropDown" /* = 0x00000038 */,
+ "ButtonMenu" /* = 0x00000039 */,
+ "ButtonDropGrid" /* = 0x0000003A */,
+ "Whitespace" /* = 0x0000003B */,
+ "PageTabList" /* = 0x0000003C */,
+ "Clock" /* = 0x0000003D */,
+ "Splitter" /* = 0x0000003E */,
+ "LayeredPane" /* = 0x0000003F */,
+ "UserRole" /* = 0x0000ffff*/
};
if (role >=0x40)
diff --git a/src/gui/dialogs/qfiledialog.cpp b/src/gui/dialogs/qfiledialog.cpp
index a0dca5d719..624610bfb5 100644
--- a/src/gui/dialogs/qfiledialog.cpp
+++ b/src/gui/dialogs/qfiledialog.cpp
@@ -302,7 +302,6 @@ QT_BEGIN_INCLUDE_NAMESPACE
#endif
#include <qshortcut.h>
#ifdef Q_WS_MAC
-#include <private/qunicodetables_p.h>
#include <qmacstyle_mac.h>
#endif
QT_END_INCLUDE_NAMESPACE
diff --git a/src/gui/egl/qegl.cpp b/src/gui/egl/qegl.cpp
index 0419b62d9e..2a8242757e 100644
--- a/src/gui/egl/qegl.cpp
+++ b/src/gui/egl/qegl.cpp
@@ -259,7 +259,7 @@ EGLConfig QEgl::defaultConfig(int devType, API api, ConfigOptions options)
// Add paint engine requirements
if (api == OpenVG) {
-#ifndef QVG_SCISSOR_CLIP
+#if !defined(QVG_SCISSOR_CLIP) && defined(EGL_ALPHA_MASK_SIZE)
configAttribs.setValue(EGL_ALPHA_MASK_SIZE, 1);
#endif
} else {
diff --git a/src/gui/egl/qegl_p.h b/src/gui/egl/qegl_p.h
index c214e8872a..aa08934028 100644
--- a/src/gui/egl/qegl_p.h
+++ b/src/gui/egl/qegl_p.h
@@ -65,6 +65,10 @@ QT_BEGIN_INCLUDE_NAMESPACE
#else
# include <EGL/egl.h>
#endif
+#if !defined(EGL_VERSION_1_2)
+typedef unsigned int EGLenum;
+typedef void *EGLClientBuffer;
+#endif
#else
//types from egltypes.h for compiling stub without EGL headers
diff --git a/src/gui/egl/qeglcontext_p.h b/src/gui/egl/qeglcontext_p.h
index cae8164fcf..5bc8f09d70 100644
--- a/src/gui/egl/qeglcontext_p.h
+++ b/src/gui/egl/qeglcontext_p.h
@@ -107,6 +107,9 @@ private:
static QEglContext *currentContext(QEgl::API api);
static void setCurrentContext(QEgl::API api, QEglContext *context);
+
+ friend class QMeeGoGraphicsSystem;
+ friend class QMeeGoPixmapData;
};
QT_END_NAMESPACE
diff --git a/src/gui/egl/qeglproperties.cpp b/src/gui/egl/qeglproperties.cpp
index 3638de5b37..4b8ca9a5f7 100644
--- a/src/gui/egl/qeglproperties.cpp
+++ b/src/gui/egl/qeglproperties.cpp
@@ -241,8 +241,10 @@ void QEglProperties::setRenderableType(QEgl::API api)
// reductions in complexity are possible.
bool QEglProperties::reduceConfiguration()
{
+#ifdef EGL_SWAP_BEHAVIOR
if (value(EGL_SWAP_BEHAVIOR) != EGL_DONT_CARE)
removeValue(EGL_SWAP_BEHAVIOR);
+#endif
#ifdef EGL_VG_ALPHA_FORMAT_PRE_BIT
// For OpenVG, we sometimes try to create a surface using a pre-multiplied format. If we can't
@@ -258,7 +260,7 @@ bool QEglProperties::reduceConfiguration()
// those with smaller (but faster) lower color depths. One
// way around this is to set EGL_BUFFER_SIZE to 16, which
// trumps the others. Of course, there may not be a 16-bit
- // config avaliable, so it's the first restraint we remove.
+ // config available, so it's the first restraint we remove.
if (value(EGL_BUFFER_SIZE) == 16) {
removeValue(EGL_BUFFER_SIZE);
return true;
diff --git a/src/gui/embedded/qsoundqss_qws.cpp b/src/gui/embedded/qsoundqss_qws.cpp
index 3958cf01ae..c77c35c59c 100644
--- a/src/gui/embedded/qsoundqss_qws.cpp
+++ b/src/gui/embedded/qsoundqss_qws.cpp
@@ -286,7 +286,7 @@ public:
rightVolume = maxVolume>>1;
isPriority = false;
samples_due = 0;
- max1 = max2 = out = 0;//= sound_buffer_size;
+ max1 = max2 = out = 0;// = sound_buffer_size;
data = data1;
max = &max1;
sampleRunin = 0;
diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp
index 58395f5f20..096be63c7d 100644
--- a/src/gui/graphicsview/qgraphicsitem.cpp
+++ b/src/gui/graphicsview/qgraphicsitem.cpp
@@ -1272,37 +1272,40 @@ void QGraphicsItemPrivate::setParentItemHelper(QGraphicsItem *newParent, const Q
Returns the bounding rect of this item's children (excluding itself).
*/
-void QGraphicsItemPrivate::childrenBoundingRectHelper(QTransform *x, QRectF *rect, bool doClip)
+void QGraphicsItemPrivate::childrenBoundingRectHelper(QTransform *x, QRectF *rect, QGraphicsItem *topMostEffectItem)
{
Q_Q(QGraphicsItem);
QRectF childrenRect;
QRectF *result = rect;
rect = &childrenRect;
+ const bool setTopMostEffectItem = !topMostEffectItem;
for (int i = 0; i < children.size(); ++i) {
QGraphicsItem *child = children.at(i);
QGraphicsItemPrivate *childd = child->d_ptr.data();
+ if (setTopMostEffectItem)
+ topMostEffectItem = child;
bool hasPos = !childd->pos.isNull();
if (hasPos || childd->transformData) {
// COMBINE
QTransform matrix = childd->transformToParent();
if (x)
matrix *= *x;
- *rect |= matrix.mapRect(child->d_ptr->effectiveBoundingRect());
+ *rect |= matrix.mapRect(child->d_ptr->effectiveBoundingRect(topMostEffectItem));
if (!childd->children.isEmpty())
- childd->childrenBoundingRectHelper(&matrix, rect);
+ childd->childrenBoundingRectHelper(&matrix, rect, topMostEffectItem);
} else {
if (x)
- *rect |= x->mapRect(child->d_ptr->effectiveBoundingRect());
+ *rect |= x->mapRect(child->d_ptr->effectiveBoundingRect(topMostEffectItem));
else
- *rect |= child->d_ptr->effectiveBoundingRect();
+ *rect |= child->d_ptr->effectiveBoundingRect(topMostEffectItem);
if (!childd->children.isEmpty())
- childd->childrenBoundingRectHelper(x, rect);
+ childd->childrenBoundingRectHelper(x, rect, topMostEffectItem);
}
}
- if (doClip && (flags & QGraphicsItem::ItemClipsChildrenToShape)){
+ if (flags & QGraphicsItem::ItemClipsChildrenToShape){
if (x)
*rect &= x->mapRect(q->boundingRect());
else
@@ -1870,6 +1873,10 @@ void QGraphicsItem::setFlags(GraphicsItemFlags flags)
// Item children clipping changes. Propagate the ancestor flag to
// all children.
d_ptr->updateAncestorFlag(ItemClipsChildrenToShape);
+ // The childrenBoundingRect is clipped to the boundingRect in case of ItemClipsChildrenToShape,
+ // which means we have to invalidate the cached childrenBoundingRect whenever this flag changes.
+ d_ptr->dirtyChildrenBoundingRect = 1;
+ d_ptr->markParentDirty(true);
}
if ((flags & ItemIgnoresTransformations) != (oldFlags & ItemIgnoresTransformations)) {
@@ -2800,6 +2807,8 @@ QRectF QGraphicsItemPrivate::effectiveBoundingRect(const QRectF &rect) const
Q_Q(const QGraphicsItem);
QGraphicsEffect *effect = graphicsEffect;
if (scene && effect && effect->isEnabled()) {
+ if (scene->d_func()->views.isEmpty())
+ return effect->boundingRectFor(rect);
QRectF sceneRect = q->mapRectToScene(rect);
QRectF sceneEffectRect;
foreach (QGraphicsView *view, scene->views()) {
@@ -2823,12 +2832,12 @@ QRectF QGraphicsItemPrivate::effectiveBoundingRect(const QRectF &rect) const
\sa boundingRect()
*/
-QRectF QGraphicsItemPrivate::effectiveBoundingRect() const
+QRectF QGraphicsItemPrivate::effectiveBoundingRect(QGraphicsItem *topMostEffectItem) const
{
#ifndef QT_NO_GRAPHICSEFFECT
Q_Q(const QGraphicsItem);
QRectF brect = effectiveBoundingRect(q_ptr->boundingRect());
- if (ancestorFlags & QGraphicsItemPrivate::AncestorClipsChildren)
+ if (ancestorFlags & QGraphicsItemPrivate::AncestorClipsChildren || topMostEffectItem == q)
return brect;
const QGraphicsItem *effectParent = parent;
@@ -2839,8 +2848,10 @@ QRectF QGraphicsItemPrivate::effectiveBoundingRect() const
const QRectF effectRectInParentSpace = effectParent->d_ptr->effectiveBoundingRect(brectInParentSpace);
brect = effectParent->mapRectToItem(q, effectRectInParentSpace);
}
- if (effectParent->d_ptr->ancestorFlags & QGraphicsItemPrivate::AncestorClipsChildren)
+ if (effectParent->d_ptr->ancestorFlags & QGraphicsItemPrivate::AncestorClipsChildren
+ || topMostEffectItem == effectParent) {
return brect;
+ }
effectParent = effectParent->d_ptr->parent;
}
@@ -4715,7 +4726,7 @@ QRectF QGraphicsItem::childrenBoundingRect() const
return d_ptr->childrenBoundingRect;
d_ptr->childrenBoundingRect = QRectF();
- d_ptr->childrenBoundingRectHelper(0, &d_ptr->childrenBoundingRect);
+ d_ptr->childrenBoundingRectHelper(0, &d_ptr->childrenBoundingRect, 0);
d_ptr->dirtyChildrenBoundingRect = 0;
return d_ptr->childrenBoundingRect;
}
@@ -7676,6 +7687,14 @@ QGraphicsObject *QGraphicsItemPrivate::children_at(QDeclarativeListProperty<QGra
return 0;
}
+void QGraphicsItemPrivate::children_clear(QDeclarativeListProperty<QGraphicsObject> *list)
+{
+ QGraphicsItemPrivate *d = QGraphicsItemPrivate::get(static_cast<QGraphicsObject *>(list->object));
+ int childCount = d->children.count();
+ for (int index = 0; index < childCount; index++)
+ QGraphicsItemPrivate::get(d->children.at(0))->setParentItemHelper(0, /*newParentVariant=*/0, /*thisPointerVariant=*/0);
+}
+
/*!
Returns a list of this item's children.
@@ -7689,7 +7708,7 @@ QDeclarativeListProperty<QGraphicsObject> QGraphicsItemPrivate::childrenList()
if (isObject) {
QGraphicsObject *that = static_cast<QGraphicsObject *>(q);
return QDeclarativeListProperty<QGraphicsObject>(that, &children, children_append,
- children_count, children_at);
+ children_count, children_at, children_clear);
} else {
//QGraphicsItem is not supported for this property
return QDeclarativeListProperty<QGraphicsObject>();
@@ -11166,14 +11185,8 @@ QRectF QGraphicsItemEffectSourcePrivate::boundingRect(Qt::CoordinateSystem syste
}
QRectF rect = item->boundingRect();
- if (!item->d_ptr->children.isEmpty()) {
- if (dirtyChildrenBoundingRect) {
- childrenBoundingRect = QRectF();
- item->d_ptr->childrenBoundingRectHelper(0, &childrenBoundingRect, true);
- dirtyChildrenBoundingRect = false;
- }
- rect |= childrenBoundingRect;
- }
+ if (!item->d_ptr->children.isEmpty())
+ rect |= item->childrenBoundingRect();
if (deviceCoordinates) {
Q_ASSERT(info->painter);
diff --git a/src/gui/graphicsview/qgraphicsitem_p.h b/src/gui/graphicsview/qgraphicsitem_p.h
index d60dffb38c..77e4054cfa 100644
--- a/src/gui/graphicsview/qgraphicsitem_p.h
+++ b/src/gui/graphicsview/qgraphicsitem_p.h
@@ -300,10 +300,10 @@ public:
QDeclarativeListProperty<QGraphicsObject> childrenList();
void setParentItemHelper(QGraphicsItem *parent, const QVariant *newParentVariant,
const QVariant *thisPointerVariant);
- void childrenBoundingRectHelper(QTransform *x, QRectF *rect, bool doClip = true);
+ void childrenBoundingRectHelper(QTransform *x, QRectF *rect, QGraphicsItem *topMostEffectItem);
void initStyleOption(QStyleOptionGraphicsItem *option, const QTransform &worldTransform,
const QRegion &exposedRegion, bool allItems = false) const;
- QRectF effectiveBoundingRect() const;
+ QRectF effectiveBoundingRect(QGraphicsItem *topMostEffectItem = 0) const;
QRectF sceneEffectiveBoundingRect() const;
QRectF effectiveBoundingRect(const QRectF &rect) const;
@@ -487,6 +487,7 @@ public:
static void children_append(QDeclarativeListProperty<QGraphicsObject> *list, QGraphicsObject *item);
static int children_count(QDeclarativeListProperty<QGraphicsObject> *list);
static QGraphicsObject *children_at(QDeclarativeListProperty<QGraphicsObject> *list, int);
+ static void children_clear(QDeclarativeListProperty<QGraphicsObject> *list);
inline QTransform transformToParent() const;
inline void ensureSortedChildren();
@@ -660,7 +661,7 @@ class QGraphicsItemEffectSourcePrivate : public QGraphicsEffectSourcePrivate
{
public:
QGraphicsItemEffectSourcePrivate(QGraphicsItem *i)
- : QGraphicsEffectSourcePrivate(), dirtyChildrenBoundingRect(true), item(i), info(0)
+ : QGraphicsEffectSourcePrivate(), item(i), info(0)
{}
inline void detach()
@@ -711,9 +712,6 @@ public:
QGraphicsEffect::PixmapPadMode mode) const;
QRect paddedEffectRect(Qt::CoordinateSystem system, QGraphicsEffect::PixmapPadMode mode, const QRectF &sourceRect, bool *unpadded = 0) const;
- mutable bool dirtyChildrenBoundingRect;
- mutable QRectF childrenBoundingRect;
-
QGraphicsItem *item;
QGraphicsItemPaintInfo *info;
QTransform lastEffectTransform;
@@ -871,12 +869,9 @@ inline void QGraphicsItemPrivate::markParentDirty(bool updateBoundingRect)
#ifndef QT_NO_GRAPHICSEFFECT
if (parentp->graphicsEffect) {
if (updateBoundingRect) {
- QGraphicsItemEffectSourcePrivate *sourcep =
- static_cast<QGraphicsItemEffectSourcePrivate *>(parentp->graphicsEffect->d_func()
- ->source->d_func());
- parentp->dirtyChildrenBoundingRect = 1;
+ static_cast<QGraphicsItemEffectSourcePrivate *>(parentp->graphicsEffect->d_func()
+ ->source->d_func())->invalidateCache();
parentp->notifyInvalidated = 1;
- sourcep->invalidateCache();
}
if (parentp->scene && parentp->graphicsEffect->isEnabled()) {
parentp->dirty = 1;
diff --git a/src/gui/graphicsview/qgraphicslayoutitem.cpp b/src/gui/graphicsview/qgraphicslayoutitem.cpp
index 23f9923d97..34ec4e048e 100644
--- a/src/gui/graphicsview/qgraphicslayoutitem.cpp
+++ b/src/gui/graphicsview/qgraphicslayoutitem.cpp
@@ -234,7 +234,7 @@ void QGraphicsLayoutItemPrivate::setSize(Qt::SizeHint which, const QSizeF &size)
if (userSizeHints) {
if (size == userSizeHints[which])
return;
- } else if (!size.isValid()) {
+ } else if (size.width() < 0 && size.height() < 0) {
return;
}
diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp
index 99851db155..7cb442f2ae 100644
--- a/src/gui/graphicsview/qgraphicsscene.cpp
+++ b/src/gui/graphicsview/qgraphicsscene.cpp
@@ -4751,7 +4751,7 @@ void QGraphicsScenePrivate::drawSubtreeRecursive(QGraphicsItem *item, QPainter *
ENSURE_TRANSFORM_PTR
QRect viewBoundingRect = translateOnlyTransform ? brect.translated(transformPtr->dx(), transformPtr->dy()).toAlignedRect()
: transformPtr->mapRect(brect).toAlignedRect();
- viewBoundingRect.adjust(-rectAdjust, -rectAdjust, rectAdjust, rectAdjust);
+ viewBoundingRect.adjust(-int(rectAdjust), -int(rectAdjust), rectAdjust, rectAdjust);
if (widget)
item->d_ptr->paintedViewBoundingRects.insert(widget, viewBoundingRect);
drawItem = exposedRegion ? exposedRegion->intersects(viewBoundingRect)
@@ -4984,14 +4984,15 @@ void QGraphicsScenePrivate::markDirty(QGraphicsItem *item, const QRectF &rect, b
return;
}
- bool hasNoContents = item->d_ptr->flags & QGraphicsItem::ItemHasNoContents
- && !item->d_ptr->graphicsEffect;
+ bool hasNoContents = item->d_ptr->flags & QGraphicsItem::ItemHasNoContents;
if (!hasNoContents) {
item->d_ptr->dirty = 1;
if (fullItemUpdate)
item->d_ptr->fullUpdatePending = 1;
else if (!item->d_ptr->fullUpdatePending)
item->d_ptr->needsRepaint |= rect;
+ } else if (item->d_ptr->graphicsEffect) {
+ invalidateChildren = true;
}
if (invalidateChildren) {
@@ -5270,7 +5271,6 @@ void QGraphicsScene::drawItems(QPainter *painter,
if (!d->unpolishedItems.isEmpty())
d->_q_polishItems();
- d->updateAll = false;
QTransform viewTransform = painter->worldTransform();
Q_UNUSED(options);
@@ -5279,6 +5279,7 @@ void QGraphicsScene::drawItems(QPainter *painter,
QRegion *expose = 0;
const quint32 oldRectAdjust = d->rectAdjust;
if (view) {
+ d->updateAll = false;
expose = &view->d_func()->exposedRegion;
if (view->d_func()->optimizationFlags & QGraphicsView::DontAdjustForAntialiasing)
d->rectAdjust = 1;
@@ -6137,7 +6138,7 @@ void QGraphicsScenePrivate::gestureEventHandler(QGestureEvent *event)
<< g << item.data();
}
// remember the first item that received the override event
- // as it most likely become a target if noone else accepts
+ // as it most likely become a target if no one else accepts
// the override event
if (!gestureTargets.contains(g) && item)
gestureTargets.insert(g, item.data());
diff --git a/src/gui/image/qiconloader.cpp b/src/gui/image/qiconloader.cpp
index 34f40a94f0..0ae54fca1b 100644
--- a/src/gui/image/qiconloader.cpp
+++ b/src/gui/image/qiconloader.cpp
@@ -151,7 +151,7 @@ QStringList QIconLoader::themeSearchPaths() const
{
if (m_iconDirs.isEmpty()) {
m_iconDirs = qt_guiPlatformPlugin()->iconThemeSearchPaths();
- // Allways add resource directory as search path
+ // Always add resource directory as search path
m_iconDirs.append(QLatin1String(":/icons"));
}
return m_iconDirs;
@@ -266,7 +266,7 @@ QThemeIconEntries QIconLoader::findIconHelper(const QString &themeName,
PixmapEntry *iconEntry = new PixmapEntry;
iconEntry->dir = dirInfo;
iconEntry->filename = currentDir.filePath(iconName + pngext);
- // Notice we ensure that pixmap entries allways come before
+ // Notice we ensure that pixmap entries always come before
// scalable to preserve search order afterwards
entries.prepend(iconEntry);
} else if (m_supportsSvg &&
diff --git a/src/gui/image/qjpeghandler.cpp b/src/gui/image/qjpeghandler.cpp
index eda5efb9a1..b9eda05fa3 100644
--- a/src/gui/image/qjpeghandler.cpp
+++ b/src/gui/image/qjpeghandler.cpp
@@ -134,15 +134,18 @@ static void qt_init_source(j_decompress_ptr)
static boolean qt_fill_input_buffer(j_decompress_ptr cinfo)
{
my_jpeg_source_mgr* src = (my_jpeg_source_mgr*)cinfo->src;
+ qint64 num_read = 0;
if (src->memDevice) {
src->next_input_byte = (const JOCTET *)(src->memDevice->data().constData() + src->memDevice->pos());
- src->bytes_in_buffer = (size_t)(src->memDevice->data().size() - src->memDevice->pos());
- return true;
+ num_read = src->memDevice->data().size() - src->memDevice->pos();
+ src->device->seek(src->memDevice->data().size());
+ } else {
+ src->next_input_byte = src->buffer;
+ num_read = src->device->read((char*)src->buffer, max_buf);
}
- src->next_input_byte = src->buffer;
- int num_read = src->device->read((char*)src->buffer, max_buf);
if (num_read <= 0) {
// Insert a fake EOI marker - as per jpeglib recommendation
+ src->next_input_byte = src->buffer;
src->buffer[0] = (JOCTET) 0xFF;
src->buffer[1] = (JOCTET) JPEG_EOI;
src->bytes_in_buffer = 2;
@@ -183,13 +186,7 @@ static void qt_term_source(j_decompress_ptr cinfo)
{
my_jpeg_source_mgr* src = (my_jpeg_source_mgr*)cinfo->src;
if (!src->device->isSequential())
- {
- // read() isn't used for memDevice, so seek past everything that was used
- if (src->memDevice)
- src->device->seek(src->device->pos() + (src->memDevice->data().size() - src->memDevice->pos() - src->bytes_in_buffer));
- else
- src->device->seek(src->device->pos() - src->bytes_in_buffer);
- }
+ src->device->seek(src->device->pos() - src->bytes_in_buffer);
}
#if defined(Q_C_CALLBACKS)
@@ -518,29 +515,10 @@ inline my_jpeg_destination_mgr::my_jpeg_destination_mgr(QIODevice *device)
free_in_buffer = max_buf;
}
-static bool can_write_format(QImage::Format fmt)
-{
- switch (fmt) {
- case QImage::Format_Mono:
- case QImage::Format_MonoLSB:
- case QImage::Format_Indexed8:
- case QImage::Format_RGB888:
- case QImage::Format_RGB32:
- case QImage::Format_ARGB32:
- case QImage::Format_ARGB32_Premultiplied:
- return true;
- break;
- default:
- break;
- }
- return false;
-}
-static bool write_jpeg_image(const QImage &sourceImage, QIODevice *device, int sourceQuality)
+static bool write_jpeg_image(const QImage &image, QIODevice *device, int sourceQuality)
{
bool success = false;
- const QImage image = can_write_format(sourceImage.format()) ?
- sourceImage : sourceImage.convertToFormat(QImage::Format_RGB888);
const QVector<QRgb> cmap = image.colorTable();
struct jpeg_compress_struct cinfo;
@@ -617,7 +595,7 @@ static bool write_jpeg_image(const QImage &sourceImage, QIODevice *device, int s
case QImage::Format_Mono:
case QImage::Format_MonoLSB:
if (gray) {
- const uchar* data = image.scanLine(cinfo.next_scanline);
+ const uchar* data = image.constScanLine(cinfo.next_scanline);
if (image.format() == QImage::Format_MonoLSB) {
for (int i=0; i<w; i++) {
bool bit = !!(*(data + (i >> 3)) & (1 << (i & 7)));
@@ -630,7 +608,7 @@ static bool write_jpeg_image(const QImage &sourceImage, QIODevice *device, int s
}
}
} else {
- const uchar* data = image.scanLine(cinfo.next_scanline);
+ const uchar* data = image.constScanLine(cinfo.next_scanline);
if (image.format() == QImage::Format_MonoLSB) {
for (int i=0; i<w; i++) {
bool bit = !!(*(data + (i >> 3)) & (1 << (i & 7)));
@@ -650,13 +628,13 @@ static bool write_jpeg_image(const QImage &sourceImage, QIODevice *device, int s
break;
case QImage::Format_Indexed8:
if (gray) {
- const uchar* pix = image.scanLine(cinfo.next_scanline);
+ const uchar* pix = image.constScanLine(cinfo.next_scanline);
for (int i=0; i<w; i++) {
*row = qRed(cmap[*pix]);
++row; ++pix;
}
} else {
- const uchar* pix = image.scanLine(cinfo.next_scanline);
+ const uchar* pix = image.constScanLine(cinfo.next_scanline);
for (int i=0; i<w; i++) {
*row++ = qRed(cmap[*pix]);
*row++ = qGreen(cmap[*pix]);
@@ -666,12 +644,12 @@ static bool write_jpeg_image(const QImage &sourceImage, QIODevice *device, int s
}
break;
case QImage::Format_RGB888:
- memcpy(row, image.scanLine(cinfo.next_scanline), w * 3);
+ memcpy(row, image.constScanLine(cinfo.next_scanline), w * 3);
break;
case QImage::Format_RGB32:
case QImage::Format_ARGB32:
case QImage::Format_ARGB32_Premultiplied: {
- QRgb* rgb = (QRgb*)image.scanLine(cinfo.next_scanline);
+ const QRgb* rgb = (const QRgb*)image.constScanLine(cinfo.next_scanline);
for (int i=0; i<w; i++) {
*row++ = qRed(*rgb);
*row++ = qGreen(*rgb);
@@ -681,8 +659,12 @@ static bool write_jpeg_image(const QImage &sourceImage, QIODevice *device, int s
break;
}
default:
- qWarning("QJpegHandler: unable to write image of format %i",
- image.format());
+ for (int i=0; i<w; i++) {
+ QRgb pix = image.pixel(i, cinfo.next_scanline);
+ *row++ = qRed(pix);
+ *row++ = qGreen(pix);
+ *row++ = qBlue(pix);
+ }
break;
}
jpeg_write_scanlines(&cinfo, row_pointer, 1);
diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp
index dc38a0a580..fa00e95f3c 100644
--- a/src/gui/image/qpixmap.cpp
+++ b/src/gui/image/qpixmap.cpp
@@ -579,7 +579,7 @@ int QPixmap::height() const
*/
QSize QPixmap::size() const
{
- return data ? QSize(data->width(), data->height()) : QSize();
+ return data ? QSize(data->width(), data->height()) : QSize(0, 0);
}
/*!
@@ -1170,15 +1170,24 @@ QPixmap QPixmap::grabWidget(QWidget * widget, const QRect &rect)
\warning This function is X11 specific; using it is non-portable.
+ \warning Since 4.8, pixmaps do not have an X11 handle unless
+ created with \l {QPixmap::}{fromX11Pixmap()}, or if the native
+ graphics system is explicitly enabled.
+
\sa detach()
+ \sa QApplication::setGraphicsSystem()
*/
Qt::HANDLE QPixmap::handle() const
{
#if defined(Q_WS_X11)
const QPixmapData *pd = pixmapData();
- if (pd && pd->classId() == QPixmapData::X11Class)
- return static_cast<const QX11PixmapData*>(pd)->handle();
+ if (pd) {
+ if (pd->classId() == QPixmapData::X11Class)
+ return static_cast<const QX11PixmapData*>(pd)->handle();
+ else
+ qWarning("QPixmap::handle(): Pixmap is not an X11 class pixmap");
+ }
#endif
return 0;
}
diff --git a/src/gui/image/qpixmapfilter.cpp b/src/gui/image/qpixmapfilter.cpp
index 70770c47ce..26bffcc866 100644
--- a/src/gui/image/qpixmapfilter.cpp
+++ b/src/gui/image/qpixmapfilter.cpp
@@ -764,10 +764,17 @@ void expblur(QImage &img, qreal radius, bool improvedQuality = false, int transp
}
if (transposed == 0) {
- qt_memrotate90(reinterpret_cast<const quint32*>(temp.bits()),
- temp.width(), temp.height(), temp.bytesPerLine(),
- reinterpret_cast<quint32*>(img.bits()),
- img.bytesPerLine());
+ if (img.depth() == 8) {
+ qt_memrotate90(reinterpret_cast<const quint8*>(temp.bits()),
+ temp.width(), temp.height(), temp.bytesPerLine(),
+ reinterpret_cast<quint8*>(img.bits()),
+ img.bytesPerLine());
+ } else {
+ qt_memrotate90(reinterpret_cast<const quint32*>(temp.bits()),
+ temp.width(), temp.height(), temp.bytesPerLine(),
+ reinterpret_cast<quint32*>(img.bits()),
+ img.bytesPerLine());
+ }
} else {
img = temp;
}
diff --git a/src/gui/image/qtiffhandler.cpp b/src/gui/image/qtiffhandler.cpp
index de4f680245..2e8b9988ee 100644
--- a/src/gui/image/qtiffhandler.cpp
+++ b/src/gui/image/qtiffhandler.cpp
@@ -196,9 +196,12 @@ bool QTiffHandler::read(QImage *image)
uint16 bitPerSample;
if (!TIFFGetField(tiff, TIFFTAG_BITSPERSAMPLE, &bitPerSample))
bitPerSample = 1;
+ uint16 samplesPerPixel; // they may be e.g. grayscale with 2 samples per pixel
+ if (!TIFFGetField(tiff, TIFFTAG_SAMPLESPERPIXEL, &samplesPerPixel))
+ samplesPerPixel = 1;
bool grayscale = photometric == PHOTOMETRIC_MINISBLACK || photometric == PHOTOMETRIC_MINISWHITE;
- if (grayscale && bitPerSample == 1) {
+ if (grayscale && bitPerSample == 1 && samplesPerPixel == 1) {
if (image->size() != QSize(width, height) || image->format() != QImage::Format_Mono)
*image = QImage(width, height, QImage::Format_Mono);
QVector<QRgb> colortable(2);
@@ -220,7 +223,7 @@ bool QTiffHandler::read(QImage *image)
}
}
} else {
- if ((grayscale || photometric == PHOTOMETRIC_PALETTE) && bitPerSample == 8) {
+ if ((grayscale || photometric == PHOTOMETRIC_PALETTE) && bitPerSample == 8 && samplesPerPixel == 1) {
if (image->size() != QSize(width, height) || image->format() != QImage::Format_Indexed8)
*image = QImage(width, height, QImage::Format_Indexed8);
if (!image->isNull()) {
diff --git a/src/gui/itemviews/qabstractproxymodel.cpp b/src/gui/itemviews/qabstractproxymodel.cpp
index 4d4b3d83fa..51dfa7a86e 100644
--- a/src/gui/itemviews/qabstractproxymodel.cpp
+++ b/src/gui/itemviews/qabstractproxymodel.cpp
@@ -190,8 +190,12 @@ QItemSelection QAbstractProxyModel::mapSelectionToSource(const QItemSelection &p
{
QModelIndexList proxyIndexes = proxySelection.indexes();
QItemSelection sourceSelection;
- for (int i = 0; i < proxyIndexes.size(); ++i)
- sourceSelection << QItemSelectionRange(mapToSource(proxyIndexes.at(i)));
+ for (int i = 0; i < proxyIndexes.size(); ++i) {
+ const QModelIndex proxyIdx = mapToSource(proxyIndexes.at(i));
+ if (!proxyIdx.isValid())
+ continue;
+ sourceSelection << QItemSelectionRange(proxyIdx);
+ }
return sourceSelection;
}
@@ -204,8 +208,12 @@ QItemSelection QAbstractProxyModel::mapSelectionFromSource(const QItemSelection
{
QModelIndexList sourceIndexes = sourceSelection.indexes();
QItemSelection proxySelection;
- for (int i = 0; i < sourceIndexes.size(); ++i)
- proxySelection << QItemSelectionRange(mapFromSource(sourceIndexes.at(i)));
+ for (int i = 0; i < sourceIndexes.size(); ++i) {
+ const QModelIndex srcIdx = mapFromSource(sourceIndexes.at(i));
+ if (!srcIdx.isValid())
+ continue;
+ proxySelection << QItemSelectionRange(srcIdx);
+ }
return proxySelection;
}
diff --git a/src/gui/itemviews/qsortfilterproxymodel.cpp b/src/gui/itemviews/qsortfilterproxymodel.cpp
index 953a7f1774..dc8d93814f 100644
--- a/src/gui/itemviews/qsortfilterproxymodel.cpp
+++ b/src/gui/itemviews/qsortfilterproxymodel.cpp
@@ -2230,6 +2230,14 @@ void QSortFilterProxyModel::setFilterFixedString(const QString &pattern)
\brief whether the proxy model is dynamically sorted and filtered
whenever the contents of the source model change
+ Note that you should not update the source model through the proxy
+ model when dynamicSortFilter is true. For instance, if you set the
+ proxy model on a QComboBox, then using functions that update the
+ model, e.g., \l{QComboBox::}{addItem()}, will not work as
+ expected. An alternative is to set dynamicSortFilter to false and
+ call \l{QSortFilterProxyModel::}{sort()} after adding items to the
+ QComboBox.
+
The default value is false.
*/
bool QSortFilterProxyModel::dynamicSortFilter() const
diff --git a/src/gui/kernel/qaction.cpp b/src/gui/kernel/qaction.cpp
index a6d2594f6f..f7e07510fc 100644
--- a/src/gui/kernel/qaction.cpp
+++ b/src/gui/kernel/qaction.cpp
@@ -82,8 +82,9 @@ static QString qt_strippedText(QString s)
QActionPrivate::QActionPrivate() : group(0), enabled(1), forceDisabled(0),
visible(1), forceInvisible(0), checkable(0), checked(0), separator(0), fontSet(false),
forceEnabledInSoftkeys(false), menuActionSoftkeys(false),
+ iconVisibleInMenu(-1),
menuRole(QAction::TextHeuristicRole), softKeyRole(QAction::NoSoftKey),
- priority(QAction::NormalPriority), iconVisibleInMenu(-1)
+ priority(QAction::NormalPriority)
{
#ifdef QT3_SUPPORT
static int qt_static_action_id = -1;
diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp
index dd4de2813a..463fe2eb9c 100644
--- a/src/gui/kernel/qapplication.cpp
+++ b/src/gui/kernel/qapplication.cpp
@@ -65,6 +65,7 @@
#include "qcolormap.h"
#include "qdebug.h"
#include "private/qgraphicssystemfactory_p.h"
+#include "private/qgraphicssystem_p.h"
#include "private/qstylesheetstyle_p.h"
#include "private/qstyle_p.h"
#include "qmessagebox.h"
@@ -94,6 +95,10 @@
#include <stdlib.h>
+#if defined(Q_WS_X11) && !defined(QT_NO_EGL)
+#include <link.h>
+#endif
+
#include "qapplication_p.h"
#include "qevent_p.h"
#include "qwidget_p.h"
@@ -490,6 +495,7 @@ bool QApplicationPrivate::fade_tooltip = false;
bool QApplicationPrivate::animate_toolbox = false;
bool QApplicationPrivate::widgetCount = false;
bool QApplicationPrivate::load_testability = false;
+QString QApplicationPrivate::qmljsDebugArguments;
#ifdef QT_KEYPAD_NAVIGATION
# ifdef Q_OS_SYMBIAN
Qt::NavigationMode QApplicationPrivate::navigationMode = Qt::NavigationModeKeypadDirectional;
@@ -561,6 +567,8 @@ void QApplicationPrivate::process_cmdline()
QString s;
if (arg == "-qdevel" || arg == "-qdebug") {
// obsolete argument
+ } else if (arg.indexOf("-qmljsdebugger=", 0) != -1) {
+ qmljsDebugArguments = QString::fromLocal8Bit(arg.right(arg.length() - 15));
} else if (arg.indexOf("-style=", 0) != -1) {
s = QString::fromLocal8Bit(arg.right(arg.length() - 7).toLower());
} else if (arg == "-style" && i < argc-1) {
@@ -666,6 +674,9 @@ void QApplicationPrivate::process_cmdline()
Qt::RightToLeft
\o -graphicssystem, sets the backend to be used for on-screen widgets
and QPixmaps. Available options are \c{raster} and \c{opengl}.
+ \o -qmljsdebugger=, activates the QML/JS debugger with a specified port.
+ The value must be of format port:1234[,block], where block is optional
+ and will make the application wait until a debugger connects to it.
\endlist
The X11 version of Qt supports some traditional X11 command line options:
@@ -769,6 +780,13 @@ QApplication::QApplication(int &argc, char **argv, Type type , int _internal)
: QCoreApplication(*new QApplicationPrivate(argc, argv, type, _internal))
{ Q_D(QApplication); d->construct(); }
+#if defined(Q_WS_X11) && !defined(QT_NO_EGL)
+static int qt_matchLibraryName(dl_phdr_info *info, size_t, void *data)
+{
+ const char *name = static_cast<const char *>(data);
+ return strstr(info->dlpi_name, name) != 0;
+}
+#endif
/*!
\internal
@@ -787,6 +805,19 @@ void QApplicationPrivate::construct(
// the environment variable has the lowest precedence of runtime graphicssystem switches
if (graphics_system_name.isEmpty())
graphics_system_name = QString::fromLocal8Bit(qgetenv("QT_GRAPHICSSYSTEM"));
+
+#if defined(Q_WS_X11) && !defined(QT_NO_EGL)
+ if (graphics_system_name.isEmpty()) {
+ bool linksWithMeeGoTouch = dl_iterate_phdr(qt_matchLibraryName, const_cast<char *>("libmeegotouchcore"));
+ bool linksWithMeeGoGraphicsSystemHelper = dl_iterate_phdr(qt_matchLibraryName, const_cast<char *>("libQtMeeGoGraphicsSystemHelper"));
+
+ if (linksWithMeeGoTouch && !linksWithMeeGoGraphicsSystemHelper) {
+ qWarning("Running non-meego graphics system enabled MeeGo touch, forcing native graphicssystem\n");
+ graphics_system_name = QLatin1String("native");
+ }
+ }
+#endif
+
// Must be called before initialize()
qt_init(this, qt_appType
#ifdef Q_WS_X11
@@ -1119,6 +1150,8 @@ QApplication::~QApplication()
QApplicationPrivate::app_style = 0;
delete QApplicationPrivate::app_icon;
QApplicationPrivate::app_icon = 0;
+ delete QApplicationPrivate::graphics_system;
+ QApplicationPrivate::graphics_system = 0;
#ifndef QT_NO_CURSOR
d->cursor_list.clear();
#endif
@@ -4352,11 +4385,13 @@ bool QApplication::notify(QObject *receiver, QEvent *e)
eventAccepted = ge.isAccepted();
for (int i = 0; i < gestures.size(); ++i) {
QGesture *g = gestures.at(i);
- if ((res && eventAccepted) || (!eventAccepted && ge.isAccepted(g))) {
+ // Ignore res [event return value] because handling of multiple gestures
+ // packed into a single QEvent depends on not consuming the event
+ if (eventAccepted || ge.isAccepted(g)) {
// if the gesture was accepted, mark the target widget for it
gestureEvent->d_func()->targetWidgets[g->gestureType()] = w;
gestureEvent->setAccepted(g, true);
- } else if (!eventAccepted && !ge.isAccepted(g)) {
+ } else {
// if the gesture was explicitly ignored by the application,
// put it back so a parent can get it
allGestures.append(g);
diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h
index 9c78370d6a..9f675e3cbf 100644
--- a/src/gui/kernel/qapplication_p.h
+++ b/src/gui/kernel/qapplication_p.h
@@ -464,6 +464,8 @@ public:
static bool animate_toolbox;
static bool widgetCount; // Coupled with -widgetcount switch
static bool load_testability; // Coupled with -testability switch
+ static QString qmljsDebugArguments; // a string containing arguments for js/qml debugging.
+
#ifdef Q_WS_MAC
static bool native_modal_dialog_active;
#endif
@@ -568,12 +570,12 @@ public:
#ifndef QT_NO_GESTURES
QGestureManager *gestureManager;
QWidget *gestureWidget;
+#endif
#if defined(Q_WS_X11) || defined(Q_WS_WIN)
QPixmap *move_cursor;
QPixmap *copy_cursor;
QPixmap *link_cursor;
#endif
-#endif
#if defined(Q_WS_WIN)
QPixmap *ignore_cursor;
#endif
diff --git a/src/gui/kernel/qapplication_x11.cpp b/src/gui/kernel/qapplication_x11.cpp
index cb36b4596d..d9056395a8 100644
--- a/src/gui/kernel/qapplication_x11.cpp
+++ b/src/gui/kernel/qapplication_x11.cpp
@@ -74,7 +74,6 @@
#include "qevent_p.h"
#include "qvarlengtharray.h"
#include "qdebug.h"
-#include <private/qunicodetables_p.h>
#include <private/qcrashhandler_p.h>
#include <private/qcolor_p.h>
#include <private/qcursor_p.h>
@@ -400,11 +399,39 @@ QTabletDeviceDataList *qt_tablet_devices()
extern bool qt_tabletChokeMouse;
#endif
+typedef bool(*QX11FilterFunction)(XEvent *event);
+
+Q_GLOBAL_STATIC(QList<QX11FilterFunction>, x11Filters)
+
+Q_GUI_EXPORT void qt_installX11EventFilter(QX11FilterFunction func)
+{
+ Q_ASSERT(func);
+
+ if (QList<QX11FilterFunction> *list = x11Filters())
+ list->append(func);
+}
+
+Q_GUI_EXPORT void qt_removeX11EventFilter(QX11FilterFunction func)
+{
+ Q_ASSERT(func);
+
+ if (QList<QX11FilterFunction> *list = x11Filters())
+ list->removeOne(func);
+}
+
+
static bool qt_x11EventFilter(XEvent* ev)
{
long unused;
if (qApp->filterEvent(ev, &unused))
return true;
+ if (const QList<QX11FilterFunction> *list = x11Filters()) {
+ for (QList<QX11FilterFunction>::const_iterator it = list->constBegin(); it != list->constEnd(); ++it) {
+ if ((*it)(ev))
+ return true;
+ }
+ }
+
return qApp->x11EventFilter(ev);
}
diff --git a/src/gui/kernel/qcocoaapplication_mac.mm b/src/gui/kernel/qcocoaapplication_mac.mm
index 9270213279..1b30efd597 100644
--- a/src/gui/kernel/qcocoaapplication_mac.mm
+++ b/src/gui/kernel/qcocoaapplication_mac.mm
@@ -183,6 +183,17 @@ QT_USE_NAMESPACE
[super sendEvent:event];
}
+- (void)qtDispatcherToQAction:(id)sender
+{
+ // Forward actions sendt from the menu bar (e.g. quit) to the menu loader.
+ // Having this method here means that we are the last stop in the responder
+ // chain, and that we are able to handle menu actions even when no window is
+ // visible on screen. Note: If Qt is used as a plugin, Qt will not use a
+ // native menu bar. Hence, we will also not need to do any redirection etc. as
+ // we do with sendEvent.
+ [[NSApp QT_MANGLE_NAMESPACE(qt_qcocoamenuLoader)] qtDispatcherToQAction:sender];
+}
+
@end
QT_BEGIN_NAMESPACE
diff --git a/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h b/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h
index 970bc0aeea..efe045c4a5 100644
--- a/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h
+++ b/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h
@@ -136,16 +136,6 @@ QT_END_NAMESPACE
qt_dispatchTabletProximityEvent(tabletEvent);
}
-- (void)qtDispatcherToQAction:(id)sender
-{
- // If this window is modal, the menu bar will be modally shaddowed.
- // In that case, since the window will be in the first responder chain,
- // we can still catch the trigger here and forward it to the menu bar.
- // This is needed as a single modal dialog on Qt should be able to access
- // the application menu (e.g. quit).
- [[NSApp QT_MANGLE_NAMESPACE(qt_qcocoamenuLoader)] qtDispatcherToQAction:sender];
-}
-
- (void)terminate:(id)sender
{
// This function is called from the quit item in the menubar when this window
diff --git a/src/gui/kernel/qgesture.cpp b/src/gui/kernel/qgesture.cpp
index 13274c4630..5725a228a0 100644
--- a/src/gui/kernel/qgesture.cpp
+++ b/src/gui/kernel/qgesture.cpp
@@ -775,4 +775,6 @@ int QTapAndHoldGesturePrivate::Timeout = 700; // in ms
QT_END_NAMESPACE
+#include <moc_qgesture.cpp>
+
#endif // QT_NO_GESTURES
diff --git a/src/gui/kernel/qgesture.h b/src/gui/kernel/qgesture.h
index dcb02648a1..841670817d 100644
--- a/src/gui/kernel/qgesture.h
+++ b/src/gui/kernel/qgesture.h
@@ -54,6 +54,7 @@
QT_BEGIN_HEADER
Q_DECLARE_METATYPE(Qt::GestureState)
+Q_DECLARE_METATYPE(Qt::GestureType)
QT_BEGIN_NAMESPACE
@@ -112,6 +113,8 @@ class Q_GUI_EXPORT QPanGesture : public QGesture
Q_PROPERTY(QPointF offset READ offset WRITE setOffset)
Q_PROPERTY(QPointF delta READ delta STORED false)
Q_PROPERTY(qreal acceleration READ acceleration WRITE setAcceleration)
+ Q_PRIVATE_PROPERTY(QPanGesture::d_func(), qreal horizontalVelocity READ horizontalVelocity WRITE setHorizontalVelocity)
+ Q_PRIVATE_PROPERTY(QPanGesture::d_func(), qreal verticalVelocity READ verticalVelocity WRITE setVerticalVelocity)
public:
QPanGesture(QObject *parent = 0);
@@ -210,6 +213,7 @@ class Q_GUI_EXPORT QSwipeGesture : public QGesture
Q_PROPERTY(SwipeDirection horizontalDirection READ horizontalDirection STORED false)
Q_PROPERTY(SwipeDirection verticalDirection READ verticalDirection STORED false)
Q_PROPERTY(qreal swipeAngle READ swipeAngle WRITE setSwipeAngle)
+ Q_PRIVATE_PROPERTY(QSwipeGesture::d_func(), qreal velocity READ velocity WRITE setVelocity)
public:
enum SwipeDirection { NoDirection, Left, Right, Up, Down };
diff --git a/src/gui/kernel/qgesture_p.h b/src/gui/kernel/qgesture_p.h
index 29b923e156..6a856acee6 100644
--- a/src/gui/kernel/qgesture_p.h
+++ b/src/gui/kernel/qgesture_p.h
@@ -88,14 +88,21 @@ class QPanGesturePrivate : public QGesturePrivate
public:
QPanGesturePrivate()
- : acceleration(0)
+ : acceleration(0), xVelocity(0), yVelocity(0)
{
}
+ qreal horizontalVelocity() const { return xVelocity; }
+ void setHorizontalVelocity(qreal value) { xVelocity = value; }
+ qreal verticalVelocity() const { return yVelocity; }
+ void setVerticalVelocity(qreal value) { yVelocity = value; }
+
QPointF lastOffset;
QPointF offset;
QPoint startPosition;
qreal acceleration;
+ qreal xVelocity;
+ qreal yVelocity;
};
class QPinchGesturePrivate : public QGesturePrivate
@@ -105,7 +112,7 @@ class QPinchGesturePrivate : public QGesturePrivate
public:
QPinchGesturePrivate()
: totalChangeFlags(0), changeFlags(0),
- totalScaleFactor(0), lastScaleFactor(0), scaleFactor(0),
+ totalScaleFactor(1), lastScaleFactor(1), scaleFactor(1),
totalRotationAngle(0), lastRotationAngle(0), rotationAngle(0),
isNewSequence(true)
{
@@ -139,17 +146,20 @@ public:
: horizontalDirection(QSwipeGesture::NoDirection),
verticalDirection(QSwipeGesture::NoDirection),
swipeAngle(0),
- started(false), speed(0)
+ started(false), velocityValue(0)
{
}
+ qreal velocity() const { return velocityValue; }
+ void setVelocity(qreal value) { velocityValue = value; }
+
QSwipeGesture::SwipeDirection horizontalDirection;
QSwipeGesture::SwipeDirection verticalDirection;
qreal swipeAngle;
QPoint lastPositions[3];
bool started;
- qreal speed;
+ qreal velocityValue;
QElapsedTimer time;
};
diff --git a/src/gui/kernel/qgesturemanager.cpp b/src/gui/kernel/qgesturemanager.cpp
index 5c8034082e..8dd2db75ee 100644
--- a/src/gui/kernel/qgesturemanager.cpp
+++ b/src/gui/kernel/qgesturemanager.cpp
@@ -184,7 +184,7 @@ void QGestureManager::cleanupCachedGestures(QObject *target, Qt::GestureType typ
// get or create a QGesture object that will represent the state for a given object, used by the recognizer
QGesture *QGestureManager::getState(QObject *object, QGestureRecognizer *recognizer, Qt::GestureType type)
{
- // if the widget is being deleted we should be carefull and not to
+ // if the widget is being deleted we should be careful not to
// create a new state, as it will create QWeakPointer which doesnt work
// from the destructor.
if (object->isWidgetType()) {
@@ -239,52 +239,53 @@ bool QGestureManager::filterEventThroughContexts(const QMultiMap<QObject *,
// TODO: sort contexts by the gesture type and check if one of the contexts
// is already active.
- bool ret = false;
+ bool consumeEventHint = false;
// filter the event through recognizers
typedef QMultiMap<QObject *, Qt::GestureType>::const_iterator ContextIterator;
- for (ContextIterator cit = contexts.begin(), ce = contexts.end(); cit != ce; ++cit) {
- Qt::GestureType gestureType = cit.value();
+ ContextIterator contextEnd = contexts.end();
+ for (ContextIterator context = contexts.begin(); context != contextEnd; ++context) {
+ Qt::GestureType gestureType = context.value();
QMap<Qt::GestureType, QGestureRecognizer *>::const_iterator
- rit = m_recognizers.lowerBound(gestureType),
- re = m_recognizers.upperBound(gestureType);
- for (; rit != re; ++rit) {
- QGestureRecognizer *recognizer = rit.value();
- QObject *target = cit.key();
+ typeToRecognizerIterator = m_recognizers.lowerBound(gestureType),
+ typeToRecognizerEnd = m_recognizers.upperBound(gestureType);
+ for (; typeToRecognizerIterator != typeToRecognizerEnd; ++typeToRecognizerIterator) {
+ QGestureRecognizer *recognizer = typeToRecognizerIterator.value();
+ QObject *target = context.key();
QGesture *state = getState(target, recognizer, gestureType);
if (!state)
continue;
- QGestureRecognizer::Result result = recognizer->recognize(state, target, event);
- QGestureRecognizer::Result type = result & QGestureRecognizer::ResultState_Mask;
- result &= QGestureRecognizer::ResultHint_Mask;
- if (type == QGestureRecognizer::TriggerGesture) {
+ QGestureRecognizer::Result recognizerResult = recognizer->recognize(state, target, event);
+ QGestureRecognizer::Result recognizerState = recognizerResult & QGestureRecognizer::ResultState_Mask;
+ QGestureRecognizer::Result resultHint = recognizerResult & QGestureRecognizer::ResultHint_Mask;
+ if (recognizerState == QGestureRecognizer::TriggerGesture) {
DEBUG() << "QGestureManager:Recognizer: gesture triggered: " << state;
triggeredGestures << state;
- } else if (type == QGestureRecognizer::FinishGesture) {
+ } else if (recognizerState == QGestureRecognizer::FinishGesture) {
DEBUG() << "QGestureManager:Recognizer: gesture finished: " << state;
finishedGestures << state;
- } else if (type == QGestureRecognizer::MayBeGesture) {
+ } else if (recognizerState == QGestureRecognizer::MayBeGesture) {
DEBUG() << "QGestureManager:Recognizer: maybe gesture: " << state;
newMaybeGestures << state;
- } else if (type == QGestureRecognizer::CancelGesture) {
+ } else if (recognizerState == QGestureRecognizer::CancelGesture) {
DEBUG() << "QGestureManager:Recognizer: not gesture: " << state;
notGestures << state;
- } else if (type == QGestureRecognizer::Ignore) {
+ } else if (recognizerState == QGestureRecognizer::Ignore) {
DEBUG() << "QGestureManager:Recognizer: ignored the event: " << state;
} else {
DEBUG() << "QGestureManager:Recognizer: hm, lets assume the recognizer"
<< "ignored the event: " << state;
}
- if (result & QGestureRecognizer::ConsumeEventHint) {
+ if (resultHint & QGestureRecognizer::ConsumeEventHint) {
DEBUG() << "QGestureManager: we were asked to consume the event: "
<< state;
- ret = true;
+ consumeEventHint = true;
}
}
}
if (triggeredGestures.isEmpty() && finishedGestures.isEmpty()
&& newMaybeGestures.isEmpty() && notGestures.isEmpty())
- return ret;
+ return consumeEventHint;
QSet<QGesture *> startedGestures = triggeredGestures - m_activeGestures;
triggeredGestures &= m_activeGestures;
@@ -381,7 +382,7 @@ bool QGestureManager::filterEventThroughContexts(const QMultiMap<QObject *,
recycle(gesture);
m_gestureTargets.remove(gesture);
}
- return ret;
+ return consumeEventHint;
}
// Cancel all gestures of children of the widget that original is associated with
diff --git a/src/gui/kernel/qkeysequence.cpp b/src/gui/kernel/qkeysequence.cpp
index 562227acf6..e14a9198a6 100644
--- a/src/gui/kernel/qkeysequence.cpp
+++ b/src/gui/kernel/qkeysequence.cpp
@@ -590,7 +590,7 @@ static const struct {
//: Button that will hang up if we're in call, or make a call if we're not.
{ Qt::Key_ToggleCallHangup, QT_TRANSLATE_NOOP("QShortcut", "Toggle Call/Hangup") },
{ Qt::Key_Flip, QT_TRANSLATE_NOOP("QShortcut", "Flip") },
- //: Button to trigger voice dialling
+ //: Button to trigger voice dialing
{ Qt::Key_VoiceDial, QT_TRANSLATE_NOOP("QShortcut", "Voice Dial") },
//: Button to redial the last number called
{ Qt::Key_LastNumberRedial, QT_TRANSLATE_NOOP("QShortcut", "Last Number Redial") },
diff --git a/src/gui/kernel/qstandardgestures.cpp b/src/gui/kernel/qstandardgestures.cpp
index 127e150979..893ba2b282 100644
--- a/src/gui/kernel/qstandardgestures.cpp
+++ b/src/gui/kernel/qstandardgestures.cpp
@@ -199,6 +199,7 @@ QGestureRecognizer::Result QPinchGestureRecognizer::recognize(QGesture *state,
d->startPosition[1] = p2.screenPos();
}
QLineF line(p1.screenPos(), p2.screenPos());
+ QLineF lastLine(p1.lastScreenPos(), p2.lastScreenPos());
QLineF tmp(line);
tmp.setLength(line.length() / 2.);
QPointF centerPoint = tmp.p2();
@@ -207,16 +208,15 @@ QGestureRecognizer::Result QPinchGestureRecognizer::recognize(QGesture *state,
d->centerPoint = centerPoint;
d->changeFlags |= QPinchGesture::CenterPointChanged;
- const qreal scaleFactor =
- QLineF(p1.screenPos(), p2.screenPos()).length()
- / QLineF(d->startPosition[0], d->startPosition[1]).length();
+ const qreal scaleFactor = line.length() / lastLine.length();
+
if (d->isNewSequence) {
d->lastScaleFactor = scaleFactor;
} else {
d->lastScaleFactor = d->scaleFactor;
}
d->scaleFactor = scaleFactor;
- d->totalScaleFactor += d->scaleFactor - d->lastScaleFactor;
+ d->totalScaleFactor = d->totalScaleFactor * scaleFactor;
d->changeFlags |= QPinchGesture::ScaleFactorChanged;
qreal angle = QLineF(p1.screenPos(), p2.screenPos()).angle();
@@ -266,7 +266,7 @@ void QPinchGestureRecognizer::reset(QGesture *state)
d->totalChangeFlags = d->changeFlags = 0;
d->startCenterPoint = d->lastCenterPoint = d->centerPoint = QPointF();
- d->totalScaleFactor = d->lastScaleFactor = d->scaleFactor = 0;
+ d->totalScaleFactor = d->lastScaleFactor = d->scaleFactor = 1;
d->totalRotationAngle = d->lastRotationAngle = d->rotationAngle = 0;
d->isNewSequence = true;
@@ -304,7 +304,7 @@ QGestureRecognizer::Result QSwipeGestureRecognizer::recognize(QGesture *state,
switch (event->type()) {
case QEvent::TouchBegin: {
- d->speed = 1;
+ d->velocityValue = 1;
d->time.start();
d->started = true;
result = QGestureRecognizer::MayBeGesture;
@@ -345,7 +345,7 @@ QGestureRecognizer::Result QSwipeGestureRecognizer::recognize(QGesture *state,
int elapsedTime = d->time.restart();
if (!elapsedTime)
elapsedTime = 1;
- d->speed = 0.9 * d->speed + distance / elapsedTime;
+ d->velocityValue = 0.9 * d->velocityValue + distance / elapsedTime;
d->swipeAngle = QLineF(p1.startScreenPos(), p1.screenPos()).angle();
static const int MoveThreshold = 50;
@@ -407,7 +407,7 @@ void QSwipeGestureRecognizer::reset(QGesture *state)
d->lastPositions[0] = d->lastPositions[1] = d->lastPositions[2] = QPoint();
d->started = false;
- d->speed = 0;
+ d->velocityValue = 0;
d->time.invalidate();
QGestureRecognizer::reset(state);
diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp
index 00fd9d4e85..cd48ca37b1 100644
--- a/src/gui/kernel/qwidget.cpp
+++ b/src/gui/kernel/qwidget.cpp
@@ -1199,7 +1199,7 @@ void QWidgetPrivate::adjustFlags(Qt::WindowFlags &flags, QWidget *w)
flags |= Qt::WindowTitleHint;
}
if (customize)
- ; // don't modify window flags if the user explicitely set them.
+ ; // don't modify window flags if the user explicitly set them.
else if (type == Qt::Dialog || type == Qt::Sheet)
#ifndef Q_WS_WINCE
flags |= Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowContextHelpButtonHint | Qt::WindowCloseButtonHint;
@@ -7514,7 +7514,7 @@ void QWidgetPrivate::hide_helper()
A hidden widget will only become visible when show() is called on
it. It will not be automatically shown when the parent is shown.
- To check visiblity, use !isVisible() instead (notice the exclamation mark).
+ To check visibility, use !isVisible() instead (notice the exclamation mark).
isHidden() implies !isVisible(), but a widget can be not visible
and not hidden at the same time. This is the case for widgets that are children of
@@ -11129,7 +11129,7 @@ void QWidget::updateMicroFocus()
{
#if !defined(QT_NO_IM) && (defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN))
Q_D(QWidget);
- // and optimisation to update input context only it has already been created.
+ // and optimization to update input context only it has already been created.
if (d->ic || qApp->d_func()->inputContext) {
QInputContext *ic = inputContext();
if (ic)
@@ -11874,8 +11874,8 @@ QWidget *QWidgetPrivate::widgetInNavigationDirection(Direction direction)
Tells us if it there is currently a reachable widget by keypad navigation in
a certain \a orientation.
- If no navigation is possible, occuring key events in that \a orientation may
- be used to interact with the value in the focussed widget, even though it
+ If no navigation is possible, occurring key events in that \a orientation may
+ be used to interact with the value in the focused widget, even though it
currently has not the editFocus.
\sa QWidgetPrivate::widgetInNavigationDirection(), QWidget::hasEditFocus()
@@ -11895,7 +11895,7 @@ bool QWidgetPrivate::canKeypadNavigate(Qt::Orientation orientation)
one, left/right key events will be used to switch between tabs in keypad
navigation. If there is no QTabWidget, the horizontal key events can be used
to
- interact with the value in the focussed widget, even though it currently has
+ interact with the value in the focused widget, even though it currently has
not the editFocus.
\sa QWidget::hasEditFocus()
diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm
index ef7e1d3ec7..5e41efa42e 100644
--- a/src/gui/kernel/qwidget_mac.mm
+++ b/src/gui/kernel/qwidget_mac.mm
@@ -114,6 +114,9 @@
QT_BEGIN_NAMESPACE
+// qmainwindow.cpp
+extern QMainWindowLayout *qt_mainwindow_layout(const QMainWindow *window);
+
#define XCOORD_MAX 16383
#define WRECT_MAX 8191
@@ -2375,7 +2378,8 @@ void QWidgetPrivate::recreateMacWindow()
HIViewRemoveFromSuperview(myView);
determineWindowClass();
createWindow_sys();
- if (QMainWindowLayout *mwl = qobject_cast<QMainWindowLayout *>(q->layout())) {
+
+ if (QMainWindowLayout *mwl = qt_mainwindow_layout(qobject_cast<QMainWindow *>(q))) {
mwl->updateHIToolBarStatus();
}
@@ -2912,7 +2916,7 @@ void QWidgetPrivate::setParent_sys(QWidget *parent, Qt::WindowFlags f)
// We do this down below for wasCreated, so avoid doing this twice
// (only for performance, it gets called a lot anyway).
if (!wasCreated) {
- if (QMainWindowLayout *mwl = qobject_cast<QMainWindowLayout *>(q->layout())) {
+ if (QMainWindowLayout *mwl = qt_mainwindow_layout(qobject_cast<QMainWindow *>(q))) {
mwl->updateHIToolBarStatus();
}
}
@@ -2937,7 +2941,7 @@ void QWidgetPrivate::setParent_sys(QWidget *parent, Qt::WindowFlags f)
// If we were a unified window, We just transfered our toolbars out of the unified toolbar.
// So redo the status one more time. It apparently is not an issue with Cocoa.
if (q->isWindow()) {
- if (QMainWindowLayout *mwl = qobject_cast<QMainWindowLayout *>(q->layout())) {
+ if (QMainWindowLayout *mwl = qt_mainwindow_layout(qobject_cast<QMainWindow *>(q))) {
mwl->updateHIToolBarStatus();
}
}
@@ -5138,7 +5142,7 @@ void QWidgetPrivate::macUpdateMetalAttribute()
return;
recreateMacWindow();
#else
- QMainWindowLayout *layout = qobject_cast<QMainWindowLayout *>(q->layout());
+ QMainWindowLayout *layout = qt_mainwindow_layout(qobject_cast<QMainWindow *>(q));
if (q->testAttribute(Qt::WA_MacBrushedMetal)) {
if (layout)
layout->updateHIToolBarStatus();
diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp
index 04104fae3f..91e74b558d 100644
--- a/src/gui/kernel/qwidget_s60.cpp
+++ b/src/gui/kernel/qwidget_s60.cpp
@@ -522,7 +522,7 @@ void QWidgetPrivate::show_sys()
if (q->windowState() & Qt::WindowMaximized) {
TRect r = static_cast<CEikAppUi*>(S60->appUi())->ClientRect();
id->SetExtent(r.iTl, r.Size());
- } else if (!q->testAttribute(Qt::WA_Moved)) {
+ } else if (!q->testAttribute(Qt::WA_Moved) && q->windowType() != Qt::Dialog) {
id->SetPosition(static_cast<CEikAppUi*>(S60->appUi())->ClientRect().iTl);
}
}
diff --git a/src/gui/painting/qbezier.cpp b/src/gui/painting/qbezier.cpp
index 2a9b31a549..54c81ba3cf 100644
--- a/src/gui/painting/qbezier.cpp
+++ b/src/gui/painting/qbezier.cpp
@@ -293,36 +293,6 @@ static ShiftResult good_offset(const QBezier *b1, const QBezier *b2, qreal offse
return Ok;
}
-static inline QLineF qline_shifted(const QPointF &p1, const QPointF &p2, qreal offset)
-{
- QLineF l(p1, p2);
- QLineF ln = l.normalVector().unitVector();
- l.translate(ln.dx() * offset, ln.dy() * offset);
- return l;
-}
-
-static bool qbezier_is_line(QPointF *points, int pointCount)
-{
- Q_ASSERT(pointCount > 2);
-
- qreal dx13 = points[2].x() - points[0].x();
- qreal dy13 = points[2].y() - points[0].y();
-
- qreal dx12 = points[1].x() - points[0].x();
- qreal dy12 = points[1].y() - points[0].y();
-
- if (pointCount == 3) {
- return qFuzzyCompare(dx12 * dy13, dx13 * dy12);
- } else if (pointCount == 4) {
- qreal dx14 = points[3].x() - points[0].x();
- qreal dy14 = points[3].y() - points[0].y();
-
- return (qFuzzyCompare(dx12 * dy13, dx13 * dy12) && qFuzzyCompare(dx12 * dy14, dx14 * dy12));
- }
-
- return false;
-}
-
static ShiftResult shift(const QBezier *orig, QBezier *shifted, qreal offset, qreal threshold)
{
int map[4];
@@ -353,17 +323,6 @@ static ShiftResult shift(const QBezier *orig, QBezier *shifted, qreal offset, qr
if (np == 1)
return Discard;
- // We need to specialcase lines of 3 or 4 points due to numerical
- // instability in intersections below
- if (np > 2 && qbezier_is_line(points, np)) {
- if (points[0] == points[np-1])
- return Discard;
-
- QLineF l = qline_shifted(points[0], points[np-1], offset);
- *shifted = QBezier::fromPoints(l.p1(), l.pointAt(qreal(0.33)), l.pointAt(qreal(0.66)), l.p2());
- return Ok;
- }
-
QRectF b = orig->bounds();
if (np == 4 && b.width() < .1*offset && b.height() < .1*offset) {
qreal l = (orig->x1 - orig->x2)*(orig->x1 - orig->x2) +
diff --git a/src/gui/painting/qblendfunctions.cpp b/src/gui/painting/qblendfunctions.cpp
index 0edf256315..e0c2d16d8c 100644
--- a/src/gui/painting/qblendfunctions.cpp
+++ b/src/gui/painting/qblendfunctions.cpp
@@ -309,9 +309,9 @@ template <typename T> void qt_blend_argb24_on_rgb16(uchar *destPixels, int dbpl,
const uchar *src = srcPixels + y * sbpl;
const uchar *srcEnd = src + srcOffset;
while (src < srcEnd) {
-#if defined(QT_ARCH_ARM) || defined(QT_ARCH_POWERPC) || defined(QT_ARCH_SH) || defined(QT_ARCH_AVR32) || (defined(QT_ARCH_WINDOWSCE) && !defined(_X86_)) || (defined(QT_ARCH_SPARC) && defined(Q_CC_GNU))
+#if defined(QT_ARCH_ARMV5) || defined(QT_ARCH_POWERPC) || defined(QT_ARCH_SH) || defined(QT_ARCH_AVR32) || (defined(QT_ARCH_WINDOWSCE) && !defined(_X86_)) || (defined(QT_ARCH_SPARC) && defined(Q_CC_GNU))
// non-16-bit aligned memory access is not possible on PowerPC,
- // ARM <v6 (QT_ARCH_ARMV6) & SH & AVR32 & SPARC w/GCC
+ // ARM <v6 (QT_ARCH_ARMV5) & SH & AVR32 & SPARC w/GCC
quint16 spix = (quint16(src[2])<<8) + src[1];
#else
quint16 spix = *(quint16 *) (src + 1);
diff --git a/src/gui/painting/qbrush.cpp b/src/gui/painting/qbrush.cpp
index d3061d8a2b..d0788c70dc 100644
--- a/src/gui/painting/qbrush.cpp
+++ b/src/gui/painting/qbrush.cpp
@@ -1218,17 +1218,16 @@ QDataStream &operator>>(QDataStream &s, QBrush &b)
\o QConicalGradient
\endtable
- The colors in a gradient is defined using stop points of the
- QGradientStop type, i.e. a position and a color. Use the
- setColorAt() function to define a single stop
- point. Alternatively, use the setStops() function to define
- several stop points in one go. Note that the latter function \e
- replaces the current set of stop points.
+ The colors in a gradient are defined using stop points of the
+ QGradientStop type; i.e., a position and a color. Use the setColorAt()
+ function to define a single stop point. Alternatively, use the
+ setStops() function to define several stop points in one go. Note that
+ the latter function \e replaces the current set of stop points.
It is the gradient's complete set of stop points (accessible
through the stops() function) that describes how the gradient area
- should be filled. If no stop points have been specified, a
- gradient of black at 0 to white at 1 is used.
+ should be filled. If no stop points have been specified, a gradient
+ of black at 0 to white at 1 is used.
A diagonal linear gradient from black at (100, 100) to white at
(200, 200) could be specified like this:
diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp
index bd5b0bdf09..5f190ba1ce 100644
--- a/src/gui/painting/qdrawhelper.cpp
+++ b/src/gui/painting/qdrawhelper.cpp
@@ -4835,7 +4835,7 @@ void QT_FASTCALL blendUntransformed_dest24(DST *dest, const SRC *src,
if (SRC::hasAlpha()) {
while (length >= 4) {
- const quint32 alpha = BYTE_MUL(uint(alpha_4(src)), uint(coverage));
+ const quint32 alpha = QT_PREPEND_NAMESPACE(BYTE_MUL)(uint(alpha_4(src)), uint(coverage));
if (alpha)
interpolate_pixel_4(dest, src, alpha);
length -= 4;
diff --git a/src/gui/painting/qdrawhelper_sse2.cpp b/src/gui/painting/qdrawhelper_sse2.cpp
index ba2ba323f9..f97d86540c 100644
--- a/src/gui/painting/qdrawhelper_sse2.cpp
+++ b/src/gui/painting/qdrawhelper_sse2.cpp
@@ -266,10 +266,10 @@ void qt_memfill32_sse2(quint32 *dest, quint32 value, int count)
int n = (count128 + 3) / 4;
switch (count128 & 0x3) {
- case 0: do { _mm_store_si128(dst128++, value128);
- case 3: _mm_store_si128(dst128++, value128);
- case 2: _mm_store_si128(dst128++, value128);
- case 1: _mm_store_si128(dst128++, value128);
+ case 0: do { _mm_stream_si128(dst128++, value128);
+ case 3: _mm_stream_si128(dst128++, value128);
+ case 2: _mm_stream_si128(dst128++, value128);
+ case 1: _mm_stream_si128(dst128++, value128);
} while (--n > 0);
}
@@ -300,11 +300,14 @@ void QT_FASTCALL comp_func_solid_SourceOver_sse2(uint *destPixels, int length, u
const __m128i half = _mm_set1_epi16(0x80);
const __m128i minusAlphaOfColorVector = _mm_set1_epi16(minusAlphaOfColor);
+ ALIGNMENT_PROLOGUE_16BYTES(dst, x, length)
+ destPixels[x] = color + BYTE_MUL(destPixels[x], minusAlphaOfColor);
+
for (; x < length-3; x += 4) {
- __m128i dstVector = _mm_loadu_si128((__m128i *)&dst[x]);
+ __m128i dstVector = _mm_load_si128((__m128i *)&dst[x]);
BYTE_MUL_SSE2(dstVector, dstVector, minusAlphaOfColorVector, colorMask, half);
dstVector = _mm_add_epi8(colorVector, dstVector);
- _mm_storeu_si128((__m128i *)&dst[x], dstVector);
+ _mm_store_si128((__m128i *)&dst[x], dstVector);
}
for (;x < length; ++x)
destPixels[x] = color + BYTE_MUL(destPixels[x], minusAlphaOfColor);
diff --git a/src/gui/painting/qdrawhelper_ssse3.cpp b/src/gui/painting/qdrawhelper_ssse3.cpp
index 4cb40895ba..fb5602e5c3 100644
--- a/src/gui/painting/qdrawhelper_ssse3.cpp
+++ b/src/gui/painting/qdrawhelper_ssse3.cpp
@@ -79,69 +79,6 @@ inline static void blend_pixel(quint32 &dst, const quint32 src)
}
-#define BLEND_SOURCE_OVER_ARGB32_FIRST_ROW_SSSE3(dst, src, length, nullVector, half, one, colorMask, alphaMask) { \
- int x = 0; \
-\
- /* First, get dst aligned. */ \
- const int offsetToAlignOn16Bytes = (4 - ((reinterpret_cast<quintptr>(dst) >> 2) & 0x3)) & 0x3;\
- const int prologLength = qMin(length, offsetToAlignOn16Bytes);\
-\
- for (; x < prologLength; ++x) {\
- blend_pixel(dst[x], src[x]); \
- } \
-\
- const int minusOffsetToAlignSrcOn16Bytes = (reinterpret_cast<quintptr>(&(src[x])) >> 2) & 0x3;\
-\
- if (!minusOffsetToAlignSrcOn16Bytes) {\
- /* src is aligned, usual algorithm but with aligned operations.\
- See the SSE2 version for more documentation on the algorithm itself. */\
- const __m128i alphaShuffleMask = _mm_set_epi8(0xff,15,0xff,15,0xff,11,0xff,11,0xff,7,0xff,7,0xff,3,0xff,3);\
- for (; x < length-3; x += 4) { \
- const __m128i srcVector = _mm_load_si128((__m128i *)&src[x]); \
- const __m128i srcVectorAlpha = _mm_and_si128(srcVector, alphaMask); \
- if (_mm_movemask_epi8(_mm_cmpeq_epi32(srcVectorAlpha, alphaMask)) == 0xffff) { \
- _mm_store_si128((__m128i *)&dst[x], srcVector); \
- } else if (_mm_movemask_epi8(_mm_cmpeq_epi32(srcVectorAlpha, nullVector)) != 0xffff) { \
- __m128i alphaChannel = _mm_shuffle_epi8(srcVector, alphaShuffleMask); \
- alphaChannel = _mm_sub_epi16(one, alphaChannel); \
- const __m128i dstVector = _mm_load_si128((__m128i *)&dst[x]); \
- __m128i destMultipliedByOneMinusAlpha; \
- BYTE_MUL_SSE2(destMultipliedByOneMinusAlpha, dstVector, alphaChannel, colorMask, half); \
- const __m128i result = _mm_add_epi8(srcVector, destMultipliedByOneMinusAlpha); \
- _mm_store_si128((__m128i *)&dst[x], result); \
- } \
- } /* end for() */\
- } else if ((length - x) >= 8) {\
- /* We are at the first line, so "x - minusOffsetToAlignSrcOn16Bytes" could go before src, and\
- generate an invalid access. */\
-\
- /* We use two vectors to extract the src: prevLoaded for the first pixels, lastLoaded for the current pixels. */\
- __m128i srcVectorPrevLoaded;\
- if (minusOffsetToAlignSrcOn16Bytes > prologLength) {\
- /* We go forward 4 pixels to avoid reading before src. */\
- for (; x < prologLength + 4; ++x)\
- blend_pixel(dst[x], src[x]); \
- }\
- srcVectorPrevLoaded = _mm_load_si128((__m128i *)&src[x - minusOffsetToAlignSrcOn16Bytes]);\
- const int palignrOffset = minusOffsetToAlignSrcOn16Bytes << 2;\
-\
- const __m128i alphaShuffleMask = _mm_set_epi8(0xff,15,0xff,15,0xff,11,0xff,11,0xff,7,0xff,7,0xff,3,0xff,3);\
- switch (palignrOffset) {\
- case 4:\
- BLENDING_LOOP(4, length)\
- break;\
- case 8:\
- BLENDING_LOOP(8, length)\
- break;\
- case 12:\
- BLENDING_LOOP(12, length)\
- break;\
- }\
- }\
- for (; x < length; ++x) \
- blend_pixel(dst[x], src[x]); \
-}
-
// Basically blend src over dst with the const alpha defined as constAlphaVector.
// nullVector, half, one, colorMask are constant accross the whole image/texture, and should be defined as:
//const __m128i nullVector = _mm_set1_epi32(0);
@@ -153,7 +90,7 @@ inline static void blend_pixel(quint32 &dst, const quint32 src)
// The computation being done is:
// result = s + d * (1-alpha)
// with shortcuts if fully opaque or fully transparent.
-#define BLEND_SOURCE_OVER_ARGB32_MAIN_SSSE3(dst, src, length, nullVector, half, one, colorMask, alphaMask) { \
+#define BLEND_SOURCE_OVER_ARGB32_SSSE3(dst, src, length, nullVector, half, one, colorMask, alphaMask) { \
int x = 0; \
\
/* First, get dst aligned. */ \
@@ -218,14 +155,8 @@ void qt_blend_argb32_on_argb32_ssse3(uchar *destPixels, int dbpl,
const __m128i one = _mm_set1_epi16(0xff);
const __m128i colorMask = _mm_set1_epi32(0x00ff00ff);
- // We have to unrol the first row in order to deal with the load on unaligned data
- // prior to the src pointer.
- BLEND_SOURCE_OVER_ARGB32_FIRST_ROW_SSSE3(dst, src, w, nullVector, half, one, colorMask, alphaMask);
- dst = (quint32 *)(((uchar *) dst) + dbpl);
- src = (const quint32 *)(((const uchar *) src) + sbpl);
-
- for (int y = 1; y < h; ++y) {
- BLEND_SOURCE_OVER_ARGB32_MAIN_SSSE3(dst, src, w, nullVector, half, one, colorMask, alphaMask);
+ for (int y = 0; y < h; ++y) {
+ BLEND_SOURCE_OVER_ARGB32_SSSE3(dst, src, w, nullVector, half, one, colorMask, alphaMask);
dst = (quint32 *)(((uchar *) dst) + dbpl);
src = (const quint32 *)(((const uchar *) src) + sbpl);
}
diff --git a/src/gui/painting/qgraphicssystem_runtime.cpp b/src/gui/painting/qgraphicssystem_runtime.cpp
index 2828e9db61..a9fbbeeb2f 100644
--- a/src/gui/painting/qgraphicssystem_runtime.cpp
+++ b/src/gui/painting/qgraphicssystem_runtime.cpp
@@ -94,7 +94,8 @@ QRuntimePixmapData::QRuntimePixmapData(const QRuntimeGraphicsSystem *gs, PixelTy
QRuntimePixmapData::~QRuntimePixmapData()
{
- m_graphicsSystem->removePixmapData(this);
+ if (QApplicationPrivate::graphics_system)
+ m_graphicsSystem->removePixmapData(this);
delete m_data;
}
@@ -258,7 +259,8 @@ QRuntimeWindowSurface::QRuntimeWindowSurface(const QRuntimeGraphicsSystem *gs, Q
QRuntimeWindowSurface::~QRuntimeWindowSurface()
{
- m_graphicsSystem->removeWindowSurface(this);
+ if (QApplicationPrivate::graphics_system)
+ m_graphicsSystem->removeWindowSurface(this);
}
QPaintDevice *QRuntimeWindowSurface::paintDevice()
diff --git a/src/gui/painting/qgraphicssystem_runtime_p.h b/src/gui/painting/qgraphicssystem_runtime_p.h
index 02322418fe..421fbeb941 100644
--- a/src/gui/painting/qgraphicssystem_runtime_p.h
+++ b/src/gui/painting/qgraphicssystem_runtime_p.h
@@ -177,6 +177,7 @@ private:
friend class QRuntimePixmapData;
friend class QRuntimeWindowSurface;
+ friend class QMeeGoGraphicsSystem;
};
QT_END_NAMESPACE
diff --git a/src/gui/painting/qgraphicssystemfactory.cpp b/src/gui/painting/qgraphicssystemfactory.cpp
index ee6fbd8341..3adeba4dc2 100644
--- a/src/gui/painting/qgraphicssystemfactory.cpp
+++ b/src/gui/painting/qgraphicssystemfactory.cpp
@@ -73,7 +73,7 @@ QGraphicsSystem *QGraphicsSystemFactory::create(const QString& key)
if (system.isEmpty()) {
system = QLatin1String("runtime");
}
-#elif defined (QT_GRAPHICSSYSTEM_RASTER) && !defined(Q_WS_WIN) && !defined(Q_OS_SYMBIAN)
+#elif defined (QT_GRAPHICSSYSTEM_RASTER) && !defined(Q_WS_WIN) && !defined(Q_OS_SYMBIAN) || defined(Q_WS_X11)
if (system.isEmpty()) {
system = QLatin1String("raster");
}
diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp
index 4792f00021..3d963a734b 100644
--- a/src/gui/painting/qpaintengine_raster.cpp
+++ b/src/gui/painting/qpaintengine_raster.cpp
@@ -3100,9 +3100,17 @@ void QRasterPaintEngine::drawCachedGlyphs(int numGlyphs, const glyph_t *glyphs,
int margin = cache->glyphMargin();
+ bool supportsSubPixelPositions = fontEngine->supportsSubPixelPositions();
+
const uchar *bits = image.bits();
for (int i=0; i<numGlyphs; ++i) {
- const QTextureGlyphCache::Coord &c = cache->coords.value(glyphs[i]);
+
+ QFixed subPixelPosition;
+ if (supportsSubPixelPositions)
+ subPixelPosition = cache->subPixelPositionForX(positions[i].x);
+ QTextureGlyphCache::GlyphAndSubPixelPosition glyph(glyphs[i], subPixelPosition);
+ const QTextureGlyphCache::Coord &c = cache->coords.value(glyph);
+
int x = qFloor(positions[i].x) + c.baseLineX - margin;
int y = qFloor(positions[i].y) - c.baseLineY - margin;
diff --git a/src/gui/painting/qpaintengineex.cpp b/src/gui/painting/qpaintengineex.cpp
index 881bd6e145..1e857e4c91 100644
--- a/src/gui/painting/qpaintengineex.cpp
+++ b/src/gui/painting/qpaintengineex.cpp
@@ -768,7 +768,7 @@ void QPaintEngineEx::drawRoundedRect(const QRectF &rect, qreal xRadius, qreal yR
x1, y2 - (1 - KAPPA) * yRadius,
x1, y2 - yRadius,
x1, y1 + yRadius, // LineTo
- x1, y1 + KAPPA * yRadius, // CurveTo
+ x1, y1 + (1 - KAPPA) * yRadius, // CurveTo
x1 + (1 - KAPPA) * xRadius, y1,
x1 + xRadius, y1
};
diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp
index 004d9cd7e9..35a74c9f16 100644
--- a/src/gui/painting/qpainter.cpp
+++ b/src/gui/painting/qpainter.cpp
@@ -2737,6 +2737,8 @@ QRectF QPainter::clipBoundingRect() const
if (info.clipType == QPainterClipInfo::RectClip)
r = info.rect;
+ else if (info.clipType == QPainterClipInfo::RectFClip)
+ r = info.rectf;
else if (info.clipType == QPainterClipInfo::RegionClip)
r = info.region.boundingRect();
else
@@ -8932,7 +8934,7 @@ QPainterPath QPaintEngineState::clipPath() const
}
/*!
- Returns wether clipping is enabled or not in the current paint
+ Returns whether clipping is enabled or not in the current paint
engine state.
This variable should only be used when the state() returns a
diff --git a/src/gui/painting/qprintengine_ps.cpp b/src/gui/painting/qprintengine_ps.cpp
index 28e9a7a309..ca694ae6a7 100644
--- a/src/gui/painting/qprintengine_ps.cpp
+++ b/src/gui/painting/qprintengine_ps.cpp
@@ -64,7 +64,6 @@
#include "qbitmap.h"
#include "qregion.h"
#include "qimagewriter.h"
-#include <private/qunicodetables_p.h>
#include <private/qpainterpath_p.h>
#include <qdebug.h>
#include <private/qdrawhelper_p.h>
diff --git a/src/gui/painting/qprintengine_win.cpp b/src/gui/painting/qprintengine_win.cpp
index dd4de997b5..afae0a51e5 100644
--- a/src/gui/painting/qprintengine_win.cpp
+++ b/src/gui/painting/qprintengine_win.cpp
@@ -851,7 +851,7 @@ void QWin32PrintEnginePrivate::strokePath_dev(const QPainterPath &path, const QC
HPEN pen = ExtCreatePen(((penWidth == 0) ? PS_COSMETIC : PS_GEOMETRIC)
| PS_SOLID | capStyle | joinStyle,
- penWidth, &brush, 0, 0);
+ (penWidth == 0) ? 1 : penWidth, &brush, 0, 0);
HGDIOBJ old_pen = SelectObject(hdc, pen);
StrokePath(hdc);
diff --git a/src/gui/painting/qregion.cpp b/src/gui/painting/qregion.cpp
index c57db829e4..c5d5dc931c 100644
--- a/src/gui/painting/qregion.cpp
+++ b/src/gui/painting/qregion.cpp
@@ -1699,8 +1699,8 @@ QT_BEGIN_INCLUDE_NAMESPACE
#include <limits.h>
QT_END_INCLUDE_NAMESPACE
-/* 1 if two BOXs overlap.
- * 0 if two BOXs do not overlap.
+/* 1 if two BOXes overlap.
+ * 0 if two BOXes do not overlap.
* Remember, x2 and y2 are not in the region
*/
#define EXTENTCHECK(r1, r2) \
diff --git a/src/gui/painting/qstroker.cpp b/src/gui/painting/qstroker.cpp
index eabbd8a602..9cff3390be 100644
--- a/src/gui/painting/qstroker.cpp
+++ b/src/gui/painting/qstroker.cpp
@@ -609,7 +609,7 @@ void QStroker::joinPoints(qfixed focal_x, qfixed focal_y, const QLineF &nextLine
}
QLineF miterLine(QPointF(qt_fixed_to_real(focal_x),
qt_fixed_to_real(focal_y)), isect);
- if (miterLine.length() > qt_fixed_to_real(m_strokeWidth * m_miterLimit) / 2) {
+ if (type == QLineF::NoIntersection || miterLine.length() > qt_fixed_to_real(m_strokeWidth * m_miterLimit) / 2) {
emitLineTo(qt_real_to_fixed(nextLine.x1()),
qt_real_to_fixed(nextLine.y1()));
} else {
diff --git a/src/gui/painting/qtextureglyphcache.cpp b/src/gui/painting/qtextureglyphcache.cpp
index 376219ba8f..92198765f1 100644
--- a/src/gui/painting/qtextureglyphcache.cpp
+++ b/src/gui/painting/qtextureglyphcache.cpp
@@ -47,10 +47,6 @@
#include "private/qnativeimage_p.h"
#include "private/qfontengine_ft_p.h"
-#ifndef QT_DEFAULT_TEXTURE_GLYPH_CACHE_WIDTH
-#define QT_DEFAULT_TEXTURE_GLYPH_CACHE_WIDTH 256
-#endif
-
QT_BEGIN_NAMESPACE
// #define CACHE_DEBUG
@@ -69,8 +65,60 @@ static inline int qt_next_power_of_two(int v)
return v;
}
+int QTextureGlyphCache::calculateSubPixelPositionCount(glyph_t glyph) const
+{
+ // Test 12 different subpixel positions since it factors into 3*4 so it gives
+ // the coverage we need.
+
+ QList<QImage> images;
+ for (int i=0; i<12; ++i) {
+ QImage img = textureMapForGlyph(glyph, QFixed::fromReal(i / 12.0));
+
+ if (images.isEmpty()) {
+ QPainterPath path;
+ QFixedPoint point;
+ m_current_fontengine->addGlyphsToPath(&glyph, &point, 1, &path, QTextItem::RenderFlags());
+
+ // Glyph is space, return 0 to indicate that we need to keep trying
+ if (path.isEmpty())
+ break;
+
+ images.append(img);
+ } else {
+ bool found = false;
+ for (int j=0; j<images.size(); ++j) {
+ if (images.at(j) == img) {
+ found = true;
+ break;
+ }
+ }
+ if (!found)
+ images.append(img);
+ }
+ }
+
+ return images.size();
+}
+
+QFixed QTextureGlyphCache::subPixelPositionForX(QFixed x) const
+{
+ if (m_subPixelPositionCount == 0)
+ return QFixed();
+
+ QFixed subPixelPosition;
+ if (x != 0) {
+ subPixelPosition = x - x.floor();
+ QFixed fraction = (subPixelPosition / QFixed::fromReal(1.0 / m_subPixelPositionCount)).floor();
+
+ // Compensate for precision loss in fixed point to make sure we are always drawing at a subpixel position over
+ // the lower boundary for the selected rasterization by adding 1/64.
+ subPixelPosition = fraction / QFixed(m_subPixelPositionCount) + QFixed::fromReal(0.015625);
+ }
+ return subPixelPosition;
+}
+
void QTextureGlyphCache::populate(QFontEngine *fontEngine, int numGlyphs, const glyph_t *glyphs,
- const QFixedPoint *)
+ const QFixedPoint *positions)
{
#ifdef CACHE_DEBUG
printf("Populating with %d glyphs\n", numGlyphs);
@@ -81,15 +129,33 @@ void QTextureGlyphCache::populate(QFontEngine *fontEngine, int numGlyphs, const
const int margin = glyphMargin();
const int paddingDoubled = glyphPadding() * 2;
- QHash<glyph_t, Coord> listItemCoordinates;
+ bool supportsSubPixelPositions = fontEngine->supportsSubPixelPositions();
+ if (m_subPixelPositionCount == 0) {
+ if (!supportsSubPixelPositions) {
+ m_subPixelPositionCount = 1;
+ } else {
+ int i = 0;
+ while (m_subPixelPositionCount == 0 && i < numGlyphs)
+ m_subPixelPositionCount = calculateSubPixelPositionCount(glyphs[i++]);
+ }
+ }
+
+ QHash<GlyphAndSubPixelPosition, Coord> listItemCoordinates;
int rowHeight = 0;
// check each glyph for its metrics and get the required rowHeight.
for (int i=0; i < numGlyphs; ++i) {
const glyph_t glyph = glyphs[i];
- if (coords.contains(glyph))
+
+ QFixed subPixelPosition;
+ if (supportsSubPixelPositions) {
+ QFixed x = positions != 0 ? positions[i].x : QFixed();
+ subPixelPosition = subPixelPositionForX(x);
+ }
+
+ if (coords.contains(GlyphAndSubPixelPosition(glyph, subPixelPosition)))
continue;
- if (listItemCoordinates.contains(glyph))
+ if (listItemCoordinates.contains(GlyphAndSubPixelPosition(glyph, subPixelPosition)))
continue;
glyph_metrics_t metrics = fontEngine->boundingBox(glyph, m_transform);
@@ -119,7 +185,7 @@ void QTextureGlyphCache::populate(QFontEngine *fontEngine, int numGlyphs, const
metrics.x.round().truncate(),
-metrics.y.truncate() }; // baseline for horizontal scripts
- listItemCoordinates.insert(glyph, c);
+ listItemCoordinates.insert(GlyphAndSubPixelPosition(glyph, subPixelPosition), c);
rowHeight = qMax(rowHeight, glyph_height);
}
if (listItemCoordinates.isEmpty())
@@ -135,17 +201,25 @@ void QTextureGlyphCache::populate(QFontEngine *fontEngine, int numGlyphs, const
}
// now actually use the coords and paint the wanted glyps into cache.
- QHash<glyph_t, Coord>::iterator iter = listItemCoordinates.begin();
+ QHash<GlyphAndSubPixelPosition, Coord>::iterator iter = listItemCoordinates.begin();
+ int requiredWidth = m_w;
while (iter != listItemCoordinates.end()) {
Coord c = iter.value();
m_currentRowHeight = qMax(m_currentRowHeight, c.h + margin * 2);
- if (m_cx + c.w > m_w) {
- // no room on the current line, start new glyph strip
- m_cx = 0;
- m_cy += m_currentRowHeight + paddingDoubled;
- m_currentRowHeight = 0; // New row
+ if (m_cx + c.w > requiredWidth) {
+ int new_width = requiredWidth*2;
+ while (new_width < m_cx + c.w)
+ new_width *= 2;
+ if (new_width <= maxTextureWidth()) {
+ requiredWidth = new_width;
+ } else {
+ // no room on the current line, start new glyph strip
+ m_cx = 0;
+ m_cy += m_currentRowHeight + paddingDoubled;
+ m_currentRowHeight = 0; // New row
+ }
}
c.x = m_cx;
@@ -164,27 +238,30 @@ void QTextureGlyphCache::fillInPendingGlyphs()
if (m_pendingGlyphs.isEmpty())
return;
- int requiredHeight = 0;
+ int requiredHeight = m_h;
+ int requiredWidth = m_w; // Use a minimum size to avoid a lot of initial reallocations
{
- QHash<glyph_t, Coord>::iterator iter = m_pendingGlyphs.begin();
+ QHash<GlyphAndSubPixelPosition, Coord>::iterator iter = m_pendingGlyphs.begin();
while (iter != m_pendingGlyphs.end()) {
Coord c = iter.value();
requiredHeight = qMax(requiredHeight, c.y + c.h);
+ requiredWidth = qMax(requiredWidth, c.x + c.w);
++iter;
}
}
- if (requiredHeight > m_h) {
+ if (isNull() || requiredHeight > m_h || requiredWidth > m_w) {
if (isNull())
- createCache(m_w, qt_next_power_of_two(requiredHeight));
+ createCache(qt_next_power_of_two(requiredWidth), qt_next_power_of_two(requiredHeight));
else
- resizeCache(m_w, qt_next_power_of_two(requiredHeight));
+ resizeCache(qt_next_power_of_two(requiredWidth), qt_next_power_of_two(requiredHeight));
}
{
- QHash<glyph_t, Coord>::iterator iter = m_pendingGlyphs.begin();
+ QHash<GlyphAndSubPixelPosition, Coord>::iterator iter = m_pendingGlyphs.begin();
while (iter != m_pendingGlyphs.end()) {
- fillTexture(iter.value(), iter.key());
+ GlyphAndSubPixelPosition key = iter.key();
+ fillTexture(iter.value(), key.glyph, key.subPixelPosition);
++iter;
}
@@ -193,7 +270,7 @@ void QTextureGlyphCache::fillInPendingGlyphs()
m_pendingGlyphs.clear();
}
-QImage QTextureGlyphCache::textureMapForGlyph(glyph_t g) const
+QImage QTextureGlyphCache::textureMapForGlyph(glyph_t g, QFixed subPixelPosition) const
{
#if defined(Q_WS_X11)
if (m_transform.type() > QTransform::TxTranslate) {
@@ -226,7 +303,7 @@ QImage QTextureGlyphCache::textureMapForGlyph(glyph_t g) const
} else
#endif
if (m_type == QFontEngineGlyphCache::Raster_RGBMask)
- return m_current_fontengine->alphaRGBMapForGlyph(g, glyphMargin(), m_transform);
+ return m_current_fontengine->alphaRGBMapForGlyph(g, subPixelPosition, glyphMargin(), m_transform);
else
return m_current_fontengine->alphaMapForGlyph(g, m_transform);
@@ -272,9 +349,9 @@ int QImageTextureGlyphCache::glyphMargin() const
#endif
}
-void QImageTextureGlyphCache::fillTexture(const Coord &c, glyph_t g)
+void QImageTextureGlyphCache::fillTexture(const Coord &c, glyph_t g, QFixed subPixelPosition)
{
- QImage mask = textureMapForGlyph(g);
+ QImage mask = textureMapForGlyph(g, subPixelPosition);
#ifdef CACHE_DEBUG
printf("fillTexture of %dx%d at %d,%d in the cache of %dx%d\n", c.w, c.h, c.x, c.y, m_image.width(), m_image.height());
diff --git a/src/gui/painting/qtextureglyphcache_p.h b/src/gui/painting/qtextureglyphcache_p.h
index 0770ed41bc..82aaf0de88 100644
--- a/src/gui/painting/qtextureglyphcache_p.h
+++ b/src/gui/painting/qtextureglyphcache_p.h
@@ -64,6 +64,10 @@
# undef m_type
#endif
+#ifndef QT_DEFAULT_TEXTURE_GLYPH_CACHE_WIDTH
+#define QT_DEFAULT_TEXTURE_GLYPH_CACHE_WIDTH 256
+#endif
+
struct glyph_metrics_t;
typedef unsigned int glyph_t;
@@ -77,11 +81,24 @@ class Q_GUI_EXPORT QTextureGlyphCache : public QFontEngineGlyphCache
public:
QTextureGlyphCache(QFontEngineGlyphCache::Type type, const QTransform &matrix)
: QFontEngineGlyphCache(matrix, type), m_current_fontengine(0),
- m_w(0), m_h(0), m_cx(0), m_cy(0), m_currentRowHeight(0)
+ m_w(0), m_h(0), m_cx(0), m_cy(0), m_currentRowHeight(0), m_subPixelPositionCount(0)
{ }
virtual ~QTextureGlyphCache() { }
+ struct GlyphAndSubPixelPosition
+ {
+ GlyphAndSubPixelPosition(glyph_t g, QFixed spp) : glyph(g), subPixelPosition(spp) {}
+
+ bool operator==(const GlyphAndSubPixelPosition &other) const
+ {
+ return glyph == other.glyph && subPixelPosition == other.subPixelPosition;
+ }
+
+ glyph_t glyph;
+ QFixed subPixelPosition;
+ };
+
struct Coord {
int x;
int y;
@@ -101,7 +118,7 @@ public:
virtual int glyphMargin() const { return 0; }
virtual int glyphPadding() const { return 0; }
- virtual void fillTexture(const Coord &coord, glyph_t glyph) = 0;
+ virtual void fillTexture(const Coord &coord, glyph_t glyph, QFixed subPixelPosition) = 0;
inline void createCache(int width, int height) {
m_w = width;
@@ -118,22 +135,33 @@ public:
inline bool isNull() const { return m_h == 0; }
- QHash<glyph_t, Coord> coords;
+ QHash<GlyphAndSubPixelPosition, Coord> coords;
+ virtual int maxTextureWidth() const { return QT_DEFAULT_TEXTURE_GLYPH_CACHE_WIDTH; }
+ virtual int maxTextureHeight() const { return 32768; }
+
+ QImage textureMapForGlyph(glyph_t g, QFixed subPixelPosition) const;
- QImage textureMapForGlyph(glyph_t g) const;
+ QFixed subPixelPositionForX(QFixed x) const;
protected:
- QFontEngine *m_current_fontengine;
+ int calculateSubPixelPositionCount(glyph_t) const;
- QHash<glyph_t, Coord> m_pendingGlyphs;
+ QFontEngine *m_current_fontengine;
+ QHash<GlyphAndSubPixelPosition, Coord> m_pendingGlyphs;
int m_w; // image width
int m_h; // image height
int m_cx; // current x
int m_cy; // current y
int m_currentRowHeight; // Height of last row
+ int m_subPixelPositionCount; // Number of positions within a single pixel for this cache
};
+inline uint qHash(const QTextureGlyphCache::GlyphAndSubPixelPosition &g)
+{
+ return (g.glyph << 8) | (g.subPixelPosition * 10).round().toInt();
+}
+
class Q_GUI_EXPORT QImageTextureGlyphCache : public QTextureGlyphCache
{
@@ -143,7 +171,7 @@ public:
virtual int glyphMargin() const;
virtual void createTextureData(int width, int height);
virtual void resizeTextureData(int width, int height);
- virtual void fillTexture(const Coord &c, glyph_t glyph);
+ virtual void fillTexture(const Coord &c, glyph_t glyph, QFixed subPixelPosition);
inline const QImage &image() const { return m_image; }
diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp
index f02c798f62..3ec6e104da 100644
--- a/src/gui/styles/qs60style.cpp
+++ b/src/gui/styles/qs60style.cpp
@@ -491,6 +491,24 @@ QPalette* QS60StylePrivate::themePalette()
return m_themePalette;
}
+bool QS60StylePrivate::equalToThemePalette(QColor color, QPalette::ColorRole role)
+{
+ if (!m_themePalette)
+ return false;
+ if (color == m_themePalette->color(role))
+ return true;
+ return false;
+}
+
+bool QS60StylePrivate::equalToThemePalette(qint64 cacheKey, QPalette::ColorRole role)
+{
+ if (!m_themePalette)
+ return false;
+ if (cacheKey == m_themePalette->brush(role).texture().cacheKey())
+ return true;
+ return false;
+}
+
void QS60StylePrivate::setBackgroundTexture(QApplication *app) const
{
Q_UNUSED(app)
@@ -1430,11 +1448,25 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option,
const QRect iconRect = subElementRect(SE_ItemViewItemDecoration, &voptAdj, widget);
QRect textRect = subElementRect(SE_ItemViewItemText, &voptAdj, widget);
const QAbstractItemView *itemView = qobject_cast<const QAbstractItemView *>(widget);
+ const bool singleSelection =
+ (itemView->selectionMode() == QAbstractItemView::SingleSelection ||
+ itemView->selectionMode() == QAbstractItemView::NoSelection);
+ const bool selectItems = (itemView->selectionBehavior() == QAbstractItemView::SelectItems);
- // draw themed background for table unless background brush has been defined.
+ // draw themed background for itemview unless background brush has been defined.
if (vopt->backgroundBrush == Qt::NoBrush) {
if (itemView) {
+ //With single item selection, use highlight focus as selection indicator.
+ if (singleSelection && isSelected){
+ voptAdj.state = voptAdj.state | State_HasFocus;
+ if (!hasFocus && selectItems) {
+ painter->save();
+ painter->setOpacity(0.5);
+ }
+ }
drawPrimitive(PE_PanelItemViewItem, &voptAdj, painter, widget);
+ if (singleSelection && isSelected && !hasFocus && selectItems)
+ painter->restore();
}
} else { QCommonStyle::drawPrimitive(PE_PanelItemViewItem, &voptAdj, painter, widget);}
@@ -1443,28 +1475,20 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option,
const QIcon::State state = (voptAdj.state & State_Open) ? QIcon::On : QIcon::Off;
voptAdj.icon.paint(painter, iconRect, voptAdj.decorationAlignment, mode, state);
- // Draw selection check mark. Show check mark only in multi selection modes.
- if (itemView) {
- const bool singleSelection =
- (itemView->selectionMode() == QAbstractItemView::SingleSelection ||
- itemView->selectionMode() == QAbstractItemView::NoSelection)||
- (itemView->selectionModel()->selectedIndexes().count() < 2 );
-
- const bool selectItemsOnly = (itemView->selectionBehavior() == QAbstractItemView::SelectItems);
-
+ // Draw selection check mark or checkbox
+ if (itemView && (!singleSelection || (vopt->features & QStyleOptionViewItemV2::HasCheckIndicator))) {
const QRect selectionRect = subElementRect(SE_ItemViewItemCheckIndicator, &voptAdj, widget);
QStyleOptionViewItemV4 checkMarkOption(voptAdj);
if (selectionRect.isValid())
checkMarkOption.rect = selectionRect;
// Draw selection mark.
- if (isSelected && !singleSelection && selectItemsOnly) {
+ if (isSelected && selectItems) {
proxy()->drawPrimitive(PE_IndicatorViewItemCheck, &checkMarkOption, painter, widget);
// @todo: this should happen in the rect retrievel i.e. subElementRect()
if (textRect.right() > selectionRect.left())
textRect.setRight(selectionRect.left());
- } else if (singleSelection &&
- voptAdj.features & QStyleOptionViewItemV2::HasCheckIndicator) {
+ } else if (voptAdj.features & QStyleOptionViewItemV2::HasCheckIndicator) {
checkMarkOption.state = checkMarkOption.state & ~State_HasFocus;
switch (vopt->checkState) {
@@ -1484,7 +1508,7 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option,
// draw the text
if (!voptAdj.text.isEmpty()) {
- if (isSelected || hasFocus )
+ if (hasFocus)
painter->setPen(voptAdj.palette.highlightedText().color());
else
painter->setPen(voptAdj.palette.text().color());
@@ -2044,7 +2068,7 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option,
}
break;
case CE_Splitter:
- if (option->state & State_Sunken && option->state & State_Enabled) {
+ if (option->state & State_Sunken && option->state & State_Enabled && QS60StylePrivate::themePalette()) {
painter->save();
painter->setOpacity(0.5);
painter->setBrush(QS60StylePrivate::themePalette()->light());
@@ -2071,7 +2095,7 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti
case PE_FrameFocusRect: {
//Draw themed highlight to radiobuttons and checkboxes.
//For other widgets skip, unless palette has been modified. In that case, draw with commonstyle.
- if (option->palette.highlight().color() == QS60StylePrivate::themePalette()->highlight().color()) {
+ if (QS60StylePrivate::equalToThemePalette(option->palette.highlight().color(), QPalette::Highlight)) {
if ((qstyleoption_cast<const QStyleOptionFocusRect *>(option) &&
(qobject_cast<const QRadioButton *>(widget) || qobject_cast<const QCheckBox *>(widget))))
QS60StylePrivate::drawSkinElement(
@@ -2103,11 +2127,8 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti
QS60StyleEnums::SP_QgnIndiCheckboxOn : QS60StyleEnums::SP_QgnIndiCheckboxOff;
painter->save();
- const QColor themeColor = QS60StylePrivate::themePalette()->windowText().color();
- const QColor windowTextColor = option->palette.windowText().color();
-
- if (themeColor != windowTextColor)
- painter->setPen(windowTextColor);
+ if (QS60StylePrivate::equalToThemePalette(option->palette.windowText().color(), QPalette::WindowText))
+ painter->setPen(option->palette.windowText().color());
QS60StylePrivate::drawSkinPart(skinPart, painter, option->rect, flags | QS60StylePrivate::SF_ColorSkinned );
painter->restore();
@@ -2260,8 +2281,7 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti
) {
//Need extra check since dialogs have their own theme background
if (QS60StylePrivate::canDrawThemeBackground(option->palette.base(), widget) &&
- option->palette.window().texture().cacheKey() ==
- QS60StylePrivate::m_themePalette->window().texture().cacheKey())
+ QS60StylePrivate::equalToThemePalette(option->palette.window().texture().cacheKey(), QPalette::Window))
//todo: for combobox listviews, the background should include area for menu scrollers,
//but this produces drawing issues as we need to turn clipping off.
QS60StylePrivate::drawSkinElement(QS60StylePrivate::SE_PopupBackground, painter, option->rect, flags);
@@ -2308,13 +2328,13 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti
const bool hasFocus = (vopt->state & State_HasFocus);
const bool isPressed = QS60StylePrivate::isWidgetPressed(widget);
- if (option->palette.highlight().color() == QS60StylePrivate::themePalette()->highlight().color()) {
+ if (QS60StylePrivate::equalToThemePalette(option->palette.highlight().color(), QPalette::Highlight)) {
QRect highlightRect = vopt->rect.adjusted(1,1,-1,-1);
const QAbstractItemView *itemView = qobject_cast<const QAbstractItemView *>(widget);
QAbstractItemView::SelectionBehavior selectionBehavior =
itemView ? itemView->selectionBehavior() : QAbstractItemView::SelectItems;
// Set the draw area for highlights (focus, select rect or pressed rect)
- if (hasFocus || isSelected || isPressed) {
+ if (hasFocus || isPressed) {
if (selectionBehavior != QAbstractItemView::SelectItems) {
// set highlight rect so that it is continuous from cell to cell, yet sligthly
// smaller than cell rect
@@ -2344,7 +2364,7 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti
QRect elementRect = option->rect;
//draw item is drawn as pressed, if it already has focus.
- if (isPressed && (hasFocus || isSelected)) {
+ if (isPressed && hasFocus) {
themeGraphicDefined = true;
element = tableView ? QS60StylePrivate::SE_TableItemPressed : QS60StylePrivate::SE_ListItemPressed;
} else if (hasFocus || (isSelected && selectionBehavior != QAbstractItemView::SelectItems)) {
@@ -2433,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 (vopt->palette.base().texture().cacheKey() != QS60StylePrivate::m_themePalette->base().texture().cacheKey()) {
+ if (QS60StylePrivate::equalToThemePalette(vopt->palette.base().texture().cacheKey(), QPalette::Base)) {
//QPalette::Base has been changed, let commonstyle draw the item
commonStyleDraws = true;
} else {
@@ -2984,7 +3004,7 @@ QRect QS60Style::subElementRect(SubElement element, const QStyleOption *opt, con
case SE_ItemViewItemText:
case SE_ItemViewItemDecoration:
if (const QStyleOptionViewItemV4 *vopt = qstyleoption_cast<const QStyleOptionViewItemV4 *>(opt)) {
- const QListWidget *listItem = qobject_cast<const QListWidget *>(widget);
+ const QAbstractItemView *listItem = qobject_cast<const QAbstractItemView *>(widget);
const bool multiSelection = !listItem ? false :
listItem->selectionMode() == QAbstractItemView::MultiSelection ||
listItem->selectionMode() == QAbstractItemView::ExtendedSelection ||
@@ -3054,7 +3074,7 @@ QRect QS60Style::subElementRect(SubElement element, const QStyleOption *opt, con
break;
case SE_ItemViewItemCheckIndicator:
if (const QStyleOptionViewItemV2 *vopt = qstyleoption_cast<const QStyleOptionViewItemV2 *>(opt)) {
- const QListWidget *listItem = qobject_cast<const QListWidget *>(widget);
+ const QAbstractItemView *listItem = qobject_cast<const QAbstractItemView *>(widget);
const bool singleSelection = listItem &&
(listItem->selectionMode() == QAbstractItemView::SingleSelection ||
@@ -3416,8 +3436,7 @@ bool QS60Style::eventFilter(QObject *object, QEvent *event)
break;
}
case QEvent::MouseButtonRelease: {
- const QWidget *w = QApplication::widgetAt(QCursor::pos());
- if (w && d->m_pressedWidget) {
+ if (d->m_pressedWidget) {
d->m_pressedWidget->update();
d->m_pressedWidget = 0;
}
diff --git a/src/gui/styles/qs60style_p.h b/src/gui/styles/qs60style_p.h
index 51ced96edb..b3f416018b 100644
--- a/src/gui/styles/qs60style_p.h
+++ b/src/gui/styles/qs60style_p.h
@@ -598,6 +598,8 @@ private:
void setThemePaletteHash(QPalette *palette) const;
static void storeThemePalette(QPalette *palette);
static void deleteThemePalette();
+ static bool equalToThemePalette(QColor color, QPalette::ColorRole role);
+ static bool equalToThemePalette(qint64 cacheKey, QPalette::ColorRole role);
static QSize partSize(QS60StyleEnums::SkinParts part,
SkinElementFlags flags = KDefaultSkinElementFlags);
diff --git a/src/gui/text/qfontdatabase_mac.cpp b/src/gui/text/qfontdatabase_mac.cpp
index 4648304091..712bdb4205 100644
--- a/src/gui/text/qfontdatabase_mac.cpp
+++ b/src/gui/text/qfontdatabase_mac.cpp
@@ -293,8 +293,12 @@ void QFontDatabase::load(const QFontPrivate *d, int script)
// previous versions
family_list << QApplication::font().defaultFamily();
+#if defined(QT_MAC_USE_COCOA)
+ QCFString fontName = NULL, familyName = NULL;
+#else
ATSFontFamilyRef familyRef = 0;
ATSFontRef fontRef = 0;
+#endif
QMutexLocker locker(fontDatabaseMutex());
QFontDatabasePrivate *db = privateDb();
@@ -304,26 +308,20 @@ void QFontDatabase::load(const QFontPrivate *d, int script)
for (int k = 0; k < db->count; ++k) {
if (db->families[k]->name.compare(family_list.at(i), Qt::CaseInsensitive) == 0) {
QByteArray family_name = db->families[k]->name.toUtf8();
+#if defined(QT_MAC_USE_COCOA)
+ QCFType<CTFontRef> ctFont = CTFontCreateWithName(QCFString(db->families[k]->name), 12, NULL);
+ if (ctFont) {
+ fontName = CTFontCopyFullName(ctFont);
+ familyName = CTFontCopyFamilyName(ctFont);
+ goto FamilyFound;
+ }
+#else
familyRef = ATSFontFamilyFindFromName(QCFString(db->families[k]->name), kATSOptionFlagsDefault);
if (familyRef) {
fontRef = ATSFontFindFromName(QCFString(db->families[k]->name), kATSOptionFlagsDefault);
goto FamilyFound;
- } else {
-#if defined(QT_MAC_USE_COCOA)
- // ATS and CT disagrees on what the family name should be,
- // use CT to look up the font if ATS fails.
- QCFString familyName = QString::fromAscii(family_name);
- QCFType<CTFontRef> CTfontRef = CTFontCreateWithName(familyName, 12, NULL);
- QCFType<CTFontDescriptorRef> fontDescriptor = CTFontCopyFontDescriptor(CTfontRef);
- QCFString displayName = (CFStringRef)CTFontDescriptorCopyAttribute(fontDescriptor, kCTFontDisplayNameAttribute);
-
- familyRef = ATSFontFamilyFindFromName(displayName, kATSOptionFlagsDefault);
- if (familyRef) {
- fontRef = ATSFontFindFromName(displayName, kATSOptionFlagsDefault);
- goto FamilyFound;
- }
-#endif
}
+#endif
}
}
}
@@ -331,18 +329,17 @@ FamilyFound:
//fill in the engine's font definition
QFontDef fontDef = d->request; //copy..
if(fontDef.pointSize < 0)
- fontDef.pointSize = qt_mac_pointsize(fontDef, d->dpi);
+ fontDef.pointSize = qt_mac_pointsize(fontDef, d->dpi);
else
- fontDef.pixelSize = qt_mac_pixelsize(fontDef, d->dpi);
- {
- QCFString actualName;
- if(ATSFontFamilyGetName(familyRef, kATSOptionFlagsDefault, &actualName) == noErr)
- fontDef.family = actualName;
- }
+ fontDef.pixelSize = qt_mac_pixelsize(fontDef, d->dpi);
#ifdef QT_MAC_USE_COCOA
- QFontEngine *engine = new QCoreTextFontEngineMulti(familyRef, fontRef, fontDef, d->kerning);
+ fontDef.family = familyName;
+ QFontEngine *engine = new QCoreTextFontEngineMulti(fontName, fontDef, d->kerning);
#else
+ QCFString actualName;
+ if (ATSFontFamilyGetName(familyRef, kATSOptionFlagsDefault, &actualName) == noErr)
+ fontDef.family = actualName;
QFontEngine *engine = new QFontEngineMacMulti(familyRef, fontRef, fontDef, d->kerning);
#endif
d->engineData->engine = engine;
diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp
index b37a190666..3652c6919e 100644
--- a/src/gui/text/qfontengine.cpp
+++ b/src/gui/text/qfontengine.cpp
@@ -616,7 +616,7 @@ QImage QFontEngine::alphaMapForGlyph(glyph_t glyph, const QTransform &t)
return i;
}
-QImage QFontEngine::alphaRGBMapForGlyph(glyph_t glyph, int /* margin */, const QTransform &t)
+QImage QFontEngine::alphaRGBMapForGlyph(glyph_t glyph, QFixed /*subPixelPosition*/, int /* margin */, const QTransform &t)
{
QImage alphaMask = alphaMapForGlyph(glyph, t);
QImage rgbMask(alphaMask.width(), alphaMask.height(), QImage::Format_RGB32);
@@ -645,10 +645,10 @@ QImage QFontEngine::alphaMapForGlyph(glyph_t glyph)
if (glyph_width <= 0 || glyph_height <= 0)
return QImage();
QFixedPoint pt;
- pt.x = 0;
+ pt.x = -glyph_x;
pt.y = -glyph_y; // the baseline
QPainterPath path;
- QImage im(glyph_width + qAbs(glyph_x) + 4, glyph_height, QImage::Format_ARGB32_Premultiplied);
+ QImage im(glyph_width + 4, glyph_height, QImage::Format_ARGB32_Premultiplied);
im.fill(Qt::transparent);
QPainter p(&im);
p.setRenderHint(QPainter::Antialiasing);
@@ -737,7 +737,7 @@ void QFontEngine::setGlyphCache(void *key, QFontEngineGlyphCache *data)
return;
// Limit the glyph caches to 4. This covers all 90 degree rotations and limits
- // memory use when there is continous or random rotation
+ // memory use when there is continuous or random rotation
if (m_glyphCaches.size() == 4)
m_glyphCaches.removeLast();
diff --git a/src/gui/text/qfontengine_ft.cpp b/src/gui/text/qfontengine_ft.cpp
index 67bad7bf2f..9a9eb77d1b 100644
--- a/src/gui/text/qfontengine_ft.cpp
+++ b/src/gui/text/qfontengine_ft.cpp
@@ -1883,10 +1883,10 @@ QImage QFontEngineFT::alphaMapForGlyph(glyph_t g)
return img;
}
-QImage QFontEngineFT::alphaRGBMapForGlyph(glyph_t g, int margin, const QTransform &t)
+QImage QFontEngineFT::alphaRGBMapForGlyph(glyph_t g, QFixed subPixelPosition, int margin, const QTransform &t)
{
if (t.type() > QTransform::TxTranslate)
- return QFontEngine::alphaRGBMapForGlyph(g, margin, t);
+ return QFontEngine::alphaRGBMapForGlyph(g, subPixelPosition, margin, t);
lockFace();
@@ -1895,7 +1895,7 @@ QImage QFontEngineFT::alphaRGBMapForGlyph(glyph_t g, int margin, const QTransfor
Glyph *glyph = defaultGlyphSet.outline_drawing ? 0 : loadGlyph(g, glyph_format);
if (!glyph) {
unlockFace();
- return QFontEngine::alphaRGBMapForGlyph(g, margin, t);
+ return QFontEngine::alphaRGBMapForGlyph(g, subPixelPosition, margin, t);
}
QImage img(glyph->width, glyph->height, QImage::Format_RGB32);
diff --git a/src/gui/text/qfontengine_ft_p.h b/src/gui/text/qfontengine_ft_p.h
index f40ce046e5..5a27032d89 100644
--- a/src/gui/text/qfontengine_ft_p.h
+++ b/src/gui/text/qfontengine_ft_p.h
@@ -241,7 +241,7 @@ private:
virtual void recalcAdvances(QGlyphLayout *glyphs, QTextEngine::ShaperFlags flags) const;
virtual QImage alphaMapForGlyph(glyph_t);
- virtual QImage alphaRGBMapForGlyph(glyph_t, int margin, const QTransform &t);
+ virtual QImage alphaRGBMapForGlyph(glyph_t, QFixed subPixelPosition, int margin, const QTransform &t);
virtual void removeGlyphFromCache(glyph_t glyph);
virtual int glyphCount() const;
diff --git a/src/gui/text/qfontengine_mac.mm b/src/gui/text/qfontengine_mac.mm
index 2bbf9f2de7..6e524f61cb 100644
--- a/src/gui/text/qfontengine_mac.mm
+++ b/src/gui/text/qfontengine_mac.mm
@@ -143,7 +143,7 @@ void qmacfontengine_gamma_correct(QImage *image)
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-QCoreTextFontEngineMulti::QCoreTextFontEngineMulti(const ATSFontFamilyRef &, const ATSFontRef &atsFontRef, const QFontDef &fontDef, bool kerning)
+QCoreTextFontEngineMulti::QCoreTextFontEngineMulti(const QCFString &name, const QFontDef &fontDef, bool kerning)
: QFontEngineMulti(0)
{
this->fontDef = fontDef;
@@ -159,9 +159,6 @@ QCoreTextFontEngineMulti::QCoreTextFontEngineMulti(const ATSFontFamilyRef &, con
break;
}
- QCFString name;
- ATSFontGetName(atsFontRef, kATSOptionFlagsDefault, &name);
-
transform = CGAffineTransformIdentity;
if (fontDef.stretch != 100) {
transform = CGAffineTransformMakeScale(float(fontDef.stretch) / float(100), 1);
@@ -422,8 +419,7 @@ QCoreTextFontEngine::QCoreTextFontEngine(CTFontRef font, const QFontDef &def,
synthesisFlags = 0;
ctfont = font;
CFRetain(ctfont);
- ATSFontRef atsfont = CTFontGetPlatformFont(ctfont, 0);
- cgFont = CGFontCreateWithPlatformFont(&atsfont);
+ cgFont = CTFontCopyGraphicsFont(ctfont, NULL);
CTFontSymbolicTraits traits = CTFontGetSymbolicTraits(ctfont);
if (fontDef.weight >= QFont::Bold && !(traits & kCTFontBoldTrait)) {
synthesisFlags |= SynthesizedBold;
@@ -443,8 +439,8 @@ QCoreTextFontEngine::QCoreTextFontEngine(CTFontRef font, const QFontDef &def,
QCoreTextFontEngine::~QCoreTextFontEngine()
{
- CFRelease(ctfont);
CFRelease(cgFont);
+ CFRelease(ctfont);
}
bool QCoreTextFontEngine::stringToCMap(const QChar *, int, QGlyphLayout *, int *, QTextEngine::ShaperFlags) const
@@ -663,7 +659,7 @@ QFont QCoreTextFontEngine::createExplicitFont() const
return createExplicitFontWithName(familyName);
}
-QImage QCoreTextFontEngine::imageForGlyph(glyph_t glyph, int margin, bool aa)
+QImage QCoreTextFontEngine::imageForGlyph(glyph_t glyph, QFixed subPixelPosition, int /*margin*/, bool aa)
{
const glyph_metrics_t br = boundingBox(glyph);
QImage im(qRound(br.width)+2, qRound(br.height)+2, QImage::Format_RGB32);
@@ -696,11 +692,10 @@ QImage QCoreTextFontEngine::imageForGlyph(glyph_t glyph, int margin, bool aa)
CGContextSetRGBFillColor(ctx, 1, 1, 1, 1);
CGContextSetTextDrawingMode(ctx, kCGTextFill);
- ATSFontRef atsfont = CTFontGetPlatformFont(ctfont, 0);
- QCFType<CGFontRef> cgFont = CGFontCreateWithPlatformFont(&atsfont);
CGContextSetFont(ctx, cgFont);
- qreal pos_x = -br.x.toReal()+1, pos_y = im.height()+br.y.toReal();
+ qreal pos_x = -br.x.toReal() + subPixelPosition.toReal();
+ qreal pos_y = im.height()+br.y.toReal();
CGContextSetTextPosition(ctx, pos_x, pos_y);
CGSize advance;
@@ -721,7 +716,7 @@ QImage QCoreTextFontEngine::imageForGlyph(glyph_t glyph, int margin, bool aa)
QImage QCoreTextFontEngine::alphaMapForGlyph(glyph_t glyph)
{
- QImage im = imageForGlyph(glyph, 0, false);
+ QImage im = imageForGlyph(glyph, QFixed(), 0, false);
QImage indexed(im.width(), im.height(), QImage::Format_Indexed8);
QVector<QRgb> colors(256);
@@ -742,12 +737,12 @@ QImage QCoreTextFontEngine::alphaMapForGlyph(glyph_t glyph)
return indexed;
}
-QImage QCoreTextFontEngine::alphaRGBMapForGlyph(glyph_t glyph, int margin, const QTransform &x)
+QImage QCoreTextFontEngine::alphaRGBMapForGlyph(glyph_t glyph, QFixed subPixelPosition, int margin, const QTransform &x)
{
if (x.type() >= QTransform::TxScale)
- return QFontEngine::alphaRGBMapForGlyph(glyph, margin, x);
+ return QFontEngine::alphaRGBMapForGlyph(glyph, subPixelPosition, margin, x);
- QImage im = imageForGlyph(glyph, margin, true);
+ QImage im = imageForGlyph(glyph, subPixelPosition, margin, true);
qmacfontengine_gamma_correct(&im);
return im;
}
@@ -1706,7 +1701,7 @@ QImage QFontEngineMac::alphaMapForGlyph(glyph_t glyph)
return indexed;
}
-QImage QFontEngineMac::alphaRGBMapForGlyph(glyph_t glyph, int margin, const QTransform &t)
+QImage QFontEngineMac::alphaRGBMapForGlyph(glyph_t glyph, QFixed, int margin, const QTransform &t)
{
QImage im = imageForGlyph(glyph, margin, true);
diff --git a/src/gui/text/qfontengine_p.h b/src/gui/text/qfontengine_p.h
index 487a0c5128..c1de906051 100644
--- a/src/gui/text/qfontengine_p.h
+++ b/src/gui/text/qfontengine_p.h
@@ -155,6 +155,7 @@ public:
SynthesizedStretch = 0x4
};
virtual int synthesized() const { return 0; }
+ virtual bool supportsSubPixelPositions() const { return false; }
virtual QFixed emSquareSize() const { return ascent(); }
@@ -188,7 +189,7 @@ public:
*/
virtual QImage alphaMapForGlyph(glyph_t);
virtual QImage alphaMapForGlyph(glyph_t, const QTransform &t);
- virtual QImage alphaRGBMapForGlyph(glyph_t, int margin, const QTransform &t);
+ virtual QImage alphaRGBMapForGlyph(glyph_t, QFixed subPixelPosition, int margin, const QTransform &t);
virtual void removeGlyphFromCache(glyph_t);
@@ -448,6 +449,7 @@ public:
virtual bool canRender(const QChar *string, int len);
virtual int synthesized() const { return synthesisFlags; }
+ virtual bool supportsSubPixelPositions() const { return true; }
virtual Type type() const { return QFontEngine::Mac; }
@@ -457,13 +459,13 @@ public:
virtual bool getSfntTableData(uint /*tag*/, uchar * /*buffer*/, uint * /*length*/) const;
virtual void getUnscaledGlyph(glyph_t glyph, QPainterPath *path, glyph_metrics_t *metrics);
virtual QImage alphaMapForGlyph(glyph_t);
- virtual QImage alphaRGBMapForGlyph(glyph_t, int margin, const QTransform &t);
+ virtual QImage alphaRGBMapForGlyph(glyph_t, QFixed subPixelPosition, int margin, const QTransform &t);
virtual qreal minRightBearing() const;
virtual qreal minLeftBearing() const;
virtual QFont createExplicitFont() const;
private:
- QImage imageForGlyph(glyph_t glyph, int margin, bool colorful);
+ QImage imageForGlyph(glyph_t glyph, QFixed subPixelPosition, int margin, bool colorful);
CTFontRef ctfont;
CGFontRef cgFont;
QCoreTextFontEngineMulti *parentEngine;
@@ -475,8 +477,7 @@ private:
class QCoreTextFontEngineMulti : public QFontEngineMulti
{
public:
- QCoreTextFontEngineMulti(const ATSFontFamilyRef &atsFamily, const ATSFontRef &atsFontRef,
- const QFontDef &fontDef, bool kerning);
+ QCoreTextFontEngineMulti(const QCFString &name, const QFontDef &fontDef, bool kerning);
~QCoreTextFontEngineMulti();
virtual bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs,
@@ -546,7 +547,7 @@ public:
virtual Properties properties() const;
virtual void getUnscaledGlyph(glyph_t glyph, QPainterPath *path, glyph_metrics_t *metrics);
virtual QImage alphaMapForGlyph(glyph_t);
- virtual QImage alphaRGBMapForGlyph(glyph_t, int margin, const QTransform &t);
+ virtual QImage alphaRGBMapForGlyph(glyph_t, QFixed subPixelPosition, int margin, const QTransform &t);
private:
QImage imageForGlyph(glyph_t glyph, int margin, bool colorful);
diff --git a/src/gui/text/qfontengine_win.cpp b/src/gui/text/qfontengine_win.cpp
index 82de0d5ac0..3006776040 100644
--- a/src/gui/text/qfontengine_win.cpp
+++ b/src/gui/text/qfontengine_win.cpp
@@ -1254,7 +1254,7 @@ QImage QFontEngineWin::alphaMapForGlyph(glyph_t glyph, const QTransform &xform)
#define SPI_GETFONTSMOOTHINGCONTRAST 0x200C
#define SPI_SETFONTSMOOTHINGCONTRAST 0x200D
-QImage QFontEngineWin::alphaRGBMapForGlyph(glyph_t glyph, int margin, const QTransform &t)
+QImage QFontEngineWin::alphaRGBMapForGlyph(glyph_t glyph, QFixed, int margin, const QTransform &t)
{
HFONT font = hfont;
@@ -1296,6 +1296,7 @@ QFontEngineMultiWin::QFontEngineMultiWin(QFontEngineWin *first, const QStringLis
engines[0] = first;
first->ref.ref();
fontDef = engines[0]->fontDef;
+ cache_cost = first->cache_cost;
}
void QFontEngineMultiWin::loadEngine(int at)
@@ -1317,6 +1318,8 @@ void QFontEngineMultiWin::loadEngine(int at)
engines[at] = new QFontEngineWin(fam, hfont, stockFont, lf);
engines[at]->ref.ref();
engines[at]->fontDef = fontDef;
+
+ // TODO: increase cost in QFontCache for the font engine loaded here
}
QT_END_NAMESPACE
diff --git a/src/gui/text/qfontengine_win_p.h b/src/gui/text/qfontengine_win_p.h
index 68b53b5235..d86f42e504 100644
--- a/src/gui/text/qfontengine_win_p.h
+++ b/src/gui/text/qfontengine_win_p.h
@@ -104,7 +104,7 @@ public:
virtual QImage alphaMapForGlyph(glyph_t t) { return alphaMapForGlyph(t, QTransform()); }
virtual QImage alphaMapForGlyph(glyph_t, const QTransform &xform);
- virtual QImage alphaRGBMapForGlyph(glyph_t t, int margin, const QTransform &xform);
+ virtual QImage alphaRGBMapForGlyph(glyph_t t, QFixed subPixelPosition, int margin, const QTransform &xform);
#ifndef Q_CC_MINGW
virtual void getGlyphBearings(glyph_t glyph, qreal *leftBearing = 0, qreal *rightBearing = 0);
diff --git a/src/gui/text/qstatictext.cpp b/src/gui/text/qstatictext.cpp
index b950b13028..95060067f7 100644
--- a/src/gui/text/qstatictext.cpp
+++ b/src/gui/text/qstatictext.cpp
@@ -43,6 +43,7 @@
#include "qstatictext_p.h"
#include <private/qtextengine_p.h>
#include <private/qfontengine_p.h>
+#include <qabstracttextdocumentlayout.h>
#include <QtGui/qapplication.h>
@@ -448,7 +449,6 @@ namespace {
currentItem.font = ti.font();
currentItem.charOffset = m_chars.size();
currentItem.numChars = ti.num_chars;
- currentItem.numGlyphs = ti.glyphs.numGlyphs;
currentItem.glyphOffset = m_glyphs.size(); // Store offset into glyph pool
currentItem.positionOffset = m_glyphs.size(); // Offset into position pool
currentItem.useBackendOptimizations = m_useBackendOptimizations;
@@ -463,8 +463,8 @@ namespace {
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());
+ currentItem.numGlyphs = size;
m_glyphs.resize(m_glyphs.size() + size);
m_positions.resize(m_glyphs.size());
@@ -655,7 +655,9 @@ void QStaticTextPrivate::paintText(const QPointF &topLeftPosition, QPainter *p)
p->save();
p->translate(topLeftPosition);
- document.drawContents(p);
+ QAbstractTextDocumentLayout::PaintContext ctx;
+ ctx.palette.setColor(QPalette::Text, p->pen().color());
+ document.documentLayout()->draw(p, ctx);
p->restore();
if (textWidth >= 0.0)
diff --git a/src/gui/text/qtextdocument.cpp b/src/gui/text/qtextdocument.cpp
index 887ac6caf4..3aa6795755 100644
--- a/src/gui/text/qtextdocument.cpp
+++ b/src/gui/text/qtextdocument.cpp
@@ -291,7 +291,18 @@ QTextCodec *Qt::codecForHtml(const QByteArray &ba)
by an editor widget through the undo() and redo() slots; the document also
provides contentsChanged(), undoAvailable(), and redoAvailable() signals
that inform connected editor widgets about the state of the undo/redo
- system.
+ system. The following are the undo/redo operations of a QTextDocument:
+
+ \list
+ \o Insertion or removal of characters. A sequence of insertions or removals
+ within the same text block are regarded as a single undo/redo operation.
+ \o Insertion or removal of text blocks. Sequences of insertion or removals
+ in a single operation (e.g., by selecting and then deleting text) are
+ regarded as a single undo/redo operation.
+ \o Text character format changes.
+ \o Text block format changes.
+ \o Text block group format changes.
+ \endlist
\sa QTextCursor, QTextEdit, \link richtext.html Rich Text Processing\endlink , {Text Object Example}
*/
diff --git a/src/gui/text/qtextdocumentfragment.cpp b/src/gui/text/qtextdocumentfragment.cpp
index d2e2c9f27f..e36a6f0a85 100644
--- a/src/gui/text/qtextdocumentfragment.cpp
+++ b/src/gui/text/qtextdocumentfragment.cpp
@@ -43,7 +43,6 @@
#include "qtextdocumentfragment_p.h"
#include "qtextcursor_p.h"
#include "qtextlist.h"
-#include "private/qunicodetables_p.h"
#include <qdebug.h>
#include <qtextcodec.h>
diff --git a/src/gui/text/qtexthtmlparser.cpp b/src/gui/text/qtexthtmlparser.cpp
index 27f647c240..5b9ab90920 100644
--- a/src/gui/text/qtexthtmlparser.cpp
+++ b/src/gui/text/qtexthtmlparser.cpp
@@ -53,7 +53,6 @@
#include "qtextdocument_p.h"
#include "qtextcursor.h"
#include "qfont_p.h"
-#include "private/qunicodetables_p.h"
#include "private/qfunctions_p.h"
#ifndef QT_NO_TEXTHTMLPARSER
diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp
index 3f83aee7c2..fad6c3b2fe 100644
--- a/src/gui/text/qtextlayout.cpp
+++ b/src/gui/text/qtextlayout.cpp
@@ -2438,8 +2438,12 @@ void QTextLine::draw(QPainter *p, const QPointF &pos, const QTextLayout::FormatR
QTextCharFormat format;
if (eng->hasFormats() || selection) {
- if (!suppressColors)
- format = eng->format(&si);
+ format = eng->format(&si);
+ if (suppressColors) {
+ format.clearForeground();
+ format.clearBackground();
+ format.clearProperty(QTextFormat::TextUnderlineColor);
+ }
if (selection)
format.merge(selection->format);
diff --git a/src/gui/text/qtextobject.cpp b/src/gui/text/qtextobject.cpp
index 12a8924bcf..65fd36e938 100644
--- a/src/gui/text/qtextobject.cpp
+++ b/src/gui/text/qtextobject.cpp
@@ -616,6 +616,7 @@ void QTextFramePrivate::remove_me()
/*!
Returns an iterator pointing to the first document element inside the frame.
+ Please see the document \l{STL-style-Iterators} for more information.
\sa end()
*/
@@ -628,8 +629,8 @@ QTextFrame::iterator QTextFrame::begin() const
}
/*!
- Returns an iterator pointing to the last document element inside the frame.
-
+ Returns an iterator pointing to the position past the last document element inside the frame.
+ Please see the document \l{STL-Style Iterators} for more information.
\sa begin()
*/
QTextFrame::iterator QTextFrame::end() const
diff --git a/src/gui/widgets/qdockarealayout.cpp b/src/gui/widgets/qdockarealayout.cpp
index 171000bde1..b540e76503 100644
--- a/src/gui/widgets/qdockarealayout.cpp
+++ b/src/gui/widgets/qdockarealayout.cpp
@@ -60,6 +60,9 @@
QT_BEGIN_NAMESPACE
+// qmainwindow.cpp
+extern QMainWindowLayout *qt_mainwindow_layout(const QMainWindow *window);
+
enum { StateFlagVisible = 1, StateFlagFloating = 2 };
/******************************************************************************
@@ -1480,7 +1483,7 @@ QList<int> QDockAreaLayoutInfo::indexOf(QWidget *widget) const
QMainWindowLayout *QDockAreaLayoutInfo::mainWindowLayout() const
{
- QMainWindowLayout *result = qobject_cast<QMainWindowLayout*>(mainWindow->layout());
+ QMainWindowLayout *result = qt_mainwindow_layout(mainWindow);
Q_ASSERT(result != 0);
return result;
}
@@ -3070,8 +3073,7 @@ void QDockAreaLayout::splitDockWidget(QDockWidget *after,
void QDockAreaLayout::apply(bool animate)
{
- QWidgetAnimator &widgetAnimator
- = qobject_cast<QMainWindowLayout*>(mainWindow->layout())->widgetAnimator;
+ QWidgetAnimator &widgetAnimator = qt_mainwindow_layout(mainWindow)->widgetAnimator;
for (int i = 0; i < QInternal::DockCount; ++i)
docks[i].apply(animate);
@@ -3176,7 +3178,7 @@ void QDockAreaLayout::updateSeparatorWidgets() const
if (j < separatorWidgets.size()) {
sepWidget = separatorWidgets.at(j);
} else {
- sepWidget = qobject_cast<QMainWindowLayout*>(mainWindow->layout())->getSeparatorWidget();
+ sepWidget = qt_mainwindow_layout(mainWindow)->getSeparatorWidget();
separatorWidgets.append(sepWidget);
}
j++;
diff --git a/src/gui/widgets/qdockwidget.cpp b/src/gui/widgets/qdockwidget.cpp
index 11f0a94eb4..df9b1713be 100644
--- a/src/gui/widgets/qdockwidget.cpp
+++ b/src/gui/widgets/qdockwidget.cpp
@@ -68,6 +68,9 @@ QT_BEGIN_NAMESPACE
extern QString qt_setWindowTitle_helperHelper(const QString&, const QWidget*); // qwidget.cpp
+// qmainwindow.cpp
+extern QMainWindowLayout *qt_mainwindow_layout(const QMainWindow *window);
+
static inline bool hasFeature(const QDockWidgetPrivate *priv, QDockWidget::DockWidgetFeature feature)
{ return (priv->features & feature) == feature; }
@@ -690,7 +693,7 @@ void QDockWidgetPrivate::initDrag(const QPoint &pos, bool nca)
QMainWindow *win = qobject_cast<QMainWindow*>(parent);
Q_ASSERT(win != 0);
- QMainWindowLayout *layout = qobject_cast<QMainWindowLayout*>(win->layout());
+ QMainWindowLayout *layout = qt_mainwindow_layout(win);
Q_ASSERT(layout != 0);
if (layout->pluggingWidget != 0) // the main window is animating a docking operation
return;
@@ -711,8 +714,7 @@ void QDockWidgetPrivate::startDrag()
if (state == 0 || state->dragging)
return;
- QMainWindowLayout *layout
- = qobject_cast<QMainWindowLayout *>(q->parentWidget()->layout());
+ QMainWindowLayout *layout = qt_mainwindow_layout(qobject_cast<QMainWindow *>(q->parentWidget()));
Q_ASSERT(layout != 0);
state->widgetItem = layout->unplug(q);
@@ -739,8 +741,7 @@ void QDockWidgetPrivate::endDrag(bool abort)
q->releaseMouse();
if (state->dragging) {
- QMainWindowLayout *mwLayout =
- qobject_cast<QMainWindowLayout *>(q->parentWidget()->layout());
+ QMainWindowLayout *mwLayout = qt_mainwindow_layout(qobject_cast<QMainWindow *>(q->parentWidget()));
Q_ASSERT(mwLayout != 0);
if (abort || !mwLayout->plug(state->widgetItem)) {
@@ -780,8 +781,7 @@ bool QDockWidgetPrivate::isAnimating() const
if (mainWin == 0)
return false;
- QMainWindowLayout *mainWinLayout
- = qobject_cast<QMainWindowLayout*>(mainWin->layout());
+ QMainWindowLayout *mainWinLayout = qt_mainwindow_layout(mainWin);
if (mainWinLayout == 0)
return false;
@@ -847,9 +847,8 @@ bool QDockWidgetPrivate::mouseMoveEvent(QMouseEvent *event)
return ret;
QDockWidgetLayout *dwlayout
- = qobject_cast<QDockWidgetLayout*>(layout);
- QMainWindowLayout *mwlayout
- = qobject_cast<QMainWindowLayout*>(q->parentWidget()->layout());
+ = qobject_cast<QDockWidgetLayout *>(layout);
+ QMainWindowLayout *mwlayout = qt_mainwindow_layout(qobject_cast<QMainWindow *>(q->parentWidget()));
if (!dwlayout->nativeWindowDeco()) {
if (!state->dragging
&& mwlayout->pluggingWidget == 0
@@ -943,8 +942,7 @@ void QDockWidgetPrivate::nonClientAreaMouseEvent(QMouseEvent *event)
}
#ifdef Q_OS_MAC
else { // workaround for lack of mouse-grab on Mac
- QMainWindowLayout *layout
- = qobject_cast<QMainWindowLayout *>(q->parentWidget()->layout());
+ QMainWindowLayout *layout = qt_mainwindow_layout(qobject_cast<QMainWindow *>(q->parentWidget()));
Q_ASSERT(layout != 0);
q->move(event->globalPos() - state->pressPos);
@@ -980,8 +978,7 @@ void QDockWidgetPrivate::moveEvent(QMoveEvent *event)
if (state->ctrlDrag)
return;
- QMainWindowLayout *layout
- = qobject_cast<QMainWindowLayout *>(q->parentWidget()->layout());
+ QMainWindowLayout *layout = qt_mainwindow_layout(qobject_cast<QMainWindow *>(q->parentWidget()));
Q_ASSERT(layout != 0);
QPoint globalMousePos = event->pos() + state->pressPos;
@@ -1009,7 +1006,7 @@ void QDockWidgetPrivate::setWindowState(bool floating, bool unplug, const QRect
Q_Q(QDockWidget);
if (!floating && parent) {
- QMainWindowLayout *mwlayout = qobject_cast<QMainWindowLayout *>(q->parentWidget()->layout());
+ QMainWindowLayout *mwlayout = qt_mainwindow_layout(qobject_cast<QMainWindow *>(q->parentWidget()));
if (mwlayout && mwlayout->dockWidgetArea(q) == Qt::NoDockWidgetArea)
return; // this dockwidget can't be redocked
}
@@ -1055,7 +1052,7 @@ void QDockWidgetPrivate::setWindowState(bool floating, bool unplug, const QRect
if (floating != wasFloating) {
emit q->topLevelChanged(floating);
if (!floating && parent) {
- QMainWindowLayout *mwlayout = qobject_cast<QMainWindowLayout *>(q->parentWidget()->layout());
+ QMainWindowLayout *mwlayout = qt_mainwindow_layout(qobject_cast<QMainWindow *>(q->parentWidget()));
if (mwlayout)
emit q->dockLocationChanged(mwlayout->dockWidgetArea(q));
}
@@ -1326,10 +1323,10 @@ void QDockWidget::changeEvent(QEvent *event)
#ifndef QT_NO_TABBAR
{
QMainWindow *win = qobject_cast<QMainWindow*>(parentWidget());
- if (QMainWindowLayout *winLayout =
- (win ? qobject_cast<QMainWindowLayout*>(win->layout()) : 0))
+ if (QMainWindowLayout *winLayout = qt_mainwindow_layout(win)) {
if (QDockAreaLayoutInfo *info = winLayout->layoutState.dockAreaLayout.info(this))
info->updateTabBar();
+ }
}
#endif // QT_NO_TABBAR
break;
@@ -1382,9 +1379,7 @@ bool QDockWidget::event(QEvent *event)
Q_D(QDockWidget);
QMainWindow *win = qobject_cast<QMainWindow*>(parentWidget());
- QMainWindowLayout *layout = 0;
- if (win != 0)
- layout = qobject_cast<QMainWindowLayout*>(win->layout());
+ QMainWindowLayout *layout = qt_mainwindow_layout(win);
switch (event->type()) {
#ifndef QT_NO_ACTION
diff --git a/src/gui/widgets/qlinecontrol.cpp b/src/gui/widgets/qlinecontrol.cpp
index f742d32f9f..a283da688b 100644
--- a/src/gui/widgets/qlinecontrol.cpp
+++ b/src/gui/widgets/qlinecontrol.cpp
@@ -536,7 +536,7 @@ void QLineControl::draw(QPainter *painter, const QPoint &offset, const QRect &cl
\internal
Sets the selection to cover the word at the given cursor position.
- The word boundries is defined by the behavior of QTextLayout::SkipWords
+ The word boundaries are defined by the behavior of QTextLayout::SkipWords
cursor mode.
*/
void QLineControl::selectWordAtPos(int cursor)
@@ -1211,7 +1211,7 @@ void QLineControl::internalRedo()
/*!
\internal
- If the current cursor position differs from the last emited cursor
+ If the current cursor position differs from the last emitted cursor
position, emits cursorPositionChanged().
*/
void QLineControl::emitCursorPositionChanged()
diff --git a/src/gui/widgets/qmainwindow.cpp b/src/gui/widgets/qmainwindow.cpp
index 0378d2d485..4ca11b039f 100644
--- a/src/gui/widgets/qmainwindow.cpp
+++ b/src/gui/widgets/qmainwindow.cpp
@@ -39,6 +39,8 @@
**
****************************************************************************/
+//#define QT_EXPERIMENTAL_CLIENT_DECORATIONS
+
#include "qmainwindow.h"
#include "qmainwindowlayout_p.h"
@@ -99,12 +101,70 @@ public:
uint hasOldCursor : 1;
uint cursorAdjusted : 1;
#endif
+
+ static inline QMainWindowLayout *mainWindowLayout(const QMainWindow *mainWindow)
+ {
+ return mainWindow ? mainWindow->d_func()->layout : static_cast<QMainWindowLayout *>(0);
+ }
};
+QMainWindowLayout *qt_mainwindow_layout(const QMainWindow *mainWindow)
+{
+ return QMainWindowPrivate::mainWindowLayout(mainWindow);
+}
+
+#ifdef QT_EXPERIMENTAL_CLIENT_DECORATIONS
+Q_GUI_EXPORT void qt_setMainWindowTitleWidget(QMainWindow *mainWindow, Qt::DockWidgetArea area, QWidget *widget)
+{
+ QGridLayout *topLayout = qobject_cast<QGridLayout *>(mainWindow->layout());
+ Q_ASSERT(topLayout);
+
+ int row = 0;
+ int column = 0;
+
+ switch (area) {
+ case Qt::LeftDockWidgetArea:
+ row = 1;
+ column = 0;
+ break;
+ case Qt::TopDockWidgetArea:
+ row = 0;
+ column = 1;
+ break;
+ case Qt::BottomDockWidgetArea:
+ row = 2;
+ column = 1;
+ break;
+ case Qt::RightDockWidgetArea:
+ row = 1;
+ column = 2;
+ break;
+ default:
+ Q_ASSERT_X(false, "qt_setMainWindowTitleWidget", "Unknown area");
+ return;
+ }
+
+ if (QLayoutItem *oldItem = topLayout->itemAtPosition(row, column))
+ delete oldItem->widget();
+ topLayout->addWidget(widget, row, column);
+}
+#endif
+
void QMainWindowPrivate::init()
{
Q_Q(QMainWindow);
- layout = new QMainWindowLayout(q);
+
+#ifdef QT_EXPERIMENTAL_CLIENT_DECORATIONS
+ QGridLayout *topLayout = new QGridLayout(q);
+ topLayout->setContentsMargins(0, 0, 0, 0);
+
+ layout = new QMainWindowLayout(q, topLayout);
+
+ topLayout->addItem(layout, 1, 1);
+#else
+ layout = new QMainWindowLayout(q, 0);
+#endif
+
const int metric = q->style()->pixelMetric(QStyle::PM_ToolBarIconSize, 0, q);
iconSize = QSize(metric, metric);
q->setAttribute(Qt::WA_Hover);
@@ -461,10 +521,11 @@ QMenuBar *QMainWindow::menuBar() const
*/
void QMainWindow::setMenuBar(QMenuBar *menuBar)
{
- Q_D(QMainWindow);
- if (d->layout->menuBar() && d->layout->menuBar() != menuBar) {
+ QLayout *topLayout = layout();
+
+ if (topLayout->menuBar() && topLayout->menuBar() != menuBar) {
// Reparent corner widgets before we delete the old menu bar.
- QMenuBar *oldMenuBar = qobject_cast<QMenuBar *>(d->layout->menuBar());
+ QMenuBar *oldMenuBar = qobject_cast<QMenuBar *>(topLayout->menuBar());
if (menuBar) {
// TopLeftCorner widget.
QWidget *cornerWidget = oldMenuBar->cornerWidget(Qt::TopLeftCorner);
@@ -478,7 +539,7 @@ void QMainWindow::setMenuBar(QMenuBar *menuBar)
oldMenuBar->hide();
oldMenuBar->deleteLater();
}
- d->layout->setMenuBar(menuBar);
+ topLayout->setMenuBar(menuBar);
}
/*!
diff --git a/src/gui/widgets/qmainwindowlayout.cpp b/src/gui/widgets/qmainwindowlayout.cpp
index 62ee398e9e..4dd5208e26 100644
--- a/src/gui/widgets/qmainwindowlayout.cpp
+++ b/src/gui/widgets/qmainwindowlayout.cpp
@@ -160,7 +160,7 @@ static void dumpLayout(QTextStream &qout, const QDockAreaLayout &layout, QString
void qt_dumpLayout(QTextStream &qout, QMainWindow *window)
{
- QMainWindowLayout *layout = qobject_cast<QMainWindowLayout*>(window->layout());
+ QMainWindowLayout *layout = qt_mainwindow_layout(window);
dumpLayout(qout, layout->layoutState.dockAreaLayout, QString());
}
@@ -235,7 +235,7 @@ void QMainWindowLayoutState::apply(bool animated)
dockAreaLayout.apply(animated);
#else
if (centralWidgetItem != 0) {
- QMainWindowLayout *layout = qobject_cast<QMainWindowLayout*>(mainWindow->layout());
+ QMainWindowLayout *layout = qt_mainwindow_layout(mainWindow);
Q_ASSERT(layout != 0);
layout->widgetAnimator.animate(centralWidgetItem->widget(), centralWidgetRect, animated);
}
@@ -1674,8 +1674,8 @@ void QMainWindowLayout::restore(bool keepSavedState)
updateGapIndicator();
}
-QMainWindowLayout::QMainWindowLayout(QMainWindow *mainwindow)
- : QLayout(mainwindow)
+QMainWindowLayout::QMainWindowLayout(QMainWindow *mainwindow, QLayout *parentLayout)
+ : QLayout(parentLayout ? static_cast<QWidget *>(0) : mainwindow)
, layoutState(mainwindow)
, savedState(mainwindow)
, dockOptions(QMainWindow::AnimatedDocks | QMainWindow::AllowTabbedDocks)
@@ -1698,6 +1698,9 @@ QMainWindowLayout::QMainWindowLayout(QMainWindow *mainwindow)
, blockVisiblityCheck(false)
#endif
{
+ if (parentLayout)
+ setParent(parentLayout);
+
#ifndef QT_NO_DOCKWIDGET
#ifndef QT_NO_TABBAR
sep = mainwindow->style()->pixelMetric(QStyle::PM_DockWidgetSeparatorExtent, 0, mainwindow);
diff --git a/src/gui/widgets/qmainwindowlayout_p.h b/src/gui/widgets/qmainwindowlayout_p.h
index 955693dad7..e1b981c1cd 100644
--- a/src/gui/widgets/qmainwindowlayout_p.h
+++ b/src/gui/widgets/qmainwindowlayout_p.h
@@ -159,7 +159,7 @@ class Q_AUTOTEST_EXPORT QMainWindowLayout : public QLayout
public:
QMainWindowLayoutState layoutState, savedState;
- explicit QMainWindowLayout(QMainWindow *mainwindow);
+ QMainWindowLayout(QMainWindow *mainwindow, QLayout *parentLayout);
~QMainWindowLayout();
QMainWindow::DockOptions dockOptions;
diff --git a/src/gui/widgets/qmenu_symbian.cpp b/src/gui/widgets/qmenu_symbian.cpp
index c643a1ebc7..652e65c8fe 100644
--- a/src/gui/widgets/qmenu_symbian.cpp
+++ b/src/gui/widgets/qmenu_symbian.cpp
@@ -168,11 +168,11 @@ static void qt_symbian_insert_action(QSymbianMenuAction* action, QList<SymbianMe
if (action->action->menu()->actions().size() > 0) {
for (int c2= 0; c2 < action->action->menu()->actions().size(); ++c2) {
- QSymbianMenuAction *symbianAction2 = new QSymbianMenuAction;
+ QScopedPointer<QSymbianMenuAction> symbianAction2(new QSymbianMenuAction);
symbianAction2->action = action->action->menu()->actions().at(c2);
QMenu * menu = symbianAction2->action->menu();
symbianAction2->command = qt_symbian_menu_static_cmd_id++;
- qt_symbian_insert_action(symbianAction2, &(menuItem->children));
+ qt_symbian_insert_action(symbianAction2.data(), &(menuItem->children));
}
}
@@ -433,11 +433,11 @@ void QMenuBarPrivate::QSymbianMenuBarPrivate::removeAction(QSymbianMenuAction *a
void QMenuBarPrivate::QSymbianMenuBarPrivate::insertNativeMenuItems(const QList<QAction*> &actions)
{
for (int i = 0; i <actions.size(); ++i) {
- QSymbianMenuAction *symbianActionTopLevel = new QSymbianMenuAction;
+ QScopedPointer<QSymbianMenuAction> symbianActionTopLevel(new QSymbianMenuAction);
symbianActionTopLevel->action = actions.at(i);
symbianActionTopLevel->parent = 0;
symbianActionTopLevel->command = qt_symbian_menu_static_cmd_id++;
- qt_symbian_insert_action(symbianActionTopLevel, &symbianMenus);
+ qt_symbian_insert_action(symbianActionTopLevel.data(), &symbianMenus);
}
}
diff --git a/src/gui/widgets/qtoolbar.cpp b/src/gui/widgets/qtoolbar.cpp
index 7ed27ea33d..316bb440c8 100644
--- a/src/gui/widgets/qtoolbar.cpp
+++ b/src/gui/widgets/qtoolbar.cpp
@@ -82,6 +82,9 @@ static void qt_mac_updateToolBarButtonHint(QWidget *parentWidget)
}
#endif
+// qmainwindow.cpp
+extern QMainWindowLayout *qt_mainwindow_layout(const QMainWindow *window);
+
/******************************************************************************
** QToolBarPrivate
*/
@@ -197,7 +200,7 @@ void QToolBarPrivate::initDrag(const QPoint &pos)
QMainWindow *win = qobject_cast<QMainWindow*>(parent);
Q_ASSERT(win != 0);
- QMainWindowLayout *layout = qobject_cast<QMainWindowLayout*>(win->layout());
+ QMainWindowLayout *layout = qt_mainwindow_layout(win);
Q_ASSERT(layout != 0);
if (layout->pluggingWidget != 0) // the main window is animating a docking operation
return;
@@ -223,7 +226,7 @@ void QToolBarPrivate::startDrag(bool moving)
QMainWindow *win = qobject_cast<QMainWindow*>(parent);
Q_ASSERT(win != 0);
- QMainWindowLayout *layout = qobject_cast<QMainWindowLayout*>(win->layout());
+ QMainWindowLayout *layout = qt_mainwindow_layout(win);
Q_ASSERT(layout != 0);
if (!moving) {
@@ -247,8 +250,7 @@ void QToolBarPrivate::endDrag()
q->releaseMouse();
if (state->dragging) {
- QMainWindowLayout *layout =
- qobject_cast<QMainWindowLayout *>(q->parentWidget()->layout());
+ QMainWindowLayout *layout = qt_mainwindow_layout(qobject_cast<QMainWindow *>(q->parentWidget()));
Q_ASSERT(layout != 0);
if (!layout->plug(state->widgetItem)) {
@@ -340,7 +342,7 @@ bool QToolBarPrivate::mouseMoveEvent(QMouseEvent *event)
if (win == 0)
return true;
- QMainWindowLayout *layout = qobject_cast<QMainWindowLayout*>(win->layout());
+ QMainWindowLayout *layout = qt_mainwindow_layout(win);
Q_ASSERT(layout != 0);
if (layout->pluggingWidget == 0
@@ -588,7 +590,7 @@ QToolBar::~QToolBar()
QMainWindow *mainwindow = qobject_cast<QMainWindow *>(parentWidget());
if (mainwindow) {
#ifdef Q_WS_MAC
- QMainWindowLayout *mainwin_layout = qobject_cast<QMainWindowLayout *>(mainwindow->layout());
+ QMainWindowLayout *mainwin_layout = qt_mainwindow_layout(mainwindow);
if (mainwin_layout && mainwin_layout->layoutState.toolBarAreaLayout.isEmpty()
&& mainwindow->testAttribute(Qt::WA_WState_Created))
macWindowToolbarShow(mainwindow, false);
@@ -1135,7 +1137,7 @@ bool QToolBar::event(QEvent *event)
if (toolbarInUnifiedToolBar(this)) {
// I can static_cast because I did the qobject_cast in the if above, therefore
// we must have a QMainWindowLayout here.
- QMainWindowLayout *mwLayout = static_cast<QMainWindowLayout *>(parentWidget()->layout());
+ QMainWindowLayout *mwLayout = qt_mainwindow_layout(qobject_cast<QMainWindow *>(parentWidget()));
mwLayout->fixSizeInUnifiedToolbar(this);
mwLayout->syncUnifiedToolbarVisibility();
}
@@ -1289,6 +1291,8 @@ QWidget *QToolBar::widgetForAction(QAction *action) const
return d->layout->itemAt(index)->widget();
}
+extern QMainWindowLayout *qt_mainwindow_layout(const QMainWindow *window);
+
/*!
\internal
*/
@@ -1315,7 +1319,7 @@ void QToolBar::initStyleOption(QStyleOptionToolBar *option) const
if (!mainWindow)
return;
- QMainWindowLayout *layout = qobject_cast<QMainWindowLayout *>(mainWindow->layout());
+ QMainWindowLayout *layout = qt_mainwindow_layout(mainWindow);
Q_ASSERT_X(layout != 0, "QToolBar::initStyleOption()",
"QMainWindow->layout() != QMainWindowLayout");
diff --git a/src/gui/widgets/qtoolbararealayout.cpp b/src/gui/widgets/qtoolbararealayout.cpp
index 8327af5376..b312751cef 100644
--- a/src/gui/widgets/qtoolbararealayout.cpp
+++ b/src/gui/widgets/qtoolbararealayout.cpp
@@ -59,6 +59,9 @@
QT_BEGIN_NAMESPACE
+// qmainwindow.cpp
+extern QMainWindowLayout *qt_mainwindow_layout(const QMainWindow *mainWindow);
+
QSize QToolBarAreaLayoutItem::minimumSize() const
{
if (skip())
@@ -872,7 +875,7 @@ void QToolBarAreaLayout::insertItem(QToolBar *before, QLayoutItem *item)
void QToolBarAreaLayout::apply(bool animate)
{
- QMainWindowLayout *layout = qobject_cast<QMainWindowLayout*>(mainWindow->layout());
+ QMainWindowLayout *layout = qt_mainwindow_layout(mainWindow);
Q_ASSERT(layout != 0);
Qt::LayoutDirection dir = mainWindow->layoutDirection();
diff --git a/src/gui/widgets/qtoolbarlayout.cpp b/src/gui/widgets/qtoolbarlayout.cpp
index f87510ffd1..59b027ec18 100644
--- a/src/gui/widgets/qtoolbarlayout.cpp
+++ b/src/gui/widgets/qtoolbarlayout.cpp
@@ -57,6 +57,9 @@
QT_BEGIN_NAMESPACE
+// qmainwindow.cpp
+extern QMainWindowLayout *qt_mainwindow_layout(const QMainWindow *window);
+
/******************************************************************************
** QToolBarItem
*/
@@ -404,7 +407,7 @@ void QToolBarLayout::setGeometry(const QRect &rect)
if (QMainWindow *win = qobject_cast<QMainWindow*>(tb->parentWidget())) {
Qt::ToolBarArea area = win->toolBarArea(tb);
if (win->unifiedTitleAndToolBarOnMac() && area == Qt::TopToolBarArea) {
- static_cast<QMainWindowLayout *>(win->layout())->fixSizeInUnifiedToolbar(tb);
+ qt_mainwindow_layout(win)->fixSizeInUnifiedToolbar(tb);
}
}
# endif
@@ -659,7 +662,7 @@ void QToolBarLayout::setExpanded(bool exp)
#else
animating = !tb->isWindow() && win->isAnimated();
#endif
- QMainWindowLayout *layout = qobject_cast<QMainWindowLayout*>(win->layout());
+ QMainWindowLayout *layout = qt_mainwindow_layout(win);
if (expanded) {
tb->raise();
} else {
diff --git a/src/imports/folderlistmodel/qdeclarativefolderlistmodel.cpp b/src/imports/folderlistmodel/qdeclarativefolderlistmodel.cpp
index 4983840aed..abab33c23b 100644
--- a/src/imports/folderlistmodel/qdeclarativefolderlistmodel.cpp
+++ b/src/imports/folderlistmodel/qdeclarativefolderlistmodel.cpp
@@ -167,7 +167,7 @@ QDeclarativeFolderListModel::QDeclarativeFolderListModel(QObject *parent)
connect(&d->model, SIGNAL(rowsRemoved(const QModelIndex&,int,int))
, this, SLOT(removed(const QModelIndex&,int,int)));
connect(&d->model, SIGNAL(dataChanged(const QModelIndex&,const QModelIndex&))
- , this, SLOT(dataChanged(const QModelIndex&,const QModelIndex&)));
+ , this, SLOT(handleDataChanged(const QModelIndex&,const QModelIndex&)));
connect(&d->model, SIGNAL(modelReset()), this, SLOT(refresh()));
connect(&d->model, SIGNAL(layoutChanged()), this, SLOT(refresh()));
}
@@ -363,7 +363,7 @@ void QDeclarativeFolderListModel::removed(const QModelIndex &index, int start, i
}
}
-void QDeclarativeFolderListModel::dataChanged(const QModelIndex &start, const QModelIndex &end)
+void QDeclarativeFolderListModel::handleDataChanged(const QModelIndex &start, const QModelIndex &end)
{
if (start.parent() == d->folderIndex)
emit dataChanged(index(start.row(),0), index(end.row(),0));
diff --git a/src/imports/folderlistmodel/qdeclarativefolderlistmodel.h b/src/imports/folderlistmodel/qdeclarativefolderlistmodel.h
index 1bab5f84ae..24edecd18e 100644
--- a/src/imports/folderlistmodel/qdeclarativefolderlistmodel.h
+++ b/src/imports/folderlistmodel/qdeclarativefolderlistmodel.h
@@ -138,7 +138,7 @@ private Q_SLOTS:
void refresh();
void inserted(const QModelIndex &index, int start, int end);
void removed(const QModelIndex &index, int start, int end);
- void dataChanged(const QModelIndex &start, const QModelIndex &end);
+ void handleDataChanged(const QModelIndex &start, const QModelIndex &end);
private:
Q_DISABLE_COPY(QDeclarativeFolderListModel)
diff --git a/src/multimedia/audio/qaudio_symbian_p.cpp b/src/multimedia/audio/qaudio_symbian_p.cpp
index 4522c5c7e8..59fc05f764 100644
--- a/src/multimedia/audio/qaudio_symbian_p.cpp
+++ b/src/multimedia/audio/qaudio_symbian_p.cpp
@@ -313,7 +313,8 @@ QAudio::State stateNativeToQt(State nativeState)
return QAudio::ActiveState;
case IdleState:
return QAudio::IdleState;
- case SuspendedState:
+ case SuspendedPausedState:
+ case SuspendedStoppedState:
return QAudio::SuspendedState;
default:
Q_ASSERT_X(false, Q_FUNC_INFO, "Invalid state");
@@ -432,15 +433,16 @@ bool DevSoundWrapper::isFormatSupported(const QAudioFormat &format) const
int DevSoundWrapper::samplesProcessed() const
{
- Q_ASSERT(StateInitialized == m_state);
int result = 0;
- switch (m_mode) {
- case QAudio::AudioInput:
- result = m_devsound->SamplesRecorded();
- break;
- case QAudio::AudioOutput:
- result = m_devsound->SamplesPlayed();
- break;
+ if (StateInitialized == m_state) {
+ switch (m_mode) {
+ case QAudio::AudioInput:
+ result = m_devsound->SamplesRecorded();
+ break;
+ case QAudio::AudioOutput:
+ result = m_devsound->SamplesPlayed();
+ break;
+ }
}
return result;
}
@@ -475,10 +477,22 @@ bool DevSoundWrapper::start()
return (KErrNone == err);
}
-void DevSoundWrapper::pause()
+bool DevSoundWrapper::pause()
{
Q_ASSERT(StateInitialized == m_state);
- m_devsound->Pause();
+ const bool canPause = isResumeSupported();
+ if (canPause)
+ m_devsound->Pause();
+ else
+ stop();
+ return canPause;
+}
+
+void DevSoundWrapper::resume()
+{
+ Q_ASSERT(StateInitialized == m_state);
+ Q_ASSERT(isResumeSupported());
+ // TODO: QTBUG-13625
}
void DevSoundWrapper::stop()
@@ -557,6 +571,12 @@ void DevSoundWrapper::populateCapabilities()
}
}
+bool DevSoundWrapper::isResumeSupported() const
+{
+ // TODO: QTBUG-13625
+ return false;
+}
+
void DevSoundWrapper::InitializeComplete(TInt aError)
{
Q_ASSERT(StateInitializing == m_state);
diff --git a/src/multimedia/audio/qaudio_symbian_p.h b/src/multimedia/audio/qaudio_symbian_p.h
index 58ef1925a4..84a93d1ee2 100644
--- a/src/multimedia/audio/qaudio_symbian_p.h
+++ b/src/multimedia/audio/qaudio_symbian_p.h
@@ -81,7 +81,10 @@ enum State {
, InitializingState
, ActiveState
, IdleState
- , SuspendedState
+ // QAudio is suspended; DevSound is paused
+ , SuspendedPausedState
+ // QAudio is suspended; DevSound is stopped
+ , SuspendedStoppedState
};
/**
@@ -117,7 +120,14 @@ public:
int samplesProcessed() const;
bool setFormat(const QAudioFormat &format);
bool start();
- void pause();
+
+ // If DevSound implementation supports pause, calls pause and returns true.
+ // Otherwise calls stop and returns false. In this case, all DevSound buffers
+ // currently held by the backend must be discarded.
+ bool pause();
+
+ void resume();
+
void stop();
void bufferProcessed();
@@ -140,6 +150,7 @@ signals:
private:
void getSupportedCodecs();
void populateCapabilities();
+ bool isResumeSupported() const;
private:
const QAudio::Mode m_mode;
diff --git a/src/multimedia/audio/qaudioinput_symbian_p.cpp b/src/multimedia/audio/qaudioinput_symbian_p.cpp
index 9d240cad30..485c69507a 100644
--- a/src/multimedia/audio/qaudioinput_symbian_p.cpp
+++ b/src/multimedia/audio/qaudioinput_symbian_p.cpp
@@ -174,23 +174,30 @@ void QAudioInputPrivate::suspend()
|| SymbianAudio::IdleState == m_internalState) {
m_notifyTimer->stop();
m_pullTimer->stop();
- m_devSound->pause();
const qint64 samplesRecorded = getSamplesRecorded();
m_totalSamplesRecorded += samplesRecorded;
- if (m_devSoundBuffer) {
- m_devSoundBufferQ.append(m_devSoundBuffer);
+ const bool paused = m_devSound->pause();
+ if (paused) {
+ if (m_devSoundBuffer)
+ m_devSoundBufferQ.append(m_devSoundBuffer);
m_devSoundBuffer = 0;
+ setState(SymbianAudio::SuspendedPausedState);
+ } else {
+ m_devSoundBuffer = 0;
+ m_devSoundBufferQ.clear();
+ m_devSoundBufferPos = 0;
+ setState(SymbianAudio::SuspendedStoppedState);
}
-
- setState(SymbianAudio::SuspendedState);
}
}
void QAudioInputPrivate::resume()
{
- if (SymbianAudio::SuspendedState == m_internalState) {
- if (!m_pullMode && !bytesReady())
+ if (QAudio::SuspendedState == m_externalState) {
+ if (SymbianAudio::SuspendedPausedState == m_internalState)
+ m_devSound->resume();
+ else
m_devSound->start();
startDataTransfer();
}
@@ -246,7 +253,7 @@ int QAudioInputPrivate::notifyInterval() const
qint64 QAudioInputPrivate::processedUSecs() const
{
int samplesPlayed = 0;
- if (m_devSound && SymbianAudio::SuspendedState != m_internalState)
+ if (m_devSound && QAudio::SuspendedState != m_externalState)
samplesPlayed = getSamplesRecorded();
// Protect against division by zero
@@ -335,7 +342,7 @@ void QAudioInputPrivate::startDataTransfer()
if (!m_pullMode)
pushData();
} else {
- if (SymbianAudio::SuspendedState == m_internalState)
+ if (QAudio::SuspendedState == m_externalState)
setState(SymbianAudio::ActiveState);
else
setState(SymbianAudio::IdleState);
@@ -373,7 +380,8 @@ qint64 QAudioInputPrivate::read(char *data, qint64 len)
TDesC8 &inputBuffer = buffer->Data();
- const qint64 inputBytes = bytesReady();
+ Q_ASSERT(inputBuffer.Length() >= m_devSoundBufferPos);
+ const qint64 inputBytes = inputBuffer.Length() - m_devSoundBufferPos;
const qint64 outputBytes = len - bytesRead;
const qint64 copyBytes = outputBytes < inputBytes ?
outputBytes : inputBytes;
@@ -384,7 +392,7 @@ qint64 QAudioInputPrivate::read(char *data, qint64 len)
data += copyBytes;
bytesRead += copyBytes;
- if (!bytesReady())
+ if (inputBytes == copyBytes)
bufferEmptied();
}
@@ -403,13 +411,14 @@ void QAudioInputPrivate::pullData()
TDesC8 &inputBuffer = buffer->Data();
- const qint64 inputBytes = bytesReady();
+ Q_ASSERT(inputBuffer.Length() >= m_devSoundBufferPos);
+ const qint64 inputBytes = inputBuffer.Length() - m_devSoundBufferPos;
const qint64 bytesPushed = m_sink->write(
(char*)inputBuffer.Ptr() + m_devSoundBufferPos, inputBytes);
m_devSoundBufferPos += bytesPushed;
- if (!bytesReady())
+ if (inputBytes == bytesPushed)
bufferEmptied();
if (!bytesPushed)
@@ -441,7 +450,7 @@ void QAudioInputPrivate::devsoundBufferToBeEmptied(CMMFBuffer *baseBuffer)
m_totalBytesReady += buffer->Data().Length();
- if (SymbianAudio::SuspendedState == m_internalState) {
+ if (SymbianAudio::SuspendedPausedState == m_internalState) {
m_devSoundBufferQ.append(buffer);
} else {
// Will be returned to DevSoundWrapper by bufferProcessed().
diff --git a/src/multimedia/audio/qaudiooutput_symbian_p.cpp b/src/multimedia/audio/qaudiooutput_symbian_p.cpp
index 5098469c5c..ea14e1946e 100644
--- a/src/multimedia/audio/qaudiooutput_symbian_p.cpp
+++ b/src/multimedia/audio/qaudiooutput_symbian_p.cpp
@@ -180,39 +180,33 @@ void QAudioOutputPrivate::suspend()
|| SymbianAudio::IdleState == m_internalState) {
m_notifyTimer->stop();
m_underflowTimer->stop();
-
const qint64 samplesWritten = SymbianAudio::Utils::bytesToSamples(
m_format, m_bytesWritten);
-
const qint64 samplesPlayed = getSamplesPlayed();
-
- m_bytesWritten = 0;
-
- // CMMFDevSound::Pause() is not guaranteed to work correctly in all
- // implementations, for play-mode DevSound sessions. We therefore
- // have to implement suspend() by calling CMMFDevSound::Stop().
- // Because this causes buffered data to be dropped, we replace the
- // lost data with silence following a call to resume(), in order to
- // ensure that processedUSecs() returns the correct value.
- m_devSound->stop();
m_totalSamplesPlayed += samplesPlayed;
-
- // Calculate the amount of data dropped
- const qint64 paddingSamples = samplesWritten - samplesPlayed;
- Q_ASSERT(paddingSamples >= 0);
- m_bytesPadding = SymbianAudio::Utils::samplesToBytes(m_format,
- paddingSamples);
-
- setState(SymbianAudio::SuspendedState);
+ m_bytesWritten = 0;
+ const bool paused = m_devSound->pause();
+ if (paused) {
+ setState(SymbianAudio::SuspendedPausedState);
+ } else {
+ m_devSoundBuffer = 0;
+ // Calculate the amount of data dropped
+ const qint64 paddingSamples = samplesWritten - samplesPlayed;
+ Q_ASSERT(paddingSamples >= 0);
+ m_bytesPadding = SymbianAudio::Utils::samplesToBytes(m_format,
+ paddingSamples);
+ setState(SymbianAudio::SuspendedStoppedState);
+ }
}
}
void QAudioOutputPrivate::resume()
{
- if (SymbianAudio::SuspendedState == m_internalState) {
- if (!m_pullMode && m_devSoundBuffer && m_devSoundBuffer->Data().Length())
- bufferFilled();
- startPlayback();
+ if (QAudio::SuspendedState == m_externalState) {
+ if (SymbianAudio::SuspendedPausedState == m_internalState)
+ m_devSound->resume();
+ else
+ startPlayback();
}
}
@@ -270,7 +264,7 @@ int QAudioOutputPrivate::notifyInterval() const
qint64 QAudioOutputPrivate::processedUSecs() const
{
int samplesPlayed = 0;
- if (m_devSound && SymbianAudio::SuspendedState != m_internalState)
+ if (m_devSound && QAudio::SuspendedState != m_externalState)
samplesPlayed = getSamplesPlayed();
// Protect against division by zero
@@ -371,6 +365,9 @@ void QAudioOutputPrivate::devsoundPlayError(int err)
else
setState(SymbianAudio::IdleState);
break;
+ case KErrOverflow:
+ // Silently consume this error when in playback mode
+ break;
default:
setError(QAudio::IOError);
break;
diff --git a/src/multimedia/video/qabstractvideobuffer.cpp b/src/multimedia/video/qabstractvideobuffer.cpp
index db05ee5911..978636a320 100644
--- a/src/multimedia/video/qabstractvideobuffer.cpp
+++ b/src/multimedia/video/qabstractvideobuffer.cpp
@@ -87,7 +87,7 @@ QT_BEGIN_NAMESPACE
\value NotMapped The video buffer has is not mapped to memory.
\value ReadOnly The mapped memory is populated with data from the video buffer when mapped, but
the content of the mapped memory may be discarded when unmapped.
- \value WriteOnly The mapped memory in unitialized when mapped, and the content will be used to
+ \value WriteOnly The mapped memory is uninitialized when mapped, and the content will be used to
populate the video buffer when unmapped.
\value ReadWrite The mapped memory is populated with data from the video buffer, and the
video buffer is repopulated with the content of the mapped memory.
diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp
index 95ccb77c16..2ab28c7178 100644
--- a/src/network/access/qhttpnetworkconnection.cpp
+++ b/src/network/access/qhttpnetworkconnection.cpp
@@ -746,7 +746,7 @@ void QHttpNetworkConnectionPrivate::_q_startNextRequest()
return;
// try to get a free AND connected socket
for (int i = 0; i < channelCount; ++i) {
- if (!channels[i].isSocketBusy() && channels[i].socket->state() == QAbstractSocket::ConnectedState) {
+ if (!channels[i].reply && !channels[i].isSocketBusy() && channels[i].socket->state() == QAbstractSocket::ConnectedState) {
dequeueAndSendRequest(channels[i].socket);
}
}
@@ -756,7 +756,7 @@ void QHttpNetworkConnectionPrivate::_q_startNextRequest()
return;
// try to get a free unconnected socket
for (int i = 0; i < channelCount; ++i) {
- if (!channels[i].isSocketBusy()) {
+ if (!channels[i].reply && !channels[i].isSocketBusy()) {
dequeueAndSendRequest(channels[i].socket);
}
}
diff --git a/src/network/access/qnetworkreplyimpl.cpp b/src/network/access/qnetworkreplyimpl.cpp
index 70418e9115..3a629cf575 100644
--- a/src/network/access/qnetworkreplyimpl.cpp
+++ b/src/network/access/qnetworkreplyimpl.cpp
@@ -595,6 +595,7 @@ void QNetworkReplyImplPrivate::appendDownstreamData(QIODevice *data)
void QNetworkReplyImplPrivate::appendDownstreamData(const QByteArray &data)
{
+ Q_UNUSED(data)
// TODO implement
// TODO call
diff --git a/src/network/bearer/qbearerengine.cpp b/src/network/bearer/qbearerengine.cpp
index 2f8624a0d0..b07492484e 100644
--- a/src/network/bearer/qbearerengine.cpp
+++ b/src/network/bearer/qbearerengine.cpp
@@ -58,18 +58,21 @@ QBearerEngine::~QBearerEngine()
it.value()->isValid = false;
it.value()->id.clear();
}
+ snapConfigurations.clear();
for (it = accessPointConfigurations.begin(), end = accessPointConfigurations.end();
it != end; ++it) {
it.value()->isValid = false;
it.value()->id.clear();
}
+ accessPointConfigurations.clear();
for (it = userChoiceConfigurations.begin(), end = userChoiceConfigurations.end();
it != end; ++it) {
it.value()->isValid = false;
it.value()->id.clear();
}
+ userChoiceConfigurations.clear();
}
bool QBearerEngine::requiresPolling() const
diff --git a/src/network/kernel/qauthenticator.cpp b/src/network/kernel/qauthenticator.cpp
index 18cc14e207..f97d833bd5 100644
--- a/src/network/kernel/qauthenticator.cpp
+++ b/src/network/kernel/qauthenticator.cpp
@@ -210,19 +210,38 @@ void QAuthenticator::setUser(const QString &user)
switch(d->method) {
case QAuthenticatorPrivate::DigestMd5:
- case QAuthenticatorPrivate::Ntlm:
- if((separatorPosn = user.indexOf(QLatin1String("\\"))) != -1)
- {
+ if((separatorPosn = user.indexOf(QLatin1String("\\"))) != -1) {
//domain name is present
+ d->userDomain.clear();
d->realm = user.left(separatorPosn);
d->user = user.mid(separatorPosn + 1);
} else if((separatorPosn = user.indexOf(QLatin1String("@"))) != -1) {
//domain name is present
+ d->userDomain.clear();
d->realm = user.mid(separatorPosn + 1);
d->user = user.left(separatorPosn);
} else {
d->user = user;
d->realm.clear();
+ d->userDomain.clear();
+ }
+ break;
+
+ case QAuthenticatorPrivate::Ntlm:
+ if((separatorPosn = user.indexOf(QLatin1String("\\"))) != -1) {
+ //domain name is present
+ d->realm.clear();
+ d->userDomain = user.left(separatorPosn);
+ d->user = user.mid(separatorPosn + 1);
+ } else if((separatorPosn = user.indexOf(QLatin1String("@"))) != -1) {
+ //domain name is present
+ d->realm.clear();
+ d->userDomain = user.left(separatorPosn);
+ d->user = user.left(separatorPosn);
+ } else {
+ d->user = user;
+ d->realm.clear();
+ d->userDomain.clear();
}
break;
// For other auth mechanisms, domain name will be part of username
@@ -1178,7 +1197,7 @@ static QByteArray qCreatev2Hash(const QAuthenticatorPrivate *ctx,
// Assuming the user and domain is always unicode in challenge
QByteArray message =
qStringAsUcs2Le(ctx->user.toUpper()) +
- qStringAsUcs2Le(ctx->realm);
+ qStringAsUcs2Le(phase3->domainStr);
phase3->v2Hash = qEncodeHmacMd5(hashKey, message);
}
@@ -1364,9 +1383,6 @@ static QByteArray qNtlmPhase3(QAuthenticatorPrivate *ctx, const QByteArray& phas
bool unicode = ch.flags & NTLMSSP_NEGOTIATE_UNICODE;
- if(ctx->realm.isEmpty())
- ctx->realm = ch.targetNameStr;
-
pb.flags = NTLMSSP_NEGOTIATE_NTLM;
if (unicode)
pb.flags |= NTLMSSP_NEGOTIATE_UNICODE;
@@ -1377,8 +1393,13 @@ static QByteArray qNtlmPhase3(QAuthenticatorPrivate *ctx, const QByteArray& phas
int offset = QNtlmPhase3BlockBase::Size;
Q_ASSERT(QNtlmPhase3BlockBase::Size == sizeof(QNtlmPhase3BlockBase));
- offset = qEncodeNtlmString(pb.domain, offset, ctx->realm, unicode);
- pb.domainStr = ctx->realm;
+ if(ctx->userDomain.isEmpty()) {
+ offset = qEncodeNtlmString(pb.domain, offset, ch.targetNameStr, unicode);
+ pb.domainStr = ch.targetNameStr;
+ } else {
+ offset = qEncodeNtlmString(pb.domain, offset, ctx->userDomain, unicode);
+ pb.domainStr = ctx->userDomain;
+ }
offset = qEncodeNtlmString(pb.user, offset, ctx->user, unicode);
pb.userStr = ctx->user;
diff --git a/src/network/kernel/qauthenticator_p.h b/src/network/kernel/qauthenticator_p.h
index 10966014b9..4e09360d2a 100644
--- a/src/network/kernel/qauthenticator_p.h
+++ b/src/network/kernel/qauthenticator_p.h
@@ -91,6 +91,7 @@ public:
// ntlm specific
QString workstation;
+ QString userDomain;
QByteArray calculateResponse(const QByteArray &method, const QByteArray &path);
diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
index b762bcc0f6..d89ef08d90 100644
--- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
+++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
@@ -866,6 +866,32 @@ void QGL2PaintEngineExPrivate::fill(const QVectorPath& path)
if (do_vectorpath_cache)
path.makeCacheable();
+ if (!device->format().stencil()) {
+ // If there is no stencil buffer, triangulate the path instead.
+
+ QRectF bbox = path.controlPointRect();
+ // If the path doesn't fit within these limits, it is possible that the triangulation will fail.
+ bool withinLimits = (bbox.left() > -0x8000 * inverseScale)
+ && (bbox.right() < 0x8000 * inverseScale)
+ && (bbox.top() > -0x8000 * inverseScale)
+ && (bbox.bottom() < 0x8000 * inverseScale);
+ if (withinLimits) {
+ QTriangleSet polys = qTriangulate(path, QTransform().scale(1 / inverseScale, 1 / inverseScale));
+
+ QVarLengthArray<float> vertices(polys.vertices.size());
+ for (int i = 0; i < polys.vertices.size(); ++i)
+ vertices[i] = float(inverseScale * polys.vertices.at(i));
+
+ prepareForDraw(currentBrush.isOpaque());
+ setVertexAttributePointer(QT_VERTEX_COORDS_ATTR, vertices.constData());
+ glDrawElements(GL_TRIANGLES, polys.indices.size(), GL_UNSIGNED_INT, polys.indices.constData());
+ } else {
+ // We can't handle big, concave painter paths with OpenGL without stencil buffer.
+ qWarning("Painter path exceeds +/-32767 pixels.");
+ }
+ return;
+ }
+
// The path is too complicated & needs the stencil technique
vertexCoordinateArray.clear();
vertexCoordinateArray.addPath(path, inverseScale, false);
@@ -1525,8 +1551,15 @@ void QGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngineGlyphCache::Type glyp
vertexCoordinates->clear();
textureCoordinates->clear();
+ bool supportsSubPixelPositions = staticTextItem->fontEngine->supportsSubPixelPositions();
for (int i=0; i<staticTextItem->numGlyphs; ++i) {
- const QTextureGlyphCache::Coord &c = cache->coords.value(staticTextItem->glyphs[i]);
+ QFixed subPixelPosition;
+ if (supportsSubPixelPositions)
+ subPixelPosition = cache->subPixelPositionForX(staticTextItem->glyphPositions[i].x);
+
+ QTextureGlyphCache::GlyphAndSubPixelPosition glyph(staticTextItem->glyphs[i], subPixelPosition);
+
+ const QTextureGlyphCache::Coord &c = cache->coords.value(glyph);
int x = staticTextItem->glyphPositions[i].x.toInt() + c.baseLineX - margin;
int y = staticTextItem->glyphPositions[i].y.toInt() - c.baseLineY - margin;
diff --git a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp
index 53a2f3ac1a..f8e34d4286 100644
--- a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp
+++ b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp
@@ -216,7 +216,7 @@ void QGLTextureGlyphCache::resizeTextureData(int width, int height)
pex->updateClipScissorTest();
}
-void QGLTextureGlyphCache::fillTexture(const Coord &c, glyph_t glyph)
+void QGLTextureGlyphCache::fillTexture(const Coord &c, glyph_t glyph, QFixed subPixelPosition)
{
if (ctx == 0) {
qWarning("QGLTextureGlyphCache::fillTexture: Called with no context");
@@ -225,7 +225,7 @@ void QGLTextureGlyphCache::fillTexture(const Coord &c, glyph_t glyph)
QGLGlyphTexture *glyphTexture = m_textureResource.value(ctx);
if (pex == 0 || ctx->d_ptr->workaround_brokenFBOReadBack) {
- QImageTextureGlyphCache::fillTexture(c, glyph);
+ QImageTextureGlyphCache::fillTexture(c, glyph, subPixelPosition);
glBindTexture(GL_TEXTURE_2D, glyphTexture->m_texture);
const QImage &texture = image();
@@ -238,7 +238,7 @@ void QGLTextureGlyphCache::fillTexture(const Coord &c, glyph_t glyph)
return;
}
- QImage mask = textureMapForGlyph(glyph);
+ QImage mask = textureMapForGlyph(glyph, subPixelPosition);
const int maskWidth = mask.width();
const int maskHeight = mask.height();
@@ -291,4 +291,19 @@ int QGLTextureGlyphCache::glyphPadding() const
return 1;
}
+int QGLTextureGlyphCache::maxTextureWidth() const
+{
+ if (ctx == 0)
+ return QImageTextureGlyphCache::maxTextureWidth();
+ else
+ return ctx->d_ptr->maxTextureSize();
+}
+
+int QGLTextureGlyphCache::maxTextureHeight() const
+{
+ if (ctx == 0)
+ return QImageTextureGlyphCache::maxTextureHeight();
+ else
+ return ctx->d_ptr->maxTextureSize();
+}
QT_END_NAMESPACE
diff --git a/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h b/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h
index 2ae3a6420f..ada47e9e5d 100644
--- a/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h
+++ b/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h
@@ -106,8 +106,10 @@ public:
virtual void createTextureData(int width, int height);
virtual void resizeTextureData(int width, int height);
- virtual void fillTexture(const Coord &c, glyph_t glyph);
+ virtual void fillTexture(const Coord &c, glyph_t glyph, QFixed subPixelPosition);
virtual int glyphPadding() const;
+ virtual int maxTextureWidth() const;
+ virtual int maxTextureHeight() const;
inline GLuint texture() const {
QGLTextureGlyphCache *that = const_cast<QGLTextureGlyphCache *>(this);
diff --git a/src/opengl/gl2paintengineex/qtriangulatingstroker.cpp b/src/opengl/gl2paintengineex/qtriangulatingstroker.cpp
index 9bc099df38..7b0b8a2180 100644
--- a/src/opengl/gl2paintengineex/qtriangulatingstroker.cpp
+++ b/src/opengl/gl2paintengineex/qtriangulatingstroker.cpp
@@ -509,6 +509,7 @@ void QDashedStrokeProcessor::process(const QVectorPath &path, const QPen &pen, c
m_dash_stroker.setDashPattern(pen.dashPattern());
m_dash_stroker.setStrokeWidth(cosmetic ? width * m_inv_scale : width);
+ m_dash_stroker.setDashOffset(pen.dashOffset());
m_dash_stroker.setMiterLimit(pen.miterLimit());
m_dash_stroker.setClipRect(clip);
diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp
index 63d4a6c2bc..ec191e1cce 100644
--- a/src/opengl/qgl.cpp
+++ b/src/opengl/qgl.cpp
@@ -110,11 +110,10 @@ extern const QX11Info *qt_x11Info(const QPaintDevice *pd);
#endif
struct QGLThreadContext {
-#ifdef QT_OPENGL_ES
~QGLThreadContext() {
- eglReleaseThread();
+ if (context)
+ context->doneCurrent();
}
-#endif
QGLContext *context;
};
diff --git a/src/opengl/qgl_x11.cpp b/src/opengl/qgl_x11.cpp
index bfb232da89..f3a4c95326 100644
--- a/src/opengl/qgl_x11.cpp
+++ b/src/opengl/qgl_x11.cpp
@@ -54,6 +54,7 @@
#include <private/qt_x11_p.h>
#include <private/qpixmap_x11_p.h>
#include <private/qimagepixmapcleanuphooks_p.h>
+#include <private/qunicodetables_p.h>
#ifdef Q_OS_HPUX
// for GLXPBuffer
#include <private/qglpixelbuffer_p.h>
diff --git a/src/opengl/qglframebufferobject.cpp b/src/opengl/qglframebufferobject.cpp
index 660201ba4c..cee950aa5e 100644
--- a/src/opengl/qglframebufferobject.cpp
+++ b/src/opengl/qglframebufferobject.cpp
@@ -324,6 +324,10 @@ void QGLFBOGLPaintDevice::setFBO(QGLFramebufferObject* f,
fboFormat.setStencil(true);
} else if (attachment == QGLFramebufferObject::Depth) {
fboFormat.setDepth(true);
+ fboFormat.setStencil(false);
+ } else {
+ fboFormat.setDepth(false);
+ fboFormat.setStencil(false);
}
GLenum format = f->format().internalTextureFormat();
diff --git a/src/opengl/qglpixelbuffer.cpp b/src/opengl/qglpixelbuffer.cpp
index da2974ca0d..2ec345da57 100644
--- a/src/opengl/qglpixelbuffer.cpp
+++ b/src/opengl/qglpixelbuffer.cpp
@@ -67,7 +67,13 @@
when the pbuffer contents change, eliminating the need for
additional copy operations. This is supported only on Windows
and Mac OS X systems that provide the \c render_texture
- extension.
+ extension. Note that under Windows, a multi-sampled pbuffer
+ can't be used in conjunction with the \c render_texture
+ extension. If a multi-sampled pbuffer is requested under
+ Windows, the \c render_texture extension is turned off for that
+ pbuffer.
+
+
\endlist
diff --git a/src/opengl/qglpixelbuffer_win.cpp b/src/opengl/qglpixelbuffer_win.cpp
index df83566d19..1da0aad294 100644
--- a/src/opengl/qglpixelbuffer_win.cpp
+++ b/src/opengl/qglpixelbuffer_win.cpp
@@ -167,6 +167,11 @@ typedef BOOL (WINAPI * PFNWGLSETPBUFFERATTRIBARBPROC) (HPBUFFERARB hPbuffer, con
#define WGL_FLOAT_COMPONENTS_NV 0x20B0
#endif
+#ifndef WGL_ARB_multisample
+#define WGL_SAMPLE_BUFFERS_ARB 0x2041
+#define WGL_SAMPLES_ARB 0x2042
+#endif
+
QGLFormat pfiToQGLFormat(HDC hdc, int pfi);
static void qt_format_to_attrib_list(bool has_render_texture, const QGLFormat &f, int attribs[])
@@ -226,14 +231,12 @@ static void qt_format_to_attrib_list(bool has_render_texture, const QGLFormat &f
attribs[i++] = WGL_FLOAT_COMPONENTS_NV;
attribs[i++] = TRUE;
}
- // sample buffers doesn't work in conjunction with the render_texture extension
- // so igonre that for now
- // if (f.sampleBuffers()) {
- // attribs[i++] = WGL_SAMPLE_BUFFERS_ARB;
- // attribs[i++] = 1;
- // attribs[i++] = WGL_SAMPLES_ARB;
- // attribs[i++] = f.samples() == -1 ? 16 : f.samples();
- // }
+ if (f.sampleBuffers()) {
+ attribs[i++] = WGL_SAMPLE_BUFFERS_ARB;
+ attribs[i++] = 1;
+ attribs[i++] = WGL_SAMPLES_ARB;
+ attribs[i++] = f.samples() == -1 ? 16 : f.samples();
+ }
attribs[i] = 0;
}
@@ -256,12 +259,17 @@ bool QGLPixelBufferPrivate::init(const QSize &size, const QGLFormat &f, QGLWidge
dc = wglGetCurrentDC();
Q_ASSERT(dc);
- PFNWGLGETEXTENSIONSSTRINGARBPROC wglGetExtensionsStringARB =
- (PFNWGLGETEXTENSIONSSTRINGARBPROC) wglGetProcAddress("wglGetExtensionsStringARB");
+ // sample buffers doesn't work in conjunction with the render_texture extension
+ if (f.sampleBuffers()) {
+ has_render_texture = false;
+ } else {
+ PFNWGLGETEXTENSIONSSTRINGARBPROC wglGetExtensionsStringARB =
+ (PFNWGLGETEXTENSIONSSTRINGARBPROC) wglGetProcAddress("wglGetExtensionsStringARB");
- if (wglGetExtensionsStringARB) {
- QString extensions(QLatin1String(wglGetExtensionsStringARB(dc)));
- has_render_texture = extensions.contains(QLatin1String("WGL_ARB_render_texture"));
+ if (wglGetExtensionsStringARB) {
+ QString extensions(QLatin1String(wglGetExtensionsStringARB(dc)));
+ has_render_texture = extensions.contains(QLatin1String("WGL_ARB_render_texture"));
+ }
}
int attribs[40];
diff --git a/src/opengl/qpaintengine_opengl.cpp b/src/opengl/qpaintengine_opengl.cpp
index 12c487d449..58778ea86c 100644
--- a/src/opengl/qpaintengine_opengl.cpp
+++ b/src/opengl/qpaintengine_opengl.cpp
@@ -921,6 +921,7 @@ static inline QPainterPath strokeForPath(const QPainterPath &path, const QPen &c
stroker.setCapStyle(cpen.capStyle());
stroker.setJoinStyle(cpen.joinStyle());
stroker.setMiterLimit(cpen.miterLimit());
+ stroker.setDashOffset(cpen.dashOffset());
qreal width = cpen.widthF();
if (width == 0)
@@ -4734,9 +4735,11 @@ void QGLGlyphCache::cacheGlyphs(QGLContext *context, QFontEngine *fontEngine,
font_cache = new QGLFontGlyphHash;
// qDebug() << "new context" << context << font_cache;
qt_context_cache.insert(context, font_cache);
- if (context->isValid() && context->device()->devType() == QInternal::Widget) {
- QWidget *widget = static_cast<QWidget *>(context->device());
- connect(widget, SIGNAL(destroyed(QObject*)), SLOT(widgetDestroyed(QObject*)));
+ if (context->isValid()) {
+ if (context->device()->devType() == QInternal::Widget) {
+ QWidget *widget = static_cast<QWidget *>(context->device());
+ connect(widget, SIGNAL(destroyed(QObject*)), SLOT(widgetDestroyed(QObject*)));
+ }
connect(QGLSignalProxy::instance(),
SIGNAL(aboutToDestroyContext(const QGLContext*)),
SLOT(cleanupContext(const QGLContext*)));
diff --git a/src/opengl/qpixmapdata_gl_p.h b/src/opengl/qpixmapdata_gl_p.h
index 4cb67b0952..f000993dfc 100644
--- a/src/opengl/qpixmapdata_gl_p.h
+++ b/src/opengl/qpixmapdata_gl_p.h
@@ -168,6 +168,7 @@ private:
mutable QGLPixmapGLPaintDevice m_glDevice;
friend class QGLPixmapGLPaintDevice;
+ friend class QMeeGoPixmapData;
};
QT_END_NAMESPACE
diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp
index 52abe5a60b..bc4912bd07 100644
--- a/src/opengl/qwindowsurface_gl.cpp
+++ b/src/opengl/qwindowsurface_gl.cpp
@@ -190,7 +190,10 @@ public:
QGLWidget *shareWidget() {
if (!initializing && !widget && !cleanedUp) {
initializing = true;
- widget = new QGLWidget;
+
+ widget = new QGLWidget(QGLFormat(QGL::SingleBuffer | QGL::NoDepthBuffer | QGL::NoStencilBuffer));
+ widget->resize(1, 1);
+
// We dont need this internal widget to appear in QApplication::topLevelWidgets()
if (QWidgetPrivate::allWidgets)
QWidgetPrivate::allWidgets->remove(widget);
@@ -342,12 +345,14 @@ QGLWindowSurface::~QGLWindowSurface()
void QGLWindowSurface::deleted(QObject *object)
{
- // Make sure that the fbo is destroyed before destroying its context.
- delete d_ptr->fbo;
- d_ptr->fbo = 0;
-
QWidget *widget = qobject_cast<QWidget *>(object);
if (widget) {
+ if (widget == window()) {
+ // Make sure that the fbo is destroyed before destroying its context.
+ delete d_ptr->fbo;
+ d_ptr->fbo = 0;
+ }
+
QWidgetPrivate *widgetPrivate = widget->d_func();
if (widgetPrivate->extraData()) {
union { QGLContext **ctxPtr; void **voidPtr; };
@@ -421,6 +426,8 @@ QPaintDevice *QGLWindowSurface::paintDevice()
QGLContext *ctx = reinterpret_cast<QGLContext *>(window()->d_func()->extraData()->glContext);
ctx->makeCurrent();
+
+ Q_ASSERT(d_ptr->fbo);
return d_ptr->fbo;
}
diff --git a/src/openvg/qpaintengine_vg.cpp b/src/openvg/qpaintengine_vg.cpp
index 75e5a60586..3c2fd3d92f 100644
--- a/src/openvg/qpaintengine_vg.cpp
+++ b/src/openvg/qpaintengine_vg.cpp
@@ -196,7 +196,9 @@ public:
#endif
QTransform transform; // Currently active transform.
- bool simpleTransform; // True if the transform is simple (non-projective).
+ 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
qreal penScale; // Pen scaling factor from "transform".
QTransform pathTransform; // Calculated VG path transformation.
@@ -372,6 +374,7 @@ void QVGPaintEnginePrivate::init()
roundRectPath = 0;
#endif
+ affineTransform = true;
simpleTransform = true;
pathTransformSet = false;
penScale = 1.0;
@@ -524,12 +527,59 @@ 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 |
@@ -552,9 +602,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;
- simpleTransform = false;
+ affineTransform = false;
} else {
- simpleTransform = true;
+ affineTransform = true;
}
pathTransformSet = false;
@@ -583,7 +633,7 @@ VGPath QVGPaintEnginePrivate::vectorPathToVGPath(const QVectorPath& path)
// Size is sufficient segments for drawRoundedRect() paths.
QVarLengthArray<VGubyte, 20> segments;
- if (sizeof(qreal) == sizeof(VGfloat) && elements && simpleTransform) {
+ if (sizeof(qreal) == sizeof(VGfloat) && elements && affineTransform) {
// If Qt was compiled with qreal the same size as VGfloat,
// then convert the segment types and use the incoming
// points array directly.
@@ -618,7 +668,7 @@ VGPath QVGPaintEnginePrivate::vectorPathToVGPath(const QVectorPath& path)
int curvePos = 0;
QPointF temp;
- if (elements && simpleTransform) {
+ if (elements && affineTransform) {
// Convert the members of the element array.
for (int i = 0; i < count; ++i) {
switch (elements[i]) {
@@ -662,7 +712,7 @@ VGPath QVGPaintEnginePrivate::vectorPathToVGPath(const QVectorPath& path)
}
points += 2;
}
- } else if (elements && !simpleTransform) {
+ } else if (elements && !affineTransform) {
// Convert the members of the element array after applying the
// current transform to the path locally.
for (int i = 0; i < count; ++i) {
@@ -711,7 +761,7 @@ VGPath QVGPaintEnginePrivate::vectorPathToVGPath(const QVectorPath& path)
}
points += 2;
}
- } else if (count > 0 && simpleTransform) {
+ } else if (count > 0 && affineTransform) {
// If there is no element array, then the path is assumed
// to be a MoveTo followed by several LineTo's.
coords.append(points[0]);
@@ -724,7 +774,7 @@ VGPath QVGPaintEnginePrivate::vectorPathToVGPath(const QVectorPath& path)
segments.append(VG_LINE_TO_ABS);
--count;
}
- } else if (count > 0 && !simpleTransform) {
+ } else if (count > 0 && !affineTransform) {
// Convert a simple path, and apply the transform locally.
temp = transform.map(QPointF(points[0], points[1]));
coords.append(temp.x());
@@ -785,7 +835,7 @@ VGPath QVGPaintEnginePrivate::painterPathToVGPath(const QPainterPath& path)
bool haveStart = false;
bool haveEnd = false;
- if (simpleTransform) {
+ if (affineTransform) {
// Convert the members of the element array.
for (int i = 0; i < count; ++i) {
switch (elements[i].type) {
@@ -958,7 +1008,7 @@ VGPath QVGPaintEnginePrivate::roundedRectPath(const QRectF &rect, qreal xRadius,
x1, y2 - (1 - KAPPA) * yRadius,
x1, y2 - yRadius,
x1, y1 + yRadius, // LineTo
- x1, y1 + KAPPA * yRadius, // CurveTo
+ x1, y1 + (1 - KAPPA) * yRadius, // CurveTo
x1 + (1 - KAPPA) * xRadius, y1,
x1 + xRadius, y1
};
@@ -1560,36 +1610,6 @@ 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)
@@ -1607,7 +1627,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 && clipTransformIsSimple(d->transform)) {
+ path.elementCount() == 4 && d->simpleTransform) {
// Clipping region that resulted from QPainter::setClipRect(QRectF).
// Convert it into a QRect and apply.
const qreal *points = path.points();
@@ -1757,7 +1777,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 && clipTransformIsSimple(d->transform)) {
+ path.elementCount() == 4 && d->simpleTransform) {
// Clipping region that resulted from QPainter::setClipRect(QRectF).
// Convert it into a QRect and apply.
const qreal *points = path.points();
@@ -1809,7 +1829,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 && !clipTransformIsSimple(d->transform)) {
+ if (op != Qt::NoClip && !d->simpleTransform) {
QPaintEngineEx::clip(rect, op);
return;
}
@@ -1928,7 +1948,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 && !clipTransformIsSimple(d->transform)) {
+ if (op != Qt::NoClip && !d->simpleTransform) {
QPaintEngineEx::clip(region, op);
return;
}
@@ -2505,14 +2525,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() &&
- clipTransformIsSimple(d->transform) && d->opacity == 1.0f &&
+ d->simpleTransform && d->opacity == 1.0f &&
clearRect(rect, brush.color())) {
return;
}
#if !defined(QVG_NO_MODIFY_PATH)
VGfloat coords[8];
- if (d->simpleTransform) {
+ if (d->affineTransform) {
coords[0] = rect.x();
coords[1] = rect.y();
coords[2] = rect.x() + rect.width();
@@ -2547,14 +2567,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 (clipTransformIsSimple(d->transform) && d->opacity == 1.0f && color.alpha() == 255 &&
+ if (d->simpleTransform && d->opacity == 1.0f && color.alpha() == 255 &&
clearRect(rect, color)) {
return;
}
#if !defined(QVG_NO_MODIFY_PATH)
VGfloat coords[8];
- if (d->simpleTransform) {
+ if (d->affineTransform) {
coords[0] = rect.x();
coords[1] = rect.y();
coords[2] = rect.x() + rect.width();
@@ -2587,7 +2607,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->simpleTransform) {
+ if (d->affineTransform) {
QVGPainterState *s = state();
VGPath vgpath = d->roundedRectPath(rect, xrad, yrad, mode);
d->draw(vgpath, s->pen, s->brush);
@@ -2606,7 +2626,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->simpleTransform) {
+ if (d->affineTransform) {
coords[0] = rects->x();
coords[1] = rects->y();
coords[2] = rects->x() + rects->width();
@@ -2647,7 +2667,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->simpleTransform) {
+ if (d->affineTransform) {
coords[0] = rects->x();
coords[1] = rects->y();
coords[2] = rects->x() + rects->width();
@@ -2685,7 +2705,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->simpleTransform) {
+ if (d->affineTransform) {
coords[0] = lines->x1();
coords[1] = lines->y1();
coords[2] = lines->x2();
@@ -2713,7 +2733,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->simpleTransform) {
+ if (d->affineTransform) {
coords[0] = lines->x1();
coords[1] = lines->y1();
coords[2] = lines->x2();
@@ -2739,7 +2759,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->simpleTransform) {
+ if (d->affineTransform) {
QVGPainterState *s = state();
VGPath path = vgCreatePath(VG_PATH_FORMAT_STANDARD,
VG_PATH_DATATYPE_F,
@@ -2812,7 +2832,7 @@ void QVGPaintEngine::drawPoints(const QPointF *points, int pointCount)
for (int i = 0; i < pointCount; ++i, ++points) {
VGfloat coords[4];
- if (d->simpleTransform) {
+ if (d->affineTransform) {
coords[0] = points->x();
coords[1] = points->y();
coords[2] = coords[0];
@@ -2846,7 +2866,7 @@ void QVGPaintEngine::drawPoints(const QPoint *points, int pointCount)
for (int i = 0; i < pointCount; ++i, ++points) {
VGfloat coords[4];
- if (d->simpleTransform) {
+ if (d->affineTransform) {
coords[0] = points->x();
coords[1] = points->y();
coords[2] = coords[0];
@@ -2880,7 +2900,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->simpleTransform) {
+ if (d->affineTransform) {
coords.append(points->x());
coords.append(points->y());
} else {
@@ -2927,7 +2947,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->simpleTransform) {
+ if (d->affineTransform) {
coords.append(points->x());
coords.append(points->y());
} else {
@@ -2962,7 +2982,7 @@ void QVGPaintEngine::drawPolygon(const QPoint *points, int pointCount, PolygonDr
void QVGPaintEnginePrivate::setImageOptions()
{
- if (opacity != 1.0f && simpleTransform) {
+ if (opacity != 1.0f && affineTransform) {
if (opacity != paintOpacity) {
VGfloat values[4];
values[0] = 1.0f;
@@ -3009,7 +3029,10 @@ 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();
- transform.translate(r.x(), r.y());
+ if (d->simpleTransform)
+ transform.translate(qRound(r.x()), qRound(r.y()));
+ else
+ transform.translate(r.x(), r.y());
transform.scale(scaleX, scaleY);
d->setTransform(VG_MATRIX_IMAGE_USER_TO_SURFACE, transform);
@@ -3027,7 +3050,10 @@ static void drawVGImage(QVGPaintEnginePrivate *d,
return;
QTransform transform(d->imageTransform);
- transform.translate(pos.x(), pos.y());
+ if(d->simpleTransform)
+ transform.translate(qRound(pos.x()), qRound(pos.y()));
+ else
+ transform.translate(pos.x(), pos.y());
d->setTransform(VG_MATRIX_IMAGE_USER_TO_SURFACE, transform);
d->setImageOptions();
@@ -3070,7 +3096,7 @@ void QVGPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF
QVGPixmapData *vgpd = static_cast<QVGPixmapData *>(pd);
if (!vgpd->isValid())
return;
- if (d->simpleTransform)
+ if (d->affineTransform)
drawVGImage(d, r, vgpd->toVGImage(), vgpd->size(), sr);
else
drawVGImage(d, r, vgpd->toVGImage(d->opacity), vgpd->size(), sr);
@@ -3089,7 +3115,7 @@ void QVGPaintEngine::drawPixmap(const QPointF &pos, const QPixmap &pm)
QVGPixmapData *vgpd = static_cast<QVGPixmapData *>(pd);
if (!vgpd->isValid())
return;
- if (d->simpleTransform)
+ if (d->affineTransform)
drawVGImage(d, pos, vgpd->toVGImage());
else
drawVGImage(d, pos, vgpd->toVGImage(d->opacity));
@@ -3104,7 +3130,7 @@ void QVGPaintEngine::drawImage
{
Q_D(QVGPaintEngine);
VGImage vgImg;
- if (d->simpleTransform || d->opacity == 1.0f)
+ if (d->affineTransform || d->opacity == 1.0f)
vgImg = toVGImageSubRect(image, sr.toRect(), flags);
else
vgImg = toVGImageWithOpacitySubRect(image, d->opacity, sr.toRect());
@@ -3127,7 +3153,7 @@ void QVGPaintEngine::drawImage(const QPointF &pos, const QImage &image)
{
Q_D(QVGPaintEngine);
VGImage vgImg;
- if (d->simpleTransform || d->opacity == 1.0f)
+ if (d->affineTransform || d->opacity == 1.0f)
vgImg = toVGImage(image);
else
vgImg = toVGImageWithOpacity(image, d->opacity);
@@ -3160,7 +3186,7 @@ void QVGPaintEngine::drawPixmapFragments(const QPainter::PixmapFragment *drawing
QPixmapData *pd = pixmap.pixmapData();
if (!pd)
return; // null QPixmap
- if (pd->classId() != QPixmapData::OpenVGClass || !d->simpleTransform) {
+ if (pd->classId() != QPixmapData::OpenVGClass || !d->affineTransform) {
QPaintEngineEx::drawPixmapFragments(drawingData, dataCount, pixmap, hints);
return;
}
@@ -3385,7 +3411,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->simpleTransform) {
+ if (!d->affineTransform) {
QPaintEngineEx::drawTextItem(p, textItem);
return;
}
diff --git a/src/openvg/qvg_symbian.cpp b/src/openvg/qvg_symbian.cpp
index 0d2425f00a..e97ade89f9 100644
--- a/src/openvg/qvg_symbian.cpp
+++ b/src/openvg/qvg_symbian.cpp
@@ -113,25 +113,8 @@ static VGImage sgImageToVGImage(QEglContext *context, const RSgImage &sgImage)
VGImage vgImage = VG_INVALID_HANDLE;
- TInt err = 0;
-
- RSgDriver driver;
- err = driver.Open();
- if (err != KErrNone) {
- return vgImage;
- }
-
- if (sgImage.IsNull()) {
- driver.Close();
- return vgImage;
- }
-
- TSgImageInfo sgImageInfo;
- err = sgImage.GetInfo(sgImageInfo);
- if (err != KErrNone) {
- driver.Close();
+ if (sgImage.IsNull())
return vgImage;
- }
const EGLint KEglImageAttribs[] = {EGL_IMAGE_PRESERVED_SYMBIAN, EGL_TRUE, EGL_NONE};
EGLImageKHR eglImage = QEgl::eglCreateImageKHR(QEgl::display(),
@@ -140,22 +123,12 @@ static VGImage sgImageToVGImage(QEglContext *context, const RSgImage &sgImage)
(EGLClientBuffer)&sgImage,
(EGLint*)KEglImageAttribs);
- if (!eglImage || eglGetError() != EGL_SUCCESS) {
- driver.Close();
+ if (!eglImage)
return vgImage;
- }
vgImage = QVG::vgCreateEGLImageTargetKHR(eglImage);
- if (!vgImage || vgGetError() != VG_NO_ERROR) {
- QEgl::eglDestroyImageKHR(QEgl::display(), eglImage);
- driver.Close();
- return vgImage;
- }
- //setSerialNumber(++qt_vg_pixmap_serial);
- // release stuff
QEgl::eglDestroyImageKHR(QEgl::display(), eglImage);
- driver.Close();
return vgImage;
}
#endif
diff --git a/src/openvg/qvgimagepool.cpp b/src/openvg/qvgimagepool.cpp
index 78277aa4e8..0c236ea3e9 100644
--- a/src/openvg/qvgimagepool.cpp
+++ b/src/openvg/qvgimagepool.cpp
@@ -154,16 +154,23 @@ bool QVGImagePool::reclaimSpace(VGImageFormat format,
Q_UNUSED(width);
Q_UNUSED(height);
- if (data)
+ bool succeeded = false;
+ bool wasInLRU = false;
+ if (data) {
+ wasInLRU = data->inLRU;
moveToHeadOfLRU(data);
+ }
QVGPixmapData *lrudata = pixmapLRU();
if (lrudata && lrudata != data) {
lrudata->reclaimImages();
- return true;
+ succeeded = true;
}
- return false;
+ if (data && !wasInLRU)
+ removeFromLRU(data);
+
+ return succeeded;
}
void QVGImagePool::hibernate()
diff --git a/src/plugins/bearer/bearer.pro b/src/plugins/bearer/bearer.pro
index bbe8ab19c2..d1d75f06fb 100644
--- a/src/plugins/bearer/bearer.pro
+++ b/src/plugins/bearer/bearer.pro
@@ -3,9 +3,9 @@ TEMPLATE = subdirs
contains(QT_CONFIG, dbus) {
contains(QT_CONFIG, icd) {
SUBDIRS += icd
- } else {
+ } else:linux* {
SUBDIRS += generic
- linux*:SUBDIRS += connman networkmanager
+ SUBDIRS += connman networkmanager
}
}
@@ -16,4 +16,4 @@ macx:contains(QT_CONFIG, corewlan):SUBDIRS += corewlan
macx:SUBDIRS += generic
symbian:SUBDIRS += symbian
-isEmpty(SUBDIRS):SUBDIRS += generic
+isEmpty(SUBDIRS):SUBDIRS = generic
diff --git a/src/plugins/bearer/connman/qofonoservice_linux_p.h b/src/plugins/bearer/connman/qofonoservice_linux_p.h
index 48926664e0..0ac1e4a8fd 100644
--- a/src/plugins/bearer/connman/qofonoservice_linux_p.h
+++ b/src/plugins/bearer/connman/qofonoservice_linux_p.h
@@ -329,4 +329,6 @@ Q_SIGNALS:
void incomingMessage(const QString &message, const QVariantMap &info);
};
+QT_END_NAMESPACE
+
#endif //QOFONOSERVICE_H
diff --git a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp
index 29445cebd2..554f9b7cfd 100644
--- a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp
+++ b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp
@@ -97,6 +97,10 @@ QNetworkManagerEngine::QNetworkManagerEngine(QObject *parent)
QNetworkManagerEngine::~QNetworkManagerEngine()
{
+ qDeleteAll(connections);
+ qDeleteAll(accessPoints);
+ qDeleteAll(wirelessDevices);
+ qDeleteAll(activeConnections);
}
void QNetworkManagerEngine::initialize()
@@ -389,7 +393,7 @@ void QNetworkManagerEngine::deviceRemoved(const QDBusObjectPath &path)
{
QMutexLocker locker(&mutex);
- delete wirelessDevices.value(path.path());
+ delete wirelessDevices.take(path.path());
}
void QNetworkManagerEngine::newConnection(const QDBusObjectPath &path,
@@ -455,6 +459,8 @@ void QNetworkManagerEngine::removeConnection(const QString &path)
QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.take(id);
+ connection->deleteLater();
+
locker.unlock();
emit configurationRemoved(ptr);
}
@@ -631,7 +637,8 @@ void QNetworkManagerEngine::removeAccessPoint(const QString &path,
locker.unlock();
emit configurationChanged(ptr);
- return;
+ locker.relock();
+ break;
}
}
} else {
diff --git a/src/plugins/bearer/networkmanager/qnetworkmanagerservice.cpp b/src/plugins/bearer/networkmanager/qnetworkmanagerservice.cpp
index f47c97c1c9..499fe5a4f2 100644
--- a/src/plugins/bearer/networkmanager/qnetworkmanagerservice.cpp
+++ b/src/plugins/bearer/networkmanager/qnetworkmanagerservice.cpp
@@ -743,8 +743,6 @@ bool QNetworkManagerSettingsConnection::isAutoConnect()
quint64 QNetworkManagerSettingsConnection::getTimestamp()
{
- qDebug() << d->settingsMap.value(QLatin1String("connection"));
-
return d->settingsMap.value(QLatin1String("connection"))
.value(QLatin1String("timestamp")).toUInt();
}
diff --git a/src/plugins/bearer/symbian/3_2/3_2.pro b/src/plugins/bearer/symbian/3_2/3_2.pro
index 6f3ecaf348..ac3b3f898f 100644
--- a/src/plugins/bearer/symbian/3_2/3_2.pro
+++ b/src/plugins/bearer/symbian/3_2/3_2.pro
@@ -1,13 +1,15 @@
include(../symbian.pri)
symbian {
- exists($${EPOCROOT}epoc32/release/winscw/udeb/cmmanager.lib)| \
- exists($${EPOCROOT}epoc32/release/armv5/lib/cmmanager.lib) {
+ contains(S60_VERSION, 3.1) {
+ is_using_gnupoc {
+ LIBS += -lapengine
+ } else {
+ LIBS += -lAPEngine
+ }
+ } else {
DEFINES += SNAP_FUNCTIONALITY_AVAILABLE
LIBS += -lcmmanager
- } else {
- # Fall back to 3_1 implementation on platforms that do not have cmmanager
- LIBS += -lapengine
}
}
diff --git a/src/plugins/bearer/symbian/symbian.pri b/src/plugins/bearer/symbian/symbian.pri
index 9b3f50ccd1..e874945c7a 100644
--- a/src/plugins/bearer/symbian/symbian.pri
+++ b/src/plugins/bearer/symbian/symbian.pri
@@ -22,11 +22,9 @@ LIBS += -lcommdb \
-lnetmeta
is_using_gnupoc {
- LIBS += -lconnmon \
- -lapsettingshandlerui
+ LIBS += -lconnmon
} else {
- LIBS += -lConnMon \
- -lApSettingsHandlerUI
+ LIBS += -lConnMon
}
QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/bearer
diff --git a/src/plugins/bearer/symbian/symbian.pro b/src/plugins/bearer/symbian/symbian.pro
index f320eb663b..91f8217b2e 100644
--- a/src/plugins/bearer/symbian/symbian.pro
+++ b/src/plugins/bearer/symbian/symbian.pro
@@ -1,3 +1,8 @@
TEMPLATE = subdirs
-SUBDIRS += 3_1 3_2 symbian_3 \ No newline at end of file
+contains(S60_VERSION, 3.1)|contains(S60_VERSION, 3.2)|contains(S60_VERSION, 5.0) {
+ SUBDIRS += 3_1 3_2
+}
+
+# Symbian3 builds the default plugin for winscw so it is always needed
+SUBDIRS += symbian_3 \ No newline at end of file
diff --git a/src/plugins/bearer/symbian/symbian_3/symbian_3.pro b/src/plugins/bearer/symbian/symbian_3/symbian_3.pro
index fd66198fe7..ef90ad2b73 100644
--- a/src/plugins/bearer/symbian/symbian_3/symbian_3.pro
+++ b/src/plugins/bearer/symbian/symbian_3/symbian_3.pro
@@ -1,22 +1,20 @@
include(../symbian.pri)
symbian {
- exists($${EPOCROOT}epoc32/release/winscw/udeb/cmmanager.lib)| \
- exists($${EPOCROOT}epoc32/release/armv5/lib/cmmanager.lib) {
+ contains(S60_VERSION, 3.1) {
+ is_using_gnupoc {
+ LIBS += -lapengine
+ } else {
+ LIBS += -lAPEngine
+ }
+ } else {
DEFINES += SNAP_FUNCTIONALITY_AVAILABLE
LIBS += -lcmmanager
- exists($$prependEpocroot($$MW_LAYER_PUBLIC_EXPORT_PATH(extendedconnpref.h))) {
+ !contains(S60_VERSION, 3.2):!contains(S60_VERSION, 5.0) {
DEFINES += OCC_FUNCTIONALITY_AVAILABLE
LIBS += -lextendedconnpref
}
- } else {
- # Fall back to 3_1 implementation on platforms that do not have cmmanager
- is_using_gnupoc {
- LIBS += -lapengine
- } else {
- LIBS += -lAPEngine
- }
}
}
diff --git a/src/plugins/gfxdrivers/directfb/directfb.pro b/src/plugins/gfxdrivers/directfb/directfb.pro
index 0706f013e7..d397050bdc 100644
--- a/src/plugins/gfxdrivers/directfb/directfb.pro
+++ b/src/plugins/gfxdrivers/directfb/directfb.pro
@@ -11,5 +11,5 @@ SOURCES += qdirectfbscreenplugin.cpp
QMAKE_CXXFLAGS += $$QT_CFLAGS_DIRECTFB
LIBS += $$QT_LIBS_DIRECTFB
-DEFINES += $$QT_DEFINES_DIRECTFB QT_DIRECTFB_PLUGIN
+DEFINES += $$QT_DEFINES_DIRECTFB
contains(gfx-plugins, directfb):DEFINES += QT_QWS_DIRECTFB
diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp
index d5f0d42cfc..4869eba55e 100644
--- a/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp
+++ b/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp
@@ -978,7 +978,7 @@ void QDirectFBPaintEnginePrivate::setCompositionMode(QPainter::CompositionMode m
break;
case QPainter::CompositionMode_SourceOver:
compositionModeStatus &= ~PorterDuff_AlwaysBlend;
- surface->SetPorterDuff(surface, DSPD_SRC_OVER);
+ surface->SetPorterDuff(surface, DSPD_NONE);
break;
case QPainter::CompositionMode_DestinationOver:
surface->SetPorterDuff(surface, DSPD_DST_OVER);
diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp
index f704432304..c0d96d7e2a 100644
--- a/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp
+++ b/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp
@@ -585,7 +585,6 @@ void QDirectFBPixmapData::invalidate()
imageFormat = QImage::Format_Invalid;
}
-#ifndef QT_DIRECTFB_PLUGIN
Q_GUI_EXPORT IDirectFBSurface *qt_directfb_surface_for_pixmap(const QPixmap &pixmap)
{
const QPixmapData *data = pixmap.pixmapData();
@@ -594,7 +593,6 @@ Q_GUI_EXPORT IDirectFBSurface *qt_directfb_surface_for_pixmap(const QPixmap &pix
const QDirectFBPixmapData *dfbData = static_cast<const QDirectFBPixmapData*>(data);
return dfbData->directFBSurface();
}
-#endif
QT_END_NAMESPACE
diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp
index cffd4e346f..bf6164d49e 100644
--- a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp
+++ b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp
@@ -1790,7 +1790,6 @@ IDirectFBSurface *QDirectFBScreen::subSurfaceForWidget(const QWidget *widget, co
}
#endif
-#ifndef QT_DIRECTFB_PLUGIN
Q_GUI_EXPORT IDirectFBSurface *qt_directfb_surface_for_widget(const QWidget *widget, QRect *rect)
{
return QDirectFBScreen::instance() ? QDirectFBScreen::instance()->surfaceForWidget(widget, rect) : 0;
@@ -1808,7 +1807,6 @@ Q_GUI_EXPORT IDirectFBWindow *qt_directfb_window_for_widget(const QWidget *widge
}
#endif
-#endif
QT_END_NAMESPACE
diff --git a/src/plugins/graphicssystems/graphicssystems.pro b/src/plugins/graphicssystems/graphicssystems.pro
index 7a8f4d6a7e..5c99291047 100644
--- a/src/plugins/graphicssystems/graphicssystems.pro
+++ b/src/plugins/graphicssystems/graphicssystems.pro
@@ -9,3 +9,7 @@ contains(QT_CONFIG, shivavg) {
# Only works under X11 at present
!win32:!embedded:!mac:SUBDIRS += shivavg
}
+
+!win32:!embedded:!mac:!symbian:CONFIG += x11
+
+x11:contains(QT_CONFIG, opengles2):contains(QT_CONFIG, egl):SUBDIRS += meego
diff --git a/src/plugins/graphicssystems/meego/meego.pro b/src/plugins/graphicssystems/meego/meego.pro
new file mode 100644
index 0000000000..d750d349e7
--- /dev/null
+++ b/src/plugins/graphicssystems/meego/meego.pro
@@ -0,0 +1,13 @@
+TARGET = qmeegographicssystem
+include(../../qpluginbase.pri)
+
+QT += gui opengl
+
+QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems
+
+HEADERS = qmeegographicssystem.h qmeegopixmapdata.h qmeegoextensions.h
+SOURCES = qmeegographicssystem.cpp qmeegographicssystem.h qmeegographicssystemplugin.h qmeegographicssystemplugin.cpp qmeegopixmapdata.h qmeegopixmapdata.cpp qmeegoextensions.h qmeegoextensions.cpp
+
+target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems
+INSTALLS += target
+
diff --git a/src/plugins/graphicssystems/meego/qmeegoextensions.cpp b/src/plugins/graphicssystems/meego/qmeegoextensions.cpp
new file mode 100644
index 0000000000..e7f643970b
--- /dev/null
+++ b/src/plugins/graphicssystems/meego/qmeegoextensions.cpp
@@ -0,0 +1,129 @@
+/****************************************************************************
+**
+** 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 "qmeegoextensions.h"
+#include <private/qeglcontext_p.h>
+#include <private/qpixmapdata_gl_p.h>
+
+bool QMeeGoExtensions::initialized = false;
+bool QMeeGoExtensions::hasImageShared = false;
+bool QMeeGoExtensions::hasSurfaceScaling = false;
+
+/* Extension funcs */
+
+typedef EGLBoolean (EGLAPIENTRY *eglQueryImageNOKFunc)(EGLDisplay, EGLImageKHR, EGLint, EGLint*);
+typedef EGLNativeSharedImageTypeNOK (EGLAPIENTRY *eglCreateSharedImageNOKFunc)(EGLDisplay, EGLImageKHR, EGLint*);
+typedef EGLBoolean (EGLAPIENTRY *eglDestroySharedImageNOKFunc)(EGLDisplay, EGLNativeSharedImageTypeNOK);
+typedef EGLBoolean (EGLAPIENTRY *eglSetSurfaceScalingNOKFunc)(EGLDisplay, EGLSurface, EGLint, EGLint, EGLint, EGLint);
+
+static eglQueryImageNOKFunc _eglQueryImageNOK = 0;
+static eglCreateSharedImageNOKFunc _eglCreateSharedImageNOK = 0;
+static eglDestroySharedImageNOKFunc _eglDestroySharedImageNOK = 0;
+static eglSetSurfaceScalingNOKFunc _eglSetSurfaceScalingNOK = 0;
+
+/* Public */
+
+void QMeeGoExtensions::ensureInitialized()
+{
+ if (!initialized)
+ initialize();
+
+ initialized = true;
+}
+
+EGLNativeSharedImageTypeNOK QMeeGoExtensions::eglCreateSharedImageNOK(EGLDisplay dpy, EGLImageKHR image, EGLint *props)
+{
+ if (! hasImageShared)
+ qFatal("EGL_NOK_image_shared not found but trying to use capability!");
+
+ return _eglCreateSharedImageNOK(dpy, image, props);
+}
+
+bool QMeeGoExtensions::eglQueryImageNOK(EGLDisplay dpy, EGLImageKHR image, EGLint prop, EGLint *v)
+{
+ if (! hasImageShared)
+ qFatal("EGL_NOK_image_shared not found but trying to use capability!");
+
+ return _eglQueryImageNOK(dpy, image, prop, v);
+}
+
+bool QMeeGoExtensions::eglDestroySharedImageNOK(EGLDisplay dpy, EGLNativeSharedImageTypeNOK img)
+{
+ if (! hasImageShared)
+ qFatal("EGL_NOK_image_shared not found but trying to use capability!");
+
+ return _eglDestroySharedImageNOK(dpy, img);
+}
+
+bool QMeeGoExtensions::eglSetSurfaceScalingNOK(EGLDisplay dpy, EGLSurface surface, int x, int y, int width, int height)
+{
+ if (! hasSurfaceScaling)
+ qFatal("EGL_NOK_surface_scaling not found but trying to use capability!");
+
+ return _eglSetSurfaceScalingNOK(dpy, surface, x, y, width, height);
+}
+
+/* Private */
+
+void QMeeGoExtensions::initialize()
+{
+ QGLContext *ctx = (QGLContext *) QGLContext::currentContext();
+ qt_resolve_eglimage_gl_extensions(ctx);
+
+ if (QEgl::hasExtension("EGL_NOK_image_shared")) {
+ qDebug("MeegoGraphics: found EGL_NOK_image_shared");
+ _eglQueryImageNOK = (eglQueryImageNOKFunc) eglGetProcAddress("eglQueryImageNOK");
+ _eglCreateSharedImageNOK = (eglCreateSharedImageNOKFunc) eglGetProcAddress("eglCreateSharedImageNOK");
+ _eglDestroySharedImageNOK = (eglDestroySharedImageNOKFunc) eglGetProcAddress("eglDestroySharedImageNOK");
+
+ Q_ASSERT(_eglQueryImageNOK && _eglCreateSharedImageNOK && _eglDestroySharedImageNOK);
+ hasImageShared = true;
+ }
+
+ if (QEgl::hasExtension("EGL_NOK_surface_scaling")) {
+ qDebug("MeegoGraphics: found EGL_NOK_surface_scaling");
+ _eglSetSurfaceScalingNOK = (eglSetSurfaceScalingNOKFunc) eglGetProcAddress("eglSetSurfaceScalingNOK");
+
+ Q_ASSERT(_eglSetSurfaceScalingNOK);
+ hasSurfaceScaling = true;
+ }
+}
+
diff --git a/src/plugins/graphicssystems/meego/qmeegoextensions.h b/src/plugins/graphicssystems/meego/qmeegoextensions.h
new file mode 100644
index 0000000000..ee20bd8e43
--- /dev/null
+++ b/src/plugins/graphicssystems/meego/qmeegoextensions.h
@@ -0,0 +1,88 @@
+/****************************************************************************
+**
+** 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 MEXTENSIONS_H
+#define MEXTENSIONS_H
+
+#include <private/qgl_p.h>
+#include <private/qeglcontext_p.h>
+#include <private/qpixmapdata_gl_p.h>
+#include <EGL/egl.h>
+#include <GLES2/gl2.h>
+#include <GLES2/gl2ext.h>
+
+/* Extensions decls */
+
+#ifndef EGL_SHARED_IMAGE_NOK
+#define EGL_SHARED_IMAGE_NOK 0x30DA
+typedef void* EGLNativeSharedImageTypeNOK;
+#endif
+
+#ifndef EGL_GL_TEXTURE_2D_KHR
+#define EGL_GL_TEXTURE_2D_KHR 0x30B1
+#endif
+
+#ifndef EGL_FIXED_WIDTH_NOK
+#define EGL_FIXED_WIDTH_NOK 0x30DB
+#define EGL_FIXED_HEIGHT_NOK 0x30DC
+#endif
+
+/* Class */
+
+class QMeeGoExtensions
+{
+public:
+ static void ensureInitialized();
+
+ static EGLNativeSharedImageTypeNOK eglCreateSharedImageNOK(EGLDisplay dpy, EGLImageKHR image, EGLint *props);
+ 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);
+
+private:
+ static void initialize();
+
+ static bool initialized;
+ static bool hasImageShared;
+ static bool hasSurfaceScaling;
+};
+
+#endif
diff --git a/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp b/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp
new file mode 100644
index 0000000000..2a64d4921b
--- /dev/null
+++ b/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp
@@ -0,0 +1,247 @@
+/****************************************************************************
+**
+** 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 <QDebug>
+#include <private/qpixmap_raster_p.h>
+#include <private/qwindowsurface_gl_p.h>
+#include <private/qegl_p.h>
+#include <private/qglextensions_p.h>
+#include <private/qgl_p.h>
+#include <private/qimagepixmapcleanuphooks_p.h>
+#include <private/qapplication_p.h>
+#include <private/qgraphicssystem_runtime_p.h>
+#include <private/qimage_p.h>
+#include <private/qeglproperties_p.h>
+#include <private/qeglcontext_p.h>
+
+#include "qmeegopixmapdata.h"
+#include "qmeegographicssystem.h"
+#include "qmeegoextensions.h"
+
+bool QMeeGoGraphicsSystem::surfaceWasCreated = false;
+
+QMeeGoGraphicsSystem::QMeeGoGraphicsSystem()
+{
+ qDebug("Using the meego graphics system");
+}
+
+QMeeGoGraphicsSystem::~QMeeGoGraphicsSystem()
+{
+ qDebug("Meego graphics system destroyed");
+ qt_destroy_gl_share_widget();
+}
+
+QWindowSurface* QMeeGoGraphicsSystem::createWindowSurface(QWidget *widget) const
+{
+ QMeeGoGraphicsSystem::surfaceWasCreated = true;
+ QWindowSurface *surface = new QGLWindowSurface(widget);
+ return surface;
+}
+
+QPixmapData *QMeeGoGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const
+{
+ // Long story short: without this it's possible to hit an
+ // unitialized paintDevice due to a Qt bug too complex to even
+ // explain here... not to mention fix without going crazy.
+ // MDK
+ QGLShareContextScope ctx(qt_gl_share_widget()->context());
+
+ return new QRasterPixmapData(type);
+}
+
+QPixmapData *QMeeGoGraphicsSystem::createPixmapData(QPixmapData *origin)
+{
+ // If the pixmap is a raster type...
+ // and if the pixmap pointer matches our mapping...
+ // create a shared image instead with the given handle.
+
+ if (origin->classId() == QPixmapData::RasterClass) {
+ QRasterPixmapData *rasterClass = static_cast <QRasterPixmapData *> (origin);
+ void *rawResource = static_cast <void *> (rasterClass->buffer()->data_ptr()->data);
+
+ if (QMeeGoPixmapData::sharedImagesMap.contains(rawResource))
+ return new QMeeGoPixmapData();
+ }
+
+ return new QRasterPixmapData(origin->pixelType());
+}
+
+QPixmapData* QMeeGoGraphicsSystem::wrapPixmapData(QPixmapData *pmd)
+{
+ QString name = QApplicationPrivate::instance()->graphics_system_name;
+ if (name == "runtime") {
+ QRuntimeGraphicsSystem *rsystem = (QRuntimeGraphicsSystem *) QApplicationPrivate::instance()->graphics_system;
+ QRuntimePixmapData *rt = new QRuntimePixmapData(rsystem, pmd->pixelType());;
+ rt->m_data = pmd;
+ rt->readBackInfo();
+ rsystem->m_pixmapDatas << rt;
+ return rt;
+ } else
+ return pmd;
+}
+
+void QMeeGoGraphicsSystem::setSurfaceFixedSize(int /*width*/, int /*height*/)
+{
+ if (QMeeGoGraphicsSystem::surfaceWasCreated)
+ qWarning("Trying to set surface fixed size but surface already created!");
+
+#ifdef QT_WAS_PATCHED
+ QEglProperties *properties = new QEglProperties();
+ properties->setValue(EGL_FIXED_WIDTH_NOK, width);
+ properties->setValue(EGL_FIXED_HEIGHT_NOK, height);
+ QGLContextPrivate::setExtraWindowSurfaceCreationProps(properties);
+#endif
+}
+
+void QMeeGoGraphicsSystem::setSurfaceScaling(int x, int y, int width, int height)
+{
+ QMeeGoExtensions::ensureInitialized();
+ QMeeGoExtensions::eglSetSurfaceScalingNOK(QEgl::display(), QEglContext::currentContext(QEgl::OpenGL)->currentSurface, x, y, width, height);
+}
+
+void QMeeGoGraphicsSystem::setTranslucent(bool translucent)
+{
+ QGLWindowSurface::surfaceFormat.setSampleBuffers(false);
+ QGLWindowSurface::surfaceFormat.setSamples(0);
+ QGLWindowSurface::surfaceFormat.setAlpha(translucent);
+}
+
+QPixmapData *QMeeGoGraphicsSystem::pixmapDataFromEGLSharedImage(Qt::HANDLE handle, const QImage &softImage)
+{
+ if (softImage.format() != QImage::Format_ARGB32_Premultiplied &&
+ softImage.format() != QImage::Format_ARGB32) {
+ qFatal("For egl shared images, the soft image has to be ARGB32 or ARGB32_Premultiplied");
+ return NULL;
+ }
+
+ if (QMeeGoGraphicsSystem::meeGoRunning()) {
+ QMeeGoPixmapData *pmd = new QMeeGoPixmapData;
+ pmd->fromEGLSharedImage(handle, softImage);
+ return QMeeGoGraphicsSystem::wrapPixmapData(pmd);
+ } else {
+ QRasterPixmapData *pmd = new QRasterPixmapData(QPixmapData::PixmapType);
+ pmd->fromImage(softImage, Qt::NoOpaqueDetection);
+
+ // Make sure that the image was not converted in any way
+ if (pmd->buffer()->data_ptr()->data !=
+ const_cast<QImage &>(softImage).data_ptr()->data)
+ qFatal("Iternal misalignment of raster data detected. Prolly a QImage copy fail.");
+
+ QMeeGoPixmapData::registerSharedImage(handle, softImage);
+ return QMeeGoGraphicsSystem::wrapPixmapData(pmd);
+ }
+}
+
+void QMeeGoGraphicsSystem::updateEGLSharedImagePixmap(QPixmap *pixmap)
+{
+ QMeeGoPixmapData *pmd = (QMeeGoPixmapData *) pixmap->pixmapData();
+
+ // Basic sanity check to make sure this is really a QMeeGoPixmapData...
+ if (pmd->classId() != QPixmapData::OpenGLClass)
+ qFatal("Trying to updated EGLSharedImage pixmap but it's not really a shared image pixmap!");
+
+ pmd->updateFromSoftImage();
+}
+
+QPixmapData *QMeeGoGraphicsSystem::pixmapDataWithGLTexture(int w, int h)
+{
+ QGLPixmapData *pmd = new QGLPixmapData(QPixmapData::PixmapType);
+ pmd->resize(w, h);
+ return QMeeGoGraphicsSystem::wrapPixmapData(pmd);
+}
+
+bool QMeeGoGraphicsSystem::meeGoRunning()
+{
+ if (! QApplicationPrivate::instance()) {
+ qWarning("Application not running just yet... hard to know what system running!");
+ return false;
+ }
+
+ QString name = QApplicationPrivate::instance()->graphics_system_name;
+ if (name == "runtime") {
+ QRuntimeGraphicsSystem *rsystem = (QRuntimeGraphicsSystem *) QApplicationPrivate::instance()->graphics_system;
+ name = rsystem->graphicsSystemName();
+ }
+
+ return (name == "meego");
+}
+
+/* C API */
+
+int qt_meego_image_to_egl_shared_image(const QImage &image)
+{
+ return QMeeGoPixmapData::imageToEGLSharedImage(image);
+}
+
+QPixmapData* qt_meego_pixmapdata_from_egl_shared_image(Qt::HANDLE handle, const QImage &softImage)
+{
+ return QMeeGoGraphicsSystem::pixmapDataFromEGLSharedImage(handle, softImage);
+}
+
+QPixmapData* qt_meego_pixmapdata_with_gl_texture(int w, int h)
+{
+ return QMeeGoGraphicsSystem::pixmapDataWithGLTexture(w, h);
+}
+
+bool qt_meego_destroy_egl_shared_image(Qt::HANDLE handle)
+{
+ return QMeeGoPixmapData::destroyEGLSharedImage(handle);
+}
+
+void qt_meego_set_surface_fixed_size(int width, int height)
+{
+ QMeeGoGraphicsSystem::setSurfaceFixedSize(width, height);
+}
+
+void qt_meego_set_surface_scaling(int x, int y, int width, int height)
+{
+ QMeeGoGraphicsSystem::setSurfaceScaling(x, y, width, height);
+}
+
+void qt_meego_set_translucent(bool translucent)
+{
+ QMeeGoGraphicsSystem::setTranslucent(translucent);
+}
+
+void qt_meego_update_egl_shared_image_pixmap(QPixmap *pixmap)
+{
+ QMeeGoGraphicsSystem::updateEGLSharedImagePixmap(pixmap);
+}
diff --git a/src/plugins/graphicssystems/meego/qmeegographicssystem.h b/src/plugins/graphicssystems/meego/qmeegographicssystem.h
new file mode 100644
index 0000000000..905f0c381f
--- /dev/null
+++ b/src/plugins/graphicssystems/meego/qmeegographicssystem.h
@@ -0,0 +1,85 @@
+/****************************************************************************
+**
+** 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 MGRAPHICSSYSTEM_H
+#define MGRAPHICSSYSTEM_H
+
+#include <private/qgraphicssystem_p.h>
+
+class QMeeGoGraphicsSystem : public QGraphicsSystem
+{
+public:
+ QMeeGoGraphicsSystem();
+ ~QMeeGoGraphicsSystem();
+
+ virtual QWindowSurface *createWindowSurface(QWidget *widget) const;
+ virtual QPixmapData *createPixmapData(QPixmapData::PixelType) const;
+ virtual QPixmapData *createPixmapData(QPixmapData *origin);
+
+ static QPixmapData *wrapPixmapData(QPixmapData *pmd);
+ static void setSurfaceFixedSize(int width, int height);
+ static void setSurfaceScaling(int x, int y, int width, int height);
+ static void setTranslucent(bool translucent);
+
+ static QPixmapData *pixmapDataFromEGLSharedImage(Qt::HANDLE handle, const QImage &softImage);
+ static QPixmapData *pixmapDataWithGLTexture(int w, int h);
+ static void updateEGLSharedImagePixmap(QPixmap *pixmap);
+
+private:
+ static bool meeGoRunning();
+
+ static bool surfaceWasCreated;
+};
+
+/* C api */
+
+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_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);
+}
+
+#endif
diff --git a/src/plugins/graphicssystems/meego/qmeegographicssystemplugin.cpp b/src/plugins/graphicssystems/meego/qmeegographicssystemplugin.cpp
new file mode 100644
index 0000000000..7c142eb7fb
--- /dev/null
+++ b/src/plugins/graphicssystems/meego/qmeegographicssystemplugin.cpp
@@ -0,0 +1,58 @@
+/****************************************************************************
+**
+** 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 <QDebug>
+#include "qmeegographicssystemplugin.h"
+#include "qmeegographicssystem.h"
+
+QStringList QMeeGoGraphicsSystemPlugin::keys() const
+{
+ QStringList list;
+ list << "meego";
+ return list;
+}
+
+QGraphicsSystem *QMeeGoGraphicsSystemPlugin::create(const QString&)
+{
+ return new QMeeGoGraphicsSystem;
+}
+
+Q_EXPORT_PLUGIN2(meego, QMeeGoGraphicsSystemPlugin)
diff --git a/src/plugins/graphicssystems/meego/qmeegographicssystemplugin.h b/src/plugins/graphicssystems/meego/qmeegographicssystemplugin.h
new file mode 100644
index 0000000000..336458fb10
--- /dev/null
+++ b/src/plugins/graphicssystems/meego/qmeegographicssystemplugin.h
@@ -0,0 +1,54 @@
+/****************************************************************************
+**
+** 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 MGRAPHICSSYSTEMPLUGIN_H
+#define MGRAPHICSSYSTEMPLUGIN_H
+
+#include <private/qgraphicssystemplugin_p.h>
+
+class QMeeGoGraphicsSystemPlugin : public QGraphicsSystemPlugin
+{
+public:
+ virtual QStringList keys() const;
+ virtual QGraphicsSystem *create(const QString&);
+};
+
+#endif
diff --git a/src/plugins/graphicssystems/meego/qmeegopixmapdata.cpp b/src/plugins/graphicssystems/meego/qmeegopixmapdata.cpp
new file mode 100644
index 0000000000..33611dc0a7
--- /dev/null
+++ b/src/plugins/graphicssystems/meego/qmeegopixmapdata.cpp
@@ -0,0 +1,206 @@
+/****************************************************************************
+**
+** 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 "qmeegopixmapdata.h"
+#include "qmeegoextensions.h"
+#include <private/qimage_p.h>
+#include <private/qwindowsurface_gl_p.h>
+#include <private/qeglcontext_p.h>
+#include <private/qapplication_p.h>
+#include <private/qgraphicssystem_runtime_p.h>
+
+static EGLint preserved_image_attribs[] = { EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, EGL_NONE };
+
+QHash <void*, QMeeGoImageInfo*> QMeeGoPixmapData::sharedImagesMap;
+
+/* Public */
+
+QMeeGoPixmapData::QMeeGoPixmapData() : QGLPixmapData(QPixmapData::PixmapType)
+{
+}
+
+void QMeeGoPixmapData::fromTexture(GLuint textureId, int w, int h, bool alpha)
+{
+ resize(w, h);
+ texture()->id = textureId;
+ m_hasAlpha = alpha;
+ softImage = QImage();
+}
+
+QImage QMeeGoPixmapData::toImage() const
+{
+ return softImage;
+}
+
+void QMeeGoPixmapData::fromImage(const QImage &image,
+ Qt::ImageConversionFlags flags)
+{
+ void *rawResource = static_cast <void *> (((QImage &) image).data_ptr()->data);
+
+ if (sharedImagesMap.contains(rawResource)) {
+ QMeeGoImageInfo *info = sharedImagesMap.value(rawResource);
+ fromEGLSharedImage(info->handle, image);
+ } else {
+ // This should *never* happen since the graphics system should never
+ // create a QMeeGoPixmapData for an origin that doesn't contain a raster
+ // image we know about. But...
+ qWarning("QMeeGoPixmapData::fromImage called on non-know resource. Falling back...");
+ QGLPixmapData::fromImage(image, flags);
+ }
+}
+
+void QMeeGoPixmapData::fromEGLSharedImage(Qt::HANDLE handle, const QImage &si)
+{
+ if (si.isNull())
+ qFatal("Trying to build pixmap with an empty/null softimage!");
+
+ 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);
+
+ glFinish();
+ EGLImageKHR image = QEgl::eglCreateImageKHR(QEgl::display(), EGL_NO_CONTEXT, EGL_SHARED_IMAGE_NOK,
+ (EGLClientBuffer)handle, preserved_image_attribs);
+
+ if (image != EGL_NO_IMAGE_KHR) {
+ glFinish();
+ glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, image);
+ GLint err = glGetError();
+ if (err == GL_NO_ERROR)
+ textureIsBound = true;
+
+ QMeeGoExtensions::eglQueryImageNOK(QEgl::display(), image, EGL_WIDTH, &newWidth);
+ QMeeGoExtensions::eglQueryImageNOK(QEgl::display(), image, EGL_HEIGHT, &newHeight);
+
+ QEgl::eglDestroyImageKHR(QEgl::display(), image);
+ glFinish();
+ }
+
+ if (textureIsBound) {
+ // FIXME Remove this ugly hasAlphaChannel check when Qt lands the NoOpaqueCheck flag fix
+ // for QGLPixmapData.
+ fromTexture(newTextureId, newWidth, newHeight,
+ (si.hasAlphaChannel() && const_cast<QImage &>(si).data_ptr()->checkForAlphaPixels()));
+ softImage = si;
+ QMeeGoPixmapData::registerSharedImage(handle, softImage);
+ } else {
+ qWarning("Failed to create a texture from a shared image!");
+ glDeleteTextures(1, &newTextureId);
+ }
+}
+
+Qt::HANDLE QMeeGoPixmapData::imageToEGLSharedImage(const QImage &image)
+{
+ QGLShareContextScope ctx(qt_gl_share_widget()->context());
+
+ QMeeGoExtensions::ensureInitialized();
+
+ glFinish();
+ QGLPixmapData pixmapData(QPixmapData::PixmapType);
+ pixmapData.fromImage(image, 0);
+ GLuint textureId = pixmapData.bind();
+
+ glFinish();
+ EGLImageKHR eglimage = QEgl::eglCreateImageKHR(QEgl::display(), QEglContext::currentContext(QEgl::OpenGL)->context(),
+ EGL_GL_TEXTURE_2D_KHR,
+ (EGLClientBuffer) textureId,
+ preserved_image_attribs);
+ glFinish();
+
+ if (eglimage) {
+ EGLNativeSharedImageTypeNOK handle = QMeeGoExtensions::eglCreateSharedImageNOK(QEgl::display(), eglimage, NULL);
+ QEgl::eglDestroyImageKHR(QEgl::display(), eglimage);
+ glFinish();
+ return (Qt::HANDLE) handle;
+ } else {
+ qWarning("Failed to create shared image from pixmap/texture!");
+ return 0;
+ }
+}
+
+void QMeeGoPixmapData::updateFromSoftImage()
+{
+ m_dirty = true;
+ m_source = softImage;
+ ensureCreated();
+
+ if (softImage.width() != w || softImage.height() != h)
+ qWarning("Ooops, looks like softImage changed dimensions since last updated! Corruption ahead?!");
+}
+
+bool QMeeGoPixmapData::destroyEGLSharedImage(Qt::HANDLE h)
+{
+ QGLShareContextScope ctx(qt_gl_share_widget()->context());
+ QMeeGoExtensions::ensureInitialized();
+
+ QMutableHashIterator <void*, QMeeGoImageInfo*> i(sharedImagesMap);
+ while (i.hasNext()) {
+ i.next();
+ if (i.value()->handle == h)
+ i.remove();
+ }
+
+ return QMeeGoExtensions::eglDestroySharedImageNOK(QEgl::display(), (EGLNativeSharedImageTypeNOK) h);
+}
+
+void QMeeGoPixmapData::registerSharedImage(Qt::HANDLE handle, const QImage &si)
+{
+ void *raw = static_cast <void *> (((QImage) si).data_ptr()->data);
+ QMeeGoImageInfo *info;
+
+ if (! sharedImagesMap.contains(raw)) {
+ info = new QMeeGoImageInfo;
+ info->handle = handle;
+ info->rawFormat = si.format();
+ sharedImagesMap.insert(raw, info);
+ } else {
+ info = sharedImagesMap.value(raw);
+ if (info->handle != handle || info->rawFormat != si.format())
+ qWarning("Inconsistency detected: overwriting entry in sharedImagesMap but handle/format different");
+ }
+}
diff --git a/src/plugins/graphicssystems/meego/qmeegopixmapdata.h b/src/plugins/graphicssystems/meego/qmeegopixmapdata.h
new file mode 100644
index 0000000000..8af33bd694
--- /dev/null
+++ b/src/plugins/graphicssystems/meego/qmeegopixmapdata.h
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** 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 MPIXMAPDATA_H
+#define MPIXMAPDATA_H
+
+#include <private/qpixmapdata_gl_p.h>
+
+struct QMeeGoImageInfo
+{
+ Qt::HANDLE handle;
+ QImage::Format rawFormat;
+};
+
+class QMeeGoPixmapData : public QGLPixmapData
+{
+public:
+ QMeeGoPixmapData();
+ void fromTexture(GLuint textureId, int w, int h, bool alpha);
+
+ virtual void fromEGLSharedImage(Qt::HANDLE handle, const QImage &softImage);
+ virtual void fromImage (const QImage &image, Qt::ImageConversionFlags flags);
+ virtual QImage toImage() const;
+ virtual void updateFromSoftImage();
+
+ QImage softImage;
+
+ static QHash <void*, QMeeGoImageInfo*> sharedImagesMap;
+
+ static Qt::HANDLE imageToEGLSharedImage(const QImage &image);
+ static bool destroyEGLSharedImage(Qt::HANDLE h);
+ static void registerSharedImage(Qt::HANDLE handle, const QImage &si);
+};
+
+#endif
diff --git a/src/plugins/imageformats/jpeg/jpeg.pro b/src/plugins/imageformats/jpeg/jpeg.pro
index c5671c3a63..fb254b86c6 100644
--- a/src/plugins/imageformats/jpeg/jpeg.pro
+++ b/src/plugins/imageformats/jpeg/jpeg.pro
@@ -3,20 +3,6 @@ include(../../qpluginbase.pri)
QTDIR_build:REQUIRES = "!contains(QT_CONFIG, no-jpeg)"
-wince*: {
- DEFINES += NO_GETENV
- contains(CE_ARCH,x86):CONFIG -= stl exceptions
- contains(CE_ARCH,x86):CONFIG += exceptions_off
-}
-
-#Disable warnings in 3rdparty code due to unused arguments
-symbian: {
- QMAKE_CXXFLAGS.CW += -W nounusedarg
- TARGET.UID3=0x2001E61B
-} else:contains(QMAKE_CC, gcc): {
- QMAKE_CFLAGS_WARN_ON += -Wno-unused-parameter -Wno-main
-}
-
include(../../../gui/image/qjpeghandler.pri)
SOURCES += main.cpp
diff --git a/src/plugins/s60/s60.pro b/src/plugins/s60/s60.pro
index 8ae639c82b..c999fff656 100644
--- a/src/plugins/s60/s60.pro
+++ b/src/plugins/s60/s60.pro
@@ -1,3 +1,11 @@
TEMPLATE = subdirs
-symbian:SUBDIRS = 3_1 3_2 5_0
+
+symbian {
+ contains(S60_VERSION, 3.1)|contains(S60_VERSION, 3.2)|contains(S60_VERSION, 5.0) {
+ SUBDIRS += 3_1 3_2
+ }
+
+ # 5.0 is used also for Symbian3 and later
+ SUBDIRS += 5_0
+} \ No newline at end of file
diff --git a/src/qt3support/dialogs/q3filedialog.cpp b/src/qt3support/dialogs/q3filedialog.cpp
index 35f7890efe..f9dfaa155d 100644
--- a/src/qt3support/dialogs/q3filedialog.cpp
+++ b/src/qt3support/dialogs/q3filedialog.cpp
@@ -106,7 +106,6 @@
#ifdef Q_WS_MAC
#include "qmacstyle_mac.h"
#include "private/qt_mac_p.h"
-#include "private/qunicodetables_p.h"
#undef check
#endif
diff --git a/src/qt3support/text/q3richtext.cpp b/src/qt3support/text/q3richtext.cpp
index 625dd95ab2..d84a85b4d6 100644
--- a/src/qt3support/text/q3richtext.cpp
+++ b/src/qt3support/text/q3richtext.cpp
@@ -64,7 +64,6 @@
#include "q3stylesheet.h"
#include "qtextstream.h"
#include <private/qtextengine_p.h>
-#include <private/qunicodetables_p.h>
#include <stdlib.h>
diff --git a/src/s60installs/bwins/QtCoreu.def b/src/s60installs/bwins/QtCoreu.def
index 1a79f6322a..0f66d72cb7 100644
--- a/src/s60installs/bwins/QtCoreu.def
+++ b/src/s60installs/bwins/QtCoreu.def
@@ -1440,8 +1440,8 @@ EXPORTS
?d_func@QBuffer@@ABEPBVQBufferPrivate@@XZ @ 1439 NONAME ; class QBufferPrivate const * QBuffer::d_func(void) const
?d_func@QCoreApplication@@AAEPAVQCoreApplicationPrivate@@XZ @ 1440 NONAME ; class QCoreApplicationPrivate * QCoreApplication::d_func(void)
?d_func@QCoreApplication@@ABEPBVQCoreApplicationPrivate@@XZ @ 1441 NONAME ; class QCoreApplicationPrivate const * QCoreApplication::d_func(void) const
- ?d_func@QDir@@AAEPAVQDirPrivate@@XZ @ 1442 NONAME ; class QDirPrivate * QDir::d_func(void)
- ?d_func@QDir@@ABEPBVQDirPrivate@@XZ @ 1443 NONAME ; class QDirPrivate const * QDir::d_func(void) const
+ ?d_func@QDir@@AAEPAVQDirPrivate@@XZ @ 1442 NONAME ABSENT ; class QDirPrivate * QDir::d_func(void)
+ ?d_func@QDir@@ABEPBVQDirPrivate@@XZ @ 1443 NONAME ABSENT ; class QDirPrivate const * QDir::d_func(void) const
?d_func@QEventDispatcherSymbian@@AAEPAVQAbstractEventDispatcherPrivate@@XZ @ 1444 NONAME ; class QAbstractEventDispatcherPrivate * QEventDispatcherSymbian::d_func(void)
?d_func@QEventDispatcherSymbian@@ABEPBVQAbstractEventDispatcherPrivate@@XZ @ 1445 NONAME ; class QAbstractEventDispatcherPrivate const * QEventDispatcherSymbian::d_func(void) const
?d_func@QEventLoop@@AAEPAVQEventLoopPrivate@@XZ @ 1446 NONAME ; class QEventLoopPrivate * QEventLoop::d_func(void)
diff --git a/src/s60installs/bwins/QtDeclarativeu.def b/src/s60installs/bwins/QtDeclarativeu.def
index 50c948a4ff..cf2f325827 100644
--- a/src/s60installs/bwins/QtDeclarativeu.def
+++ b/src/s60installs/bwins/QtDeclarativeu.def
@@ -215,7 +215,7 @@ EXPORTS
?clear@QDeclarativeListReference@@QBE_NXZ @ 214 NONAME ; bool QDeclarativeListReference::clear(void) const
?parentChanged@QDeclarativeItem@@IAEXPAV1@@Z @ 215 NONAME ; void QDeclarativeItem::parentChanged(class QDeclarativeItem *)
?columnNumber@QDeclarativeDebugFileReference@@QBEHXZ @ 216 NONAME ; int QDeclarativeDebugFileReference::columnNumber(void) const
- ??0QDeclarativeListModel@@AAE@_NPAVQObject@@@Z @ 217 NONAME ; QDeclarativeListModel::QDeclarativeListModel(bool, class QObject *)
+ ??0QDeclarativeListModel@@AAE@_NPAVQObject@@@Z @ 217 NONAME ABSENT ; QDeclarativeListModel::QDeclarativeListModel(bool, class QObject *)
?apply@QDeclarativeState@@QAEXPAVQDeclarativeStateGroup@@PAVQDeclarativeTransition@@PAV1@@Z @ 218 NONAME ; void QDeclarativeState::apply(class QDeclarativeStateGroup *, class QDeclarativeTransition *, class QDeclarativeState *)
?isValid@QDeclarativeDomProperty@@QBE_NXZ @ 219 NONAME ; bool QDeclarativeDomProperty::isValid(void) const
?trUtf8@QDeclarativeDebugExpressionQuery@@SA?AVQString@@PBD0@Z @ 220 NONAME ; class QString QDeclarativeDebugExpressionQuery::trUtf8(char const *, char const *)
@@ -1639,4 +1639,80 @@ EXPORTS
?baselineOffsetChanged@QDeclarativeItem@@IAEXM@Z @ 1638 NONAME ; void QDeclarativeItem::baselineOffsetChanged(float)
??6QDeclarativeInfo@@QAEAAV0@VQChar@@@Z @ 1639 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QChar)
?newObjects@QDeclarativeEngineDebug@@IAEXXZ @ 1640 NONAME ; void QDeclarativeEngineDebug::newObjects(void)
+ ?qt_metacast@QDeclarativePropertyChanges@@UAEPAXPBD@Z @ 1641 NONAME ; void * QDeclarativePropertyChanges::qt_metacast(char const *)
+ ?actions@QDeclarativePropertyChanges@@UAE?AV?$QList@VQDeclarativeAction@@@@XZ @ 1642 NONAME ; class QList<class QDeclarativeAction> QDeclarativePropertyChanges::actions(void)
+ ??1QDeclarativePropertyChanges@@UAE@XZ @ 1643 NONAME ; QDeclarativePropertyChanges::~QDeclarativePropertyChanges(void)
+ ??_EQDeclarativePropertyChanges@@UAE@I@Z @ 1644 NONAME ; QDeclarativePropertyChanges::~QDeclarativePropertyChanges(unsigned int)
+ ?setObject@QDeclarativePropertyChanges@@QAEXPAVQObject@@@Z @ 1645 NONAME ; void QDeclarativePropertyChanges::setObject(class QObject *)
+ ?staticMetaObject@QDeclarativePropertyChanges@@2UQMetaObject@@B @ 1646 NONAME ; struct QMetaObject const QDeclarativePropertyChanges::staticMetaObject
+ ?removeEntryFromRevertList@QDeclarativeState@@QAE_NPAVQObject@@ABVQByteArray@@@Z @ 1647 NONAME ; bool QDeclarativeState::removeEntryFromRevertList(class QObject *, class QByteArray const &)
+ ?restoreEntryValues@QDeclarativePropertyChanges@@QBE_NXZ @ 1648 NONAME ; bool QDeclarativePropertyChanges::restoreEntryValues(void) const
+ ?setRestoreEntryValues@QDeclarativePropertyChanges@@QAEX_N@Z @ 1649 NONAME ; void QDeclarativePropertyChanges::setRestoreEntryValues(bool)
+ ?changeValue@QDeclarativePropertyChanges@@QAEXABVQByteArray@@ABVQVariant@@@Z @ 1650 NONAME ; void QDeclarativePropertyChanges::changeValue(class QByteArray const &, class QVariant const &)
+ ?metaObject@QDeclarativePropertyChanges@@UBEPBUQMetaObject@@XZ @ 1651 NONAME ; struct QMetaObject const * QDeclarativePropertyChanges::metaObject(void) const
+ ?data_clear@QDeclarativeItemPrivate@@SAXPAV?$QDeclarativeListProperty@VQObject@@@@@Z @ 1652 NONAME ; void QDeclarativeItemPrivate::data_clear(class QDeclarativeListProperty<class QObject> *)
+ ?containsPropertyInRevertList@QDeclarativeState@@QBE_NPAVQObject@@ABVQByteArray@@@Z @ 1653 NONAME ; bool QDeclarativeState::containsPropertyInRevertList(class QObject *, class QByteArray const &) const
+ ?containsValue@QDeclarativePropertyChanges@@QBE_NABVQByteArray@@@Z @ 1654 NONAME ; bool QDeclarativePropertyChanges::containsValue(class QByteArray const &) const
+ ?bindingInRevertList@QDeclarativeState@@QBEPAVQDeclarativeAbstractBinding@@PAVQObject@@ABVQByteArray@@@Z @ 1655 NONAME ; class QDeclarativeAbstractBinding * QDeclarativeState::bindingInRevertList(class QObject *, class QByteArray const &) const
+ ?d_func@QDeclarativePropertyChanges@@ABEPBVQDeclarativePropertyChangesPrivate@@XZ @ 1656 NONAME ; class QDeclarativePropertyChangesPrivate const * QDeclarativePropertyChanges::d_func(void) const
+ ?containsProperty@QDeclarativePropertyChanges@@QBE_NABVQByteArray@@@Z @ 1657 NONAME ; bool QDeclarativePropertyChanges::containsProperty(class QByteArray const &) const
+ ?trUtf8@QDeclarativePropertyChanges@@SA?AVQString@@PBD0H@Z @ 1658 NONAME ; class QString QDeclarativePropertyChanges::trUtf8(char const *, char const *, int)
+ ?property@QDeclarativePropertyChanges@@QBE?AVQVariant@@ABVQByteArray@@@Z @ 1659 NONAME ; class QVariant QDeclarativePropertyChanges::property(class QByteArray const &) const
+ ?containsExpression@QDeclarativePropertyChanges@@QBE_NABVQByteArray@@@Z @ 1660 NONAME ; bool QDeclarativePropertyChanges::containsExpression(class QByteArray const &) const
+ ?d_func@QDeclarativeStateOperation@@ABEPBVQDeclarativeStateOperationPrivate@@XZ @ 1661 NONAME ; class QDeclarativeStateOperationPrivate const * QDeclarativeStateOperation::d_func(void) const
+ ?d_func@QDeclarativePropertyChanges@@AAEPAVQDeclarativePropertyChangesPrivate@@XZ @ 1662 NONAME ; class QDeclarativePropertyChangesPrivate * QDeclarativePropertyChanges::d_func(void)
+ ?state@QDeclarativeStateOperation@@QBEPAVQDeclarativeState@@XZ @ 1663 NONAME ; class QDeclarativeState * QDeclarativeStateOperation::state(void) const
+ ?value@QDeclarativePropertyChanges@@QBE?AVQVariant@@ABVQByteArray@@@Z @ 1664 NONAME ; class QVariant QDeclarativePropertyChanges::value(class QByteArray const &) const
+ ?qt_metacall@QDeclarativePropertyChanges@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1665 NONAME ; int QDeclarativePropertyChanges::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?trUtf8@QDeclarativePropertyChanges@@SA?AVQString@@PBD0@Z @ 1666 NONAME ; class QString QDeclarativePropertyChanges::trUtf8(char const *, char const *)
+ ?attachToState@QDeclarativePropertyChanges@@QAEXXZ @ 1667 NONAME ; void QDeclarativePropertyChanges::attachToState(void)
+ ?changeExpression@QDeclarativePropertyChanges@@QAEXABVQByteArray@@ABVQString@@@Z @ 1668 NONAME ; void QDeclarativePropertyChanges::changeExpression(class QByteArray const &, class QString const &)
+ ?addEntryToRevertList@QDeclarativeState@@QAEXABVQDeclarativeAction@@@Z @ 1669 NONAME ; void QDeclarativeState::addEntryToRevertList(class QDeclarativeAction const &)
+ ??0QDeclarativePropertyChanges@@QAE@XZ @ 1670 NONAME ; QDeclarativePropertyChanges::QDeclarativePropertyChanges(void)
+ ?resources_clear@QDeclarativeItemPrivate@@SAXPAV?$QDeclarativeListProperty@VQObject@@@@@Z @ 1671 NONAME ; void QDeclarativeItemPrivate::resources_clear(class QDeclarativeListProperty<class QObject> *)
+ ?isExplicit@QDeclarativePropertyChanges@@QBE_NXZ @ 1672 NONAME ; bool QDeclarativePropertyChanges::isExplicit(void) const
+ ?setState@QDeclarativeStateOperation@@QAEXPAVQDeclarativeState@@@Z @ 1673 NONAME ; void QDeclarativeStateOperation::setState(class QDeclarativeState *)
+ ?detachFromState@QDeclarativePropertyChanges@@QAEXXZ @ 1674 NONAME ; void QDeclarativePropertyChanges::detachFromState(void)
+ ?tr@QDeclarativePropertyChanges@@SA?AVQString@@PBD0H@Z @ 1675 NONAME ; class QString QDeclarativePropertyChanges::tr(char const *, char const *, int)
+ ?addEntriesToRevertList@QDeclarativeState@@QAEXABV?$QList@VQDeclarativeAction@@@@@Z @ 1676 NONAME ; void QDeclarativeState::addEntriesToRevertList(class QList<class QDeclarativeAction> const &)
+ ?expression@QDeclarativePropertyChanges@@QBE?AVQString@@ABVQByteArray@@@Z @ 1677 NONAME ; class QString QDeclarativePropertyChanges::expression(class QByteArray const &) const
+ ?object@QDeclarativePropertyChanges@@QBEPAVQObject@@XZ @ 1678 NONAME ; class QObject * QDeclarativePropertyChanges::object(void) const
+ ?valueInRevertList@QDeclarativeState@@QBE?AVQVariant@@PAVQObject@@ABVQByteArray@@@Z @ 1679 NONAME ; class QVariant QDeclarativeState::valueInRevertList(class QObject *, class QByteArray const &) const
+ ?removeAllEntriesFromRevertList@QDeclarativeState@@QAEXPAVQObject@@@Z @ 1680 NONAME ; void QDeclarativeState::removeAllEntriesFromRevertList(class QObject *)
+ ?d_func@QDeclarativeStateOperation@@AAEPAVQDeclarativeStateOperationPrivate@@XZ @ 1681 NONAME ; class QDeclarativeStateOperationPrivate * QDeclarativeStateOperation::d_func(void)
+ ?changeValueInRevertList@QDeclarativeState@@QAE_NPAVQObject@@ABVQByteArray@@ABVQVariant@@@Z @ 1682 NONAME ; bool QDeclarativeState::changeValueInRevertList(class QObject *, class QByteArray const &, class QVariant const &)
+ ?setIsExplicit@QDeclarativePropertyChanges@@QAEX_N@Z @ 1683 NONAME ; void QDeclarativePropertyChanges::setIsExplicit(bool)
+ ?isStateActive@QDeclarativeState@@QBE_NXZ @ 1684 NONAME ; bool QDeclarativeState::isStateActive(void) const
+ ?data_count@QDeclarativeItemPrivate@@SAHPAV?$QDeclarativeListProperty@VQObject@@@@@Z @ 1685 NONAME ; int QDeclarativeItemPrivate::data_count(class QDeclarativeListProperty<class QObject> *)
+ ?removeProperty@QDeclarativePropertyChanges@@QAEXABVQByteArray@@@Z @ 1686 NONAME ; void QDeclarativePropertyChanges::removeProperty(class QByteArray const &)
+ ?data_at@QDeclarativeItemPrivate@@SAPAVQObject@@PAV?$QDeclarativeListProperty@VQObject@@@@H@Z @ 1687 NONAME ; class QObject * QDeclarativeItemPrivate::data_at(class QDeclarativeListProperty<class QObject> *, int)
+ ?tr@QDeclarativePropertyChanges@@SA?AVQString@@PBD0@Z @ 1688 NONAME ; class QString QDeclarativePropertyChanges::tr(char const *, char const *)
+ ?changeBindingInRevertList@QDeclarativeState@@QAE_NPAVQObject@@ABVQByteArray@@PAVQDeclarativeAbstractBinding@@@Z @ 1689 NONAME ; bool QDeclarativeState::changeBindingInRevertList(class QObject *, class QByteArray const &, class QDeclarativeAbstractBinding *)
+ ?getStaticMetaObject@QDeclarativePropertyChanges@@SAABUQMetaObject@@XZ @ 1690 NONAME ; struct QMetaObject const & QDeclarativePropertyChanges::getStaticMetaObject(void)
+ ?weakPointer@QDeclarativeAbstractBinding@@QAE?AV?$QWeakPointer@VQDeclarativeAbstractBinding@@@@XZ @ 1691 NONAME ABSENT ; class QWeakPointer<class QDeclarativeAbstractBinding> QDeclarativeAbstractBinding::weakPointer(void)
+ ?getStaticMetaObject@QDeclarativeScriptAction@@SAABUQMetaObject@@XZ @ 1692 NONAME ; struct QMetaObject const & QDeclarativeScriptAction::getStaticMetaObject(void)
+ ?qt_metacall@QDeclarativeScriptAction@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1693 NONAME ; int QDeclarativeScriptAction::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ??1QDeclarativeScriptAction@@UAE@XZ @ 1694 NONAME ; QDeclarativeScriptAction::~QDeclarativeScriptAction(void)
+ ?stateChangeScriptName@QDeclarativeScriptAction@@QBE?AVQString@@XZ @ 1695 NONAME ; class QString QDeclarativeScriptAction::stateChangeScriptName(void) const
+ ?script@QDeclarativeScriptAction@@QBE?AVQDeclarativeScriptString@@XZ @ 1696 NONAME ; class QDeclarativeScriptString QDeclarativeScriptAction::script(void) const
+ ?qt_metacast@QDeclarativeScriptAction@@UAEPAXPBD@Z @ 1697 NONAME ; void * QDeclarativeScriptAction::qt_metacast(char const *)
+ ?tr@QDeclarativeScriptAction@@SA?AVQString@@PBD0@Z @ 1698 NONAME ; class QString QDeclarativeScriptAction::tr(char const *, char const *)
+ ?setStateChangeScriptName@QDeclarativeScriptAction@@QAEXABVQString@@@Z @ 1699 NONAME ; void QDeclarativeScriptAction::setStateChangeScriptName(class QString const &)
+ ??_EQDeclarativeScriptAction@@UAE@I@Z @ 1700 NONAME ; QDeclarativeScriptAction::~QDeclarativeScriptAction(unsigned int)
+ ?d_func@QDeclarativeScriptAction@@ABEPBVQDeclarativeScriptActionPrivate@@XZ @ 1701 NONAME ; class QDeclarativeScriptActionPrivate const * QDeclarativeScriptAction::d_func(void) const
+ ?weakPointer@QDeclarativeAbstractBinding@@AAE?AV?$QWeakPointer@VQDeclarativeAbstractBinding@@@@XZ @ 1702 NONAME ; class QWeakPointer<class QDeclarativeAbstractBinding> QDeclarativeAbstractBinding::weakPointer(void)
+ ?trUtf8@QDeclarativeScriptAction@@SA?AVQString@@PBD0H@Z @ 1703 NONAME ; class QString QDeclarativeScriptAction::trUtf8(char const *, char const *, int)
+ ?trUtf8@QDeclarativeScriptAction@@SA?AVQString@@PBD0@Z @ 1704 NONAME ; class QString QDeclarativeScriptAction::trUtf8(char const *, char const *)
+ ?qtAnimation@QDeclarativeScriptAction@@MAEPAVQAbstractAnimation@@XZ @ 1705 NONAME ; class QAbstractAnimation * QDeclarativeScriptAction::qtAnimation(void)
+ ??0QDeclarativeScriptAction@@QAE@PAVQObject@@@Z @ 1706 NONAME ; QDeclarativeScriptAction::QDeclarativeScriptAction(class QObject *)
+ ?tr@QDeclarativeScriptAction@@SA?AVQString@@PBD0H@Z @ 1707 NONAME ; class QString QDeclarativeScriptAction::tr(char const *, char const *, int)
+ ?d_func@QDeclarativeScriptAction@@AAEPAVQDeclarativeScriptActionPrivate@@XZ @ 1708 NONAME ; class QDeclarativeScriptActionPrivate * QDeclarativeScriptAction::d_func(void)
+ ?transition@QDeclarativeScriptAction@@MAEXAAV?$QList@VQDeclarativeAction@@@@AAV?$QList@VQDeclarativeProperty@@@@W4TransitionDirection@QDeclarativeAbstractAnimation@@@Z @ 1709 NONAME ; void QDeclarativeScriptAction::transition(class QList<class QDeclarativeAction> &, class QList<class QDeclarativeProperty> &, enum QDeclarativeAbstractAnimation::TransitionDirection)
+ ?staticMetaObject@QDeclarativeScriptAction@@2UQMetaObject@@B @ 1710 NONAME ; struct QMetaObject const QDeclarativeScriptAction::staticMetaObject
+ ?setScript@QDeclarativeScriptAction@@QAEXABVQDeclarativeScriptString@@@Z @ 1711 NONAME ; void QDeclarativeScriptAction::setScript(class QDeclarativeScriptString const &)
+ ?metaObject@QDeclarativeScriptAction@@UBEPBUQMetaObject@@XZ @ 1712 NONAME ; struct QMetaObject const * QDeclarativeScriptAction::metaObject(void) const
+ ?getPointer@QDeclarativeAbstractBinding@@SA?AV?$QWeakPointer@VQDeclarativeAbstractBinding@@@@PAV1@@Z @ 1713 NONAME ; class QWeakPointer<class QDeclarativeAbstractBinding> QDeclarativeAbstractBinding::getPointer(class QDeclarativeAbstractBinding *)
+ ??0QDeclarativeListModel@@AAE@PBV0@PAVQDeclarativeListModelWorkerAgent@@@Z @ 1714 NONAME ; QDeclarativeListModel::QDeclarativeListModel(class QDeclarativeListModel const *, class QDeclarativeListModelWorkerAgent *)
+ ?inWorkerThread@QDeclarativeListModel@@ABE_NXZ @ 1715 NONAME ; bool QDeclarativeListModel::inWorkerThread(void) const
+ ?canMove@QDeclarativeListModel@@ABE_NHHH@Z @ 1716 NONAME ; bool QDeclarativeListModel::canMove(int, int, int) const
diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def
index 01630e25f1..7805dae933 100644
--- a/src/s60installs/bwins/QtGuiu.def
+++ b/src/s60installs/bwins/QtGuiu.def
@@ -2645,7 +2645,7 @@ EXPORTS
?childItems@QGraphicsItem@@QBE?AV?$QList@PAVQGraphicsItem@@@@XZ @ 2644 NONAME ; class QList<class QGraphicsItem *> QGraphicsItem::childItems(void) const
?children@QGraphicsItem@@QBE?AV?$QList@PAVQGraphicsItem@@@@XZ @ 2645 NONAME ; class QList<class QGraphicsItem *> QGraphicsItem::children(void) const
?childrenBoundingRect@QGraphicsItem@@QBE?AVQRectF@@XZ @ 2646 NONAME ; class QRectF QGraphicsItem::childrenBoundingRect(void) const
- ?childrenBoundingRectHelper@QGraphicsItemPrivate@@QAEXPAVQTransform@@PAVQRectF@@@Z @ 2647 NONAME ; void QGraphicsItemPrivate::childrenBoundingRectHelper(class QTransform *, class QRectF *)
+ ?childrenBoundingRectHelper@QGraphicsItemPrivate@@QAEXPAVQTransform@@PAVQRectF@@@Z @ 2647 NONAME ABSENT ; void QGraphicsItemPrivate::childrenBoundingRectHelper(class QTransform *, class QRectF *)
?childrenCheckState@QTreeWidgetItem@@ABE?AVQVariant@@H@Z @ 2648 NONAME ; class QVariant QTreeWidgetItem::childrenCheckState(int) const
?childrenClippedToShape@QGraphicsItemPrivate@@QBE_NXZ @ 2649 NONAME ; bool QGraphicsItemPrivate::childrenClippedToShape(void) const
?childrenCollapsible@QSplitter@@QBE_NXZ @ 2650 NONAME ; bool QSplitter::childrenCollapsible(void) const
@@ -4078,7 +4078,7 @@ EXPORTS
?editorEvent@QAbstractItemDelegate@@UAE_NPAVQEvent@@PAVQAbstractItemModel@@ABVQStyleOptionViewItem@@ABVQModelIndex@@@Z @ 4077 NONAME ; bool QAbstractItemDelegate::editorEvent(class QEvent *, class QAbstractItemModel *, class QStyleOptionViewItem const &, class QModelIndex const &)
?editorEvent@QItemDelegate@@MAE_NPAVQEvent@@PAVQAbstractItemModel@@ABVQStyleOptionViewItem@@ABVQModelIndex@@@Z @ 4078 NONAME ; bool QItemDelegate::editorEvent(class QEvent *, class QAbstractItemModel *, class QStyleOptionViewItem const &, class QModelIndex const &)
?editorEvent@QStyledItemDelegate@@MAE_NPAVQEvent@@PAVQAbstractItemModel@@ABVQStyleOptionViewItem@@ABVQModelIndex@@@Z @ 4079 NONAME ; bool QStyledItemDelegate::editorEvent(class QEvent *, class QAbstractItemModel *, class QStyleOptionViewItem const &, class QModelIndex const &)
- ?effectiveBoundingRect@QGraphicsItemPrivate@@QBE?AVQRectF@@XZ @ 4080 NONAME ; class QRectF QGraphicsItemPrivate::effectiveBoundingRect(void) const
+ ?effectiveBoundingRect@QGraphicsItemPrivate@@QBE?AVQRectF@@XZ @ 4080 NONAME ABSENT ; class QRectF QGraphicsItemPrivate::effectiveBoundingRect(void) const
?effectiveOpacity@QGraphicsItem@@QBEMXZ @ 4081 NONAME ; float QGraphicsItem::effectiveOpacity(void) const
?effectiveOpacity@QGraphicsItemPrivate@@QBEMXZ @ 4082 NONAME ; float QGraphicsItemPrivate::effectiveOpacity(void) const
?effectiveRectFor@QWidgetPrivate@@QBE?AVQRect@@ABV2@@Z @ 4083 NONAME ; class QRect QWidgetPrivate::effectiveRectFor(class QRect const &) const
@@ -12885,4 +12885,11 @@ EXPORTS
??0QGraphicsViewPrivate@@QAE@XZ @ 12884 NONAME ; QGraphicsViewPrivate::QGraphicsViewPrivate(void)
?flushDetachedPixmaps@QPixmapCache@@SAXXZ @ 12885 NONAME ; void QPixmapCache::flushDetachedPixmaps(void)
?replayLastMouseEvent@QGraphicsViewPrivate@@QAEXXZ @ 12886 NONAME ; void QGraphicsViewPrivate::replayLastMouseEvent(void)
+ ?children_clear@QGraphicsItemPrivate@@SAXPAV?$QDeclarativeListProperty@VQGraphicsObject@@@@@Z @ 12887 NONAME ; void QGraphicsItemPrivate::children_clear(class QDeclarativeListProperty<class QGraphicsObject> *)
+ ?timeout@QTapAndHoldGesture@@SAHXZ @ 12888 NONAME ; int QTapAndHoldGesture::timeout(void)
+ ?lastRightBearing@QFontEngine@@IAE?AUQFixed@@ABUQGlyphLayout@@_N@Z @ 12889 NONAME ; struct QFixed QFontEngine::lastRightBearing(struct QGlyphLayout const &, bool)
+ ?childrenBoundingRectHelper@QGraphicsItemPrivate@@QAEXPAVQTransform@@PAVQRectF@@PAVQGraphicsItem@@@Z @ 12890 NONAME ; void QGraphicsItemPrivate::childrenBoundingRectHelper(class QTransform *, class QRectF *, class QGraphicsItem *)
+ ?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
diff --git a/src/s60installs/bwins/QtOpenGLu.def b/src/s60installs/bwins/QtOpenGLu.def
new file mode 100644
index 0000000000..fa340e4e44
--- /dev/null
+++ b/src/s60installs/bwins/QtOpenGLu.def
@@ -0,0 +1,701 @@
+EXPORTS
+ ?setUniformValueArray@QGLShaderProgram@@QAEXHPBV?$QGenericMatrix@$01$01M@@H@Z @ 1 NONAME ; void QGLShaderProgram::setUniformValueArray(int, class QGenericMatrix<2, 2, float> const *, int)
+ ?setPaintEnginePrivate@QGLTextureGlyphCache@@QAEXPAVQGL2PaintEngineExPrivate@@@Z @ 2 NONAME ; void QGLTextureGlyphCache::setPaintEnginePrivate(class QGL2PaintEngineExPrivate *)
+ ??1QGLFormat@@QAE@XZ @ 3 NONAME ; QGLFormat::~QGLFormat(void)
+ ?setOpacityMode@QGLEngineShaderManager@@QAEXW4OpacityMode@1@@Z @ 4 NONAME ; void QGLEngineShaderManager::setOpacityMode(enum QGLEngineShaderManager::OpacityMode)
+ ?entryRgb@QGLColormap@@QBEIH@Z @ 5 NONAME ; unsigned int QGLColormap::entryRgb(int) const
+ ??0QGLFormat@@QAE@ABV0@@Z @ 6 NONAME ; QGLFormat::QGLFormat(class QGLFormat const &)
+ ?d_func@QGLShader@@AAEPAVQGLShaderPrivate@@XZ @ 7 NONAME ; class QGLShaderPrivate * QGLShader::d_func(void)
+ ?bindToDynamicTexture@QGLPixelBuffer@@QAE_NI@Z @ 8 NONAME ; bool QGLPixelBuffer::bindToDynamicTexture(unsigned int)
+ ??0QGLWidget@@QAE@PAVQGLContext@@PAVQWidget@@PBV0@V?$QFlags@W4WindowType@Qt@@@@@Z @ 9 NONAME ; QGLWidget::QGLWidget(class QGLContext *, class QWidget *, class QGLWidget const *, class QFlags<enum Qt::WindowType>)
+ ??_EQGLFormat@@QAE@I@Z @ 10 NONAME ; QGLFormat::~QGLFormat(unsigned int)
+ ?drawPixmapFragments@QGL2PaintEngineEx@@UAEXPBVPixmapFragment@QPainter@@HABVQPixmap@@V?$QFlags@W4PixmapFragmentHint@QPainter@@@@@Z @ 11 NONAME ; void QGL2PaintEngineEx::drawPixmapFragments(class QPainter::PixmapFragment const *, int, class QPixmap const &, class QFlags<enum QPainter::PixmapFragmentHint>)
+ ?paintEngine@QGLWidget@@UBEPAVQPaintEngine@@XZ @ 12 NONAME ; class QPaintEngine * QGLWidget::paintEngine(void) const
+ ?setPreferredPaintEngine@QGL@@YAXW4Type@QPaintEngine@@@Z @ 13 NONAME ; void QGL::setPreferredPaintEngine(enum QPaintEngine::Type)
+ ?isValid@QGLPixelBuffer@@QBE_NXZ @ 14 NONAME ; bool QGLPixelBuffer::isValid(void) const
+ ?stereo@QGLFormat@@QBE_NXZ @ 15 NONAME ; bool QGLFormat::stereo(void) const
+ ?size@QGLPixelBuffer@@QBE?AVQSize@@XZ @ 16 NONAME ; class QSize QGLPixelBuffer::size(void) const
+ ?qt_gl_transfer_context@@YAPBVQGLContext@@PBV1@@Z @ 17 NONAME ; class QGLContext const * qt_gl_transfer_context(class QGLContext const *)
+ ?format@QGLContext@@QBE?AVQGLFormat@@XZ @ 18 NONAME ; class QGLFormat QGLContext::format(void) const
+ ?getStaticMetaObject@QGraphicsShaderEffect@@SAABUQMetaObject@@XZ @ 19 NONAME ; struct QMetaObject const & QGraphicsShaderEffect::getStaticMetaObject(void)
+ ??1QGLWidget@@UAE@XZ @ 20 NONAME ; QGLWidget::~QGLWidget(void)
+ ??0QGLPixelBuffer@@QAE@ABVQSize@@ABVQGLFormat@@PAVQGLWidget@@@Z @ 21 NONAME ; QGLPixelBuffer::QGLPixelBuffer(class QSize const &, class QGLFormat const &, class QGLWidget *)
+ ?isEmpty@QGLColormap@@QBE_NXZ @ 22 NONAME ; bool QGLColormap::isEmpty(void) const
+ ?setAttributeValue@QGLShaderProgram@@QAEXPBDABVQVector2D@@@Z @ 23 NONAME ; void QGLShaderProgram::setAttributeValue(char const *, class QVector2D const &)
+ ?setUniformValue@QGLShaderProgram@@QAEXHABVQSize@@@Z @ 24 NONAME ; void QGLShaderProgram::setUniformValue(int, class QSize const &)
+ ?attachment@QGLFramebufferObjectFormat@@QBE?AW4Attachment@QGLFramebufferObject@@XZ @ 25 NONAME ; enum QGLFramebufferObject::Attachment QGLFramebufferObjectFormat::attachment(void) const
+ ?setGeometry@QGLWindowSurface@@UAEXABVQRect@@@Z @ 26 NONAME ; void QGLWindowSurface::setGeometry(class QRect const &)
+ ?setUniformValue@QGLShaderProgram@@QAEXPBDABVQVector3D@@@Z @ 27 NONAME ; void QGLShaderProgram::setUniformValue(char const *, class QVector3D const &)
+ ?release@QGLShaderProgram@@QAEXXZ @ 28 NONAME ; void QGLShaderProgram::release(void)
+ ?entryColor@QGLColormap@@QBE?AVQColor@@H@Z @ 29 NONAME ; class QColor QGLColormap::entryColor(int) const
+ ?setUniformValue@QGLShaderProgram@@QAEXHABV?$QGenericMatrix@$02$02M@@@Z @ 30 NONAME ; void QGLShaderProgram::setUniformValue(int, class QGenericMatrix<3, 3, float> const &)
+ ?setCompositionMode@QGLEngineShaderManager@@QAEXW4CompositionMode@QPainter@@@Z @ 31 NONAME ; void QGLEngineShaderManager::setCompositionMode(enum QPainter::CompositionMode)
+ ?bindTexture@QGLPixelBuffer@@QAEIABVQString@@@Z @ 32 NONAME ; unsigned int QGLPixelBuffer::bindTexture(class QString const &)
+ ?stencil@QGLFormat@@QBE_NXZ @ 33 NONAME ; bool QGLFormat::stencil(void) const
+ ?format@QGLPaintDevice@@UBE?AVQGLFormat@@XZ @ 34 NONAME ; class QGLFormat QGLPaintDevice::format(void) const
+ ?d_func@QGLContext@@AAEPAVQGLContextPrivate@@XZ @ 35 NONAME ; class QGLContextPrivate * QGLContext::d_func(void)
+ ?bindAttributeLocation@QGLShaderProgram@@QAEXABVQString@@H@Z @ 36 NONAME ; void QGLShaderProgram::bindAttributeLocation(class QString const &, int)
+ ?depthBufferSize@QGLFormat@@QBEHXZ @ 37 NONAME ; int QGLFormat::depthBufferSize(void) const
+ ?write@QGLBuffer@@QAEXHPBXH@Z @ 38 NONAME ; void QGLBuffer::write(int, void const *, int)
+ ?tr@QGraphicsShaderEffect@@SA?AVQString@@PBD0@Z @ 39 NONAME ; class QString QGraphicsShaderEffect::tr(char const *, char const *)
+ ?currentProgram@QGLEngineShaderManager@@QAEPAVQGLShaderProgram@@XZ @ 40 NONAME ; class QGLShaderProgram * QGLEngineShaderManager::currentProgram(void)
+ ?isLinked@QGLShaderProgram@@QBE_NXZ @ 41 NONAME ; bool QGLShaderProgram::isLinked(void) const
+ ?resizeTextureData@QGLTextureGlyphCache@@UAEXHH@Z @ 42 NONAME ; void QGLTextureGlyphCache::resizeTextureData(int, int)
+ ?device@QGLContext@@QBEPAVQPaintDevice@@XZ @ 43 NONAME ; class QPaintDevice * QGLContext::device(void) const
+ ?create@QGLContext@@UAE_NPBV1@@Z @ 44 NONAME ; bool QGLContext::create(class QGLContext const *)
+ ?staticMetaObject@QGLWindowSurface@@2UQMetaObject@@B @ 45 NONAME ; struct QMetaObject const QGLWindowSurface::staticMetaObject
+ ?staticMetaObject@QGLShader@@2UQMetaObject@@B @ 46 NONAME ; struct QMetaObject const QGLShader::staticMetaObject
+ ?state@QGL2PaintEngineEx@@QAEPAVQOpenGL2PaintEngineState@@XZ @ 47 NONAME ; class QOpenGL2PaintEngineState * QGL2PaintEngineEx::state(void)
+ ?setUsagePattern@QGLBuffer@@QAEXW4UsagePattern@1@@Z @ 48 NONAME ; void QGLBuffer::setUsagePattern(enum QGLBuffer::UsagePattern)
+ ?drawTexture@QGL2PaintEngineEx@@QAE_NABVQRectF@@IABVQSize@@0@Z @ 49 NONAME ; bool QGL2PaintEngineEx::drawTexture(class QRectF const &, unsigned int, class QSize const &, class QRectF const &)
+ ?qt_metacast@QGLShaderProgram@@UAEPAXPBD@Z @ 50 NONAME ; void * QGLShaderProgram::qt_metacast(char const *)
+ ?tr@QGLWidget@@SA?AVQString@@PBD0H@Z @ 51 NONAME ; class QString QGLWidget::tr(char const *, char const *, int)
+ ?fromData@QGLPixmapData@@UAE_NPBEIPBDV?$QFlags@W4ImageConversionFlag@Qt@@@@@Z @ 52 NONAME ; bool QGLPixmapData::fromData(unsigned char const *, unsigned int, char const *, class QFlags<enum Qt::ImageConversionFlag>)
+ ?brushOriginChanged@QGL2PaintEngineEx@@UAEXXZ @ 53 NONAME ; void QGL2PaintEngineEx::brushOriginChanged(void)
+ ?setContext@QGLSharedResourceGuard@@QAEXPBVQGLContext@@@Z @ 54 NONAME ; void QGLSharedResourceGuard::setContext(class QGLContext const *)
+ ?create@QGLBuffer@@QAE_NXZ @ 55 NONAME ; bool QGLBuffer::create(void)
+ ?setEntry@QGLColormap@@QAEXHI@Z @ 56 NONAME ; void QGLColormap::setEntry(int, unsigned int)
+ ?useBlitProgram@QGLEngineShaderManager@@QAEXXZ @ 57 NONAME ; void QGLEngineShaderManager::useBlitProgram(void)
+ ?paintEngine@QGLPixmapData@@UBEPAVQPaintEngine@@XZ @ 58 NONAME ; class QPaintEngine * QGLPixmapData::paintEngine(void) const
+ ?qt_destroy_gl_share_widget@@YAXXZ @ 59 NONAME ; void qt_destroy_gl_share_widget(void)
+ ?updateGL@QGLWidget@@UAEXXZ @ 60 NONAME ; void QGLWidget::updateGL(void)
+ ?setUniformValueArray@QGLShaderProgram@@QAEXHPBV?$QGenericMatrix@$02$02M@@H@Z @ 61 NONAME ; void QGLShaderProgram::setUniformValueArray(int, class QGenericMatrix<3, 3, float> const *, int)
+ ?setUniformValue@QGLShaderProgram@@QAEXPBDABVQColor@@@Z @ 62 NONAME ; void QGLShaderProgram::setUniformValue(char const *, class QColor const &)
+ ?d_func@QGLCustomShaderStage@@ABEPBVQGLCustomShaderStagePrivate@@XZ @ 63 NONAME ; class QGLCustomShaderStagePrivate const * QGLCustomShaderStage::d_func(void) const
+ ?link@QGLShaderProgram@@UAE_NXZ @ 64 NONAME ; bool QGLShaderProgram::link(void)
+ ??0QGLWindowSurface@@QAE@PAVQWidget@@@Z @ 65 NONAME ; QGLWindowSurface::QGLWindowSurface(class QWidget *)
+ ??9@YA_NABVQGLFormat@@0@Z @ 66 NONAME ; bool operator!=(class QGLFormat const &, class QGLFormat const &)
+ ?trUtf8@QGLEngineShaderManager@@SA?AVQString@@PBD0H@Z @ 67 NONAME ; class QString QGLEngineShaderManager::trUtf8(char const *, char const *, int)
+ ?clip@QGL2PaintEngineEx@@UAEXABVQVectorPath@@W4ClipOperation@Qt@@@Z @ 68 NONAME ; void QGL2PaintEngineEx::clip(class QVectorPath const &, enum Qt::ClipOperation)
+ ?setRgba@QGLFormat@@QAEX_N@Z @ 69 NONAME ; void QGLFormat::setRgba(bool)
+ ??1QGLGraphicsSystem@@UAE@XZ @ 70 NONAME ; QGLGraphicsSystem::~QGLGraphicsSystem(void)
+ ?simpleProgram@QGLEngineShaderManager@@QAEPAVQGLShaderProgram@@XZ @ 71 NONAME ; class QGLShaderProgram * QGLEngineShaderManager::simpleProgram(void)
+ ?generateDynamicTexture@QGLPixelBuffer@@QBEIXZ @ 72 NONAME ; unsigned int QGLPixelBuffer::generateDynamicTexture(void) const
+ ?metaObject@QGLShaderProgram@@UBEPBUQMetaObject@@XZ @ 73 NONAME ; struct QMetaObject const * QGLShaderProgram::metaObject(void) const
+ ?usagePattern@QGLBuffer@@QBE?AW4UsagePattern@1@XZ @ 74 NONAME ; enum QGLBuffer::UsagePattern QGLBuffer::usagePattern(void) const
+ ?setAttributeArray@QGLShaderProgram@@QAEXPBDPBVQVector4D@@H@Z @ 75 NONAME ; void QGLShaderProgram::setAttributeArray(char const *, class QVector4D const *, int)
+ ?setUniformValue@QGLShaderProgram@@QAEXHI@Z @ 76 NONAME ; void QGLShaderProgram::setUniformValue(int, unsigned int)
+ ?blitProgram@QGLEngineShaderManager@@QAEPAVQGLShaderProgram@@XZ @ 77 NONAME ; class QGLShaderProgram * QGLEngineShaderManager::blitProgram(void)
+ ?metaObject@QGLSignalProxy@@UBEPBUQMetaObject@@XZ @ 78 NONAME ; struct QMetaObject const * QGLSignalProxy::metaObject(void) const
+ ??1QGLShaderProgram@@UAE@XZ @ 79 NONAME ; QGLShaderProgram::~QGLShaderProgram(void)
+ ?height@QGLTextureGlyphCache@@QBEHXZ @ 80 NONAME ; int QGLTextureGlyphCache::height(void) const
+ ??_EQGLWindowSurface@@UAE@I@Z @ 81 NONAME ; QGLWindowSurface::~QGLWindowSurface(unsigned int)
+ ?renderPixmap@QGLWidget@@QAE?AVQPixmap@@HH_N@Z @ 82 NONAME ; class QPixmap QGLWidget::renderPixmap(int, int, bool)
+ ?read@QGLBuffer@@QAE_NHPAXH@Z @ 83 NONAME ; bool QGLBuffer::read(int, void *, int)
+ ?qglClearColor@QGLWidget@@QBEXABVQColor@@@Z @ 84 NONAME ; void QGLWidget::qglClearColor(class QColor const &) const
+ ??0QGLFramebufferObject@@QAE@HHW4Attachment@0@II@Z @ 85 NONAME ; QGLFramebufferObject::QGLFramebufferObject(int, int, enum QGLFramebufferObject::Attachment, unsigned int, unsigned int)
+ ?penChanged@QGL2PaintEngineEx@@UAEXXZ @ 86 NONAME ; void QGL2PaintEngineEx::penChanged(void)
+ ??_EQGraphicsShaderEffect@@UAE@I@Z @ 87 NONAME ; QGraphicsShaderEffect::~QGraphicsShaderEffect(unsigned int)
+ ?doneCurrent@QGLContext@@UAEXXZ @ 88 NONAME ; void QGLContext::doneCurrent(void)
+ ??_EQGLContext@@UAE@I@Z @ 89 NONAME ; QGLContext::~QGLContext(unsigned int)
+ ?release@QGLBuffer@@QAEXXZ @ 90 NONAME ; void QGLBuffer::release(void)
+ ??0QGLPixmapData@@QAE@W4PixelType@QPixmapData@@@Z @ 91 NONAME ; QGLPixmapData::QGLPixmapData(enum QPixmapData::PixelType)
+ ?texture@QGLPixmapData@@QBEPAVQGLTexture@@XZ @ 92 NONAME ; class QGLTexture * QGLPixmapData::texture(void) const
+ ?updateGeometry@QGLWindowSurface@@QAEXXZ @ 93 NONAME ; void QGLWindowSurface::updateGeometry(void)
+ ?windowCreated@QGLContext@@IBE_NXZ @ 94 NONAME ; bool QGLContext::windowCreated(void) const
+ ?setWindowCreated@QGLContext@@IAEX_N@Z @ 95 NONAME ; void QGLContext::setWindowCreated(bool)
+ ?uniformLocation@QGLShaderProgram@@QBEHABVQString@@@Z @ 96 NONAME ; int QGLShaderProgram::uniformLocation(class QString const &) const
+ ?metaObject@QGLWindowSurface@@UBEPBUQMetaObject@@XZ @ 97 NONAME ; struct QMetaObject const * QGLWindowSurface::metaObject(void) const
+ ?setAttributeBuffer@QGLShaderProgram@@QAEXHIHHH@Z @ 98 NONAME ; void QGLShaderProgram::setAttributeBuffer(int, unsigned int, int, int, int)
+ ?getProcAddress@QGLContext@@QBEPAXABVQString@@@Z @ 99 NONAME ; void * QGLContext::getProcAddress(class QString const &) const
+ ?qt_metacall@QGLTextureGlyphCache@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 100 NONAME ; int QGLTextureGlyphCache::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ??1QGLPixelBuffer@@UAE@XZ @ 101 NONAME ; QGLPixelBuffer::~QGLPixelBuffer(void)
+ ?setUniformValueArray@QGLShaderProgram@@QAEXHPBVQVector4D@@H@Z @ 102 NONAME ; void QGLShaderProgram::setUniformValueArray(int, class QVector4D const *, int)
+ ?releaseFromDynamicTexture@QGLPixelBuffer@@QAEXXZ @ 103 NONAME ; void QGLPixelBuffer::releaseFromDynamicTexture(void)
+ ?setUniformsDirty@QGraphicsShaderEffect@@IAEXXZ @ 104 NONAME ; void QGraphicsShaderEffect::setUniformsDirty(void)
+ ?drawTexture@QGLFramebufferObject@@QAEXABVQPointF@@II@Z @ 105 NONAME ; void QGLFramebufferObject::drawTexture(class QPointF const &, unsigned int, unsigned int)
+ ??0QGLContext@@QAE@ABVQGLFormat@@@Z @ 106 NONAME ; QGLContext::QGLContext(class QGLFormat const &)
+ ?geometryOutputVertexCount@QGLShaderProgram@@QBEHXZ @ 107 NONAME ; int QGLShaderProgram::geometryOutputVertexCount(void) const
+ ?setAccum@QGLFormat@@QAEX_N@Z @ 108 NONAME ; void QGLFormat::setAccum(bool)
+ ??0QGLSignalProxy@@QAE@XZ @ 109 NONAME ; QGLSignalProxy::QGLSignalProxy(void)
+ ?isUninitialized@QGLPixmapData@@ABE_NXZ @ 110 NONAME ; bool QGLPixmapData::isUninitialized(void) const
+ ??0QGLFramebufferObjectFormat@@QAE@XZ @ 111 NONAME ; QGLFramebufferObjectFormat::QGLFramebufferObjectFormat(void)
+ ??8@YA_NABVQGLFormat@@0@Z @ 112 NONAME ; bool operator==(class QGLFormat const &, class QGLFormat const &)
+ ?toImage@QGLFramebufferObject@@QBE?AVQImage@@XZ @ 113 NONAME ; class QImage QGLFramebufferObject::toImage(void) const
+ ?setUniformValue@QGLShaderProgram@@QAEXPBDABV?$QGenericMatrix@$01$02M@@@Z @ 114 NONAME ; void QGLShaderProgram::setUniformValue(char const *, class QGenericMatrix<2, 3, float> const &)
+ ?useCorrectShaderProg@QGLEngineShaderManager@@QAE_NXZ @ 115 NONAME ; bool QGLEngineShaderManager::useCorrectShaderProg(void)
+ ?setAlphaBufferSize@QGLFormat@@QAEXH@Z @ 116 NONAME ; void QGLFormat::setAlphaBufferSize(int)
+ ??0QGLContextResource@@QAE@P6AXPAX@Z@Z @ 117 NONAME ; QGLContextResource::QGLContextResource(void (*)(void *))
+ ?tr@QGLEngineShaderManager@@SA?AVQString@@PBD0H@Z @ 118 NONAME ; class QString QGLEngineShaderManager::tr(char const *, char const *, int)
+ ?setUniformValue@QGLShaderProgram@@QAEXHABVQVector4D@@@Z @ 119 NONAME ; void QGLShaderProgram::setUniformValue(int, class QVector4D const &)
+ ?d_func@QGLContext@@ABEPBVQGLContextPrivate@@XZ @ 120 NONAME ; class QGLContextPrivate const * QGLContext::d_func(void) const
+ ?setUniformValue@QGLShaderProgram@@QAEXHABVQMatrix4x4@@@Z @ 121 NONAME ; void QGLShaderProgram::setUniformValue(int, class QMatrix4x4 const &)
+ ?deleteTexture@QGLContext@@QAEXI@Z @ 122 NONAME ; void QGLContext::deleteTexture(unsigned int)
+ ?setAttributeArray@QGLShaderProgram@@QAEXHPBMHH@Z @ 123 NONAME ; void QGLShaderProgram::setAttributeArray(int, float const *, int, int)
+ ?bindTexture@QGLWidget@@QAEIABVQImage@@IHV?$QFlags@W4BindOption@QGLContext@@@@@Z @ 124 NONAME ; unsigned int QGLWidget::bindTexture(class QImage const &, unsigned int, int, class QFlags<enum QGLContext::BindOption>)
+ ?ensureCreated@QGLPixmapData@@ABEXXZ @ 125 NONAME ; void QGLPixmapData::ensureCreated(void) const
+ ?setSource@QGLCustomShaderStage@@IAEXABVQByteArray@@@Z @ 126 NONAME ; void QGLCustomShaderStage::setSource(class QByteArray const &)
+ ?trUtf8@QGLTextureGlyphCache@@SA?AVQString@@PBD0@Z @ 127 NONAME ; class QString QGLTextureGlyphCache::trUtf8(char const *, char const *)
+ ?removeFromPainter@QGLCustomShaderStage@@QAEXPAVQPainter@@@Z @ 128 NONAME ; void QGLCustomShaderStage::removeFromPainter(class QPainter *)
+ ?qt_metacall@QGLWindowSurface@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 129 NONAME ; int QGLWindowSurface::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ??0QGLBuffer@@QAE@W4Type@0@@Z @ 130 NONAME ; QGLBuffer::QGLBuffer(enum QGLBuffer::Type)
+ ?fillColor@QGLPixmapData@@ABE?AVQColor@@XZ @ 131 NONAME ; class QColor QGLPixmapData::fillColor(void) const
+ ?setSamples@QGLFormat@@QAEXH@Z @ 132 NONAME ; void QGLFormat::setSamples(int)
+ ?makeCurrent@QGLContext@@UAEXXZ @ 133 NONAME ; void QGLContext::makeCurrent(void)
+ ?setUniformValue@QGLShaderProgram@@QAEXHABV?$QGenericMatrix@$03$02M@@@Z @ 134 NONAME ; void QGLShaderProgram::setUniformValue(int, class QGenericMatrix<4, 3, float> const &)
+ ?hasOpenGLShaders@QGLShader@@SA_NV?$QFlags@W4ShaderTypeBit@QGLShader@@@@PBVQGLContext@@@Z @ 135 NONAME ; bool QGLShader::hasOpenGLShaders(class QFlags<enum QGLShader::ShaderTypeBit>, class QGLContext const *)
+ ?hasComplexGeometry@QGLEngineShaderManager@@QBE_NXZ @ 136 NONAME ; bool QGLEngineShaderManager::hasComplexGeometry(void) const
+ ?tr@QGLEngineShaderManager@@SA?AVQString@@PBD0@Z @ 137 NONAME ; class QString QGLEngineShaderManager::tr(char const *, char const *)
+ ??0QGLFramebufferObject@@QAE@ABVQSize@@I@Z @ 138 NONAME ; QGLFramebufferObject::QGLFramebufferObject(class QSize const &, unsigned int)
+ ?setSrcPixelType@QGLEngineShaderManager@@QAEXW4PixelSrcType@1@@Z @ 139 NONAME ; void QGLEngineShaderManager::setSrcPixelType(enum QGLEngineShaderManager::PixelSrcType)
+ ?isValid@QGLFramebufferObject@@QBE_NXZ @ 140 NONAME ; bool QGLFramebufferObject::isValid(void) const
+ ??0QGLFramebufferObject@@QAE@HHABVQGLFramebufferObjectFormat@@@Z @ 141 NONAME ; QGLFramebufferObject::QGLFramebufferObject(int, int, class QGLFramebufferObjectFormat const &)
+ ?setDirectRendering@QGLFormat@@QAEX_N@Z @ 142 NONAME ; void QGLFormat::setDirectRendering(bool)
+ ?hasAlphaChannel@QGLPixmapData@@UBE_NXZ @ 143 NONAME ; bool QGLPixmapData::hasAlphaChannel(void) const
+ ?tr@QGLSignalProxy@@SA?AVQString@@PBD0H@Z @ 144 NONAME ; class QString QGLSignalProxy::tr(char const *, char const *, int)
+ ?setContext@QGLWidget@@QAEXPAVQGLContext@@PBV2@_N@Z @ 145 NONAME ; void QGLWidget::setContext(class QGLContext *, class QGLContext const *, bool)
+ ?d_func@QGLPixelBuffer@@ABEPBVQGLPixelBufferPrivate@@XZ @ 146 NONAME ; class QGLPixelBufferPrivate const * QGLPixelBuffer::d_func(void) const
+ ?getStaticMetaObject@QGLSignalProxy@@SAABUQMetaObject@@XZ @ 147 NONAME ; struct QMetaObject const & QGLSignalProxy::getStaticMetaObject(void)
+ ?setState@QGL2PaintEngineEx@@UAEXPAVQPainterState@@@Z @ 148 NONAME ; void QGL2PaintEngineEx::setState(class QPainterState *)
+ ?addShader@QGLShaderProgram@@QAE_NPAVQGLShader@@@Z @ 149 NONAME ; bool QGLShaderProgram::addShader(class QGLShader *)
+ ?hasOpenGLShaderPrograms@QGLShaderProgram@@SA_NPBVQGLContext@@@Z @ 150 NONAME ; bool QGLShaderProgram::hasOpenGLShaderPrograms(class QGLContext const *)
+ ?plane@QGLFormat@@QBEHXZ @ 151 NONAME ; int QGLFormat::plane(void) const
+ ??0QGLFormat@@QAE@XZ @ 152 NONAME ; QGLFormat::QGLFormat(void)
+ ?renderText@QGLWidget@@QAEXNNNABVQString@@ABVQFont@@H@Z @ 153 NONAME ; void QGLWidget::renderText(double, double, double, class QString const &, class QFont const &, int)
+ ?setAttributeArray@QGLShaderProgram@@QAEXPBDIPBXHH@Z @ 154 NONAME ; void QGLShaderProgram::setAttributeArray(char const *, unsigned int, void const *, int, int)
+ ?hasOpenGLFramebufferBlit@QGLFramebufferObject@@SA_NXZ @ 155 NONAME ; bool QGLFramebufferObject::hasOpenGLFramebufferBlit(void)
+ ?setUniformValue@QGLShaderProgram@@QAEXHABVQVector2D@@@Z @ 156 NONAME ; void QGLShaderProgram::setUniformValue(int, class QVector2D const &)
+ ?setUniformValueArray@QGLShaderProgram@@QAEXPBDPBVQVector2D@@H@Z @ 157 NONAME ; void QGLShaderProgram::setUniformValueArray(char const *, class QVector2D const *, int)
+ ??1QGLContext@@UAE@XZ @ 158 NONAME ; QGLContext::~QGLContext(void)
+ ?drawTexture@QGLContext@@QAEXABVQRectF@@II@Z @ 159 NONAME ; void QGLContext::drawTexture(class QRectF const &, unsigned int, unsigned int)
+ ??1QGLCustomShaderStage@@UAE@XZ @ 160 NONAME ; QGLCustomShaderStage::~QGLCustomShaderStage(void)
+ ?state@QGL2PaintEngineEx@@QBEPBVQOpenGL2PaintEngineState@@XZ @ 161 NONAME ; class QOpenGL2PaintEngineState const * QGL2PaintEngineEx::state(void) const
+ ?setUniformValue@QGLShaderProgram@@QAEXPBDM@Z @ 162 NONAME ; void QGLShaderProgram::setUniformValue(char const *, float)
+ ?tr@QGLShaderProgram@@SA?AVQString@@PBD0@Z @ 163 NONAME ; class QString QGLShaderProgram::tr(char const *, char const *)
+ ?setHasComplexGeometry@QGLEngineShaderManager@@QAEX_N@Z @ 164 NONAME ; void QGLEngineShaderManager::setHasComplexGeometry(bool)
+ ?devType@QGLPaintDevice@@UBEHXZ @ 165 NONAME ; int QGLPaintDevice::devType(void) const
+ ?setDepthBufferSize@QGLFormat@@QAEXH@Z @ 166 NONAME ; void QGLFormat::setDepthBufferSize(int)
+ ?attributeLocation@QGLShaderProgram@@QBEHABVQString@@@Z @ 167 NONAME ; int QGLShaderProgram::attributeLocation(class QString const &) const
+ ?isSharing@QGLWidget@@QBE_NXZ @ 168 NONAME ; bool QGLWidget::isSharing(void) const
+ ?brushChanged@QGL2PaintEngineEx@@UAEXXZ @ 169 NONAME ; void QGL2PaintEngineEx::brushChanged(void)
+ ?bind@QGLShaderProgram@@QAE_NXZ @ 170 NONAME ; bool QGLShaderProgram::bind(void)
+ ?fill@QGLPixmapData@@UAEXABVQColor@@@Z @ 171 NONAME ; void QGLPixmapData::fill(class QColor const &)
+ ?staticMetaObject@QGLShaderProgram@@2UQMetaObject@@B @ 172 NONAME ; struct QMetaObject const QGLShaderProgram::staticMetaObject
+ ?setPlane@QGLFormat@@QAEXH@Z @ 173 NONAME ; void QGLFormat::setPlane(int)
+ ?setGeometryOutputType@QGLShaderProgram@@QAEXI@Z @ 174 NONAME ; void QGLShaderProgram::setGeometryOutputType(unsigned int)
+ ?setAccumBufferSize@QGLFormat@@QAEXH@Z @ 175 NONAME ; void QGLFormat::setAccumBufferSize(int)
+ ?detach@QGLFramebufferObjectFormat@@AAEXXZ @ 176 NONAME ; void QGLFramebufferObjectFormat::detach(void)
+ ?testOption@QGLFormat@@QBE_NV?$QFlags@W4FormatOption@QGL@@@@@Z @ 177 NONAME ; bool QGLFormat::testOption(class QFlags<enum QGL::FormatOption>) const
+ ?setUniformValueArray@QGLShaderProgram@@QAEXPBDPBV?$QGenericMatrix@$01$03M@@H@Z @ 178 NONAME ; void QGLShaderProgram::setUniformValueArray(char const *, class QGenericMatrix<2, 4, float> const *, int)
+ ?setAttributeValue@QGLShaderProgram@@QAEXPBDABVQColor@@@Z @ 179 NONAME ; void QGLShaderProgram::setAttributeValue(char const *, class QColor const &)
+ ?devType@QGLPixelBuffer@@MBEHXZ @ 180 NONAME ; int QGLPixelBuffer::devType(void) const
+ ?doubleBuffer@QGLFormat@@QBE_NXZ @ 181 NONAME ; bool QGLFormat::doubleBuffer(void) const
+ ?setUniformsDirty@QGLCustomShaderStage@@QAEXXZ @ 182 NONAME ; void QGLCustomShaderStage::setUniformsDirty(void)
+ ?setAttributeValue@QGLShaderProgram@@QAEXHMM@Z @ 183 NONAME ; void QGLShaderProgram::setAttributeValue(int, float, float)
+ ?setAttributeArray@QGLShaderProgram@@QAEXPBDPBMHH@Z @ 184 NONAME ; void QGLShaderProgram::setAttributeArray(char const *, float const *, int, int)
+ ?getStaticMetaObject@QGLEngineShaderManager@@SAABUQMetaObject@@XZ @ 185 NONAME ; struct QMetaObject const & QGLEngineShaderManager::getStaticMetaObject(void)
+ ?setVersion@QGLFormat@@QAEXHH@Z @ 186 NONAME ; void QGLFormat::setVersion(int, int)
+ ?grabFrameBuffer@QGLWidget@@QAE?AVQImage@@_N@Z @ 187 NONAME ; class QImage QGLWidget::grabFrameBuffer(bool)
+ ?hasOpenGL@QGLFormat@@SA_NXZ @ 188 NONAME ; bool QGLFormat::hasOpenGL(void)
+ ?setInitialized@QGLContext@@IAEX_N@Z @ 189 NONAME ; void QGLContext::setInitialized(bool)
+ ?copyBackFromRenderFbo@QGLPixmapData@@ABEX_N@Z @ 190 NONAME ; void QGLPixmapData::copyBackFromRenderFbo(bool) const
+ ??0QGLBuffer@@QAE@ABV0@@Z @ 191 NONAME ; QGLBuffer::QGLBuffer(class QGLBuffer const &)
+ ?attachment@QGLFramebufferObject@@QBE?AW4Attachment@1@XZ @ 192 NONAME ; enum QGLFramebufferObject::Attachment QGLFramebufferObject::attachment(void) const
+ ?createCompatiblePixmapData@QGLPixmapData@@UBEPAVQPixmapData@@XZ @ 193 NONAME ; class QPixmapData * QGLPixmapData::createCompatiblePixmapData(void) const
+ ?detach@QGLFormat@@AAEXXZ @ 194 NONAME ; void QGLFormat::detach(void)
+ ??9QGLFramebufferObjectFormat@@QBE_NABV0@@Z @ 195 NONAME ; bool QGLFramebufferObjectFormat::operator!=(class QGLFramebufferObjectFormat const &) const
+ ?endPaint@QGLWindowSurface@@UAEXABVQRegion@@@Z @ 196 NONAME ; void QGLWindowSurface::endPaint(class QRegion const &)
+ ?findNearest@QGLColormap@@QBEHI@Z @ 197 NONAME ; int QGLColormap::findNearest(unsigned int) const
+ ?toImage@QGLPixmapData@@UBE?AVQImage@@XZ @ 198 NONAME ; class QImage QGLPixmapData::toImage(void) const
+ ??_EQGLShader@@UAE@I@Z @ 199 NONAME ; QGLShader::~QGLShader(unsigned int)
+ ?setUniformValueArray@QGLShaderProgram@@QAEXHPBHH@Z @ 200 NONAME ; void QGLShaderProgram::setUniformValueArray(int, int const *, int)
+ ?d_func@QGLFramebufferObject@@AAEPAVQGLFramebufferObjectPrivate@@XZ @ 201 NONAME ; class QGLFramebufferObjectPrivate * QGLFramebufferObject::d_func(void)
+ ?trUtf8@QGLWidget@@SA?AVQString@@PBD0H@Z @ 202 NONAME ; class QString QGLWidget::trUtf8(char const *, char const *, int)
+ ?qt_metacast@QGraphicsShaderEffect@@UAEPAXPBD@Z @ 203 NONAME ; void * QGraphicsShaderEffect::qt_metacast(char const *)
+ ?init@QGLShaderProgram@@AAE_NXZ @ 204 NONAME ; bool QGLShaderProgram::init(void)
+ ?doneCurrent@QGLWidget@@QAEXXZ @ 205 NONAME ; void QGLWidget::doneCurrent(void)
+ ?setUniformValue@QGLShaderProgram@@QAEXPBDABV?$QGenericMatrix@$02$02M@@@Z @ 206 NONAME ; void QGLShaderProgram::setUniformValue(char const *, class QGenericMatrix<3, 3, float> const &)
+ ?setUniformValue@QGLShaderProgram@@QAEXPBDMMMM@Z @ 207 NONAME ; void QGLShaderProgram::setUniformValue(char const *, float, float, float, float)
+ ?requestedFormat@QGLContext@@QBE?AVQGLFormat@@XZ @ 208 NONAME ; class QGLFormat QGLContext::requestedFormat(void) const
+ ?fillTexture@QGLTextureGlyphCache@@UAEXABUCoord@QTextureGlyphCache@@I@Z @ 209 NONAME ; void QGLTextureGlyphCache::fillTexture(struct QTextureGlyphCache::Coord const &, unsigned int)
+ ?isNativePaintingActive@QGL2PaintEngineEx@@QBE_NXZ @ 210 NONAME ; bool QGL2PaintEngineEx::isNativePaintingActive(void) const
+ ?accumBufferSize@QGLFormat@@QBEHXZ @ 211 NONAME ; int QGLFormat::accumBufferSize(void) const
+ ?setAttributeValue@QGLShaderProgram@@QAEXHPBMHH@Z @ 212 NONAME ; void QGLShaderProgram::setAttributeValue(int, float const *, int, int)
+ ?doubleBuffer@QGLWidget@@QBE_NXZ @ 213 NONAME ; bool QGLWidget::doubleBuffer(void) const
+ ?bindTexture@QGLContext@@QAEIABVQString@@@Z @ 214 NONAME ; unsigned int QGLContext::bindTexture(class QString const &)
+ ??0QGLFramebufferObject@@QAE@ABVQSize@@ABVQGLFramebufferObjectFormat@@@Z @ 215 NONAME ; QGLFramebufferObject::QGLFramebufferObject(class QSize const &, class QGLFramebufferObjectFormat const &)
+ ?bind@QGLFramebufferObject@@QAE_NXZ @ 216 NONAME ; bool QGLFramebufferObject::bind(void)
+ ?stroke@QGL2PaintEngineEx@@UAEXABVQVectorPath@@ABVQPen@@@Z @ 217 NONAME ; void QGL2PaintEngineEx::stroke(class QVectorPath const &, class QPen const &)
+ ?format@QGLWidget@@QBE?AVQGLFormat@@XZ @ 218 NONAME ; class QGLFormat QGLWidget::format(void) const
+ ?qt_metacall@QGLWidget@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 219 NONAME ; int QGLWidget::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?setUniformValue@QGLShaderProgram@@QAEXHABVQSizeF@@@Z @ 220 NONAME ; void QGLShaderProgram::setUniformValue(int, class QSizeF const &)
+ ?setGreenBufferSize@QGLFormat@@QAEXH@Z @ 221 NONAME ; void QGLFormat::setGreenBufferSize(int)
+ ?setAttributeValue@QGLShaderProgram@@QAEXPBDM@Z @ 222 NONAME ; void QGLShaderProgram::setAttributeValue(char const *, float)
+ ?setAttributeArray@QGLShaderProgram@@QAEXHPBVQVector4D@@H@Z @ 223 NONAME ; void QGLShaderProgram::setAttributeArray(int, class QVector4D const *, int)
+ ?setValid@QGLContext@@IAEX_N@Z @ 224 NONAME ; void QGLContext::setValid(bool)
+ ?trUtf8@QGraphicsShaderEffect@@SA?AVQString@@PBD0@Z @ 225 NONAME ; class QString QGraphicsShaderEffect::trUtf8(char const *, char const *)
+ ?aboutToDestroyContext@QGLSignalProxy@@IAEXPBVQGLContext@@@Z @ 226 NONAME ; void QGLSignalProxy::aboutToDestroyContext(class QGLContext const *)
+ ??0QGraphicsShaderEffect@@QAE@PAVQObject@@@Z @ 227 NONAME ; QGraphicsShaderEffect::QGraphicsShaderEffect(class QObject *)
+ ?deviceIsPixmap@QGLContext@@IBE_NXZ @ 228 NONAME ; bool QGLContext::deviceIsPixmap(void) const
+ ??1QGraphicsShaderEffect@@UAE@XZ @ 229 NONAME ; QGraphicsShaderEffect::~QGraphicsShaderEffect(void)
+ ??1QGLPaintDevice@@UAE@XZ @ 230 NONAME ; QGLPaintDevice::~QGLPaintDevice(void)
+ ?setGeometryInputType@QGLShaderProgram@@QAEXI@Z @ 231 NONAME ; void QGLShaderProgram::setGeometryInputType(unsigned int)
+ ?isValid@QGLPixmapData@@ABE_NXZ @ 232 NONAME ; bool QGLPixmapData::isValid(void) const
+ ?cleanup@QGLContextResource@@QAEXPBVQGLContext@@PAX@Z @ 233 NONAME ; void QGLContextResource::cleanup(class QGLContext const *, void *)
+ ?context@QGLWidget@@QBEPBVQGLContext@@XZ @ 234 NONAME ; class QGLContext const * QGLWidget::context(void) const
+ ?tr@QGLShaderProgram@@SA?AVQString@@PBD0H@Z @ 235 NONAME ; class QString QGLShaderProgram::tr(char const *, char const *, int)
+ ??0QGLPixelBuffer@@QAE@HHABVQGLFormat@@PAVQGLWidget@@@Z @ 236 NONAME ; QGLPixelBuffer::QGLPixelBuffer(int, int, class QGLFormat const &, class QGLWidget *)
+ ?setUniformValueArray@QGLShaderProgram@@QAEXHPBV?$QGenericMatrix@$01$03M@@H@Z @ 237 NONAME ; void QGLShaderProgram::setUniformValueArray(int, class QGenericMatrix<2, 4, float> const *, int)
+ ?release@QGLFramebufferObject@@QAE_NXZ @ 238 NONAME ; bool QGLFramebufferObject::release(void)
+ ?chooseContext@QGLContext@@MAE_NPBV1@@Z @ 239 NONAME ; bool QGLContext::chooseContext(class QGLContext const *)
+ ?setUniformValueArray@QGLShaderProgram@@QAEXPBDPBV?$QGenericMatrix@$02$01M@@H@Z @ 240 NONAME ; void QGLShaderProgram::setUniformValueArray(char const *, class QGenericMatrix<3, 2, float> const *, int)
+ ?greenBufferSize@QGLFormat@@QBEHXZ @ 241 NONAME ; int QGLFormat::greenBufferSize(void) const
+ ?detach@QGLColormap@@QAEXXZ @ 242 NONAME ; void QGLColormap::detach(void)
+ ??0QGLWidget@@QAE@ABVQGLFormat@@PAVQWidget@@PBV0@V?$QFlags@W4WindowType@Qt@@@@@Z @ 243 NONAME ; QGLWidget::QGLWidget(class QGLFormat const &, class QWidget *, class QGLWidget const *, class QFlags<enum Qt::WindowType>)
+ ?allocate@QGLBuffer@@QAEXPBXH@Z @ 244 NONAME ; void QGLBuffer::allocate(void const *, int)
+ ?setDirty@QGLEngineShaderManager@@QAEXXZ @ 245 NONAME ; void QGLEngineShaderManager::setDirty(void)
+ ?setCustomStage@QGLEngineShaderManager@@QAEXPAVQGLCustomShaderStage@@@Z @ 246 NONAME ; void QGLEngineShaderManager::setCustomStage(class QGLCustomShaderStage *)
+ ?programId@QGLShaderProgram@@QBEIXZ @ 247 NONAME ; unsigned int QGLShaderProgram::programId(void) const
+ ?glyphPadding@QGLTextureGlyphCache@@UBEHXZ @ 248 NONAME ; int QGLTextureGlyphCache::glyphPadding(void) const
+ ?texture@QGLFramebufferObject@@QBEIXZ @ 249 NONAME ; unsigned int QGLFramebufferObject::texture(void) const
+ ??0QGLFramebufferObject@@QAE@HHI@Z @ 250 NONAME ; QGLFramebufferObject::QGLFramebufferObject(int, int, unsigned int)
+ ?size@QGLBuffer@@QBEHXZ @ 251 NONAME ; int QGLBuffer::size(void) const
+ ?maxGeometryOutputVertices@QGLShaderProgram@@QBEHXZ @ 252 NONAME ; int QGLShaderProgram::maxGeometryOutputVertices(void) const
+ ?setAttributeBuffer@QGLShaderProgram@@QAEXPBDIHHH@Z @ 253 NONAME ; void QGLShaderProgram::setAttributeBuffer(char const *, unsigned int, int, int, int)
+ ?setOverlay@QGLFormat@@QAEX_N@Z @ 254 NONAME ; void QGLFormat::setOverlay(bool)
+ ?beginPaint@QGLWindowSurface@@UAEXABVQRegion@@@Z @ 255 NONAME ; void QGLWindowSurface::beginPaint(class QRegion const &)
+ ?compileSourceCode@QGLShader@@QAE_NPBD@Z @ 256 NONAME ; bool QGLShader::compileSourceCode(char const *)
+ ?createWindowSurface@QGLGraphicsSystem@@UBEPAVQWindowSurface@@PAVQWidget@@@Z @ 257 NONAME ; class QWindowSurface * QGLGraphicsSystem::createWindowSurface(class QWidget *) const
+ ?shaderId@QGLShader@@QBEIXZ @ 258 NONAME ; unsigned int QGLShader::shaderId(void) const
+ ?ensureActive@QGL2PaintEngineEx@@QAEXXZ @ 259 NONAME ; void QGL2PaintEngineEx::ensureActive(void)
+ ?qt_metacall@QGLEngineShaderManager@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 260 NONAME ; int QGLEngineShaderManager::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?drawTexture@QGLWidget@@QAEXABVQPointF@@II@Z @ 261 NONAME ; void QGLWidget::drawTexture(class QPointF const &, unsigned int, unsigned int)
+ ?setStencil@QGLFormat@@QAEX_N@Z @ 262 NONAME ; void QGLFormat::setStencil(bool)
+ ?type@QGL2PaintEngineEx@@UBE?AW4Type@QPaintEngine@@XZ @ 263 NONAME ; enum QPaintEngine::Type QGL2PaintEngineEx::type(void) const
+ ?compileSourceFile@QGLShader@@QAE_NABVQString@@@Z @ 264 NONAME ; bool QGLShader::compileSourceFile(class QString const &)
+ ?d_func@QGraphicsShaderEffect@@ABEPBVQGraphicsShaderEffectPrivate@@XZ @ 265 NONAME ; class QGraphicsShaderEffectPrivate const * QGraphicsShaderEffect::d_func(void) const
+ ?deleteTexture@QGLWidget@@QAEXI@Z @ 266 NONAME ; void QGLWidget::deleteTexture(unsigned int)
+ ?tr@QGLWindowSurface@@SA?AVQString@@PBD0H@Z @ 267 NONAME ; class QString QGLWindowSurface::tr(char const *, char const *, int)
+ ?d_func@QGLBuffer@@ABEPBVQGLBufferPrivate@@XZ @ 268 NONAME ; class QGLBufferPrivate const * QGLBuffer::d_func(void) const
+ ?buffer@QGLWindowSurface@@UAEPAVQImage@@PBVQWidget@@@Z @ 269 NONAME ; class QImage * QGLWindowSurface::buffer(class QWidget const *)
+ ?texture@QGLTextureGlyphCache@@QBEIXZ @ 270 NONAME ; unsigned int QGLTextureGlyphCache::texture(void) const
+ ?staticMetaObject@QGraphicsShaderEffect@@2UQMetaObject@@B @ 271 NONAME ; struct QMetaObject const QGraphicsShaderEffect::staticMetaObject
+ ?uniformLocation@QGLShaderProgram@@QBEHPBD@Z @ 272 NONAME ; int QGLShaderProgram::uniformLocation(char const *) const
+ ?profile@QGLFormat@@QBE?AW4OpenGLContextProfile@1@XZ @ 273 NONAME ; enum QGLFormat::OpenGLContextProfile QGLFormat::profile(void) const
+ ?setUniformValue@QGLShaderProgram@@QAEXHABV?$QGenericMatrix@$01$03M@@@Z @ 274 NONAME ; void QGLShaderProgram::setUniformValue(int, class QGenericMatrix<2, 4, float> const &)
+ ?bindDefault@QGLFramebufferObject@@SA_NXZ @ 275 NONAME ; bool QGLFramebufferObject::bindDefault(void)
+ ?internalTextureFormat@QGLFramebufferObjectFormat@@QBEIXZ @ 276 NONAME ; unsigned int QGLFramebufferObjectFormat::internalTextureFormat(void) const
+ ??4QGLBuffer@@QAEAAV0@ABV0@@Z @ 277 NONAME ; class QGLBuffer & QGLBuffer::operator=(class QGLBuffer const &)
+ ?bindTexture@QGLWidget@@QAEIABVQImage@@IH@Z @ 278 NONAME ; unsigned int QGLWidget::bindTexture(class QImage const &, unsigned int, int)
+ ?surfaceFormat@QGLWindowSurface@@2VQGLFormat@@A @ 279 NONAME ; class QGLFormat QGLWindowSurface::surfaceFormat
+ ??0QGLGraphicsSystem@@QAE@_N@Z @ 280 NONAME ; QGLGraphicsSystem::QGLGraphicsSystem(bool)
+ ??0QGLShaderProgram@@QAE@PBVQGLContext@@PAVQObject@@@Z @ 281 NONAME ; QGLShaderProgram::QGLShaderProgram(class QGLContext const *, class QObject *)
+ ?setUniformValueArray@QGLShaderProgram@@QAEXPBDPBV?$QGenericMatrix@$03$02M@@H@Z @ 282 NONAME ; void QGLShaderProgram::setUniformValueArray(char const *, class QGenericMatrix<4, 3, float> const *, int)
+ ??0QGLShaderProgram@@QAE@PAVQObject@@@Z @ 283 NONAME ; QGLShaderProgram::QGLShaderProgram(class QObject *)
+ ?qt_metacast@QGLTextureGlyphCache@@UAEPAXPBD@Z @ 284 NONAME ; void * QGLTextureGlyphCache::qt_metacast(char const *)
+ ?staticMetaObject@QGLEngineShaderManager@@2UQMetaObject@@B @ 285 NONAME ; struct QMetaObject const QGLEngineShaderManager::staticMetaObject
+ ?setDevice@QGLContext@@IAEXPAVQPaintDevice@@@Z @ 286 NONAME ; void QGLContext::setDevice(class QPaintDevice *)
+ ?setUniformValueArray@QGLShaderProgram@@QAEXHPBV?$QGenericMatrix@$02$01M@@H@Z @ 287 NONAME ; void QGLShaderProgram::setUniformValueArray(int, class QGenericMatrix<3, 2, float> const *, int)
+ ?setUniformValue@QGLShaderProgram@@QAEXPBDABV?$QGenericMatrix@$03$02M@@@Z @ 288 NONAME ; void QGLShaderProgram::setUniformValue(char const *, class QGenericMatrix<4, 3, float> const &)
+ ?setAttributeArray@QGLShaderProgram@@QAEXHIPBXHH@Z @ 289 NONAME ; void QGLShaderProgram::setAttributeArray(int, unsigned int, void const *, int, int)
+ ?tr@QGLTextureGlyphCache@@SA?AVQString@@PBD0H@Z @ 290 NONAME ; class QString QGLTextureGlyphCache::tr(char const *, char const *, int)
+ ?setDefaultOverlayFormat@QGLFormat@@SAXABV1@@Z @ 291 NONAME ; void QGLFormat::setDefaultOverlayFormat(class QGLFormat const &)
+ ?qt_gl_share_widget@@YAPAVQGLWidget@@XZ @ 292 NONAME ; class QGLWidget * qt_gl_share_widget(void)
+ ?initializeOverlayGL@QGLWidget@@MAEXXZ @ 293 NONAME ; void QGLWidget::initializeOverlayGL(void)
+ ?setUniformValue@QGLShaderProgram@@QAEXHMM@Z @ 294 NONAME ; void QGLShaderProgram::setUniformValue(int, float, float)
+ ?attributeLocation@QGLShaderProgram@@QBEHPBD@Z @ 295 NONAME ; int QGLShaderProgram::attributeLocation(char const *) const
+ ?setAttributeArray@QGLShaderProgram@@QAEXPBDPBVQVector3D@@H@Z @ 296 NONAME ; void QGLShaderProgram::setAttributeArray(char const *, class QVector3D const *, int)
+ ?setInternalTextureFormat@QGLFramebufferObjectFormat@@QAEXI@Z @ 297 NONAME ; void QGLFramebufferObjectFormat::setInternalTextureFormat(unsigned int)
+ ?glDraw@QGLWidget@@MAEXXZ @ 298 NONAME ; void QGLWidget::glDraw(void)
+ ?blueBufferSize@QGLFormat@@QBEHXZ @ 299 NONAME ; int QGLFormat::blueBufferSize(void) const
+ ?createTextureData@QGLTextureGlyphCache@@UAEXHH@Z @ 300 NONAME ; void QGLTextureGlyphCache::createTextureData(int, int)
+ ?opacityChanged@QGL2PaintEngineEx@@UAEXXZ @ 301 NONAME ; void QGL2PaintEngineEx::opacityChanged(void)
+ ?setUniformValue@QGLShaderProgram@@QAEXHABV?$QGenericMatrix@$01$01M@@@Z @ 302 NONAME ; void QGLShaderProgram::setUniformValue(int, class QGenericMatrix<2, 2, float> const &)
+ ?addShaderFromSourceCode@QGLShaderProgram@@QAE_NV?$QFlags@W4ShaderTypeBit@QGLShader@@@@PBD@Z @ 303 NONAME ; bool QGLShaderProgram::addShaderFromSourceCode(class QFlags<enum QGLShader::ShaderTypeBit>, char const *)
+ ?accum@QGLFormat@@QBE_NXZ @ 304 NONAME ; bool QGLFormat::accum(void) const
+ ?transformChanged@QGL2PaintEngineEx@@UAEXXZ @ 305 NONAME ; void QGL2PaintEngineEx::transformChanged(void)
+ ?trUtf8@QGraphicsShaderEffect@@SA?AVQString@@PBD0H@Z @ 306 NONAME ; class QString QGraphicsShaderEffect::trUtf8(char const *, char const *, int)
+ ?metaObject@QGLWidget@@UBEPBUQMetaObject@@XZ @ 307 NONAME ; struct QMetaObject const * QGLWidget::metaObject(void) const
+ ?setBlueBufferSize@QGLFormat@@QAEXH@Z @ 308 NONAME ; void QGLFormat::setBlueBufferSize(int)
+ ?useSimpleProgram@QGLEngineShaderManager@@QAEXXZ @ 309 NONAME ; void QGLEngineShaderManager::useSimpleProgram(void)
+ ?trUtf8@QGLWidget@@SA?AVQString@@PBD0@Z @ 310 NONAME ; class QString QGLWidget::trUtf8(char const *, char const *)
+ ??_EQGLPixmapData@@UAE@I@Z @ 311 NONAME ; QGLPixmapData::~QGLPixmapData(unsigned int)
+ ?setPixelShaderFragment@QGraphicsShaderEffect@@QAEXABVQByteArray@@@Z @ 312 NONAME ; void QGraphicsShaderEffect::setPixelShaderFragment(class QByteArray const &)
+ ?setAttributeValue@QGLShaderProgram@@QAEXHABVQVector4D@@@Z @ 313 NONAME ; void QGLShaderProgram::setAttributeValue(int, class QVector4D const &)
+ ?setAttributeValue@QGLShaderProgram@@QAEXPBDMMM@Z @ 314 NONAME ; void QGLShaderProgram::setAttributeValue(char const *, float, float, float)
+ ??1QGLShader@@UAE@XZ @ 315 NONAME ; QGLShader::~QGLShader(void)
+ ?setUniformValueArray@QGLShaderProgram@@QAEXHPBIH@Z @ 316 NONAME ; void QGLShaderProgram::setUniformValueArray(int, unsigned int const *, int)
+ ?fromImage@QGLPixmapData@@UAEXABVQImage@@V?$QFlags@W4ImageConversionFlag@Qt@@@@@Z @ 317 NONAME ; void QGLPixmapData::fromImage(class QImage const &, class QFlags<enum Qt::ImageConversionFlag>)
+ ?shaderType@QGLShader@@QBE?AV?$QFlags@W4ShaderTypeBit@QGLShader@@@@XZ @ 318 NONAME ; class QFlags<enum QGLShader::ShaderTypeBit> QGLShader::shaderType(void) const
+ ?reset@QGLContext@@QAEXXZ @ 319 NONAME ; void QGLContext::reset(void)
+ ??BQGLShareContextScope@@QAEPAVQGLContext@@XZ @ 320 NONAME ; QGLShareContextScope::operator class QGLContext *(void)
+ ?createPixmapData@QGLGraphicsSystem@@UBEPAVQPixmapData@@W4PixelType@2@@Z @ 321 NONAME ; class QPixmapData * QGLGraphicsSystem::createPixmapData(enum QPixmapData::PixelType) const
+ ?setUniformValueArray@QGLShaderProgram@@QAEXHPBVQVector3D@@H@Z @ 322 NONAME ; void QGLShaderProgram::setUniformValueArray(int, class QVector3D const *, int)
+ ?paintOverlayGL@QGLWidget@@MAEXXZ @ 323 NONAME ; void QGLWidget::paintOverlayGL(void)
+ ??6@YA?AVQDebug@@V0@ABVQGLFormat@@@Z @ 324 NONAME ; class QDebug operator<<(class QDebug, class QGLFormat const &)
+ ?ensureActiveTarget@QGLPaintDevice@@UAEXXZ @ 325 NONAME ; void QGLPaintDevice::ensureActiveTarget(void)
+ ?swapInterval@QGLFormat@@QBEHXZ @ 326 NONAME ; int QGLFormat::swapInterval(void) const
+ ?setUniformValue@QGLShaderProgram@@QAEXHM@Z @ 327 NONAME ; void QGLShaderProgram::setUniformValue(int, float)
+ ?map@QGLBuffer@@QAEPAXW4Access@1@@Z @ 328 NONAME ; void * QGLBuffer::map(enum QGLBuffer::Access)
+ ?setUniformValue@QGLShaderProgram@@QAEXPBDABVQTransform@@@Z @ 329 NONAME ; void QGLShaderProgram::setUniformValue(char const *, class QTransform const &)
+ ?shaders@QGLShaderProgram@@QBE?AV?$QList@PAVQGLShader@@@@XZ @ 330 NONAME ; class QList<class QGLShader *> QGLShaderProgram::shaders(void) const
+ ?drawTexture@QGLPixelBuffer@@QAEXABVQRectF@@II@Z @ 331 NONAME ; void QGLPixelBuffer::drawTexture(class QRectF const &, unsigned int, unsigned int)
+ ??1QGLSharedResourceGuard@@QAE@XZ @ 332 NONAME ; QGLSharedResourceGuard::~QGLSharedResourceGuard(void)
+ ?textureCacheLimit@QGLContext@@SAHXZ @ 333 NONAME ; int QGLContext::textureCacheLimit(void)
+ ??0QGLPaintDevice@@QAE@XZ @ 334 NONAME ; QGLPaintDevice::QGLPaintDevice(void)
+ ??0QGLColormap@@QAE@ABV0@@Z @ 335 NONAME ; QGLColormap::QGLColormap(class QGLColormap const &)
+ ?setUniformValue@QGLShaderProgram@@QAEXPBDABVQSizeF@@@Z @ 336 NONAME ; void QGLShaderProgram::setUniformValue(char const *, class QSizeF const &)
+ ?tr@QGLWindowSurface@@SA?AVQString@@PBD0@Z @ 337 NONAME ; class QString QGLWindowSurface::tr(char const *, char const *)
+ ?setUniformValueArray@QGLShaderProgram@@QAEXHPBV?$QGenericMatrix@$03$02M@@H@Z @ 338 NONAME ; void QGLShaderProgram::setUniformValueArray(int, class QGenericMatrix<4, 3, float> const *, int)
+ ?setAutoBufferSwap@QGLWidget@@IAEX_N@Z @ 339 NONAME ; void QGLWidget::setAutoBufferSwap(bool)
+ ?isSharing@QGLContext@@QBE_NXZ @ 340 NONAME ; bool QGLContext::isSharing(void) const
+ ?setAttributeValue@QGLShaderProgram@@QAEXHMMMM@Z @ 341 NONAME ; void QGLShaderProgram::setAttributeValue(int, float, float, float, float)
+ ?metaObject@QGLEngineShaderManager@@UBEPBUQMetaObject@@XZ @ 342 NONAME ; struct QMetaObject const * QGLEngineShaderManager::metaObject(void) const
+ ?metaObject@QGraphicsShaderEffect@@UBEPBUQMetaObject@@XZ @ 343 NONAME ; struct QMetaObject const * QGraphicsShaderEffect::metaObject(void) const
+ ?setSampleBuffers@QGLFormat@@QAEX_N@Z @ 344 NONAME ; void QGLFormat::setSampleBuffers(bool)
+ ?trUtf8@QGLShader@@SA?AVQString@@PBD0@Z @ 345 NONAME ; class QString QGLShader::trUtf8(char const *, char const *)
+ ??4QGLFormat@@QAEAAV0@ABV0@@Z @ 346 NONAME ; class QGLFormat & QGLFormat::operator=(class QGLFormat const &)
+ ?setAttributeValue@QGLShaderProgram@@QAEXPBDABVQVector3D@@@Z @ 347 NONAME ; void QGLShaderProgram::setAttributeValue(char const *, class QVector3D const &)
+ ??_EQGLSignalProxy@@UAE@I@Z @ 348 NONAME ; QGLSignalProxy::~QGLSignalProxy(unsigned int)
+ ?setUniformValue@QGLShaderProgram@@QAEXPBDABVQVector4D@@@Z @ 349 NONAME ; void QGLShaderProgram::setUniformValue(char const *, class QVector4D const &)
+ ?setUniformValue@QGLShaderProgram@@QAEXHMMMM@Z @ 350 NONAME ; void QGLShaderProgram::setUniformValue(int, float, float, float, float)
+ ?generateFontDisplayLists@QGLContext@@IAEXABVQFont@@H@Z @ 351 NONAME ; void QGLContext::generateFontDisplayLists(class QFont const &, int)
+ ?setAttributeValue@QGLShaderProgram@@QAEXHABVQVector2D@@@Z @ 352 NONAME ; void QGLShaderProgram::setAttributeValue(int, class QVector2D const &)
+ ?setUniformValue@QGLShaderProgram@@QAEXHABV?$QGenericMatrix@$02$03M@@@Z @ 353 NONAME ; void QGLShaderProgram::setUniformValue(int, class QGenericMatrix<3, 4, float> const &)
+ ?d_func@QGLShaderProgram@@AAEPAVQGLShaderProgramPrivate@@XZ @ 354 NONAME ; class QGLShaderProgramPrivate * QGLShaderProgram::d_func(void)
+ ?setUniformValueArray@QGLShaderProgram@@QAEXPBDPBHH@Z @ 355 NONAME ; void QGLShaderProgram::setUniformValueArray(char const *, int const *, int)
+ ??_EQGL2PaintEngineEx@@UAE@I@Z @ 356 NONAME ; QGL2PaintEngineEx::~QGL2PaintEngineEx(unsigned int)
+ ??0QGLFramebufferObject@@QAE@ABVQSize@@W4Attachment@0@II@Z @ 357 NONAME ; QGLFramebufferObject::QGLFramebufferObject(class QSize const &, enum QGLFramebufferObject::Attachment, unsigned int, unsigned int)
+ ??_EQGLEngineShaderManager@@UAE@I@Z @ 358 NONAME ; QGLEngineShaderManager::~QGLEngineShaderManager(unsigned int)
+ ?d_func@QGLFramebufferObject@@ABEPBVQGLFramebufferObjectPrivate@@XZ @ 359 NONAME ; class QGLFramebufferObjectPrivate const * QGLFramebufferObject::d_func(void) const
+ ?tr@QGLShader@@SA?AVQString@@PBD0H@Z @ 360 NONAME ; class QString QGLShader::tr(char const *, char const *, int)
+ ?setUniformValueArray@QGLShaderProgram@@QAEXPBDPBVQVector4D@@H@Z @ 361 NONAME ; void QGLShaderProgram::setUniformValueArray(char const *, class QVector4D const *, int)
+ ?addShaderFromSourceFile@QGLShaderProgram@@QAE_NV?$QFlags@W4ShaderTypeBit@QGLShader@@@@ABVQString@@@Z @ 362 NONAME ; bool QGLShaderProgram::addShaderFromSourceFile(class QFlags<enum QGLShader::ShaderTypeBit>, class QString const &)
+ ?copy@QGLPixmapData@@UAEXPBVQPixmapData@@ABVQRect@@@Z @ 363 NONAME ; void QGLPixmapData::copy(class QPixmapData const *, class QRect const &)
+ ?samples@QGLFramebufferObjectFormat@@QBEHXZ @ 364 NONAME ; int QGLFramebufferObjectFormat::samples(void) const
+ ?setInactive@QGLCustomShaderStage@@QAEXXZ @ 365 NONAME ; void QGLCustomShaderStage::setInactive(void)
+ ?extensionFuncs@QGLContextPrivate@@SAAAUQGLExtensionFuncs@@PBVQGLContext@@@Z @ 366 NONAME ; struct QGLExtensionFuncs & QGLContextPrivate::extensionFuncs(class QGLContext const *)
+ ?value@QGLContextResource@@QAEPAXPBVQGLContext@@@Z @ 367 NONAME ; void * QGLContextResource::value(class QGLContext const *)
+ ?majorVersion@QGLFormat@@QBEHXZ @ 368 NONAME ; int QGLFormat::majorVersion(void) const
+ ?rgba@QGLFormat@@QBE_NXZ @ 369 NONAME ; bool QGLFormat::rgba(void) const
+ ?paintDevice@QGLWindowSurface@@UAEPAVQPaintDevice@@XZ @ 370 NONAME ; class QPaintDevice * QGLWindowSurface::paintDevice(void)
+ ?setStencilBufferSize@QGLFormat@@QAEXH@Z @ 371 NONAME ; void QGLFormat::setStencilBufferSize(int)
+ ??1QGLEngineShaderManager@@UAE@XZ @ 372 NONAME ; QGLEngineShaderManager::~QGLEngineShaderManager(void)
+ ?qt_metacall@QGLShaderProgram@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 373 NONAME ; int QGLShaderProgram::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?setUniformValue@QGLShaderProgram@@QAEXPBDABVQVector2D@@@Z @ 374 NONAME ; void QGLShaderProgram::setUniformValue(char const *, class QVector2D const &)
+ ?bind@QGLPixmapData@@QBEI_N@Z @ 375 NONAME ; unsigned int QGLPixmapData::bind(bool) const
+ ?setDepth@QGLFormat@@QAEX_N@Z @ 376 NONAME ; void QGLFormat::setDepth(bool)
+ ?paintGL@QGLWidget@@MAEXXZ @ 377 NONAME ; void QGLWidget::paintGL(void)
+ ??0QGLContext@@QAE@ABVQGLFormat@@PAVQPaintDevice@@@Z @ 378 NONAME ; QGLContext::QGLContext(class QGLFormat const &, class QPaintDevice *)
+ ?setUniformValue@QGLShaderProgram@@QAEXHABV?$QGenericMatrix@$02$01M@@@Z @ 379 NONAME ; void QGLShaderProgram::setUniformValue(int, class QGenericMatrix<3, 2, float> const &)
+ ?drawPixmap@QGL2PaintEngineEx@@UAEXABVQRectF@@ABVQPixmap@@0@Z @ 380 NONAME ; void QGL2PaintEngineEx::drawPixmap(class QRectF const &, class QPixmap const &, class QRectF const &)
+ ?getUniformLocation@QGLEngineShaderManager@@QAEIW4Uniform@1@@Z @ 381 NONAME ; unsigned int QGLEngineShaderManager::getUniformLocation(enum QGLEngineShaderManager::Uniform)
+ ?setUniformValueArray@QGLShaderProgram@@QAEXPBDPBV?$QGenericMatrix@$01$02M@@H@Z @ 382 NONAME ; void QGLShaderProgram::setUniformValueArray(char const *, class QGenericMatrix<2, 3, float> const *, int)
+ ??0QGLEngineShaderManager@@QAE@PAVQGLContext@@@Z @ 383 NONAME ; QGLEngineShaderManager::QGLEngineShaderManager(class QGLContext *)
+ ?deleted@QGLWindowSurface@@AAEXPAVQObject@@@Z @ 384 NONAME ; void QGLWindowSurface::deleted(class QObject *)
+ ?source@QGLCustomShaderStage@@QBE?AVQByteArray@@XZ @ 385 NONAME ; class QByteArray QGLCustomShaderStage::source(void) const
+ ?d_func@QGLPixelBuffer@@AAEPAVQGLPixelBufferPrivate@@XZ @ 386 NONAME ; class QGLPixelBufferPrivate * QGLPixelBuffer::d_func(void)
+ ??4QGLColormap@@QAEAAV0@ABV0@@Z @ 387 NONAME ; class QGLColormap & QGLColormap::operator=(class QGLColormap const &)
+ ?find@QGLColormap@@QBEHI@Z @ 388 NONAME ; int QGLColormap::find(unsigned int) const
+ ??1QGLColormap@@QAE@XZ @ 389 NONAME ; QGLColormap::~QGLColormap(void)
+ ?toImage@QGLPixelBuffer@@QBE?AVQImage@@XZ @ 390 NONAME ; class QImage QGLPixelBuffer::toImage(void) const
+ ?hasOpenGLOverlays@QGLFormat@@SA_NXZ @ 391 NONAME ; bool QGLFormat::hasOpenGLOverlays(void)
+ ?setMouseTracking@QGLWidget@@QAEX_N@Z @ 392 NONAME ; void QGLWidget::setMouseTracking(bool)
+ ?type@QGLBuffer@@QBE?AW4Type@1@XZ @ 393 NONAME ; enum QGLBuffer::Type QGLBuffer::type(void) const
+ ?fontDisplayListBase@QGLWidget@@IAEHABVQFont@@H@Z @ 394 NONAME ; int QGLWidget::fontDisplayListBase(class QFont const &, int)
+ ?addShaderFromSourceCode@QGLShaderProgram@@QAE_NV?$QFlags@W4ShaderTypeBit@QGLShader@@@@ABVQByteArray@@@Z @ 395 NONAME ; bool QGLShaderProgram::addShaderFromSourceCode(class QFlags<enum QGLShader::ShaderTypeBit>, class QByteArray const &)
+ ?bindTexture@QGLContext@@QAEIABVQPixmap@@IH@Z @ 396 NONAME ; unsigned int QGLContext::bindTexture(class QPixmap const &, unsigned int, int)
+ ?d_func@QGLWidget@@ABEPBVQGLWidgetPrivate@@XZ @ 397 NONAME ; class QGLWidgetPrivate const * QGLWidget::d_func(void) const
+ ?metric@QGLPaintDevice@@MBEHW4PaintDeviceMetric@QPaintDevice@@@Z @ 398 NONAME ; int QGLPaintDevice::metric(enum QPaintDevice::PaintDeviceMetric) const
+ ?drawTexture@QGLWidget@@QAEXABVQRectF@@II@Z @ 399 NONAME ; void QGLWidget::drawTexture(class QRectF const &, unsigned int, unsigned int)
+ ?isValid@QGLWidget@@QBE_NXZ @ 400 NONAME ; bool QGLWidget::isValid(void) const
+ ?shared_null@QGLColormap@@0UQGLColormapData@1@A @ 401 NONAME ; struct QGLColormap::QGLColormapData QGLColormap::shared_null
+ ?setUniformValue@QGLShaderProgram@@QAEXPBDQAY01M@Z @ 402 NONAME ; void QGLShaderProgram::setUniformValue(char const *, float [2] * const)
+ ?insert@QGLContextResource@@QAEXPBVQGLContext@@PAX@Z @ 403 NONAME ; void QGLContextResource::insert(class QGLContext const *, void *)
+ ??0QGLCustomShaderStage@@QAE@XZ @ 404 NONAME ; QGLCustomShaderStage::QGLCustomShaderStage(void)
+ ?setDefaultFormat@QGLFormat@@SAXABV1@@Z @ 405 NONAME ; void QGLFormat::setDefaultFormat(class QGLFormat const &)
+ ?sourceCode@QGLShader@@QBE?AVQByteArray@@XZ @ 406 NONAME ; class QByteArray QGLShader::sourceCode(void) const
+ ??8QGLFramebufferObjectFormat@@QBE_NABV0@@Z @ 407 NONAME ; bool QGLFramebufferObjectFormat::operator==(class QGLFramebufferObjectFormat const &) const
+ ?detach_helper@QGLColormap@@AAEXXZ @ 408 NONAME ; void QGLColormap::detach_helper(void)
+ ?setUniformValue@QGLShaderProgram@@QAEXHQAY01M@Z @ 409 NONAME ; void QGLShaderProgram::setUniformValue(int, float [2] * const)
+ ?compileSourceCode@QGLShader@@QAE_NABVQString@@@Z @ 410 NONAME ; bool QGLShader::compileSourceCode(class QString const &)
+ ?setUniformValueArray@QGLShaderProgram@@QAEXHPBVQMatrix4x4@@H@Z @ 411 NONAME ; void QGLShaderProgram::setUniformValueArray(int, class QMatrix4x4 const *, int)
+ ?invalidateState@QGL2PaintEngineEx@@QAEXXZ @ 412 NONAME ; void QGL2PaintEngineEx::invalidateState(void)
+ ?scroll@QGLWindowSurface@@UAE_NABVQRegion@@HH@Z @ 413 NONAME ; bool QGLWindowSurface::scroll(class QRegion const &, int, int)
+ ??4QGLFramebufferObjectFormat@@QAEAAV0@ABV0@@Z @ 414 NONAME ; class QGLFramebufferObjectFormat & QGLFramebufferObjectFormat::operator=(class QGLFramebufferObjectFormat const &)
+ ?bindAttributeLocation@QGLShaderProgram@@QAEXABVQByteArray@@H@Z @ 415 NONAME ; void QGLShaderProgram::bindAttributeLocation(class QByteArray const &, int)
+ ?pixelShaderFragment@QGraphicsShaderEffect@@QBE?AVQByteArray@@XZ @ 416 NONAME ; class QByteArray QGraphicsShaderEffect::pixelShaderFragment(void) const
+ ?size@QGLColormap@@QBEHXZ @ 417 NONAME ; int QGLColormap::size(void) const
+ ??0QGLShareContextScope@@QAE@PBVQGLContext@@@Z @ 418 NONAME ; QGLShareContextScope::QGLShareContextScope(class QGLContext const *)
+ ?removeAllShaders@QGLShaderProgram@@QAEXXZ @ 419 NONAME ; void QGLShaderProgram::removeAllShaders(void)
+ ??_EQGLShaderProgram@@UAE@I@Z @ 420 NONAME ; QGLShaderProgram::~QGLShaderProgram(unsigned int)
+ ?pixmapFilter@QGL2PaintEngineEx@@UAEPAVQPixmapFilter@@HPBV2@@Z @ 421 NONAME ; class QPixmapFilter * QGL2PaintEngineEx::pixmapFilter(int, class QPixmapFilter const *)
+ ?scroll@QGLPixmapData@@UAE_NHHABVQRect@@@Z @ 422 NONAME ; bool QGLPixmapData::scroll(int, int, class QRect const &)
+ ?contextDestroyed@QGLTextureGlyphCache@@QAEXPBVQGLContext@@@Z @ 423 NONAME ; void QGLTextureGlyphCache::contextDestroyed(class QGLContext const *)
+ ??0QGLColormap@@QAE@XZ @ 424 NONAME ; QGLColormap::QGLColormap(void)
+ ?metric@QGLFramebufferObject@@MBEHW4PaintDeviceMetric@QPaintDevice@@@Z @ 425 NONAME ; int QGLFramebufferObject::metric(enum QPaintDevice::PaintDeviceMetric) const
+ ?devType@QGLFramebufferObject@@MBEHXZ @ 426 NONAME ; int QGLFramebufferObject::devType(void) const
+ ?isValidContext@QGLPixmapData@@QBE_NPBVQGLContext@@@Z @ 427 NONAME ; bool QGLPixmapData::isValidContext(class QGLContext const *) const
+ ?directRendering@QGLFormat@@QBE_NXZ @ 428 NONAME ; bool QGLFormat::directRendering(void) const
+ ?metric@QGLPixelBuffer@@MBEHW4PaintDeviceMetric@QPaintDevice@@@Z @ 429 NONAME ; int QGLPixelBuffer::metric(enum QPaintDevice::PaintDeviceMetric) const
+ ??0QGLSharedResourceGuard@@QAE@PBVQGLContext@@@Z @ 430 NONAME ; QGLSharedResourceGuard::QGLSharedResourceGuard(class QGLContext const *)
+ ?setUniformValue@QGLShaderProgram@@QAEXPBDABV?$QGenericMatrix@$01$03M@@@Z @ 431 NONAME ; void QGLShaderProgram::setUniformValue(char const *, class QGenericMatrix<2, 4, float> const &)
+ ?trUtf8@QGLShaderProgram@@SA?AVQString@@PBD0@Z @ 432 NONAME ; class QString QGLShaderProgram::trUtf8(char const *, char const *)
+ ?fill@QGL2PaintEngineEx@@UAEXABVQVectorPath@@ABVQBrush@@@Z @ 433 NONAME ; void QGL2PaintEngineEx::fill(class QVectorPath const &, class QBrush const &)
+ ?disableAttributeArray@QGLShaderProgram@@QAEXPBD@Z @ 434 NONAME ; void QGLShaderProgram::disableAttributeArray(char const *)
+ ?paintEngine@QGLPixelBuffer@@UBEPAVQPaintEngine@@XZ @ 435 NONAME ; class QPaintEngine * QGLPixelBuffer::paintEngine(void) const
+ ?qt_metacall@QGLShader@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 436 NONAME ; int QGLShader::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?setUniformValue@QGLShaderProgram@@QAEXHMMM@Z @ 437 NONAME ; void QGLShaderProgram::setUniformValue(int, float, float, float)
+ ??1QGLFramebufferObject@@UAE@XZ @ 438 NONAME ; QGLFramebufferObject::~QGLFramebufferObject(void)
+ ?minorVersion@QGLFormat@@QBEHXZ @ 439 NONAME ; int QGLFormat::minorVersion(void) const
+ ?setAttributeValue@QGLShaderProgram@@QAEXHABVQColor@@@Z @ 440 NONAME ; void QGLShaderProgram::setAttributeValue(int, class QColor const &)
+ ?setUniformValueArray@QGLShaderProgram@@QAEXPBDPBVQMatrix4x4@@H@Z @ 441 NONAME ; void QGLShaderProgram::setUniformValueArray(char const *, class QMatrix4x4 const *, int)
+ ?setAttachment@QGLFramebufferObjectFormat@@QAEXW4Attachment@QGLFramebufferObject@@@Z @ 442 NONAME ; void QGLFramebufferObjectFormat::setAttachment(enum QGLFramebufferObject::Attachment)
+ ?setSwapInterval@QGLFormat@@QAEXH@Z @ 443 NONAME ; void QGLFormat::setSwapInterval(int)
+ ?event@QGLWidget@@MAE_NPAVQEvent@@@Z @ 444 NONAME ; bool QGLWidget::event(class QEvent *)
+ ?initializeGL@QGLWidget@@MAEXXZ @ 445 NONAME ; void QGLWidget::initializeGL(void)
+ ?setAttributeArray@QGLShaderProgram@@QAEXHPBVQVector3D@@H@Z @ 446 NONAME ; void QGLShaderProgram::setAttributeArray(int, class QVector3D const *, int)
+ ?hijackWindow@QGLWindowSurface@@AAEXPAVQWidget@@@Z @ 447 NONAME ; void QGLWindowSurface::hijackWindow(class QWidget *)
+ ?d_func@QGLShader@@ABEPBVQGLShaderPrivate@@XZ @ 448 NONAME ; class QGLShaderPrivate const * QGLShader::d_func(void) const
+ ?setUniformValue@QGLShaderProgram@@QAEXHABVQPointF@@@Z @ 449 NONAME ; void QGLShaderProgram::setUniformValue(int, class QPointF const &)
+ ?addShaderFromSourceCode@QGLShaderProgram@@QAE_NV?$QFlags@W4ShaderTypeBit@QGLShader@@@@ABVQString@@@Z @ 450 NONAME ; bool QGLShaderProgram::addShaderFromSourceCode(class QFlags<enum QGLShader::ShaderTypeBit>, class QString const &)
+ ?setUniformValueArray@QGLShaderProgram@@QAEXPBDPBV?$QGenericMatrix@$02$03M@@H@Z @ 451 NONAME ; void QGLShaderProgram::setUniformValueArray(char const *, class QGenericMatrix<3, 4, float> const *, int)
+ ?width@QGLTextureGlyphCache@@QBEHXZ @ 452 NONAME ; int QGLTextureGlyphCache::width(void) const
+ ?setAttributeValue@QGLShaderProgram@@QAEXHM@Z @ 453 NONAME ; void QGLShaderProgram::setAttributeValue(int, float)
+ ?resizeOverlayGL@QGLWidget@@MAEXHH@Z @ 454 NONAME ; void QGLWidget::resizeOverlayGL(int, int)
+ ?setUniformValueArray@QGLShaderProgram@@QAEXHPBV?$QGenericMatrix@$01$02M@@H@Z @ 455 NONAME ; void QGLShaderProgram::setUniformValueArray(int, class QGenericMatrix<2, 3, float> const *, int)
+ ?bufferId@QGLBuffer@@QBEIXZ @ 456 NONAME ; unsigned int QGLBuffer::bufferId(void) const
+ ?disableAttributeArray@QGLShaderProgram@@QAEXH@Z @ 457 NONAME ; void QGLShaderProgram::disableAttributeArray(int)
+ ?end@QGL2PaintEngineEx@@UAE_NXZ @ 458 NONAME ; bool QGL2PaintEngineEx::end(void)
+ ??0QGL2PaintEngineEx@@QAE@XZ @ 459 NONAME ; QGL2PaintEngineEx::QGL2PaintEngineEx(void)
+ ?trUtf8@QGLEngineShaderManager@@SA?AVQString@@PBD0@Z @ 460 NONAME ; class QString QGLEngineShaderManager::trUtf8(char const *, char const *)
+ ??1QGLTextureGlyphCache@@UAE@XZ @ 461 NONAME ; QGLTextureGlyphCache::~QGLTextureGlyphCache(void)
+ ?context@QGLSharedResourceGuard@@QBEPBVQGLContext@@XZ @ 462 NONAME ; class QGLContext const * QGLSharedResourceGuard::context(void) const
+ ?resizeEvent@QGLWidget@@MAEXPAVQResizeEvent@@@Z @ 463 NONAME ; void QGLWidget::resizeEvent(class QResizeEvent *)
+ ?setDoubleBuffer@QGLFormat@@QAEX_N@Z @ 464 NONAME ; void QGLFormat::setDoubleBuffer(bool)
+ ??1QGLBuffer@@QAE@XZ @ 465 NONAME ; QGLBuffer::~QGLBuffer(void)
+ ?id@QGLSharedResourceGuard@@QBEIXZ @ 466 NONAME ; unsigned int QGLSharedResourceGuard::id(void) const
+ ?d_func@QGL2PaintEngineEx@@AAEPAVQGL2PaintEngineExPrivate@@XZ @ 467 NONAME ; class QGL2PaintEngineExPrivate * QGL2PaintEngineEx::d_func(void)
+ ?resize@QGLPixmapData@@UAEXHH@Z @ 468 NONAME ; void QGLPixmapData::resize(int, int)
+ ?setUniformValue@QGLShaderProgram@@QAEXPBDABV?$QGenericMatrix@$01$01M@@@Z @ 469 NONAME ; void QGLShaderProgram::setUniformValue(char const *, class QGenericMatrix<2, 2, float> const &)
+ ?trUtf8@QGLTextureGlyphCache@@SA?AVQString@@PBD0H@Z @ 470 NONAME ; class QString QGLTextureGlyphCache::trUtf8(char const *, char const *, int)
+ ?begin@QGL2PaintEngineEx@@UAE_NPAVQPaintDevice@@@Z @ 471 NONAME ; bool QGL2PaintEngineEx::begin(class QPaintDevice *)
+ ?samples@QGLFormat@@QBEHXZ @ 472 NONAME ; int QGLFormat::samples(void) const
+ ?setFormat@QGLContext@@QAEXABVQGLFormat@@@Z @ 473 NONAME ; void QGLContext::setFormat(class QGLFormat const &)
+ ?trUtf8@QGLSignalProxy@@SA?AVQString@@PBD0@Z @ 474 NONAME ; class QString QGLSignalProxy::trUtf8(char const *, char const *)
+ ?setUniformValue@QGLShaderProgram@@QAEXHABVQVector3D@@@Z @ 475 NONAME ; void QGLShaderProgram::setUniformValue(int, class QVector3D const &)
+ ?alphaBufferSize@QGLFormat@@QBEHXZ @ 476 NONAME ; int QGLFormat::alphaBufferSize(void) const
+ ?deleteTexture@QGLPixelBuffer@@QAEXI@Z @ 477 NONAME ; void QGLPixelBuffer::deleteTexture(unsigned int)
+ ?qt_qgl_paint_engine@@YAPAVQPaintEngine@@XZ @ 478 NONAME ; class QPaintEngine * qt_qgl_paint_engine(void)
+ ?trUtf8@QGLSignalProxy@@SA?AVQString@@PBD0H@Z @ 479 NONAME ; class QString QGLSignalProxy::trUtf8(char const *, char const *, int)
+ ??1QGLWindowSurface@@UAE@XZ @ 480 NONAME ; QGLWindowSurface::~QGLWindowSurface(void)
+ ?bind@QGLBuffer@@QAE_NXZ @ 481 NONAME ; bool QGLBuffer::bind(void)
+ ?getStaticMetaObject@QGLWidget@@SAABUQMetaObject@@XZ @ 482 NONAME ; struct QMetaObject const & QGLWidget::getStaticMetaObject(void)
+ ??_EQGLPixelBuffer@@UAE@I@Z @ 483 NONAME ; QGLPixelBuffer::~QGLPixelBuffer(unsigned int)
+ ?clipEnabledChanged@QGL2PaintEngineEx@@UAEXXZ @ 484 NONAME ; void QGL2PaintEngineEx::clipEnabledChanged(void)
+ ??_EQGLGraphicsSystem@@UAE@I@Z @ 485 NONAME ; QGLGraphicsSystem::~QGLGraphicsSystem(unsigned int)
+ ?endNativePainting@QGL2PaintEngineEx@@UAEXXZ @ 486 NONAME ; void QGL2PaintEngineEx::endNativePainting(void)
+ ?setFormat@QGLWidget@@QAEXABVQGLFormat@@@Z @ 487 NONAME ; void QGLWidget::setFormat(class QGLFormat const &)
+ ?setOption@QGLFormat@@QAEXV?$QFlags@W4FormatOption@QGL@@@@@Z @ 488 NONAME ; void QGLFormat::setOption(class QFlags<enum QGL::FormatOption>)
+ ?shaderDestroyed@QGLShaderProgram@@AAEXXZ @ 489 NONAME ; void QGLShaderProgram::shaderDestroyed(void)
+ ?qt_metacall@QGLSignalProxy@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 490 NONAME ; int QGLSignalProxy::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?setId@QGLSharedResourceGuard@@QAEXI@Z @ 491 NONAME ; void QGLSharedResourceGuard::setId(unsigned int)
+ ?setUniformValue@QGLShaderProgram@@QAEXHABV?$QGenericMatrix@$03$01M@@@Z @ 492 NONAME ; void QGLShaderProgram::setUniformValue(int, class QGenericMatrix<4, 2, float> const &)
+ ?makeOverlayCurrent@QGLWidget@@QAEXXZ @ 493 NONAME ; void QGLWidget::makeOverlayCurrent(void)
+ ?setGeometryOutputVertexCount@QGLShaderProgram@@QAEXH@Z @ 494 NONAME ; void QGLShaderProgram::setGeometryOutputVertexCount(int)
+ ?setUniformValue@QGLShaderProgram@@QAEXPBDABVQSize@@@Z @ 495 NONAME ; void QGLShaderProgram::setUniformValue(char const *, class QSize const &)
+ ?convertToGLFormat@QGLWidget@@SA?AVQImage@@ABV2@@Z @ 496 NONAME ; class QImage QGLWidget::convertToGLFormat(class QImage const &)
+ ?staticMetaObject@QGLTextureGlyphCache@@2UQMetaObject@@B @ 497 NONAME ; struct QMetaObject const QGLTextureGlyphCache::staticMetaObject
+ ??_EQGLContextResource@@QAE@I@Z @ 498 NONAME ; QGLContextResource::~QGLContextResource(unsigned int)
+ ?handle@QGLColormap@@IAEKXZ @ 499 NONAME ; unsigned long QGLColormap::handle(void)
+ ?isCreated@QGLBuffer@@QBE_NXZ @ 500 NONAME ; bool QGLBuffer::isCreated(void) const
+ ?setColormap@QGLWidget@@QAEXABVQGLColormap@@@Z @ 501 NONAME ; void QGLWidget::setColormap(class QGLColormap const &)
+ ?instance@QGLSignalProxy@@SAPAV1@XZ @ 502 NONAME ; class QGLSignalProxy * QGLSignalProxy::instance(void)
+ ?setUniformValueArray@QGLShaderProgram@@QAEXPBDPBIH@Z @ 503 NONAME ; void QGLShaderProgram::setUniformValueArray(char const *, unsigned int const *, int)
+ ?isValid@QGLContext@@QBE_NXZ @ 504 NONAME ; bool QGLContext::isValid(void) const
+ ?currentCtx@QGLContext@@1PAV1@A @ 505 NONAME ; class QGLContext * QGLContext::currentCtx
+ ?hasOpenGLFramebufferObjects@QGLFramebufferObject@@SA_NXZ @ 506 NONAME ; bool QGLFramebufferObject::hasOpenGLFramebufferObjects(void)
+ ?compileSourceCode@QGLShader@@QAE_NABVQByteArray@@@Z @ 507 NONAME ; bool QGLShader::compileSourceCode(class QByteArray const &)
+ ?colormap@QGLWidget@@QBEABVQGLColormap@@XZ @ 508 NONAME ; class QGLColormap const & QGLWidget::colormap(void) const
+ ?getStaticMetaObject@QGLShaderProgram@@SAABUQMetaObject@@XZ @ 509 NONAME ; struct QMetaObject const & QGLShaderProgram::getStaticMetaObject(void)
+ ??_EQGLWidget@@UAE@I@Z @ 510 NONAME ; QGLWidget::~QGLWidget(unsigned int)
+ ?setStereo@QGLFormat@@QAEX_N@Z @ 511 NONAME ; void QGLFormat::setStereo(bool)
+ ?setAttributeValue@QGLShaderProgram@@QAEXPBDMM@Z @ 512 NONAME ; void QGLShaderProgram::setAttributeValue(char const *, float, float)
+ ?setAttributeValue@QGLShaderProgram@@QAEXHMMM@Z @ 513 NONAME ; void QGLShaderProgram::setAttributeValue(int, float, float, float)
+ ?context@QGLWindowSurface@@QBEPAVQGLContext@@XZ @ 514 NONAME ; class QGLContext * QGLWindowSurface::context(void) const
+ ?d_func@QGLBuffer@@AAEPAVQGLBufferPrivate@@XZ @ 515 NONAME ; class QGLBufferPrivate * QGLBuffer::d_func(void)
+ ?textureTarget@QGLFramebufferObjectFormat@@QBEIXZ @ 516 NONAME ; unsigned int QGLFramebufferObjectFormat::textureTarget(void) const
+ ?needsFill@QGLPixmapData@@ABE_NXZ @ 517 NONAME ; bool QGLPixmapData::needsFill(void) const
+ ??CQGLShareContextScope@@QAEPAVQGLContext@@XZ @ 518 NONAME ; class QGLContext * QGLShareContextScope::operator->(void)
+ ?setUniformValue@QGLShaderProgram@@QAEXPBDH@Z @ 519 NONAME ; void QGLShaderProgram::setUniformValue(char const *, int)
+ ?release@QGLBuffer@@SAXW4Type@1@@Z @ 520 NONAME ; void QGLBuffer::release(enum QGLBuffer::Type)
+ ??0QGLWidget@@QAE@PAVQWidget@@PBV0@V?$QFlags@W4WindowType@Qt@@@@@Z @ 521 NONAME ; QGLWidget::QGLWidget(class QWidget *, class QGLWidget const *, class QFlags<enum Qt::WindowType>)
+ ?stencilBufferSize@QGLFormat@@QBEHXZ @ 522 NONAME ; int QGLFormat::stencilBufferSize(void) const
+ ?getStaticMetaObject@QGLShader@@SAABUQMetaObject@@XZ @ 523 NONAME ; struct QMetaObject const & QGLShader::getStaticMetaObject(void)
+ ?setUniformValue@QGLShaderProgram@@QAEXPBDMM@Z @ 524 NONAME ; void QGLShaderProgram::setUniformValue(char const *, float, float)
+ ?log@QGLShader@@QBE?AVQString@@XZ @ 525 NONAME ; class QString QGLShader::log(void) const
+ ?setUniformValueArray@QGLShaderProgram@@QAEXHPBV?$QGenericMatrix@$02$03M@@H@Z @ 526 NONAME ; void QGLShaderProgram::setUniformValueArray(int, class QGenericMatrix<3, 4, float> const *, int)
+ ?setUniformValueArray@QGLShaderProgram@@QAEXPBDPBV?$QGenericMatrix@$03$01M@@H@Z @ 527 NONAME ; void QGLShaderProgram::setUniformValueArray(char const *, class QGenericMatrix<4, 2, float> const *, int)
+ ?qt_metacast@QGLWindowSurface@@UAEPAXPBD@Z @ 528 NONAME ; void * QGLWindowSurface::qt_metacast(char const *)
+ ?autoBufferSwap@QGLWidget@@IBE_NXZ @ 529 NONAME ; bool QGLWidget::autoBufferSwap(void) const
+ ?size@QGLFramebufferObject@@QBE?AVQSize@@XZ @ 530 NONAME ; class QSize QGLFramebufferObject::size(void) const
+ ??1QGL2PaintEngineEx@@UAE@XZ @ 531 NONAME ; QGL2PaintEngineEx::~QGL2PaintEngineEx(void)
+ ?trUtf8@QGLShader@@SA?AVQString@@PBD0H@Z @ 532 NONAME ; class QString QGLShader::trUtf8(char const *, char const *, int)
+ ?drawTexture@QGLContext@@QAEXABVQPointF@@II@Z @ 533 NONAME ; void QGLContext::drawTexture(class QPointF const &, unsigned int, unsigned int)
+ ?defaultOverlayFormat@QGLFormat@@SA?AV1@XZ @ 534 NONAME ; class QGLFormat QGLFormat::defaultOverlayFormat(void)
+ ?setUniformValue@QGLShaderProgram@@QAEXPBDABV?$QGenericMatrix@$02$03M@@@Z @ 535 NONAME ; void QGLShaderProgram::setUniformValue(char const *, class QGenericMatrix<3, 4, float> const &)
+ ?allocate@QGLBuffer@@QAEXH@Z @ 536 NONAME ; void QGLBuffer::allocate(int)
+ ?setAttributeArray@QGLShaderProgram@@QAEXPBDPBVQVector2D@@H@Z @ 537 NONAME ; void QGLShaderProgram::setAttributeArray(char const *, class QVector2D const *, int)
+ ?d_func@QGLShaderProgram@@ABEPBVQGLShaderProgramPrivate@@XZ @ 538 NONAME ; class QGLShaderProgramPrivate const * QGLShaderProgram::d_func(void) const
+ ?staticMetaObject@QGLSignalProxy@@2UQMetaObject@@B @ 539 NONAME ; struct QMetaObject const QGLSignalProxy::staticMetaObject
+ ??_EQGLPaintDevice@@UAE@I@Z @ 540 NONAME ; QGLPaintDevice::~QGLPaintDevice(unsigned int)
+ ?geometryInputType@QGLShaderProgram@@QBEIXZ @ 541 NONAME ; unsigned int QGLShaderProgram::geometryInputType(void) const
+ ?drawTexture@QGLPixelBuffer@@QAEXABVQPointF@@II@Z @ 542 NONAME ; void QGLPixelBuffer::drawTexture(class QPointF const &, unsigned int, unsigned int)
+ ?setUniformValue@QGLShaderProgram@@QAEXPBDABVQMatrix4x4@@@Z @ 543 NONAME ; void QGLShaderProgram::setUniformValue(char const *, class QMatrix4x4 const &)
+ ??1QGLFramebufferObjectFormat@@QAE@XZ @ 544 NONAME ; QGLFramebufferObjectFormat::~QGLFramebufferObjectFormat(void)
+ ?staticMetaObject@QGLWidget@@2UQMetaObject@@B @ 545 NONAME ; struct QMetaObject const QGLWidget::staticMetaObject
+ ?isCompiled@QGLShader@@QBE_NXZ @ 546 NONAME ; bool QGLShader::isCompiled(void) const
+ ?setUniformValue@QGLShaderProgram@@QAEXPBDQAY02M@Z @ 547 NONAME ; void QGLShaderProgram::setUniformValue(char const *, float [3] * const)
+ ?setUniformValue@QGLShaderProgram@@QAEXPBDABVQPointF@@@Z @ 548 NONAME ; void QGLShaderProgram::setUniformValue(char const *, class QPointF const &)
+ ?getDevice@QGLPaintDevice@@SAPAV1@PAVQPaintDevice@@@Z @ 549 NONAME ; class QGLPaintDevice * QGLPaintDevice::getDevice(class QPaintDevice *)
+ ?setUniformValue@QGLShaderProgram@@QAEXHQAY02M@Z @ 550 NONAME ; void QGLShaderProgram::setUniformValue(int, float [3] * const)
+ ?getStaticMetaObject@QGLTextureGlyphCache@@SAABUQMetaObject@@XZ @ 551 NONAME ; struct QMetaObject const & QGLTextureGlyphCache::getStaticMetaObject(void)
+ ?swapBuffers@QGLContext@@UBEXXZ @ 552 NONAME ; void QGLContext::swapBuffers(void) const
+ ?renderText@QGLWidget@@QAEXHHABVQString@@ABVQFont@@H@Z @ 553 NONAME ; void QGLWidget::renderText(int, int, class QString const &, class QFont const &, int)
+ ?defaultFormat@QGLFormat@@SA?AV1@XZ @ 554 NONAME ; class QGLFormat QGLFormat::defaultFormat(void)
+ ?bindTexture@QGLWidget@@QAEIABVQPixmap@@IH@Z @ 555 NONAME ; unsigned int QGLWidget::bindTexture(class QPixmap const &, unsigned int, int)
+ ?setUniformValue@QGLShaderProgram@@QAEXHABVQPoint@@@Z @ 556 NONAME ; void QGLShaderProgram::setUniformValue(int, class QPoint const &)
+ ?bindTexture@QGLContext@@QAEIABVQImage@@IHV?$QFlags@W4BindOption@QGLContext@@@@@Z @ 557 NONAME ; unsigned int QGLContext::bindTexture(class QImage const &, unsigned int, int, class QFlags<enum QGLContext::BindOption>)
+ ?initialized@QGLContext@@IBE_NXZ @ 558 NONAME ; bool QGLContext::initialized(void) const
+ ?cleanup@QGLColormap@@CAXPAUQGLColormapData@1@@Z @ 559 NONAME ; void QGLColormap::cleanup(struct QGLColormap::QGLColormapData *)
+ ??1QGLContextResource@@QAE@XZ @ 560 NONAME ; QGLContextResource::~QGLContextResource(void)
+ ?bindTexture@QGLWidget@@QAEIABVQPixmap@@IHV?$QFlags@W4BindOption@QGLContext@@@@@Z @ 561 NONAME ; unsigned int QGLWidget::bindTexture(class QPixmap const &, unsigned int, int, class QFlags<enum QGLContext::BindOption>)
+ ?setUniformValue@QGLShaderProgram@@QAEXPBDABV?$QGenericMatrix@$02$01M@@@Z @ 562 NONAME ; void QGLShaderProgram::setUniformValue(char const *, class QGenericMatrix<3, 2, float> const &)
+ ?setUniformValueArray@QGLShaderProgram@@QAEXHPBMHH@Z @ 563 NONAME ; void QGLShaderProgram::setUniformValueArray(int, float const *, int, int)
+ ?qt_metacall@QGraphicsShaderEffect@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 564 NONAME ; int QGraphicsShaderEffect::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?setUniformValueArray@QGLShaderProgram@@QAEXHPBVQVector2D@@H@Z @ 565 NONAME ; void QGLShaderProgram::setUniformValueArray(int, class QVector2D const *, int)
+ ?beginNativePainting@QGL2PaintEngineEx@@UAEXXZ @ 566 NONAME ; void QGL2PaintEngineEx::beginNativePainting(void)
+ ?overlayTransparentColor@QGLContext@@QBE?AVQColor@@XZ @ 567 NONAME ; class QColor QGLContext::overlayTransparentColor(void) const
+ ?endPaint@QGLPaintDevice@@UAEXXZ @ 568 NONAME ; void QGLPaintDevice::endPaint(void)
+ ?areSharing@QGLContext@@SA_NPBV1@0@Z @ 569 NONAME ; bool QGLContext::areSharing(class QGLContext const *, class QGLContext const *)
+ ?setSamples@QGLFramebufferObjectFormat@@QAEXH@Z @ 570 NONAME ; void QGLFramebufferObjectFormat::setSamples(int)
+ ?d_func@QGLCustomShaderStage@@AAEPAVQGLCustomShaderStagePrivate@@XZ @ 571 NONAME ; class QGLCustomShaderStagePrivate * QGLCustomShaderStage::d_func(void)
+ ?doneCurrent@QGLPixelBuffer@@QAE_NXZ @ 572 NONAME ; bool QGLPixelBuffer::doneCurrent(void)
+ ?geometryOutputType@QGLShaderProgram@@QBEIXZ @ 573 NONAME ; unsigned int QGLShaderProgram::geometryOutputType(void) const
+ ?removeShader@QGLShaderProgram@@QAEXPAVQGLShader@@@Z @ 574 NONAME ; void QGLShaderProgram::removeShader(class QGLShader *)
+ ?setUniformValueArray@QGLShaderProgram@@QAEXHPBV?$QGenericMatrix@$03$01M@@H@Z @ 575 NONAME ; void QGLShaderProgram::setUniformValueArray(int, class QGenericMatrix<4, 2, float> const *, int)
+ ?setEntries@QGLColormap@@QAEXHPBIH@Z @ 576 NONAME ; void QGLColormap::setEntries(int, unsigned int const *, int)
+ ?setUniformValue@QGLShaderProgram@@QAEXPBDI@Z @ 577 NONAME ; void QGLShaderProgram::setUniformValue(char const *, unsigned int)
+ ?d_func@QGL2PaintEngineEx@@ABEPBVQGL2PaintEngineExPrivate@@XZ @ 578 NONAME ; class QGL2PaintEngineExPrivate const * QGL2PaintEngineEx::d_func(void) const
+ ?removeCustomStage@QGLEngineShaderManager@@QAEXXZ @ 579 NONAME ; void QGLEngineShaderManager::removeCustomStage(void)
+ ?bindTexture@QGLPixelBuffer@@QAEIABVQImage@@I@Z @ 580 NONAME ; unsigned int QGLPixelBuffer::bindTexture(class QImage const &, unsigned int)
+ ??_EQGLCustomShaderStage@@UAE@I@Z @ 581 NONAME ; QGLCustomShaderStage::~QGLCustomShaderStage(unsigned int)
+ ?format@QGLPixelBuffer@@QBE?AVQGLFormat@@XZ @ 582 NONAME ; class QGLFormat QGLPixelBuffer::format(void) const
+ ?swapBuffers@QGLWidget@@QAEXXZ @ 583 NONAME ; void QGLWidget::swapBuffers(void)
+ ??_EQGLFramebufferObject@@UAE@I@Z @ 584 NONAME ; QGLFramebufferObject::~QGLFramebufferObject(unsigned int)
+ ?glDevice@QGLPixmapData@@QBEPAVQGLPaintDevice@@XZ @ 585 NONAME ; class QGLPaintDevice * QGLPixmapData::glDevice(void) const
+ ?compositionModeChanged@QGL2PaintEngineEx@@UAEXXZ @ 586 NONAME ; void QGL2PaintEngineEx::compositionModeChanged(void)
+ ?tr@QGLWidget@@SA?AVQString@@PBD0@Z @ 587 NONAME ; class QString QGLWidget::tr(char const *, char const *)
+ ?setUniforms@QGraphicsShaderEffect@@MAEXPAVQGLShaderProgram@@@Z @ 588 NONAME ; void QGraphicsShaderEffect::setUniforms(class QGLShaderProgram *)
+ ?drawImage@QGL2PaintEngineEx@@UAEXABVQRectF@@ABVQImage@@0V?$QFlags@W4ImageConversionFlag@Qt@@@@@Z @ 589 NONAME ; void QGL2PaintEngineEx::drawImage(class QRectF const &, class QImage const &, class QRectF const &, class QFlags<enum Qt::ImageConversionFlag>)
+ ?flush@QGLWindowSurface@@UAEXPAVQWidget@@ABVQRegion@@ABVQPoint@@@Z @ 590 NONAME ; void QGLWindowSurface::flush(class QWidget *, class QRegion const &, class QPoint const &)
+ ??0QGLTextureGlyphCache@@QAE@PAVQGLContext@@W4Type@QFontEngineGlyphCache@@ABVQTransform@@@Z @ 591 NONAME ; QGLTextureGlyphCache::QGLTextureGlyphCache(class QGLContext *, enum QFontEngineGlyphCache::Type, class QTransform const &)
+ ??_EQGLTextureGlyphCache@@UAE@I@Z @ 592 NONAME ; QGLTextureGlyphCache::~QGLTextureGlyphCache(unsigned int)
+ ??1QGLShareContextScope@@QAE@XZ @ 593 NONAME ; QGLShareContextScope::~QGLShareContextScope(void)
+ ?alpha@QGLFormat@@QBE_NXZ @ 594 NONAME ; bool QGLFormat::alpha(void) const
+ ?drawTextItem@QGL2PaintEngineEx@@UAEXABVQPointF@@ABVQTextItem@@@Z @ 595 NONAME ; void QGL2PaintEngineEx::drawTextItem(class QPointF const &, class QTextItem const &)
+ ?bindTexture@QGLContext@@QAEIABVQPixmap@@IHV?$QFlags@W4BindOption@QGLContext@@@@@Z @ 596 NONAME ; unsigned int QGLContext::bindTexture(class QPixmap const &, unsigned int, int, class QFlags<enum QGLContext::BindOption>)
+ ?fillImage@QGLPixmapData@@ABE?AVQImage@@ABVQColor@@@Z @ 597 NONAME ; class QImage QGLPixmapData::fillImage(class QColor const &) const
+ ?renderHintsChanged@QGL2PaintEngineEx@@UAEXXZ @ 598 NONAME ; void QGL2PaintEngineEx::renderHintsChanged(void)
+ ?trUtf8@QGLShaderProgram@@SA?AVQString@@PBD0H@Z @ 599 NONAME ; class QString QGLShaderProgram::trUtf8(char const *, char const *, int)
+ ?setUniformValue@QGLShaderProgram@@QAEXHABVQTransform@@@Z @ 600 NONAME ; void QGLShaderProgram::setUniformValue(int, class QTransform const &)
+ ?qt_resolve_eglimage_gl_extensions@@YA_NPAVQGLContext@@@Z @ 601 NONAME ; bool qt_resolve_eglimage_gl_extensions(class QGLContext *)
+ ?glInit@QGLWidget@@MAEXXZ @ 602 NONAME ; void QGLWidget::glInit(void)
+ ?setEntry@QGLColormap@@QAEXHABVQColor@@@Z @ 603 NONAME ; void QGLColormap::setEntry(int, class QColor const &)
+ ?setUniformValueArray@QGLShaderProgram@@QAEXPBDPBVQVector3D@@H@Z @ 604 NONAME ; void QGLShaderProgram::setUniformValueArray(char const *, class QVector3D const *, int)
+ ??1QGLPixmapData@@UAE@XZ @ 605 NONAME ; QGLPixmapData::~QGLPixmapData(void)
+ ?log@QGLShaderProgram@@QBE?AVQString@@XZ @ 606 NONAME ; class QString QGLShaderProgram::log(void) const
+ ?metric@QGLPixmapData@@UBEHW4PaintDeviceMetric@QPaintDevice@@@Z @ 607 NONAME ; int QGLPixmapData::metric(enum QPaintDevice::PaintDeviceMetric) const
+ ?qglColor@QGLWidget@@QBEXABVQColor@@@Z @ 608 NONAME ; void QGLWidget::qglColor(class QColor const &) const
+ ??0QGLBuffer@@QAE@XZ @ 609 NONAME ; QGLBuffer::QGLBuffer(void)
+ ?setAttributeValue@QGLShaderProgram@@QAEXPBDPBMHH@Z @ 610 NONAME ; void QGLShaderProgram::setAttributeValue(char const *, float const *, int, int)
+ ?handle@QGLFramebufferObject@@QBEIXZ @ 611 NONAME ; unsigned int QGLFramebufferObject::handle(void) const
+ ?tr@QGLSignalProxy@@SA?AVQString@@PBD0@Z @ 612 NONAME ; class QString QGLSignalProxy::tr(char const *, char const *)
+ ?hasOverlay@QGLFormat@@QBE_NXZ @ 613 NONAME ; bool QGLFormat::hasOverlay(void) const
+ ?setSrcPixelType@QGLEngineShaderManager@@QAEXW4BrushStyle@Qt@@@Z @ 614 NONAME ; void QGLEngineShaderManager::setSrcPixelType(enum Qt::BrushStyle)
+ ?emitAboutToDestroyContext@QGLSignalProxy@@QAEXPBVQGLContext@@@Z @ 615 NONAME ; void QGLSignalProxy::emitAboutToDestroyContext(class QGLContext const *)
+ ?colorIndex@QGLContext@@IBEIABVQColor@@@Z @ 616 NONAME ; unsigned int QGLContext::colorIndex(class QColor const &) const
+ ?alphaRequested@QGLPaintDevice@@UBE_NXZ @ 617 NONAME ; bool QGLPaintDevice::alphaRequested(void) const
+ ?unmap@QGLBuffer@@QAE_NXZ @ 618 NONAME ; bool QGLBuffer::unmap(void)
+ ?setUniformValueArray@QGLShaderProgram@@QAEXPBDPBMHH@Z @ 619 NONAME ; void QGLShaderProgram::setUniformValueArray(char const *, float const *, int, int)
+ ??0QGLSharedResourceGuard@@QAE@PBVQGLContext@@I@Z @ 620 NONAME ; QGLSharedResourceGuard::QGLSharedResourceGuard(class QGLContext const *, unsigned int)
+ ?bindAttributeLocation@QGLShaderProgram@@QAEXPBDH@Z @ 621 NONAME ; void QGLShaderProgram::bindAttributeLocation(char const *, int)
+ ?setUniformValue@QGLShaderProgram@@QAEXHABVQColor@@@Z @ 622 NONAME ; void QGLShaderProgram::setUniformValue(int, class QColor const &)
+ ?enableAttributeArray@QGLShaderProgram@@QAEXH@Z @ 623 NONAME ; void QGLShaderProgram::enableAttributeArray(int)
+ ?tr@QGLShader@@SA?AVQString@@PBD0@Z @ 624 NONAME ; class QString QGLShader::tr(char const *, char const *)
+ ?overlayContext@QGLWidget@@QBEPBVQGLContext@@XZ @ 625 NONAME ; class QGLContext const * QGLWidget::overlayContext(void) const
+ ?beginPaint@QGLPaintDevice@@UAEXXZ @ 626 NONAME ; void QGLPaintDevice::beginPaint(void)
+ ?setTextureCacheLimit@QGLContext@@SAXH@Z @ 627 NONAME ; void QGLContext::setTextureCacheLimit(int)
+ ?setOnPainter@QGLCustomShaderStage@@QAE_NPAVQPainter@@@Z @ 628 NONAME ; bool QGLCustomShaderStage::setOnPainter(class QPainter *)
+ ?bindTexture@QGLPixelBuffer@@QAEIABVQPixmap@@I@Z @ 629 NONAME ; unsigned int QGLPixelBuffer::bindTexture(class QPixmap const &, unsigned int)
+ ?resizeGL@QGLWidget@@MAEXHH@Z @ 630 NONAME ; void QGLWidget::resizeGL(int, int)
+ ?trUtf8@QGLWindowSurface@@SA?AVQString@@PBD0@Z @ 631 NONAME ; class QString QGLWindowSurface::trUtf8(char const *, char const *)
+ ?qt_metacast@QGLEngineShaderManager@@UAEPAXPBD@Z @ 632 NONAME ; void * QGLEngineShaderManager::qt_metacast(char const *)
+ ?sampleBuffers@QGLFormat@@QBE_NXZ @ 633 NONAME ; bool QGLFormat::sampleBuffers(void) const
+ ?trUtf8@QGLWindowSurface@@SA?AVQString@@PBD0H@Z @ 634 NONAME ; class QString QGLWindowSurface::trUtf8(char const *, char const *, int)
+ ?shaderProgNeedsChangingSlot@QGLEngineShaderManager@@AAEXXZ @ 635 NONAME ; void QGLEngineShaderManager::shaderProgNeedsChangingSlot(void)
+ ?metaObject@QGLTextureGlyphCache@@UBEPBUQMetaObject@@XZ @ 636 NONAME ; struct QMetaObject const * QGLTextureGlyphCache::metaObject(void) const
+ ?paintEvent@QGLWidget@@MAEXPAVQPaintEvent@@@Z @ 637 NONAME ; void QGLWidget::paintEvent(class QPaintEvent *)
+ ?uniformLocation@QGLShaderProgram@@QBEHABVQByteArray@@@Z @ 638 NONAME ; int QGLShaderProgram::uniformLocation(class QByteArray const &) const
+ ?currentContext@QGLContext@@SAPBV1@XZ @ 639 NONAME ; class QGLContext const * QGLContext::currentContext(void)
+ ?setUniformValue@QGLShaderProgram@@QAEXHABV?$QGenericMatrix@$01$02M@@@Z @ 640 NONAME ; void QGLShaderProgram::setUniformValue(int, class QGenericMatrix<2, 3, float> const &)
+ ??0QGLShader@@QAE@V?$QFlags@W4ShaderTypeBit@QGLShader@@@@PAVQObject@@@Z @ 641 NONAME ; QGLShader::QGLShader(class QFlags<enum QGLShader::ShaderTypeBit>, class QObject *)
+ ?setUniformValueArray@QGLShaderProgram@@QAEXPBDPBV?$QGenericMatrix@$01$01M@@H@Z @ 642 NONAME ; void QGLShaderProgram::setUniformValueArray(char const *, class QGenericMatrix<2, 2, float> const *, int)
+ ?drawStaticTextItem@QGL2PaintEngineEx@@UAEXPAVQStaticTextItem@@@Z @ 643 NONAME ; void QGL2PaintEngineEx::drawStaticTextItem(class QStaticTextItem *)
+ ?metaObject@QGLShader@@UBEPBUQMetaObject@@XZ @ 644 NONAME ; struct QMetaObject const * QGLShader::metaObject(void) const
+ ?tr@QGLTextureGlyphCache@@SA?AVQString@@PBD0@Z @ 645 NONAME ; class QString QGLTextureGlyphCache::tr(char const *, char const *)
+ ?drawTexture@QGLFramebufferObject@@QAEXABVQRectF@@II@Z @ 646 NONAME ; void QGLFramebufferObject::drawTexture(class QRectF const &, unsigned int, unsigned int)
+ ?openGLVersionFlags@QGLFormat@@SA?AV?$QFlags@W4OpenGLVersionFlag@QGLFormat@@@@XZ @ 647 NONAME ; class QFlags<enum QGLFormat::OpenGLVersionFlag> QGLFormat::openGLVersionFlags(void)
+ ?setRedBufferSize@QGLFormat@@QAEXH@Z @ 648 NONAME ; void QGLFormat::setRedBufferSize(int)
+ ??0QGLFormat@@QAE@V?$QFlags@W4FormatOption@QGL@@@@H@Z @ 649 NONAME ; QGLFormat::QGLFormat(class QFlags<enum QGL::FormatOption>, int)
+ ?setMaskType@QGLEngineShaderManager@@QAEXW4MaskType@1@@Z @ 650 NONAME ; void QGLEngineShaderManager::setMaskType(enum QGLEngineShaderManager::MaskType)
+ ?setUniforms@QGLCustomShaderStage@@UAEXPAVQGLShaderProgram@@@Z @ 651 NONAME ; void QGLCustomShaderStage::setUniforms(class QGLShaderProgram *)
+ ??0QGLFramebufferObjectFormat@@QAE@ABV0@@Z @ 652 NONAME ; QGLFramebufferObjectFormat::QGLFramebufferObjectFormat(class QGLFramebufferObjectFormat const &)
+ ?fromFile@QGLPixmapData@@UAE_NABVQString@@PBDV?$QFlags@W4ImageConversionFlag@Qt@@@@@Z @ 653 NONAME ; bool QGLPixmapData::fromFile(class QString const &, char const *, class QFlags<enum Qt::ImageConversionFlag>)
+ ?qt_metacast@QGLShader@@UAEPAXPBD@Z @ 654 NONAME ; void * QGLShader::qt_metacast(char const *)
+ ?attributeLocation@QGLShaderProgram@@QBEHABVQByteArray@@@Z @ 655 NONAME ; int QGLShaderProgram::attributeLocation(class QByteArray const &) const
+ ?bindTexture@QGLContext@@QAEIABVQImage@@IH@Z @ 656 NONAME ; unsigned int QGLContext::bindTexture(class QImage const &, unsigned int, int)
+ ?optimiseForBrushTransform@QGLEngineShaderManager@@QAEXW4TransformationType@QTransform@@@Z @ 657 NONAME ; void QGLEngineShaderManager::optimiseForBrushTransform(enum QTransform::TransformationType)
+ ?setAlpha@QGLFormat@@QAEX_N@Z @ 658 NONAME ; void QGLFormat::setAlpha(bool)
+ ?setAttributeValue@QGLShaderProgram@@QAEXPBDMMMM@Z @ 659 NONAME ; void QGLShaderProgram::setAttributeValue(char const *, float, float, float, float)
+ ?setUniformValue@QGLShaderProgram@@QAEXPBDABV?$QGenericMatrix@$03$01M@@@Z @ 660 NONAME ; void QGLShaderProgram::setUniformValue(char const *, class QGenericMatrix<4, 2, float> const &)
+ ?blitFramebuffer@QGLFramebufferObject@@SAXPAV1@ABVQRect@@01II@Z @ 661 NONAME ; void QGLFramebufferObject::blitFramebuffer(class QGLFramebufferObject *, class QRect const &, class QGLFramebufferObject *, class QRect const &, unsigned int, unsigned int)
+ ?d_func@QGraphicsShaderEffect@@AAEPAVQGraphicsShaderEffectPrivate@@XZ @ 662 NONAME ; class QGraphicsShaderEffectPrivate * QGraphicsShaderEffect::d_func(void)
+ ?d_func@QGLWidget@@AAEPAVQGLWidgetPrivate@@XZ @ 663 NONAME ; class QGLWidgetPrivate * QGLWidget::d_func(void)
+ ?qt_metacast@QGLSignalProxy@@UAEPAXPBD@Z @ 664 NONAME ; void * QGLSignalProxy::qt_metacast(char const *)
+ ?createState@QGL2PaintEngineEx@@UBEPAVQPainterState@@PAV2@@Z @ 665 NONAME ; class QPainterState * QGL2PaintEngineEx::createState(class QPainterState *) const
+ ??0QGLShader@@QAE@V?$QFlags@W4ShaderTypeBit@QGLShader@@@@PBVQGLContext@@PAVQObject@@@Z @ 666 NONAME ; QGLShader::QGLShader(class QFlags<enum QGLShader::ShaderTypeBit>, class QGLContext const *, class QObject *)
+ ?format@QGLFramebufferObject@@QBE?AVQGLFramebufferObjectFormat@@XZ @ 667 NONAME ; class QGLFramebufferObjectFormat QGLFramebufferObject::format(void) const
+ ?tr@QGraphicsShaderEffect@@SA?AVQString@@PBD0H@Z @ 668 NONAME ; class QString QGraphicsShaderEffect::tr(char const *, char const *, int)
+ ?destroy@QGLBuffer@@QAEXXZ @ 669 NONAME ; void QGLBuffer::destroy(void)
+ ?setUniformValue@QGLShaderProgram@@QAEXPBDMMM@Z @ 670 NONAME ; void QGLShaderProgram::setUniformValue(char const *, float, float, float)
+ ?paintEngine@QGLFramebufferObject@@UBEPAVQPaintEngine@@XZ @ 671 NONAME ; class QPaintEngine * QGLFramebufferObject::paintEngine(void) const
+ ?setTextureTarget@QGLFramebufferObjectFormat@@QAEXI@Z @ 672 NONAME ; void QGLFramebufferObjectFormat::setTextureTarget(unsigned int)
+ ?hasOpenGLPbuffers@QGLPixelBuffer@@SA_NXZ @ 673 NONAME ; bool QGLPixelBuffer::hasOpenGLPbuffers(void)
+ ?handle@QGLPixelBuffer@@QBEKXZ @ 674 NONAME ; unsigned long QGLPixelBuffer::handle(void) const
+ ?setHandle@QGLColormap@@IAEXK@Z @ 675 NONAME ; void QGLColormap::setHandle(unsigned long)
+ ?size@QGLPixmapData@@ABE?AVQSize@@XZ @ 676 NONAME ; class QSize QGLPixmapData::size(void) const
+ ??1QGLSignalProxy@@UAE@XZ @ 677 NONAME ; QGLSignalProxy::~QGLSignalProxy(void)
+ ?isBound@QGLFramebufferObject@@QBE_NXZ @ 678 NONAME ; bool QGLFramebufferObject::isBound(void) const
+ ?updateOverlayGL@QGLWidget@@UAEXXZ @ 679 NONAME ; void QGLWidget::updateOverlayGL(void)
+ ?makeCurrent@QGLPixelBuffer@@QAE_NXZ @ 680 NONAME ; bool QGLPixelBuffer::makeCurrent(void)
+ ?setUniformValue@QGLShaderProgram@@QAEXPBDQAY03M@Z @ 681 NONAME ; void QGLShaderProgram::setUniformValue(char const *, float [4] * const)
+ ?draw@QGraphicsShaderEffect@@MAEXPAVQPainter@@@Z @ 682 NONAME ; void QGraphicsShaderEffect::draw(class QPainter *)
+ ?bindTexture@QGLWidget@@QAEIABVQString@@@Z @ 683 NONAME ; unsigned int QGLWidget::bindTexture(class QString const &)
+ ?setAttributeValue@QGLShaderProgram@@QAEXPBDABVQVector4D@@@Z @ 684 NONAME ; void QGLShaderProgram::setAttributeValue(char const *, class QVector4D const &)
+ ?setAttributeArray@QGLShaderProgram@@QAEXHPBVQVector2D@@H@Z @ 685 NONAME ; void QGLShaderProgram::setAttributeArray(int, class QVector2D const *, int)
+ ?makeCurrent@QGLWidget@@QAEXXZ @ 686 NONAME ; void QGLWidget::makeCurrent(void)
+ ?setUniformValue@QGLShaderProgram@@QAEXHQAY03M@Z @ 687 NONAME ; void QGLShaderProgram::setUniformValue(int, float [4] * const)
+ ?setUniformValue@QGLShaderProgram@@QAEXPBDABVQPoint@@@Z @ 688 NONAME ; void QGLShaderProgram::setUniformValue(char const *, class QPoint const &)
+ ?redBufferSize@QGLFormat@@QBEHXZ @ 689 NONAME ; int QGLFormat::redBufferSize(void) const
+ ?setUniformValueArray@QGLShaderProgram@@QAEXPBDPBV?$QGenericMatrix@$02$02M@@H@Z @ 690 NONAME ; void QGLShaderProgram::setUniformValueArray(char const *, class QGenericMatrix<3, 3, float> const *, int)
+ ?setAttributeValue@QGLShaderProgram@@QAEXHABVQVector3D@@@Z @ 691 NONAME ; void QGLShaderProgram::setAttributeValue(int, class QVector3D const &)
+ ?useFramebufferObjects@QGLPixmapData@@ABE_NXZ @ 692 NONAME ; bool QGLPixmapData::useFramebufferObjects(void) const
+ ?enableAttributeArray@QGLShaderProgram@@QAEXPBD@Z @ 693 NONAME ; void QGLShaderProgram::enableAttributeArray(char const *)
+ ?depth@QGLFormat@@QBE_NXZ @ 694 NONAME ; bool QGLFormat::depth(void) const
+ ?getStaticMetaObject@QGLWindowSurface@@SAABUQMetaObject@@XZ @ 695 NONAME ; struct QMetaObject const & QGLWindowSurface::getStaticMetaObject(void)
+ ?qt_metacast@QGLWidget@@UAEPAXPBD@Z @ 696 NONAME ; void * QGLWidget::qt_metacast(char const *)
+ ?setProfile@QGLFormat@@QAEXW4OpenGLContextProfile@1@@Z @ 697 NONAME ; void QGLFormat::setProfile(enum QGLFormat::OpenGLContextProfile)
+ ?updateDynamicTexture@QGLPixelBuffer@@QBEXI@Z @ 698 NONAME ; void QGLPixelBuffer::updateDynamicTexture(unsigned int) const
+ ?setUniformValue@QGLShaderProgram@@QAEXHH@Z @ 699 NONAME ; void QGLShaderProgram::setUniformValue(int, int)
+
diff --git a/src/s60installs/eabi/QtDeclarativeu.def b/src/s60installs/eabi/QtDeclarativeu.def
index 2a14abe5e5..11dee4d7b6 100644
--- a/src/s60installs/eabi/QtDeclarativeu.def
+++ b/src/s60installs/eabi/QtDeclarativeu.def
@@ -552,9 +552,9 @@ EXPORTS
_ZN21QDeclarativeListModel6removeEi @ 551 NONAME
_ZN21QDeclarativeListModel7flattenEv @ 552 NONAME
_ZN21QDeclarativeListModelC1EP7QObject @ 553 NONAME
- _ZN21QDeclarativeListModelC1EbP7QObject @ 554 NONAME
+ _ZN21QDeclarativeListModelC1EbP7QObject @ 554 NONAME ABSENT
_ZN21QDeclarativeListModelC2EP7QObject @ 555 NONAME
- _ZN21QDeclarativeListModelC2EbP7QObject @ 556 NONAME
+ _ZN21QDeclarativeListModelC2EbP7QObject @ 556 NONAME ABSENT
_ZN21QDeclarativeListModelD0Ev @ 557 NONAME
_ZN21QDeclarativeListModelD1Ev @ 558 NONAME
_ZN21QDeclarativeListModelD2Ev @ 559 NONAME
@@ -1675,4 +1675,76 @@ EXPORTS
_ZrsR11QDataStreamRN29QDeclarativeEngineDebugServer22QDeclarativeObjectDataE @ 1674 NONAME
_ZrsR11QDataStreamRN29QDeclarativeEngineDebugServer26QDeclarativeObjectPropertyE @ 1675 NONAME
_ZN23QDeclarativeEngineDebug10newObjectsEv @ 1676 NONAME
+ _ZN17QDeclarativeState20addEntryToRevertListERK18QDeclarativeAction @ 1677 NONAME
+ _ZN17QDeclarativeState22addEntriesToRevertListERK5QListI18QDeclarativeActionE @ 1678 NONAME
+ _ZN17QDeclarativeState23changeValueInRevertListEP7QObjectRK10QByteArrayRK8QVariant @ 1679 NONAME
+ _ZN17QDeclarativeState25changeBindingInRevertListEP7QObjectRK10QByteArrayP27QDeclarativeAbstractBinding @ 1680 NONAME
+ _ZN17QDeclarativeState25removeEntryFromRevertListEP7QObjectRK10QByteArray @ 1681 NONAME
+ _ZN17QDeclarativeState30removeAllEntriesFromRevertListEP7QObject @ 1682 NONAME
+ _ZN23QDeclarativeItemPrivate10data_clearEP24QDeclarativeListPropertyI7QObjectE @ 1683 NONAME
+ _ZN23QDeclarativeItemPrivate10data_countEP24QDeclarativeListPropertyI7QObjectE @ 1684 NONAME
+ _ZN23QDeclarativeItemPrivate15resources_clearEP24QDeclarativeListPropertyI7QObjectE @ 1685 NONAME
+ _ZN23QDeclarativeItemPrivate7data_atEP24QDeclarativeListPropertyI7QObjectEi @ 1686 NONAME
+ _ZN26QDeclarativeStateOperation8setStateEP17QDeclarativeState @ 1687 NONAME
+ _ZN27QDeclarativeAbstractBinding11weakPointerEv @ 1688 NONAME
+ _ZN27QDeclarativePropertyChanges11changeValueERK10QByteArrayRK8QVariant @ 1689 NONAME
+ _ZN27QDeclarativePropertyChanges11qt_metacallEN11QMetaObject4CallEiPPv @ 1690 NONAME
+ _ZN27QDeclarativePropertyChanges11qt_metacastEPKc @ 1691 NONAME
+ _ZN27QDeclarativePropertyChanges13attachToStateEv @ 1692 NONAME
+ _ZN27QDeclarativePropertyChanges13setIsExplicitEb @ 1693 NONAME
+ _ZN27QDeclarativePropertyChanges14removePropertyERK10QByteArray @ 1694 NONAME
+ _ZN27QDeclarativePropertyChanges15detachFromStateEv @ 1695 NONAME
+ _ZN27QDeclarativePropertyChanges16changeExpressionERK10QByteArrayRK7QString @ 1696 NONAME
+ _ZN27QDeclarativePropertyChanges16staticMetaObjectE @ 1697 NONAME DATA 16
+ _ZN27QDeclarativePropertyChanges19getStaticMetaObjectEv @ 1698 NONAME
+ _ZN27QDeclarativePropertyChanges21setRestoreEntryValuesEb @ 1699 NONAME
+ _ZN27QDeclarativePropertyChanges7actionsEv @ 1700 NONAME
+ _ZN27QDeclarativePropertyChanges9setObjectEP7QObject @ 1701 NONAME
+ _ZN27QDeclarativePropertyChangesC1Ev @ 1702 NONAME
+ _ZN27QDeclarativePropertyChangesC2Ev @ 1703 NONAME
+ _ZN27QDeclarativePropertyChangesD0Ev @ 1704 NONAME
+ _ZN27QDeclarativePropertyChangesD1Ev @ 1705 NONAME
+ _ZN27QDeclarativePropertyChangesD2Ev @ 1706 NONAME
+ _ZNK17QDeclarativeState13isStateActiveEv @ 1707 NONAME
+ _ZNK17QDeclarativeState17valueInRevertListEP7QObjectRK10QByteArray @ 1708 NONAME
+ _ZNK17QDeclarativeState19bindingInRevertListEP7QObjectRK10QByteArray @ 1709 NONAME
+ _ZNK17QDeclarativeState28containsPropertyInRevertListEP7QObjectRK10QByteArray @ 1710 NONAME
+ _ZNK26QDeclarativeStateOperation5stateEv @ 1711 NONAME
+ _ZNK27QDeclarativePropertyChanges10expressionERK10QByteArray @ 1712 NONAME
+ _ZNK27QDeclarativePropertyChanges10isExplicitEv @ 1713 NONAME
+ _ZNK27QDeclarativePropertyChanges10metaObjectEv @ 1714 NONAME
+ _ZNK27QDeclarativePropertyChanges13containsValueERK10QByteArray @ 1715 NONAME
+ _ZNK27QDeclarativePropertyChanges16containsPropertyERK10QByteArray @ 1716 NONAME
+ _ZNK27QDeclarativePropertyChanges18containsExpressionERK10QByteArray @ 1717 NONAME
+ _ZNK27QDeclarativePropertyChanges18restoreEntryValuesEv @ 1718 NONAME
+ _ZNK27QDeclarativePropertyChanges5valueERK10QByteArray @ 1719 NONAME
+ _ZNK27QDeclarativePropertyChanges6objectEv @ 1720 NONAME
+ _ZNK27QDeclarativePropertyChanges8propertyERK10QByteArray @ 1721 NONAME
+ _ZTI27QDeclarativePropertyChanges @ 1722 NONAME
+ _ZTV27QDeclarativePropertyChanges @ 1723 NONAME
+ _ZN24QDeclarativeScriptAction10transitionER5QListI18QDeclarativeActionERS0_I20QDeclarativePropertyEN29QDeclarativeAbstractAnimation19TransitionDirectionE @ 1724 NONAME
+ _ZN24QDeclarativeScriptAction11qtAnimationEv @ 1725 NONAME
+ _ZN24QDeclarativeScriptAction11qt_metacallEN11QMetaObject4CallEiPPv @ 1726 NONAME
+ _ZN24QDeclarativeScriptAction11qt_metacastEPKc @ 1727 NONAME
+ _ZN24QDeclarativeScriptAction16staticMetaObjectE @ 1728 NONAME DATA 16
+ _ZN24QDeclarativeScriptAction19getStaticMetaObjectEv @ 1729 NONAME
+ _ZN24QDeclarativeScriptAction24setStateChangeScriptNameERK7QString @ 1730 NONAME
+ _ZN24QDeclarativeScriptAction9setScriptERK24QDeclarativeScriptString @ 1731 NONAME
+ _ZN24QDeclarativeScriptActionC1EP7QObject @ 1732 NONAME
+ _ZN24QDeclarativeScriptActionC2EP7QObject @ 1733 NONAME
+ _ZN24QDeclarativeScriptActionD0Ev @ 1734 NONAME
+ _ZN24QDeclarativeScriptActionD1Ev @ 1735 NONAME
+ _ZN24QDeclarativeScriptActionD2Ev @ 1736 NONAME
+ _ZNK24QDeclarativeScriptAction10metaObjectEv @ 1737 NONAME
+ _ZNK24QDeclarativeScriptAction21stateChangeScriptNameEv @ 1738 NONAME
+ _ZNK24QDeclarativeScriptAction6scriptEv @ 1739 NONAME
+ _ZTI24QDeclarativeScriptAction @ 1740 NONAME
+ _ZTV24QDeclarativeScriptAction @ 1741 NONAME
+ _ZThn12_N24QDeclarativeScriptActionD0Ev @ 1742 NONAME
+ _ZThn12_N24QDeclarativeScriptActionD1Ev @ 1743 NONAME
+ _ZThn8_N24QDeclarativeScriptActionD0Ev @ 1744 NONAME
+ _ZThn8_N24QDeclarativeScriptActionD1Ev @ 1745 NONAME
+ _ZN21QDeclarativeListModelC1EPKS_P32QDeclarativeListModelWorkerAgent @ 1746 NONAME
+ _ZN21QDeclarativeListModelC2EPKS_P32QDeclarativeListModelWorkerAgent @ 1747 NONAME
+ _ZNK21QDeclarativeListModel14inWorkerThreadEv @ 1748 NONAME
diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def
index c6d9ddb8bc..4442d3385f 100644
--- a/src/s60installs/eabi/QtGuiu.def
+++ b/src/s60installs/eabi/QtGuiu.def
@@ -9389,7 +9389,7 @@ EXPORTS
_ZNK20QGraphicsItemPrivate19genericMapFromSceneERK7QPointFPK7QWidget @ 9388 NONAME
_ZNK20QGraphicsItemPrivate19maybeExtraItemCacheEv @ 9389 NONAME
_ZNK20QGraphicsItemPrivate20discardUpdateRequestEbbbb @ 9390 NONAME ABSENT
- _ZNK20QGraphicsItemPrivate21effectiveBoundingRectEv @ 9391 NONAME
+ _ZNK20QGraphicsItemPrivate21effectiveBoundingRectEv @ 9391 NONAME ABSENT
_ZNK20QGraphicsItemPrivate22inputMethodQueryHelperEN2Qt16InputMethodQueryE @ 9392 NONAME
_ZNK20QGraphicsItemPrivate24combineTransformToParentEP10QTransformPKS0_ @ 9393 NONAME
_ZNK20QGraphicsItemPrivate26combineTransformFromParentEP10QTransformPKS0_ @ 9394 NONAME
@@ -12092,5 +12092,9 @@ EXPORTS
_ZN11QFontEngine16lastRightBearingERK12QGlyphLayoutb @ 12091 NONAME
_ZN18QTapAndHoldGesture10setTimeoutEi @ 12092 NONAME
_ZN18QTapAndHoldGesture7timeoutEv @ 12093 NONAME
- _ZN20QGraphicsItemPrivate26childrenBoundingRectHelperEP10QTransformP6QRectFb @ 12094 NONAME
+ _ZN20QGraphicsItemPrivate26childrenBoundingRectHelperEP10QTransformP6QRectFb @ 12094 NONAME ABSENT
+ _ZN20QGraphicsItemPrivate14children_clearEP24QDeclarativeListPropertyI15QGraphicsObjectE @ 12095 NONAME
+ _ZN19QApplicationPrivate19qmljsDebugArgumentsE @ 12096 NONAME DATA 4
+ _ZN20QGraphicsItemPrivate26childrenBoundingRectHelperEP10QTransformP6QRectFP13QGraphicsItem @ 12097 NONAME
+ _ZNK20QGraphicsItemPrivate21effectiveBoundingRectEP13QGraphicsItem @ 12098 NONAME
diff --git a/src/s60installs/eabi/QtOpenGLu.def b/src/s60installs/eabi/QtOpenGLu.def
new file mode 100644
index 0000000000..7ceade4a55
--- /dev/null
+++ b/src/s60installs/eabi/QtOpenGLu.def
@@ -0,0 +1,705 @@
+EXPORTS
+ _Z18qt_gl_share_widgetv @ 1 NONAME
+ _Z19qt_qgl_paint_enginev @ 2 NONAME
+ _Z22qt_gl_transfer_contextPK10QGLContext @ 3 NONAME
+ _Z26qt_destroy_gl_share_widgetv @ 4 NONAME
+ _Z33qt_resolve_eglimage_gl_extensionsP10QGLContext @ 5 NONAME
+ _ZN10QGLContext10areSharingEPKS_S1_ @ 6 NONAME
+ _ZN10QGLContext10currentCtxE @ 7 NONAME DATA 4
+ _ZN10QGLContext11bindTextureERK6QImageji @ 8 NONAME
+ _ZN10QGLContext11bindTextureERK6QImageji6QFlagsINS_10BindOptionEE @ 9 NONAME
+ _ZN10QGLContext11bindTextureERK7QPixmapji @ 10 NONAME
+ _ZN10QGLContext11bindTextureERK7QPixmapji6QFlagsINS_10BindOptionEE @ 11 NONAME
+ _ZN10QGLContext11bindTextureERK7QString @ 12 NONAME
+ _ZN10QGLContext11doneCurrentEv @ 13 NONAME
+ _ZN10QGLContext11drawTextureERK6QRectFjj @ 14 NONAME
+ _ZN10QGLContext11drawTextureERK7QPointFjj @ 15 NONAME
+ _ZN10QGLContext11makeCurrentEv @ 16 NONAME
+ _ZN10QGLContext13chooseContextEPKS_ @ 17 NONAME
+ _ZN10QGLContext13deleteTextureEj @ 18 NONAME
+ _ZN10QGLContext14currentContextEv @ 19 NONAME
+ _ZN10QGLContext14setInitializedEb @ 20 NONAME
+ _ZN10QGLContext16setWindowCreatedEb @ 21 NONAME
+ _ZN10QGLContext17textureCacheLimitEv @ 22 NONAME
+ _ZN10QGLContext20setTextureCacheLimitEi @ 23 NONAME
+ _ZN10QGLContext24generateFontDisplayListsERK5QFonti @ 24 NONAME
+ _ZN10QGLContext5resetEv @ 25 NONAME
+ _ZN10QGLContext6createEPKS_ @ 26 NONAME
+ _ZN10QGLContext8setValidEb @ 27 NONAME
+ _ZN10QGLContext9setDeviceEP12QPaintDevice @ 28 NONAME
+ _ZN10QGLContext9setFormatERK9QGLFormat @ 29 NONAME
+ _ZN10QGLContextC1ERK9QGLFormat @ 30 NONAME
+ _ZN10QGLContextC1ERK9QGLFormatP12QPaintDevice @ 31 NONAME
+ _ZN10QGLContextC2ERK9QGLFormat @ 32 NONAME
+ _ZN10QGLContextC2ERK9QGLFormatP12QPaintDevice @ 33 NONAME
+ _ZN10QGLContextD0Ev @ 34 NONAME
+ _ZN10QGLContextD1Ev @ 35 NONAME
+ _ZN10QGLContextD2Ev @ 36 NONAME
+ _ZN11QGLColormap10setEntriesEiPKji @ 37 NONAME
+ _ZN11QGLColormap11shared_nullE @ 38 NONAME DATA 12
+ _ZN11QGLColormap13detach_helperEv @ 39 NONAME
+ _ZN11QGLColormap7cleanupEPNS_15QGLColormapDataE @ 40 NONAME
+ _ZN11QGLColormap8setEntryEiRK6QColor @ 41 NONAME
+ _ZN11QGLColormap8setEntryEij @ 42 NONAME
+ _ZN11QGLColormapC1ERKS_ @ 43 NONAME
+ _ZN11QGLColormapC1Ev @ 44 NONAME
+ _ZN11QGLColormapC2ERKS_ @ 45 NONAME
+ _ZN11QGLColormapC2Ev @ 46 NONAME
+ _ZN11QGLColormapD1Ev @ 47 NONAME
+ _ZN11QGLColormapD2Ev @ 48 NONAME
+ _ZN11QGLColormapaSERKS_ @ 49 NONAME
+ _ZN13QGLPixmapData4copyEPK11QPixmapDataRK5QRect @ 50 NONAME
+ _ZN13QGLPixmapData4fillERK6QColor @ 51 NONAME
+ _ZN13QGLPixmapData6resizeEii @ 52 NONAME
+ _ZN13QGLPixmapData6scrollEiiRK5QRect @ 53 NONAME
+ _ZN13QGLPixmapData8fromDataEPKhjPKc6QFlagsIN2Qt19ImageConversionFlagEE @ 54 NONAME
+ _ZN13QGLPixmapData8fromFileERK7QStringPKc6QFlagsIN2Qt19ImageConversionFlagEE @ 55 NONAME
+ _ZN13QGLPixmapData9fromImageERK6QImage6QFlagsIN2Qt19ImageConversionFlagEE @ 56 NONAME
+ _ZN13QGLPixmapDataC1EN11QPixmapData9PixelTypeE @ 57 NONAME
+ _ZN13QGLPixmapDataC2EN11QPixmapData9PixelTypeE @ 58 NONAME
+ _ZN13QGLPixmapDataD0Ev @ 59 NONAME
+ _ZN13QGLPixmapDataD1Ev @ 60 NONAME
+ _ZN13QGLPixmapDataD2Ev @ 61 NONAME
+ _ZN14QGLPaintDevice10beginPaintEv @ 62 NONAME
+ _ZN14QGLPaintDevice18ensureActiveTargetEv @ 63 NONAME
+ _ZN14QGLPaintDevice8endPaintEv @ 64 NONAME
+ _ZN14QGLPaintDevice9getDeviceEP12QPaintDevice @ 65 NONAME
+ _ZN14QGLPaintDeviceC2Ev @ 66 NONAME
+ _ZN14QGLPaintDeviceD0Ev @ 67 NONAME
+ _ZN14QGLPaintDeviceD1Ev @ 68 NONAME
+ _ZN14QGLPaintDeviceD2Ev @ 69 NONAME
+ _ZN14QGLPixelBuffer11bindTextureERK6QImagej @ 70 NONAME
+ _ZN14QGLPixelBuffer11bindTextureERK7QPixmapj @ 71 NONAME
+ _ZN14QGLPixelBuffer11bindTextureERK7QString @ 72 NONAME
+ _ZN14QGLPixelBuffer11doneCurrentEv @ 73 NONAME
+ _ZN14QGLPixelBuffer11drawTextureERK6QRectFjj @ 74 NONAME
+ _ZN14QGLPixelBuffer11drawTextureERK7QPointFjj @ 75 NONAME
+ _ZN14QGLPixelBuffer11makeCurrentEv @ 76 NONAME
+ _ZN14QGLPixelBuffer13deleteTextureEj @ 77 NONAME
+ _ZN14QGLPixelBuffer17hasOpenGLPbuffersEv @ 78 NONAME
+ _ZN14QGLPixelBuffer20bindToDynamicTextureEj @ 79 NONAME
+ _ZN14QGLPixelBuffer25releaseFromDynamicTextureEv @ 80 NONAME
+ _ZN14QGLPixelBufferC1ERK5QSizeRK9QGLFormatP9QGLWidget @ 81 NONAME
+ _ZN14QGLPixelBufferC1EiiRK9QGLFormatP9QGLWidget @ 82 NONAME
+ _ZN14QGLPixelBufferC2ERK5QSizeRK9QGLFormatP9QGLWidget @ 83 NONAME
+ _ZN14QGLPixelBufferC2EiiRK9QGLFormatP9QGLWidget @ 84 NONAME
+ _ZN14QGLPixelBufferD0Ev @ 85 NONAME
+ _ZN14QGLPixelBufferD1Ev @ 86 NONAME
+ _ZN14QGLPixelBufferD2Ev @ 87 NONAME
+ _ZN14QGLSignalProxy11qt_metacallEN11QMetaObject4CallEiPPv @ 88 NONAME
+ _ZN14QGLSignalProxy11qt_metacastEPKc @ 89 NONAME
+ _ZN14QGLSignalProxy16staticMetaObjectE @ 90 NONAME DATA 16
+ _ZN14QGLSignalProxy19getStaticMetaObjectEv @ 91 NONAME
+ _ZN14QGLSignalProxy21aboutToDestroyContextEPK10QGLContext @ 92 NONAME
+ _ZN14QGLSignalProxy8instanceEv @ 93 NONAME
+ _ZN16QGLShaderProgram11qt_metacallEN11QMetaObject4CallEiPPv @ 94 NONAME
+ _ZN16QGLShaderProgram11qt_metacastEPKc @ 95 NONAME
+ _ZN16QGLShaderProgram12removeShaderEP9QGLShader @ 96 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEPKcPA2_Kf @ 97 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEPKcPA3_Kf @ 98 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEPKcPA4_Kf @ 99 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEPKcRK10QMatrix4x4 @ 100 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEPKcRK10QTransform @ 101 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEPKcRK14QGenericMatrixILi2ELi2EfE @ 102 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEPKcRK14QGenericMatrixILi2ELi3EfE @ 103 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEPKcRK14QGenericMatrixILi2ELi4EfE @ 104 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEPKcRK14QGenericMatrixILi3ELi2EfE @ 105 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEPKcRK14QGenericMatrixILi3ELi3EfE @ 106 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEPKcRK14QGenericMatrixILi3ELi4EfE @ 107 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEPKcRK14QGenericMatrixILi4ELi2EfE @ 108 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEPKcRK14QGenericMatrixILi4ELi3EfE @ 109 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEPKcRK5QSize @ 110 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEPKcRK6QColor @ 111 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEPKcRK6QPoint @ 112 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEPKcRK6QSizeF @ 113 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEPKcRK7QPointF @ 114 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEPKcRK9QVector2D @ 115 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEPKcRK9QVector3D @ 116 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEPKcRK9QVector4D @ 117 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEPKcf @ 118 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEPKcff @ 119 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEPKcfff @ 120 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEPKcffff @ 121 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEPKci @ 122 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEPKcj @ 123 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEiPA2_Kf @ 124 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEiPA3_Kf @ 125 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEiPA4_Kf @ 126 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEiRK10QMatrix4x4 @ 127 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEiRK10QTransform @ 128 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEiRK14QGenericMatrixILi2ELi2EfE @ 129 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEiRK14QGenericMatrixILi2ELi3EfE @ 130 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEiRK14QGenericMatrixILi2ELi4EfE @ 131 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEiRK14QGenericMatrixILi3ELi2EfE @ 132 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEiRK14QGenericMatrixILi3ELi3EfE @ 133 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEiRK14QGenericMatrixILi3ELi4EfE @ 134 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEiRK14QGenericMatrixILi4ELi2EfE @ 135 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEiRK14QGenericMatrixILi4ELi3EfE @ 136 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEiRK5QSize @ 137 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEiRK6QColor @ 138 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEiRK6QPoint @ 139 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEiRK6QSizeF @ 140 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEiRK7QPointF @ 141 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEiRK9QVector2D @ 142 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEiRK9QVector3D @ 143 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEiRK9QVector4D @ 144 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEif @ 145 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEiff @ 146 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEifff @ 147 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEiffff @ 148 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEii @ 149 NONAME
+ _ZN16QGLShaderProgram15setUniformValueEij @ 150 NONAME
+ _ZN16QGLShaderProgram15shaderDestroyedEv @ 151 NONAME
+ _ZN16QGLShaderProgram16removeAllShadersEv @ 152 NONAME
+ _ZN16QGLShaderProgram16staticMetaObjectE @ 153 NONAME DATA 16
+ _ZN16QGLShaderProgram17setAttributeArrayEPKcPK9QVector2Di @ 154 NONAME
+ _ZN16QGLShaderProgram17setAttributeArrayEPKcPK9QVector3Di @ 155 NONAME
+ _ZN16QGLShaderProgram17setAttributeArrayEPKcPK9QVector4Di @ 156 NONAME
+ _ZN16QGLShaderProgram17setAttributeArrayEPKcPKfii @ 157 NONAME
+ _ZN16QGLShaderProgram17setAttributeArrayEPKcjPKvii @ 158 NONAME
+ _ZN16QGLShaderProgram17setAttributeArrayEiPK9QVector2Di @ 159 NONAME
+ _ZN16QGLShaderProgram17setAttributeArrayEiPK9QVector3Di @ 160 NONAME
+ _ZN16QGLShaderProgram17setAttributeArrayEiPK9QVector4Di @ 161 NONAME
+ _ZN16QGLShaderProgram17setAttributeArrayEiPKfii @ 162 NONAME
+ _ZN16QGLShaderProgram17setAttributeArrayEijPKvii @ 163 NONAME
+ _ZN16QGLShaderProgram17setAttributeValueEPKcPKfii @ 164 NONAME
+ _ZN16QGLShaderProgram17setAttributeValueEPKcRK6QColor @ 165 NONAME
+ _ZN16QGLShaderProgram17setAttributeValueEPKcRK9QVector2D @ 166 NONAME
+ _ZN16QGLShaderProgram17setAttributeValueEPKcRK9QVector3D @ 167 NONAME
+ _ZN16QGLShaderProgram17setAttributeValueEPKcRK9QVector4D @ 168 NONAME
+ _ZN16QGLShaderProgram17setAttributeValueEPKcf @ 169 NONAME
+ _ZN16QGLShaderProgram17setAttributeValueEPKcff @ 170 NONAME
+ _ZN16QGLShaderProgram17setAttributeValueEPKcfff @ 171 NONAME
+ _ZN16QGLShaderProgram17setAttributeValueEPKcffff @ 172 NONAME
+ _ZN16QGLShaderProgram17setAttributeValueEiPKfii @ 173 NONAME
+ _ZN16QGLShaderProgram17setAttributeValueEiRK6QColor @ 174 NONAME
+ _ZN16QGLShaderProgram17setAttributeValueEiRK9QVector2D @ 175 NONAME
+ _ZN16QGLShaderProgram17setAttributeValueEiRK9QVector3D @ 176 NONAME
+ _ZN16QGLShaderProgram17setAttributeValueEiRK9QVector4D @ 177 NONAME
+ _ZN16QGLShaderProgram17setAttributeValueEif @ 178 NONAME
+ _ZN16QGLShaderProgram17setAttributeValueEiff @ 179 NONAME
+ _ZN16QGLShaderProgram17setAttributeValueEifff @ 180 NONAME
+ _ZN16QGLShaderProgram17setAttributeValueEiffff @ 181 NONAME
+ _ZN16QGLShaderProgram18setAttributeBufferEPKcjiii @ 182 NONAME
+ _ZN16QGLShaderProgram18setAttributeBufferEijiii @ 183 NONAME
+ _ZN16QGLShaderProgram19getStaticMetaObjectEv @ 184 NONAME
+ _ZN16QGLShaderProgram20enableAttributeArrayEPKc @ 185 NONAME
+ _ZN16QGLShaderProgram20enableAttributeArrayEi @ 186 NONAME
+ _ZN16QGLShaderProgram20setGeometryInputTypeEj @ 187 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEPKcPK10QMatrix4x4i @ 188 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEPKcPK14QGenericMatrixILi2ELi2EfEi @ 189 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEPKcPK14QGenericMatrixILi2ELi3EfEi @ 190 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEPKcPK14QGenericMatrixILi2ELi4EfEi @ 191 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEPKcPK14QGenericMatrixILi3ELi2EfEi @ 192 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEPKcPK14QGenericMatrixILi3ELi3EfEi @ 193 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEPKcPK14QGenericMatrixILi3ELi4EfEi @ 194 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEPKcPK14QGenericMatrixILi4ELi2EfEi @ 195 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEPKcPK14QGenericMatrixILi4ELi3EfEi @ 196 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEPKcPK9QVector2Di @ 197 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEPKcPK9QVector3Di @ 198 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEPKcPK9QVector4Di @ 199 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEPKcPKfii @ 200 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEPKcPKii @ 201 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEPKcPKji @ 202 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEiPK10QMatrix4x4i @ 203 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEiPK14QGenericMatrixILi2ELi2EfEi @ 204 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEiPK14QGenericMatrixILi2ELi3EfEi @ 205 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEiPK14QGenericMatrixILi2ELi4EfEi @ 206 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEiPK14QGenericMatrixILi3ELi2EfEi @ 207 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEiPK14QGenericMatrixILi3ELi3EfEi @ 208 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEiPK14QGenericMatrixILi3ELi4EfEi @ 209 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEiPK14QGenericMatrixILi4ELi2EfEi @ 210 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEiPK14QGenericMatrixILi4ELi3EfEi @ 211 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEiPK9QVector2Di @ 212 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEiPK9QVector3Di @ 213 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEiPK9QVector4Di @ 214 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEiPKfii @ 215 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEiPKii @ 216 NONAME
+ _ZN16QGLShaderProgram20setUniformValueArrayEiPKji @ 217 NONAME
+ _ZN16QGLShaderProgram21bindAttributeLocationEPKci @ 218 NONAME
+ _ZN16QGLShaderProgram21bindAttributeLocationERK10QByteArrayi @ 219 NONAME
+ _ZN16QGLShaderProgram21bindAttributeLocationERK7QStringi @ 220 NONAME
+ _ZN16QGLShaderProgram21disableAttributeArrayEPKc @ 221 NONAME
+ _ZN16QGLShaderProgram21disableAttributeArrayEi @ 222 NONAME
+ _ZN16QGLShaderProgram21setGeometryOutputTypeEj @ 223 NONAME
+ _ZN16QGLShaderProgram23addShaderFromSourceCodeE6QFlagsIN9QGLShader13ShaderTypeBitEEPKc @ 224 NONAME
+ _ZN16QGLShaderProgram23addShaderFromSourceCodeE6QFlagsIN9QGLShader13ShaderTypeBitEERK10QByteArray @ 225 NONAME
+ _ZN16QGLShaderProgram23addShaderFromSourceCodeE6QFlagsIN9QGLShader13ShaderTypeBitEERK7QString @ 226 NONAME
+ _ZN16QGLShaderProgram23addShaderFromSourceFileE6QFlagsIN9QGLShader13ShaderTypeBitEERK7QString @ 227 NONAME
+ _ZN16QGLShaderProgram23hasOpenGLShaderProgramsEPK10QGLContext @ 228 NONAME
+ _ZN16QGLShaderProgram28setGeometryOutputVertexCountEi @ 229 NONAME
+ _ZN16QGLShaderProgram4bindEv @ 230 NONAME
+ _ZN16QGLShaderProgram4initEv @ 231 NONAME
+ _ZN16QGLShaderProgram4linkEv @ 232 NONAME
+ _ZN16QGLShaderProgram7releaseEv @ 233 NONAME
+ _ZN16QGLShaderProgram9addShaderEP9QGLShader @ 234 NONAME
+ _ZN16QGLShaderProgramC1EP7QObject @ 235 NONAME
+ _ZN16QGLShaderProgramC1EPK10QGLContextP7QObject @ 236 NONAME
+ _ZN16QGLShaderProgramC2EP7QObject @ 237 NONAME
+ _ZN16QGLShaderProgramC2EPK10QGLContextP7QObject @ 238 NONAME
+ _ZN16QGLShaderProgramD0Ev @ 239 NONAME
+ _ZN16QGLShaderProgramD1Ev @ 240 NONAME
+ _ZN16QGLShaderProgramD2Ev @ 241 NONAME
+ _ZN16QGLWindowSurface10beginPaintERK7QRegion @ 242 NONAME
+ _ZN16QGLWindowSurface11paintDeviceEv @ 243 NONAME
+ _ZN16QGLWindowSurface11qt_metacallEN11QMetaObject4CallEiPPv @ 244 NONAME
+ _ZN16QGLWindowSurface11qt_metacastEPKc @ 245 NONAME
+ _ZN16QGLWindowSurface11setGeometryERK5QRect @ 246 NONAME
+ _ZN16QGLWindowSurface12hijackWindowEP7QWidget @ 247 NONAME
+ _ZN16QGLWindowSurface13surfaceFormatE @ 248 NONAME DATA 4
+ _ZN16QGLWindowSurface14updateGeometryEv @ 249 NONAME
+ _ZN16QGLWindowSurface16staticMetaObjectE @ 250 NONAME DATA 16
+ _ZN16QGLWindowSurface19getStaticMetaObjectEv @ 251 NONAME
+ _ZN16QGLWindowSurface5flushEP7QWidgetRK7QRegionRK6QPoint @ 252 NONAME
+ _ZN16QGLWindowSurface6bufferEPK7QWidget @ 253 NONAME
+ _ZN16QGLWindowSurface6scrollERK7QRegionii @ 254 NONAME
+ _ZN16QGLWindowSurface7deletedEP7QObject @ 255 NONAME
+ _ZN16QGLWindowSurface8endPaintERK7QRegion @ 256 NONAME
+ _ZN16QGLWindowSurfaceC1EP7QWidget @ 257 NONAME
+ _ZN16QGLWindowSurfaceC2EP7QWidget @ 258 NONAME
+ _ZN16QGLWindowSurfaceD0Ev @ 259 NONAME
+ _ZN16QGLWindowSurfaceD1Ev @ 260 NONAME
+ _ZN16QGLWindowSurfaceD2Ev @ 261 NONAME
+ _ZN17QGL2PaintEngineEx10drawPixmapERK6QRectFRK7QPixmapS2_ @ 262 NONAME
+ _ZN17QGL2PaintEngineEx10penChangedEv @ 263 NONAME
+ _ZN17QGL2PaintEngineEx11drawTextureERK6QRectFjRK5QSizeS2_ @ 264 NONAME
+ _ZN17QGL2PaintEngineEx12brushChangedEv @ 265 NONAME
+ _ZN17QGL2PaintEngineEx12drawTextItemERK7QPointFRK9QTextItem @ 266 NONAME
+ _ZN17QGL2PaintEngineEx12ensureActiveEv @ 267 NONAME
+ _ZN17QGL2PaintEngineEx12pixmapFilterEiPK13QPixmapFilter @ 268 NONAME
+ _ZN17QGL2PaintEngineEx14opacityChangedEv @ 269 NONAME
+ _ZN17QGL2PaintEngineEx15invalidateStateEv @ 270 NONAME
+ _ZN17QGL2PaintEngineEx16transformChangedEv @ 271 NONAME
+ _ZN17QGL2PaintEngineEx17endNativePaintingEv @ 272 NONAME
+ _ZN17QGL2PaintEngineEx18brushOriginChangedEv @ 273 NONAME
+ _ZN17QGL2PaintEngineEx18clipEnabledChangedEv @ 274 NONAME
+ _ZN17QGL2PaintEngineEx18drawStaticTextItemEP15QStaticTextItem @ 275 NONAME
+ _ZN17QGL2PaintEngineEx18renderHintsChangedEv @ 276 NONAME
+ _ZN17QGL2PaintEngineEx19beginNativePaintingEv @ 277 NONAME
+ _ZN17QGL2PaintEngineEx19drawPixmapFragmentsEPKN8QPainter14PixmapFragmentEiRK7QPixmap6QFlagsINS0_18PixmapFragmentHintEE @ 278 NONAME
+ _ZN17QGL2PaintEngineEx22compositionModeChangedEv @ 279 NONAME
+ _ZN17QGL2PaintEngineEx3endEv @ 280 NONAME
+ _ZN17QGL2PaintEngineEx4clipERK11QVectorPathN2Qt13ClipOperationE @ 281 NONAME
+ _ZN17QGL2PaintEngineEx4fillERK11QVectorPathRK6QBrush @ 282 NONAME
+ _ZN17QGL2PaintEngineEx5beginEP12QPaintDevice @ 283 NONAME
+ _ZN17QGL2PaintEngineEx6strokeERK11QVectorPathRK4QPen @ 284 NONAME
+ _ZN17QGL2PaintEngineEx8setStateEP13QPainterState @ 285 NONAME
+ _ZN17QGL2PaintEngineEx9drawImageERK6QRectFRK6QImageS2_6QFlagsIN2Qt19ImageConversionFlagEE @ 286 NONAME
+ _ZN17QGL2PaintEngineExC1Ev @ 287 NONAME
+ _ZN17QGL2PaintEngineExC2Ev @ 288 NONAME
+ _ZN17QGL2PaintEngineExD0Ev @ 289 NONAME
+ _ZN17QGL2PaintEngineExD1Ev @ 290 NONAME
+ _ZN17QGL2PaintEngineExD2Ev @ 291 NONAME
+ _ZN17QGLContextPrivate14extensionFuncsEPK10QGLContext @ 292 NONAME
+ _ZN17QGLGraphicsSystemC1Eb @ 293 NONAME
+ _ZN17QGLGraphicsSystemC2Eb @ 294 NONAME
+ _ZN18QGLContextResource5valueEPK10QGLContext @ 295 NONAME
+ _ZN18QGLContextResource6insertEPK10QGLContextPv @ 296 NONAME
+ _ZN18QGLContextResource7cleanupEPK10QGLContextPv @ 297 NONAME
+ _ZN18QGLContextResourceC1EPFvPvE @ 298 NONAME
+ _ZN18QGLContextResourceC2EPFvPvE @ 299 NONAME
+ _ZN18QGLContextResourceD1Ev @ 300 NONAME
+ _ZN18QGLContextResourceD2Ev @ 301 NONAME
+ _ZN20QGLCustomShaderStage11setInactiveEv @ 302 NONAME
+ _ZN20QGLCustomShaderStage12setOnPainterEP8QPainter @ 303 NONAME
+ _ZN20QGLCustomShaderStage16setUniformsDirtyEv @ 304 NONAME
+ _ZN20QGLCustomShaderStage17removeFromPainterEP8QPainter @ 305 NONAME
+ _ZN20QGLCustomShaderStage9setSourceERK10QByteArray @ 306 NONAME
+ _ZN20QGLCustomShaderStageC1Ev @ 307 NONAME
+ _ZN20QGLCustomShaderStageC2Ev @ 308 NONAME
+ _ZN20QGLCustomShaderStageD0Ev @ 309 NONAME
+ _ZN20QGLCustomShaderStageD1Ev @ 310 NONAME
+ _ZN20QGLCustomShaderStageD2Ev @ 311 NONAME
+ _ZN20QGLFramebufferObject11bindDefaultEv @ 312 NONAME
+ _ZN20QGLFramebufferObject11drawTextureERK6QRectFjj @ 313 NONAME
+ _ZN20QGLFramebufferObject11drawTextureERK7QPointFjj @ 314 NONAME
+ _ZN20QGLFramebufferObject15blitFramebufferEPS_RK5QRectS0_S3_jj @ 315 NONAME
+ _ZN20QGLFramebufferObject24hasOpenGLFramebufferBlitEv @ 316 NONAME
+ _ZN20QGLFramebufferObject27hasOpenGLFramebufferObjectsEv @ 317 NONAME
+ _ZN20QGLFramebufferObject4bindEv @ 318 NONAME
+ _ZN20QGLFramebufferObject7releaseEv @ 319 NONAME
+ _ZN20QGLFramebufferObjectC1ERK5QSizeNS_10AttachmentEjj @ 320 NONAME
+ _ZN20QGLFramebufferObjectC1ERK5QSizeRK26QGLFramebufferObjectFormat @ 321 NONAME
+ _ZN20QGLFramebufferObjectC1ERK5QSizej @ 322 NONAME
+ _ZN20QGLFramebufferObjectC1EiiNS_10AttachmentEjj @ 323 NONAME
+ _ZN20QGLFramebufferObjectC1EiiRK26QGLFramebufferObjectFormat @ 324 NONAME
+ _ZN20QGLFramebufferObjectC1Eiij @ 325 NONAME
+ _ZN20QGLFramebufferObjectC2ERK5QSizeNS_10AttachmentEjj @ 326 NONAME
+ _ZN20QGLFramebufferObjectC2ERK5QSizeRK26QGLFramebufferObjectFormat @ 327 NONAME
+ _ZN20QGLFramebufferObjectC2ERK5QSizej @ 328 NONAME
+ _ZN20QGLFramebufferObjectC2EiiNS_10AttachmentEjj @ 329 NONAME
+ _ZN20QGLFramebufferObjectC2EiiRK26QGLFramebufferObjectFormat @ 330 NONAME
+ _ZN20QGLFramebufferObjectC2Eiij @ 331 NONAME
+ _ZN20QGLFramebufferObjectD0Ev @ 332 NONAME
+ _ZN20QGLFramebufferObjectD1Ev @ 333 NONAME
+ _ZN20QGLFramebufferObjectD2Ev @ 334 NONAME
+ _ZN20QGLTextureGlyphCache11fillTextureERKN18QTextureGlyphCache5CoordEj @ 335 NONAME
+ _ZN20QGLTextureGlyphCache11qt_metacallEN11QMetaObject4CallEiPPv @ 336 NONAME
+ _ZN20QGLTextureGlyphCache11qt_metacastEPKc @ 337 NONAME
+ _ZN20QGLTextureGlyphCache16staticMetaObjectE @ 338 NONAME DATA 16
+ _ZN20QGLTextureGlyphCache17createTextureDataEii @ 339 NONAME
+ _ZN20QGLTextureGlyphCache17resizeTextureDataEii @ 340 NONAME
+ _ZN20QGLTextureGlyphCache19getStaticMetaObjectEv @ 341 NONAME
+ _ZN20QGLTextureGlyphCacheC1EP10QGLContextN21QFontEngineGlyphCache4TypeERK10QTransform @ 342 NONAME
+ _ZN20QGLTextureGlyphCacheC2EP10QGLContextN21QFontEngineGlyphCache4TypeERK10QTransform @ 343 NONAME
+ _ZN20QGLTextureGlyphCacheD0Ev @ 344 NONAME
+ _ZN20QGLTextureGlyphCacheD1Ev @ 345 NONAME
+ _ZN20QGLTextureGlyphCacheD2Ev @ 346 NONAME
+ _ZN21QGraphicsShaderEffect11qt_metacallEN11QMetaObject4CallEiPPv @ 347 NONAME
+ _ZN21QGraphicsShaderEffect11qt_metacastEPKc @ 348 NONAME
+ _ZN21QGraphicsShaderEffect11setUniformsEP16QGLShaderProgram @ 349 NONAME
+ _ZN21QGraphicsShaderEffect16setUniformsDirtyEv @ 350 NONAME
+ _ZN21QGraphicsShaderEffect16staticMetaObjectE @ 351 NONAME DATA 16
+ _ZN21QGraphicsShaderEffect19getStaticMetaObjectEv @ 352 NONAME
+ _ZN21QGraphicsShaderEffect22setPixelShaderFragmentERK10QByteArray @ 353 NONAME
+ _ZN21QGraphicsShaderEffect4drawEP8QPainter @ 354 NONAME
+ _ZN21QGraphicsShaderEffectC1EP7QObject @ 355 NONAME
+ _ZN21QGraphicsShaderEffectC2EP7QObject @ 356 NONAME
+ _ZN21QGraphicsShaderEffectD0Ev @ 357 NONAME
+ _ZN21QGraphicsShaderEffectD1Ev @ 358 NONAME
+ _ZN21QGraphicsShaderEffectD2Ev @ 359 NONAME
+ _ZN22QGLEngineShaderManager11blitProgramEv @ 360 NONAME
+ _ZN22QGLEngineShaderManager11qt_metacallEN11QMetaObject4CallEiPPv @ 361 NONAME
+ _ZN22QGLEngineShaderManager11qt_metacastEPKc @ 362 NONAME
+ _ZN22QGLEngineShaderManager11setMaskTypeENS_8MaskTypeE @ 363 NONAME
+ _ZN22QGLEngineShaderManager13simpleProgramEv @ 364 NONAME
+ _ZN22QGLEngineShaderManager14currentProgramEv @ 365 NONAME
+ _ZN22QGLEngineShaderManager14setCustomStageEP20QGLCustomShaderStage @ 366 NONAME
+ _ZN22QGLEngineShaderManager14setOpacityModeENS_11OpacityModeE @ 367 NONAME
+ _ZN22QGLEngineShaderManager14useBlitProgramEv @ 368 NONAME
+ _ZN22QGLEngineShaderManager15setSrcPixelTypeEN2Qt10BrushStyleE @ 369 NONAME
+ _ZN22QGLEngineShaderManager15setSrcPixelTypeENS_12PixelSrcTypeE @ 370 NONAME
+ _ZN22QGLEngineShaderManager16staticMetaObjectE @ 371 NONAME DATA 16
+ _ZN22QGLEngineShaderManager16useSimpleProgramEv @ 372 NONAME
+ _ZN22QGLEngineShaderManager17removeCustomStageEv @ 373 NONAME
+ _ZN22QGLEngineShaderManager18getUniformLocationENS_7UniformE @ 374 NONAME
+ _ZN22QGLEngineShaderManager18setCompositionModeEN8QPainter15CompositionModeE @ 375 NONAME
+ _ZN22QGLEngineShaderManager19getStaticMetaObjectEv @ 376 NONAME
+ _ZN22QGLEngineShaderManager20useCorrectShaderProgEv @ 377 NONAME
+ _ZN22QGLEngineShaderManager25optimiseForBrushTransformEN10QTransform18TransformationTypeE @ 378 NONAME
+ _ZN22QGLEngineShaderManager8setDirtyEv @ 379 NONAME
+ _ZN22QGLEngineShaderManagerC1EP10QGLContext @ 380 NONAME
+ _ZN22QGLEngineShaderManagerC2EP10QGLContext @ 381 NONAME
+ _ZN22QGLEngineShaderManagerD0Ev @ 382 NONAME
+ _ZN22QGLEngineShaderManagerD1Ev @ 383 NONAME
+ _ZN22QGLEngineShaderManagerD2Ev @ 384 NONAME
+ _ZN22QGLSharedResourceGuard10setContextEPK10QGLContext @ 385 NONAME
+ _ZN22QGLSharedResourceGuardD1Ev @ 386 NONAME
+ _ZN22QGLSharedResourceGuardD2Ev @ 387 NONAME
+ _ZN26QGLFramebufferObjectFormat10setSamplesEi @ 388 NONAME
+ _ZN26QGLFramebufferObjectFormat13setAttachmentEN20QGLFramebufferObject10AttachmentE @ 389 NONAME
+ _ZN26QGLFramebufferObjectFormat16setTextureTargetEj @ 390 NONAME
+ _ZN26QGLFramebufferObjectFormat24setInternalTextureFormatEj @ 391 NONAME
+ _ZN26QGLFramebufferObjectFormat6detachEv @ 392 NONAME
+ _ZN26QGLFramebufferObjectFormatC1ERKS_ @ 393 NONAME
+ _ZN26QGLFramebufferObjectFormatC1Ev @ 394 NONAME
+ _ZN26QGLFramebufferObjectFormatC2ERKS_ @ 395 NONAME
+ _ZN26QGLFramebufferObjectFormatC2Ev @ 396 NONAME
+ _ZN26QGLFramebufferObjectFormatD1Ev @ 397 NONAME
+ _ZN26QGLFramebufferObjectFormatD2Ev @ 398 NONAME
+ _ZN26QGLFramebufferObjectFormataSERKS_ @ 399 NONAME
+ _ZN3QGL23setPreferredPaintEngineEN12QPaintEngine4TypeE @ 400 NONAME
+ _ZN9QGLBuffer15setUsagePatternENS_12UsagePatternE @ 401 NONAME
+ _ZN9QGLBuffer3mapENS_6AccessE @ 402 NONAME
+ _ZN9QGLBuffer4bindEv @ 403 NONAME
+ _ZN9QGLBuffer4readEiPvi @ 404 NONAME
+ _ZN9QGLBuffer5unmapEv @ 405 NONAME
+ _ZN9QGLBuffer5writeEiPKvi @ 406 NONAME
+ _ZN9QGLBuffer6createEv @ 407 NONAME
+ _ZN9QGLBuffer7destroyEv @ 408 NONAME
+ _ZN9QGLBuffer7releaseENS_4TypeE @ 409 NONAME
+ _ZN9QGLBuffer7releaseEv @ 410 NONAME
+ _ZN9QGLBuffer8allocateEPKvi @ 411 NONAME
+ _ZN9QGLBufferC1ENS_4TypeE @ 412 NONAME
+ _ZN9QGLBufferC1ERKS_ @ 413 NONAME
+ _ZN9QGLBufferC1Ev @ 414 NONAME
+ _ZN9QGLBufferC2ENS_4TypeE @ 415 NONAME
+ _ZN9QGLBufferC2ERKS_ @ 416 NONAME
+ _ZN9QGLBufferC2Ev @ 417 NONAME
+ _ZN9QGLBufferD1Ev @ 418 NONAME
+ _ZN9QGLBufferD2Ev @ 419 NONAME
+ _ZN9QGLBufferaSERKS_ @ 420 NONAME
+ _ZN9QGLFormat10setOverlayEb @ 421 NONAME
+ _ZN9QGLFormat10setProfileENS_20OpenGLContextProfileE @ 422 NONAME
+ _ZN9QGLFormat10setSamplesEi @ 423 NONAME
+ _ZN9QGLFormat10setStencilEb @ 424 NONAME
+ _ZN9QGLFormat10setVersionEii @ 425 NONAME
+ _ZN9QGLFormat13defaultFormatEv @ 426 NONAME
+ _ZN9QGLFormat15setDoubleBufferEb @ 427 NONAME
+ _ZN9QGLFormat15setSwapIntervalEi @ 428 NONAME
+ _ZN9QGLFormat16setDefaultFormatERKS_ @ 429 NONAME
+ _ZN9QGLFormat16setRedBufferSizeEi @ 430 NONAME
+ _ZN9QGLFormat16setSampleBuffersEb @ 431 NONAME
+ _ZN9QGLFormat17hasOpenGLOverlaysEv @ 432 NONAME
+ _ZN9QGLFormat17setBlueBufferSizeEi @ 433 NONAME
+ _ZN9QGLFormat18openGLVersionFlagsEv @ 434 NONAME
+ _ZN9QGLFormat18setAccumBufferSizeEi @ 435 NONAME
+ _ZN9QGLFormat18setAlphaBufferSizeEi @ 436 NONAME
+ _ZN9QGLFormat18setDepthBufferSizeEi @ 437 NONAME
+ _ZN9QGLFormat18setDirectRenderingEb @ 438 NONAME
+ _ZN9QGLFormat18setGreenBufferSizeEi @ 439 NONAME
+ _ZN9QGLFormat20defaultOverlayFormatEv @ 440 NONAME
+ _ZN9QGLFormat20setStencilBufferSizeEi @ 441 NONAME
+ _ZN9QGLFormat23setDefaultOverlayFormatERKS_ @ 442 NONAME
+ _ZN9QGLFormat6detachEv @ 443 NONAME
+ _ZN9QGLFormat7setRgbaEb @ 444 NONAME
+ _ZN9QGLFormat8setAccumEb @ 445 NONAME
+ _ZN9QGLFormat8setAlphaEb @ 446 NONAME
+ _ZN9QGLFormat8setDepthEb @ 447 NONAME
+ _ZN9QGLFormat8setPlaneEi @ 448 NONAME
+ _ZN9QGLFormat9hasOpenGLEv @ 449 NONAME
+ _ZN9QGLFormat9setOptionE6QFlagsIN3QGL12FormatOptionEE @ 450 NONAME
+ _ZN9QGLFormat9setStereoEb @ 451 NONAME
+ _ZN9QGLFormatC1E6QFlagsIN3QGL12FormatOptionEEi @ 452 NONAME
+ _ZN9QGLFormatC1ERKS_ @ 453 NONAME
+ _ZN9QGLFormatC1Ev @ 454 NONAME
+ _ZN9QGLFormatC2E6QFlagsIN3QGL12FormatOptionEEi @ 455 NONAME
+ _ZN9QGLFormatC2ERKS_ @ 456 NONAME
+ _ZN9QGLFormatC2Ev @ 457 NONAME
+ _ZN9QGLFormatD1Ev @ 458 NONAME
+ _ZN9QGLFormatD2Ev @ 459 NONAME
+ _ZN9QGLFormataSERKS_ @ 460 NONAME
+ _ZN9QGLShader11qt_metacallEN11QMetaObject4CallEiPPv @ 461 NONAME
+ _ZN9QGLShader11qt_metacastEPKc @ 462 NONAME
+ _ZN9QGLShader16hasOpenGLShadersE6QFlagsINS_13ShaderTypeBitEEPK10QGLContext @ 463 NONAME
+ _ZN9QGLShader16staticMetaObjectE @ 464 NONAME DATA 16
+ _ZN9QGLShader17compileSourceCodeEPKc @ 465 NONAME
+ _ZN9QGLShader17compileSourceCodeERK10QByteArray @ 466 NONAME
+ _ZN9QGLShader17compileSourceCodeERK7QString @ 467 NONAME
+ _ZN9QGLShader17compileSourceFileERK7QString @ 468 NONAME
+ _ZN9QGLShader19getStaticMetaObjectEv @ 469 NONAME
+ _ZN9QGLShaderC1E6QFlagsINS_13ShaderTypeBitEEP7QObject @ 470 NONAME
+ _ZN9QGLShaderC1E6QFlagsINS_13ShaderTypeBitEEPK10QGLContextP7QObject @ 471 NONAME
+ _ZN9QGLShaderC2E6QFlagsINS_13ShaderTypeBitEEP7QObject @ 472 NONAME
+ _ZN9QGLShaderC2E6QFlagsINS_13ShaderTypeBitEEPK10QGLContextP7QObject @ 473 NONAME
+ _ZN9QGLShaderD0Ev @ 474 NONAME
+ _ZN9QGLShaderD1Ev @ 475 NONAME
+ _ZN9QGLShaderD2Ev @ 476 NONAME
+ _ZN9QGLWidget10paintEventEP11QPaintEvent @ 477 NONAME
+ _ZN9QGLWidget10renderTextEdddRK7QStringRK5QFonti @ 478 NONAME
+ _ZN9QGLWidget10renderTextEiiRK7QStringRK5QFonti @ 479 NONAME
+ _ZN9QGLWidget10setContextEP10QGLContextPKS0_b @ 480 NONAME
+ _ZN9QGLWidget11bindTextureERK6QImageji @ 481 NONAME
+ _ZN9QGLWidget11bindTextureERK6QImageji6QFlagsIN10QGLContext10BindOptionEE @ 482 NONAME
+ _ZN9QGLWidget11bindTextureERK7QPixmapji @ 483 NONAME
+ _ZN9QGLWidget11bindTextureERK7QPixmapji6QFlagsIN10QGLContext10BindOptionEE @ 484 NONAME
+ _ZN9QGLWidget11bindTextureERK7QString @ 485 NONAME
+ _ZN9QGLWidget11doneCurrentEv @ 486 NONAME
+ _ZN9QGLWidget11drawTextureERK6QRectFjj @ 487 NONAME
+ _ZN9QGLWidget11drawTextureERK7QPointFjj @ 488 NONAME
+ _ZN9QGLWidget11makeCurrentEv @ 489 NONAME
+ _ZN9QGLWidget11qt_metacallEN11QMetaObject4CallEiPPv @ 490 NONAME
+ _ZN9QGLWidget11qt_metacastEPKc @ 491 NONAME
+ _ZN9QGLWidget11resizeEventEP12QResizeEvent @ 492 NONAME
+ _ZN9QGLWidget11setColormapERK11QGLColormap @ 493 NONAME
+ _ZN9QGLWidget11swapBuffersEv @ 494 NONAME
+ _ZN9QGLWidget12initializeGLEv @ 495 NONAME
+ _ZN9QGLWidget12renderPixmapEiib @ 496 NONAME
+ _ZN9QGLWidget13deleteTextureEj @ 497 NONAME
+ _ZN9QGLWidget14paintOverlayGLEv @ 498 NONAME
+ _ZN9QGLWidget15grabFrameBufferEb @ 499 NONAME
+ _ZN9QGLWidget15resizeOverlayGLEii @ 500 NONAME
+ _ZN9QGLWidget15updateOverlayGLEv @ 501 NONAME
+ _ZN9QGLWidget16setMouseTrackingEb @ 502 NONAME
+ _ZN9QGLWidget16staticMetaObjectE @ 503 NONAME DATA 16
+ _ZN9QGLWidget17convertToGLFormatERK6QImage @ 504 NONAME
+ _ZN9QGLWidget17setAutoBufferSwapEb @ 505 NONAME
+ _ZN9QGLWidget18makeOverlayCurrentEv @ 506 NONAME
+ _ZN9QGLWidget19fontDisplayListBaseERK5QFonti @ 507 NONAME
+ _ZN9QGLWidget19getStaticMetaObjectEv @ 508 NONAME
+ _ZN9QGLWidget19initializeOverlayGLEv @ 509 NONAME
+ _ZN9QGLWidget5eventEP6QEvent @ 510 NONAME
+ _ZN9QGLWidget6glDrawEv @ 511 NONAME
+ _ZN9QGLWidget6glInitEv @ 512 NONAME
+ _ZN9QGLWidget7paintGLEv @ 513 NONAME
+ _ZN9QGLWidget8resizeGLEii @ 514 NONAME
+ _ZN9QGLWidget8updateGLEv @ 515 NONAME
+ _ZN9QGLWidget9setFormatERK9QGLFormat @ 516 NONAME
+ _ZN9QGLWidgetC1EP10QGLContextP7QWidgetPKS_6QFlagsIN2Qt10WindowTypeEE @ 517 NONAME
+ _ZN9QGLWidgetC1EP7QWidgetPKS_6QFlagsIN2Qt10WindowTypeEE @ 518 NONAME
+ _ZN9QGLWidgetC1ERK9QGLFormatP7QWidgetPKS_6QFlagsIN2Qt10WindowTypeEE @ 519 NONAME
+ _ZN9QGLWidgetC2EP10QGLContextP7QWidgetPKS_6QFlagsIN2Qt10WindowTypeEE @ 520 NONAME
+ _ZN9QGLWidgetC2EP7QWidgetPKS_6QFlagsIN2Qt10WindowTypeEE @ 521 NONAME
+ _ZN9QGLWidgetC2ERK9QGLFormatP7QWidgetPKS_6QFlagsIN2Qt10WindowTypeEE @ 522 NONAME
+ _ZN9QGLWidgetD0Ev @ 523 NONAME
+ _ZN9QGLWidgetD1Ev @ 524 NONAME
+ _ZN9QGLWidgetD2Ev @ 525 NONAME
+ _ZNK10QGLContext10colorIndexERK6QColor @ 526 NONAME
+ _ZNK10QGLContext11initializedEv @ 527 NONAME
+ _ZNK10QGLContext11swapBuffersEv @ 528 NONAME
+ _ZNK10QGLContext13windowCreatedEv @ 529 NONAME
+ _ZNK10QGLContext14deviceIsPixmapEv @ 530 NONAME
+ _ZNK10QGLContext14getProcAddressERK7QString @ 531 NONAME
+ _ZNK10QGLContext15requestedFormatEv @ 532 NONAME
+ _ZNK10QGLContext23overlayTransparentColorEv @ 533 NONAME
+ _ZNK10QGLContext6deviceEv @ 534 NONAME
+ _ZNK10QGLContext6formatEv @ 535 NONAME
+ _ZNK10QGLContext7isValidEv @ 536 NONAME
+ _ZNK10QGLContext9isSharingEv @ 537 NONAME
+ _ZNK11QGLColormap10entryColorEi @ 538 NONAME
+ _ZNK11QGLColormap11findNearestEj @ 539 NONAME
+ _ZNK11QGLColormap4findEj @ 540 NONAME
+ _ZNK11QGLColormap4sizeEv @ 541 NONAME
+ _ZNK11QGLColormap7isEmptyEv @ 542 NONAME
+ _ZNK11QGLColormap8entryRgbEi @ 543 NONAME
+ _ZNK13QGLPixmapData11paintEngineEv @ 544 NONAME
+ _ZNK13QGLPixmapData13ensureCreatedEv @ 545 NONAME
+ _ZNK13QGLPixmapData14isValidContextEPK10QGLContext @ 546 NONAME
+ _ZNK13QGLPixmapData15hasAlphaChannelEv @ 547 NONAME
+ _ZNK13QGLPixmapData21copyBackFromRenderFboEb @ 548 NONAME
+ _ZNK13QGLPixmapData21useFramebufferObjectsEv @ 549 NONAME
+ _ZNK13QGLPixmapData26createCompatiblePixmapDataEv @ 550 NONAME
+ _ZNK13QGLPixmapData4bindEb @ 551 NONAME
+ _ZNK13QGLPixmapData6metricEN12QPaintDevice17PaintDeviceMetricE @ 552 NONAME
+ _ZNK13QGLPixmapData7isValidEv @ 553 NONAME
+ _ZNK13QGLPixmapData7textureEv @ 554 NONAME
+ _ZNK13QGLPixmapData7toImageEv @ 555 NONAME
+ _ZNK13QGLPixmapData8glDeviceEv @ 556 NONAME
+ _ZNK13QGLPixmapData9fillImageERK6QColor @ 557 NONAME
+ _ZNK14QGLPaintDevice14alphaRequestedEv @ 558 NONAME
+ _ZNK14QGLPaintDevice6formatEv @ 559 NONAME
+ _ZNK14QGLPaintDevice6metricEN12QPaintDevice17PaintDeviceMetricE @ 560 NONAME
+ _ZNK14QGLPixelBuffer11paintEngineEv @ 561 NONAME
+ _ZNK14QGLPixelBuffer20updateDynamicTextureEj @ 562 NONAME
+ _ZNK14QGLPixelBuffer22generateDynamicTextureEv @ 563 NONAME
+ _ZNK14QGLPixelBuffer4sizeEv @ 564 NONAME
+ _ZNK14QGLPixelBuffer6formatEv @ 565 NONAME
+ _ZNK14QGLPixelBuffer6handleEv @ 566 NONAME
+ _ZNK14QGLPixelBuffer6metricEN12QPaintDevice17PaintDeviceMetricE @ 567 NONAME
+ _ZNK14QGLPixelBuffer7isValidEv @ 568 NONAME
+ _ZNK14QGLPixelBuffer7toImageEv @ 569 NONAME
+ _ZNK14QGLSignalProxy10metaObjectEv @ 570 NONAME
+ _ZNK16QGLShaderProgram10metaObjectEv @ 571 NONAME
+ _ZNK16QGLShaderProgram15uniformLocationEPKc @ 572 NONAME
+ _ZNK16QGLShaderProgram15uniformLocationERK10QByteArray @ 573 NONAME
+ _ZNK16QGLShaderProgram15uniformLocationERK7QString @ 574 NONAME
+ _ZNK16QGLShaderProgram17attributeLocationEPKc @ 575 NONAME
+ _ZNK16QGLShaderProgram17attributeLocationERK10QByteArray @ 576 NONAME
+ _ZNK16QGLShaderProgram17attributeLocationERK7QString @ 577 NONAME
+ _ZNK16QGLShaderProgram17geometryInputTypeEv @ 578 NONAME
+ _ZNK16QGLShaderProgram18geometryOutputTypeEv @ 579 NONAME
+ _ZNK16QGLShaderProgram25geometryOutputVertexCountEv @ 580 NONAME
+ _ZNK16QGLShaderProgram25maxGeometryOutputVerticesEv @ 581 NONAME
+ _ZNK16QGLShaderProgram3logEv @ 582 NONAME
+ _ZNK16QGLShaderProgram7shadersEv @ 583 NONAME
+ _ZNK16QGLShaderProgram8isLinkedEv @ 584 NONAME
+ _ZNK16QGLShaderProgram9programIdEv @ 585 NONAME
+ _ZNK16QGLWindowSurface10metaObjectEv @ 586 NONAME
+ _ZNK16QGLWindowSurface7contextEv @ 587 NONAME
+ _ZNK17QGL2PaintEngineEx11createStateEP13QPainterState @ 588 NONAME
+ _ZNK17QGL2PaintEngineEx22isNativePaintingActiveEv @ 589 NONAME
+ _ZNK17QGLGraphicsSystem16createPixmapDataEN11QPixmapData9PixelTypeE @ 590 NONAME
+ _ZNK17QGLGraphicsSystem19createWindowSurfaceEP7QWidget @ 591 NONAME
+ _ZNK20QGLCustomShaderStage6sourceEv @ 592 NONAME
+ _ZNK20QGLFramebufferObject10attachmentEv @ 593 NONAME
+ _ZNK20QGLFramebufferObject11paintEngineEv @ 594 NONAME
+ _ZNK20QGLFramebufferObject4sizeEv @ 595 NONAME
+ _ZNK20QGLFramebufferObject6formatEv @ 596 NONAME
+ _ZNK20QGLFramebufferObject6handleEv @ 597 NONAME
+ _ZNK20QGLFramebufferObject6metricEN12QPaintDevice17PaintDeviceMetricE @ 598 NONAME
+ _ZNK20QGLFramebufferObject7isBoundEv @ 599 NONAME
+ _ZNK20QGLFramebufferObject7isValidEv @ 600 NONAME
+ _ZNK20QGLFramebufferObject7textureEv @ 601 NONAME
+ _ZNK20QGLFramebufferObject7toImageEv @ 602 NONAME
+ _ZNK20QGLTextureGlyphCache10metaObjectEv @ 603 NONAME
+ _ZNK20QGLTextureGlyphCache12glyphPaddingEv @ 604 NONAME
+ _ZNK21QGraphicsShaderEffect10metaObjectEv @ 605 NONAME
+ _ZNK21QGraphicsShaderEffect19pixelShaderFragmentEv @ 606 NONAME
+ _ZNK22QGLEngineShaderManager10metaObjectEv @ 607 NONAME
+ _ZNK26QGLFramebufferObjectFormat10attachmentEv @ 608 NONAME
+ _ZNK26QGLFramebufferObjectFormat13textureTargetEv @ 609 NONAME
+ _ZNK26QGLFramebufferObjectFormat21internalTextureFormatEv @ 610 NONAME
+ _ZNK26QGLFramebufferObjectFormat7samplesEv @ 611 NONAME
+ _ZNK26QGLFramebufferObjectFormateqERKS_ @ 612 NONAME
+ _ZNK26QGLFramebufferObjectFormatneERKS_ @ 613 NONAME
+ _ZNK9QGLBuffer12usagePatternEv @ 614 NONAME
+ _ZNK9QGLBuffer4sizeEv @ 615 NONAME
+ _ZNK9QGLBuffer4typeEv @ 616 NONAME
+ _ZNK9QGLBuffer8bufferIdEv @ 617 NONAME
+ _ZNK9QGLBuffer9isCreatedEv @ 618 NONAME
+ _ZNK9QGLFormat10testOptionE6QFlagsIN3QGL12FormatOptionEE @ 619 NONAME
+ _ZNK9QGLFormat12majorVersionEv @ 620 NONAME
+ _ZNK9QGLFormat12minorVersionEv @ 621 NONAME
+ _ZNK9QGLFormat12swapIntervalEv @ 622 NONAME
+ _ZNK9QGLFormat13redBufferSizeEv @ 623 NONAME
+ _ZNK9QGLFormat14blueBufferSizeEv @ 624 NONAME
+ _ZNK9QGLFormat15accumBufferSizeEv @ 625 NONAME
+ _ZNK9QGLFormat15alphaBufferSizeEv @ 626 NONAME
+ _ZNK9QGLFormat15depthBufferSizeEv @ 627 NONAME
+ _ZNK9QGLFormat15greenBufferSizeEv @ 628 NONAME
+ _ZNK9QGLFormat17stencilBufferSizeEv @ 629 NONAME
+ _ZNK9QGLFormat5planeEv @ 630 NONAME
+ _ZNK9QGLFormat7profileEv @ 631 NONAME
+ _ZNK9QGLFormat7samplesEv @ 632 NONAME
+ _ZNK9QGLShader10isCompiledEv @ 633 NONAME
+ _ZNK9QGLShader10metaObjectEv @ 634 NONAME
+ _ZNK9QGLShader10shaderTypeEv @ 635 NONAME
+ _ZNK9QGLShader10sourceCodeEv @ 636 NONAME
+ _ZNK9QGLShader3logEv @ 637 NONAME
+ _ZNK9QGLShader8shaderIdEv @ 638 NONAME
+ _ZNK9QGLWidget10metaObjectEv @ 639 NONAME
+ _ZNK9QGLWidget11paintEngineEv @ 640 NONAME
+ _ZNK9QGLWidget12doubleBufferEv @ 641 NONAME
+ _ZNK9QGLWidget13qglClearColorERK6QColor @ 642 NONAME
+ _ZNK9QGLWidget14autoBufferSwapEv @ 643 NONAME
+ _ZNK9QGLWidget14overlayContextEv @ 644 NONAME
+ _ZNK9QGLWidget6formatEv @ 645 NONAME
+ _ZNK9QGLWidget7contextEv @ 646 NONAME
+ _ZNK9QGLWidget7isValidEv @ 647 NONAME
+ _ZNK9QGLWidget8colormapEv @ 648 NONAME
+ _ZNK9QGLWidget8qglColorERK6QColor @ 649 NONAME
+ _ZNK9QGLWidget9isSharingEv @ 650 NONAME
+ _ZTI10QGLContext @ 651 NONAME
+ _ZTI13QGLPixmapData @ 652 NONAME
+ _ZTI14QGLPaintDevice @ 653 NONAME
+ _ZTI14QGLPixelBuffer @ 654 NONAME
+ _ZTI14QGLSignalProxy @ 655 NONAME
+ _ZTI16QGLShaderProgram @ 656 NONAME
+ _ZTI16QGLWindowSurface @ 657 NONAME
+ _ZTI17QGL2PaintEngineEx @ 658 NONAME
+ _ZTI17QGLGraphicsSystem @ 659 NONAME
+ _ZTI20QGLCustomShaderStage @ 660 NONAME
+ _ZTI20QGLFramebufferObject @ 661 NONAME
+ _ZTI20QGLTextureGlyphCache @ 662 NONAME
+ _ZTI21QGraphicsShaderEffect @ 663 NONAME
+ _ZTI22QGLEngineShaderManager @ 664 NONAME
+ _ZTI9QGLShader @ 665 NONAME
+ _ZTI9QGLWidget @ 666 NONAME
+ _ZTV10QGLContext @ 667 NONAME
+ _ZTV13QGLPixmapData @ 668 NONAME
+ _ZTV14QGLPaintDevice @ 669 NONAME
+ _ZTV14QGLPixelBuffer @ 670 NONAME
+ _ZTV14QGLSignalProxy @ 671 NONAME
+ _ZTV16QGLShaderProgram @ 672 NONAME
+ _ZTV16QGLWindowSurface @ 673 NONAME
+ _ZTV17QGL2PaintEngineEx @ 674 NONAME
+ _ZTV17QGLGraphicsSystem @ 675 NONAME
+ _ZTV20QGLCustomShaderStage @ 676 NONAME
+ _ZTV20QGLFramebufferObject @ 677 NONAME
+ _ZTV20QGLTextureGlyphCache @ 678 NONAME
+ _ZTV21QGraphicsShaderEffect @ 679 NONAME
+ _ZTV22QGLEngineShaderManager @ 680 NONAME
+ _ZTV9QGLShader @ 681 NONAME
+ _ZTV9QGLWidget @ 682 NONAME
+ _ZThn8_N16QGLWindowSurface10beginPaintERK7QRegion @ 683 NONAME
+ _ZThn8_N16QGLWindowSurface11paintDeviceEv @ 684 NONAME
+ _ZThn8_N16QGLWindowSurface11setGeometryERK5QRect @ 685 NONAME
+ _ZThn8_N16QGLWindowSurface5flushEP7QWidgetRK7QRegionRK6QPoint @ 686 NONAME
+ _ZThn8_N16QGLWindowSurface6bufferEPK7QWidget @ 687 NONAME
+ _ZThn8_N16QGLWindowSurface6scrollERK7QRegionii @ 688 NONAME
+ _ZThn8_N16QGLWindowSurface8endPaintERK7QRegion @ 689 NONAME
+ _ZThn8_N16QGLWindowSurfaceD0Ev @ 690 NONAME
+ _ZThn8_N16QGLWindowSurfaceD1Ev @ 691 NONAME
+ _ZThn8_N20QGLTextureGlyphCache11fillTextureERKN18QTextureGlyphCache5CoordEj @ 692 NONAME
+ _ZThn8_N20QGLTextureGlyphCache17createTextureDataEii @ 693 NONAME
+ _ZThn8_N20QGLTextureGlyphCache17resizeTextureDataEii @ 694 NONAME
+ _ZThn8_N20QGLTextureGlyphCacheD0Ev @ 695 NONAME
+ _ZThn8_N20QGLTextureGlyphCacheD1Ev @ 696 NONAME
+ _ZThn8_N9QGLWidgetD0Ev @ 697 NONAME
+ _ZThn8_N9QGLWidgetD1Ev @ 698 NONAME
+ _ZThn8_NK20QGLTextureGlyphCache12glyphPaddingEv @ 699 NONAME
+ _ZThn8_NK9QGLWidget11paintEngineEv @ 700 NONAME
+ _ZeqRK9QGLFormatS1_ @ 701 NONAME
+ _Zls6QDebugRK9QGLFormat @ 702 NONAME
+ _ZneRK9QGLFormatS1_ @ 703 NONAME
+
diff --git a/src/s60installs/s60installs.pro b/src/s60installs/s60installs.pro
index 9e1d582ea0..1f622c0d84 100644
--- a/src/s60installs/s60installs.pro
+++ b/src/s60installs/s60installs.pro
@@ -65,26 +65,36 @@ symbian: {
bearerStubZ = $${PWD}/qsymbianbearer.qtplugin
}
- qts60plugindeployment = \
- "IF package(0x20022E6D)" \
- " \"$$pluginLocations/qts60plugin_5_0$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_5_0$${QT_LIBINFIX}.dll\"" \
- " \"$$bearerPluginLocation/qsymbianbearer$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qsymbianbearer$${QT_LIBINFIX}.dll\"" \
- "ELSEIF package(0x1028315F)" \
- " \"$$pluginLocations/qts60plugin_5_0$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_5_0$${QT_LIBINFIX}.dll\"" \
- " \"$$bearerPluginLocation/qsymbianbearer$${QT_LIBINFIX}_3_2.dll\" - \"c:\\sys\\bin\\qsymbianbearer$${QT_LIBINFIX}.dll\"" \
- "ELSEIF package(0x102752AE)" \
- " \"$$pluginLocations/qts60plugin_3_2$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_3_2$${QT_LIBINFIX}.dll\"" \
- " \"$$bearerPluginLocation/qsymbianbearer$${QT_LIBINFIX}_3_2.dll\" - \"c:\\sys\\bin\\qsymbianbearer$${QT_LIBINFIX}.dll\"" \
- "ELSEIF package(0x102032BE)" \
- " \"$$pluginLocations/qts60plugin_3_1$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_3_1$${QT_LIBINFIX}.dll\"" \
- " \"$$bearerPluginLocation/qsymbianbearer$${QT_LIBINFIX}_3_1.dll\" - \"c:\\sys\\bin\\qsymbianbearer$${QT_LIBINFIX}.dll\"" \
- "ELSE" \
- " \"$$pluginLocations/qts60plugin_5_0$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_5_0$${QT_LIBINFIX}.dll\"" \
- " \"$$bearerPluginLocation/qsymbianbearer$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qsymbianbearer$${QT_LIBINFIX}.dll\"" \
- "ENDIF" \
- " \"$$bearerStubZ\" - \"c:$$replace(QT_PLUGINS_BASE_DIR,/,\\)\\bearer\\qsymbianbearer$${QT_LIBINFIX}.qtplugin\"
- qtlibraries.pkg_postrules += qts60plugindeployment
+ contains(S60_VERSION, 3.1)|contains(S60_VERSION, 3.2)|contains(S60_VERSION, 5.0) {
+ qts60plugindeployment = \
+ "IF package(0x20022E6D)" \
+ " \"$$pluginLocations/qts60plugin_5_0$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_5_0$${QT_LIBINFIX}.dll\"" \
+ " \"$$bearerPluginLocation/qsymbianbearer$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qsymbianbearer$${QT_LIBINFIX}.dll\"" \
+ "ELSEIF package(0x1028315F)" \
+ " \"$$pluginLocations/qts60plugin_5_0$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_5_0$${QT_LIBINFIX}.dll\"" \
+ " \"$$bearerPluginLocation/qsymbianbearer$${QT_LIBINFIX}_3_2.dll\" - \"c:\\sys\\bin\\qsymbianbearer$${QT_LIBINFIX}.dll\"" \
+ "ELSEIF package(0x102752AE)" \
+ " \"$$pluginLocations/qts60plugin_3_2$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_3_2$${QT_LIBINFIX}.dll\"" \
+ " \"$$bearerPluginLocation/qsymbianbearer$${QT_LIBINFIX}_3_2.dll\" - \"c:\\sys\\bin\\qsymbianbearer$${QT_LIBINFIX}.dll\"" \
+ "ELSEIF package(0x102032BE)" \
+ " \"$$pluginLocations/qts60plugin_3_1$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_3_1$${QT_LIBINFIX}.dll\"" \
+ " \"$$bearerPluginLocation/qsymbianbearer$${QT_LIBINFIX}_3_1.dll\" - \"c:\\sys\\bin\\qsymbianbearer$${QT_LIBINFIX}.dll\"" \
+ "ELSE" \
+ " \"$$pluginLocations/qts60plugin_5_0$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_5_0$${QT_LIBINFIX}.dll\"" \
+ " \"$$bearerPluginLocation/qsymbianbearer$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qsymbianbearer$${QT_LIBINFIX}.dll\"" \
+ "ENDIF" \
+ " \"$$bearerStubZ\" - \"c:$$replace(QT_PLUGINS_BASE_DIR,/,\\)\\bearer\\qsymbianbearer$${QT_LIBINFIX}.qtplugin\"
+ } else {
+ # No need to deploy plugins for older platform versions when building on Symbian3 or later
+ 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.path = c:$$QT_PLUGINS_BASE_DIR/bearer
+ DEPLOYMENT += bearer_plugin
+ }
+
+ qtlibraries.pkg_postrules += qts60plugindeployment
qtlibraries.path = c:/sys/bin
diff --git a/src/script/api/qscriptcontext.cpp b/src/script/api/qscriptcontext.cpp
index abaf5f9eb6..64610c784c 100644
--- a/src/script/api/qscriptcontext.cpp
+++ b/src/script/api/qscriptcontext.cpp
@@ -480,7 +480,7 @@ QScriptValue QScriptContext::activationObject() const
If \a activation is not an object, this function does nothing.
\note For a context corresponding to a JavaScript function, this is only
- guarenteed to work if there was an QScriptEngineAgent active on the
+ guaranteed to work if there was an QScriptEngineAgent active on the
engine while the function was evaluated.
*/
void QScriptContext::setActivationObject(const QScriptValue &activation)
diff --git a/src/testlib/qbenchmark.cpp b/src/testlib/qbenchmark.cpp
index c88ecb0320..c92a88a97c 100644
--- a/src/testlib/qbenchmark.cpp
+++ b/src/testlib/qbenchmark.cpp
@@ -165,7 +165,7 @@ void QBenchmarkTestMethodData::setResult(
}
// Test the result directly without calling the measurer if the minimum time
- // has been specifed on the command line with -minimumvalue.
+ // has been specified on the command line with -minimumvalue.
else if (QBenchmarkGlobalData::current->walltimeMinimum != -1)
accepted = (value > QBenchmarkGlobalData::current->walltimeMinimum);
else
diff --git a/tests/auto/declarative/qdeclarativeanimatedimage/tst_qdeclarativeanimatedimage.cpp b/tests/auto/declarative/qdeclarativeanimatedimage/tst_qdeclarativeanimatedimage.cpp
index 1001278735..da15a855e4 100644
--- a/tests/auto/declarative/qdeclarativeanimatedimage/tst_qdeclarativeanimatedimage.cpp
+++ b/tests/auto/declarative/qdeclarativeanimatedimage/tst_qdeclarativeanimatedimage.cpp
@@ -47,22 +47,13 @@
#include <private/qdeclarativeanimatedimage_p.h>
#include "../shared/testhttpserver.h"
+#include "../../../shared/util.h"
#ifdef Q_OS_SYMBIAN
// In Symbian OS test data is located in applications private dir
#define SRCDIR "."
#endif
-#define TRY_WAIT(expr) \
- do { \
- for (int ii = 0; ii < 6; ++ii) { \
- if ((expr)) break; \
- QTest::qWait(50); \
- } \
- QVERIFY((expr)); \
- } while (false)
-
-
class tst_qdeclarativeanimatedimage : public QObject
{
Q_OBJECT
@@ -152,14 +143,14 @@ void tst_qdeclarativeanimatedimage::remote()
QDeclarativeEngine engine;
QDeclarativeComponent component(&engine, QUrl("http://127.0.0.1:14449/" + fileName));
- TRY_WAIT(component.isReady());
+ QTRY_VERIFY(component.isReady());
QDeclarativeAnimatedImage *anim = qobject_cast<QDeclarativeAnimatedImage *>(component.create());
QVERIFY(anim);
- TRY_WAIT(anim->isPlaying());
+ QTRY_VERIFY(anim->isPlaying());
if (paused) {
- TRY_WAIT(anim->isPaused());
+ QTRY_VERIFY(anim->isPaused());
QCOMPARE(anim->currentFrame(), 2);
}
QVERIFY(anim->status() != QDeclarativeAnimatedImage::Error);
diff --git a/tests/auto/declarative/qdeclarativeborderimage/tst_qdeclarativeborderimage.cpp b/tests/auto/declarative/qdeclarativeborderimage/tst_qdeclarativeborderimage.cpp
index 1b73cf7ae8..c77d395ac7 100644
--- a/tests/auto/declarative/qdeclarativeborderimage/tst_qdeclarativeborderimage.cpp
+++ b/tests/auto/declarative/qdeclarativeborderimage/tst_qdeclarativeborderimage.cpp
@@ -53,6 +53,7 @@
#include <QtDeclarative/qdeclarativecontext.h>
#include "../shared/testhttpserver.h"
+#include "../../../shared/util.h"
#ifdef Q_OS_SYMBIAN
// In Symbian OS test data is located in applications private dir
@@ -62,16 +63,6 @@
#define SERVER_PORT 14446
#define SERVER_ADDR "http://127.0.0.1:14446"
-#define TRY_WAIT(expr) \
- do { \
- for (int ii = 0; ii < 60; ++ii) { \
- if ((expr)) break; \
- QTest::qWait(50); \
- } \
- QVERIFY((expr)); \
- } while (false)
-
-
class tst_qdeclarativeborderimage : public QObject
{
@@ -154,18 +145,18 @@ void tst_qdeclarativeborderimage::imageSource()
QVERIFY(obj != 0);
if (remote)
- TRY_WAIT(obj->status() == QDeclarativeBorderImage::Loading);
+ QTRY_VERIFY(obj->status() == QDeclarativeBorderImage::Loading);
QCOMPARE(obj->source(), remote ? source : QUrl(source));
if (error.isEmpty()) {
- TRY_WAIT(obj->status() == QDeclarativeBorderImage::Ready);
+ QTRY_VERIFY(obj->status() == QDeclarativeBorderImage::Ready);
QCOMPARE(obj->width(), 120.);
QCOMPARE(obj->height(), 120.);
QCOMPARE(obj->horizontalTileMode(), QDeclarativeBorderImage::Stretch);
QCOMPARE(obj->verticalTileMode(), QDeclarativeBorderImage::Stretch);
} else {
- TRY_WAIT(obj->status() == QDeclarativeBorderImage::Error);
+ QTRY_VERIFY(obj->status() == QDeclarativeBorderImage::Error);
}
delete obj;
@@ -273,14 +264,14 @@ void tst_qdeclarativeborderimage::sciSource()
QVERIFY(obj != 0);
if (remote)
- TRY_WAIT(obj->status() == QDeclarativeBorderImage::Loading);
+ QTRY_VERIFY(obj->status() == QDeclarativeBorderImage::Loading);
QCOMPARE(obj->source(), remote ? source : QUrl(source));
QCOMPARE(obj->width(), 300.);
QCOMPARE(obj->height(), 300.);
if (valid) {
- TRY_WAIT(obj->status() == QDeclarativeBorderImage::Ready);
+ QTRY_VERIFY(obj->status() == QDeclarativeBorderImage::Ready);
QCOMPARE(obj->border()->left(), 10);
QCOMPARE(obj->border()->top(), 20);
QCOMPARE(obj->border()->right(), 30);
@@ -288,7 +279,7 @@ void tst_qdeclarativeborderimage::sciSource()
QCOMPARE(obj->horizontalTileMode(), QDeclarativeBorderImage::Round);
QCOMPARE(obj->verticalTileMode(), QDeclarativeBorderImage::Repeat);
} else {
- TRY_WAIT(obj->status() == QDeclarativeBorderImage::Error);
+ QTRY_VERIFY(obj->status() == QDeclarativeBorderImage::Error);
}
delete obj;
diff --git a/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp b/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp
index 20ccccbb90..adba190390 100644
--- a/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp
+++ b/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp
@@ -279,7 +279,7 @@ void tst_QDeclarativeDebug::initTestCase()
qRegisterMetaType<QDeclarativeDebugWatch::State>();
QTest::ignoreMessage(QtWarningMsg, "QDeclarativeDebugServer: Waiting for connection on port 3768...");
- qputenv("QML_DEBUG_SERVER_PORT", "3768");
+
m_engine = new QDeclarativeEngine(this);
QList<QByteArray> qml;
@@ -891,6 +891,18 @@ void tst_QDeclarativeDebug::tst_QDeclarativeDebugPropertyReference()
compareProperties(r, ref);
}
-QTEST_MAIN(tst_QDeclarativeDebug)
+int main(int argc, char *argv[])
+{
+ int _argc = argc + 1;
+ char **_argv = new char*[_argc];
+ for (int i = 0; i < argc; ++i)
+ _argv[i] = argv[i];
+ _argv[_argc - 1] = "-qmljsdebugger=port:3768";
+
+ QApplication app(_argc, _argv);
+ tst_QDeclarativeDebug tc;
+ return QTest::qExec(&tc, _argc, _argv);
+ delete _argv;
+}
#include "tst_qdeclarativedebug.moc"
diff --git a/tests/auto/declarative/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp b/tests/auto/declarative/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp
index a19c2c24fb..7db0e60014 100644
--- a/tests/auto/declarative/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp
+++ b/tests/auto/declarative/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp
@@ -76,7 +76,6 @@ void tst_QDeclarativeDebugClient::initTestCase()
{
QTest::ignoreMessage(QtWarningMsg, "QDeclarativeDebugServer: Waiting for connection on port 3770...");
- qputenv("QML_DEBUG_SERVER_PORT", "3770");
new QDeclarativeEngine(this);
m_conn = new QDeclarativeDebugConnection(this);
@@ -151,7 +150,19 @@ void tst_QDeclarativeDebugClient::sendMessage()
QCOMPARE(resp, msg);
}
-QTEST_MAIN(tst_QDeclarativeDebugClient)
+int main(int argc, char *argv[])
+{
+ int _argc = argc + 1;
+ char **_argv = new char*[_argc];
+ for (int i = 0; i < argc; ++i)
+ _argv[i] = argv[i];
+ _argv[_argc - 1] = "-qmljsdebugger=port:3770";
+
+ QApplication app(_argc, _argv);
+ tst_QDeclarativeDebugClient tc;
+ return QTest::qExec(&tc, _argc, _argv);
+ delete _argv;
+}
#include "tst_qdeclarativedebugclient.moc"
diff --git a/tests/auto/declarative/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp b/tests/auto/declarative/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp
index 9ebbbaf7a0..4683199e38 100644
--- a/tests/auto/declarative/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp
+++ b/tests/auto/declarative/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp
@@ -77,7 +77,6 @@ private slots:
void tst_QDeclarativeDebugService::initTestCase()
{
QTest::ignoreMessage(QtWarningMsg, "QDeclarativeDebugServer: Waiting for connection on port 3769...");
- qputenv("QML_DEBUG_SERVER_PORT", "3769");
new QDeclarativeEngine(this);
m_conn = new QDeclarativeDebugConnection(this);
@@ -184,6 +183,19 @@ void tst_QDeclarativeDebugService::objectToString()
delete obj;
}
-QTEST_MAIN(tst_QDeclarativeDebugService)
+
+int main(int argc, char *argv[])
+{
+ int _argc = argc + 1;
+ char **_argv = new char*[_argc];
+ for (int i = 0; i < argc; ++i)
+ _argv[i] = argv[i];
+ _argv[_argc - 1] = "-qmljsdebugger=port:3769";
+
+ QApplication app(_argc, _argv);
+ tst_QDeclarativeDebugService tc;
+ return QTest::qExec(&tc, _argc, _argv);
+ delete _argv;
+}
#include "tst_qdeclarativedebugservice.moc"
diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
index 33bf7ea589..c10a110985 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
+++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
@@ -52,6 +52,7 @@
#include <private/qdeclarativeglobalscriptclass_p.h>
#include "testtypes.h"
#include "testhttpserver.h"
+#include "../../../shared/util.h"
#ifdef Q_OS_SYMBIAN
// In Symbian OS test data is located in applications private dir
@@ -2416,15 +2417,6 @@ void tst_qdeclarativeecmascript::function()
delete o;
}
-#define TRY_WAIT(expr) \
- do { \
- for (int ii = 0; ii < 6; ++ii) { \
- if ((expr)) break; \
- QTest::qWait(50); \
- } \
- QVERIFY((expr)); \
- } while (false)
-
// Test the "Qt.include" method
void tst_qdeclarativeecmascript::include()
{
@@ -2496,8 +2488,8 @@ void tst_qdeclarativeecmascript::include()
QObject *o = component.create();
QVERIFY(o != 0);
- TRY_WAIT(o->property("done").toBool() == true);
- TRY_WAIT(o->property("done2").toBool() == true);
+ QTRY_VERIFY(o->property("done").toBool() == true);
+ QTRY_VERIFY(o->property("done2").toBool() == true);
QCOMPARE(o->property("test1").toBool(), true);
QCOMPARE(o->property("test2").toBool(), true);
@@ -2524,7 +2516,7 @@ void tst_qdeclarativeecmascript::include()
QObject *o = component.create();
QVERIFY(o != 0);
- TRY_WAIT(o->property("done").toBool() == true);
+ QTRY_VERIFY(o->property("done").toBool() == true);
QCOMPARE(o->property("test1").toBool(), true);
QCOMPARE(o->property("test2").toBool(), true);
diff --git a/tests/auto/declarative/qdeclarativefontloader/data/daniel.ttf b/tests/auto/declarative/qdeclarativefontloader/data/daniel.ttf
new file mode 100644
index 0000000000..aae50d5035
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativefontloader/data/daniel.ttf
Binary files differ
diff --git a/tests/auto/declarative/qdeclarativefontloader/tst_qdeclarativefontloader.cpp b/tests/auto/declarative/qdeclarativefontloader/tst_qdeclarativefontloader.cpp
index ae23017bdf..87654267ab 100644
--- a/tests/auto/declarative/qdeclarativefontloader/tst_qdeclarativefontloader.cpp
+++ b/tests/auto/declarative/qdeclarativefontloader/tst_qdeclarativefontloader.cpp
@@ -39,8 +39,10 @@
**
****************************************************************************/
#include <qtest.h>
+#include <QtTest/QSignalSpy>
#include <QtDeclarative/qdeclarativeengine.h>
#include <QtDeclarative/qdeclarativecomponent.h>
+#include <QtDeclarative/qdeclarativecontext.h>
#include <private/qdeclarativefontloader_p.h>
#include "../../../shared/util.h"
#include "../shared/testhttpserver.h"
@@ -67,6 +69,7 @@ private slots:
void webFont();
void redirWebFont();
void failWebFont();
+ void changeFont();
private slots:
@@ -181,6 +184,45 @@ void tst_qdeclarativefontloader::failWebFont()
QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Error);
}
+void tst_qdeclarativefontloader::changeFont()
+{
+ QString componentStr = "import Qt 4.7\nFontLoader { source: font }";
+ QDeclarativeContext *ctxt = engine.rootContext();
+ ctxt->setContextProperty("font", QUrl::fromLocalFile(SRCDIR "/data/tarzeau_ocr_a.ttf"));
+ QDeclarativeComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QDeclarativeFontLoader *fontObject = qobject_cast<QDeclarativeFontLoader*>(component.create());
+
+ QVERIFY(fontObject != 0);
+
+ QSignalSpy nameSpy(fontObject, SIGNAL(nameChanged()));
+ QSignalSpy statusSpy(fontObject, SIGNAL(statusChanged()));
+
+ QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Ready);
+ QCOMPARE(nameSpy.count(), 0);
+ QCOMPARE(statusSpy.count(), 0);
+ QTRY_COMPARE(fontObject->name(), QString("OCRA"));
+
+ ctxt->setContextProperty("font", "http://localhost:14448/daniel.ttf");
+ QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Loading);
+ QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Ready);
+ QCOMPARE(nameSpy.count(), 1);
+ QCOMPARE(statusSpy.count(), 2);
+ QTRY_COMPARE(fontObject->name(), QString("Daniel"));
+
+ ctxt->setContextProperty("font", QUrl::fromLocalFile(SRCDIR "/data/tarzeau_ocr_a.ttf"));
+ QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Ready);
+ QCOMPARE(nameSpy.count(), 2);
+ QCOMPARE(statusSpy.count(), 2);
+ QTRY_COMPARE(fontObject->name(), QString("OCRA"));
+
+ ctxt->setContextProperty("font", "http://localhost:14448/daniel.ttf");
+ QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Ready);
+ QCOMPARE(nameSpy.count(), 3);
+ QCOMPARE(statusSpy.count(), 2);
+ QTRY_COMPARE(fontObject->name(), QString("Daniel"));
+}
+
QTEST_MAIN(tst_qdeclarativefontloader)
#include "tst_qdeclarativefontloader.moc"
diff --git a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp
index d4d8bf6e80..5fd373cad4 100644
--- a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp
+++ b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp
@@ -604,6 +604,8 @@ void tst_QDeclarativeGridView::currentIndex()
// no wrap
gridview->setCurrentIndex(0);
QCOMPARE(gridview->currentIndex(), 0);
+ // confirm that the velocity is updated
+ QTRY_VERIFY(gridview->verticalVelocity() != 0.0);
gridview->moveCurrentIndexUp();
QCOMPARE(gridview->currentIndex(), 0);
diff --git a/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp b/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp
index d0afc8a688..d38160d28f 100644
--- a/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp
+++ b/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp
@@ -45,26 +45,15 @@
#include <private/qdeclarativeimage_p.h>
#include <QImageReader>
#include <QWaitCondition>
+#include "../../../shared/util.h"
#ifdef Q_OS_SYMBIAN
// In Symbian OS test data is located in applications private dir
#define SRCDIR "."
#endif
-// QDeclarativeImageProvider::request() is run in an idle thread where possible
-// Be generous in our timeout.
-#define TRY_WAIT(expr) \
- do { \
- for (int ii = 0; ii < 10; ++ii) { \
- if ((expr)) break; \
- QTest::qWait(100); \
- } \
- QVERIFY((expr)); \
- } while (false)
-
Q_DECLARE_METATYPE(QDeclarativeImageProvider*);
-
class tst_qdeclarativeimageprovider : public QObject
{
Q_OBJECT
@@ -212,13 +201,13 @@ void tst_qdeclarativeimageprovider::runTest(bool async, QDeclarativeImageProvide
QVERIFY(obj != 0);
if (async)
- TRY_WAIT(obj->status() == QDeclarativeImage::Loading);
+ QTRY_VERIFY(obj->status() == QDeclarativeImage::Loading);
QCOMPARE(obj->source(), QUrl(source));
if (error.isEmpty()) {
if (async)
- TRY_WAIT(obj->status() == QDeclarativeImage::Ready);
+ QTRY_VERIFY(obj->status() == QDeclarativeImage::Ready);
else
QVERIFY(obj->status() == QDeclarativeImage::Ready);
QCOMPARE(obj->width(), qreal(size.width()));
@@ -229,7 +218,7 @@ void tst_qdeclarativeimageprovider::runTest(bool async, QDeclarativeImageProvide
QCOMPARE(obj->progress(), 1.0);
} else {
if (async)
- TRY_WAIT(obj->status() == QDeclarativeImage::Error);
+ QTRY_VERIFY(obj->status() == QDeclarativeImage::Error);
else
QVERIFY(obj->status() == QDeclarativeImage::Error);
}
@@ -391,7 +380,7 @@ void tst_qdeclarativeimageprovider::threadTest()
provider->cond.wakeAll();
QTest::qWait(250);
foreach(QDeclarativeImage *img, images) {
- TRY_WAIT(img->status() == QDeclarativeImage::Ready);
+ QTRY_VERIFY(img->status() == QDeclarativeImage::Ready);
}
}
diff --git a/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp b/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp
index 10805b44c7..f4567788c6 100644
--- a/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp
+++ b/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp
@@ -49,6 +49,7 @@
#include <QtCore/qtimer.h>
#include <QtCore/qdebug.h>
#include <QtCore/qtranslator.h>
+#include <QSignalSpy>
#include "../../../shared/util.h"
@@ -57,6 +58,8 @@
#define SRCDIR "."
#endif
+Q_DECLARE_METATYPE(QList<int>)
+
class tst_qdeclarativelistmodel : public QObject
{
Q_OBJECT
@@ -64,6 +67,7 @@ public:
tst_qdeclarativelistmodel() {}
private:
+ int roleFromName(const QDeclarativeListModel *model, const QString &roleName);
QScriptValue nestedListValue(QScriptEngine *eng) const;
QDeclarativeItem *createWorkerTest(QDeclarativeEngine *eng, QDeclarativeComponent *component, QDeclarativeListModel *model);
void waitForWorker(QDeclarativeItem *item);
@@ -78,6 +82,8 @@ private slots:
void dynamic();
void dynamic_worker_data();
void dynamic_worker();
+ void dynamic_worker_sync_data();
+ void dynamic_worker_sync();
void convertNestedToFlat_fail();
void convertNestedToFlat_fail_data();
void convertNestedToFlat_ok();
@@ -86,7 +92,23 @@ private slots:
void error_data();
void error();
void set();
+ void get();
+ void get_data();
+ void get_worker();
+ void get_worker_data();
+ void get_nested();
+ void get_nested_data();
};
+int tst_qdeclarativelistmodel::roleFromName(const QDeclarativeListModel *model, const QString &roleName)
+{
+ QList<int> roles = model->roles();
+ for (int i=0; i<roles.count(); i++) {
+ if (model->toString(roles[i]) == roleName)
+ return roles[i];
+ }
+ Q_ASSERT(false);
+ return -1;
+}
QScriptValue tst_qdeclarativelistmodel::nestedListValue(QScriptEngine *eng) const
{
@@ -196,6 +218,10 @@ void tst_qdeclarativelistmodel::dynamic_data()
QTest::newRow("get1") << "{get(0) === undefined}" << 1 << "";
QTest::newRow("get2") << "{get(-1) === undefined}" << 1 << "";
QTest::newRow("get3") << "{append({'foo':123});get(0) != undefined}" << 1 << "";
+ QTest::newRow("get4") << "{append({'foo':123});get(0).foo}" << 123 << "";
+
+ QTest::newRow("get-modify1") << "{append({'foo':123,'bar':456});get(0).foo = 333;get(0).foo}" << 333 << "";
+ QTest::newRow("get-modify2") << "{append({'z':1});append({'foo':123,'bar':456});get(1).bar = 999;get(1).bar}" << 999 << "";
QTest::newRow("append1") << "{append({'foo':123});count}" << 1 << "";
QTest::newRow("append2") << "{append({'foo':123,'bar':456});count}" << 1 << "";
@@ -310,8 +336,12 @@ void tst_qdeclarativelistmodel::dynamic_worker()
QFETCH(int, result);
QFETCH(QString, warning);
+ if (QByteArray(QTest::currentDataTag()).startsWith("nested"))
+ return;
+
// This is same as dynamic() except it applies the test to a ListModel called
- // from a WorkerScript (i.e. testing the internal NestedListModel class)
+ // from a WorkerScript (i.e. testing the internal FlatListModel that is created
+ // by the WorkerListModelAgent)
QDeclarativeListModel model;
QDeclarativeEngine eng;
@@ -330,27 +360,62 @@ void tst_qdeclarativelistmodel::dynamic_worker()
if (!warning.isEmpty())
QTest::ignoreMessage(QtWarningMsg, warning.toLatin1());
- if (operations.count() == 1) {
- // test count(), get() return the correct default values in the worker list model
- QVERIFY(QMetaObject::invokeMethod(item, "evalExpressionViaWorker",
- Q_ARG(QVariant, operations)));
- waitForWorker(item);
- QCOMPARE(QDeclarativeProperty(item, "result").read().toInt(), result);
- } else {
- // execute a set of commands on the worker list model, then check the
- // changes are reflected in the list model in the main thread
- if (QByteArray(QTest::currentDataTag()).startsWith("nested"))
- QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: QML ListModel: Cannot add nested list values when modifying or after modification from a worker script");
-
- QVERIFY(QMetaObject::invokeMethod(item, "evalExpressionViaWorker",
- Q_ARG(QVariant, operations.mid(0, operations.length()-1))));
- waitForWorker(item);
-
- QDeclarativeExpression e(eng.rootContext(), &model, operations.last().toString());
- if (!QByteArray(QTest::currentDataTag()).startsWith("nested"))
- QCOMPARE(e.evaluate().toInt(), result);
+ QVERIFY(QMetaObject::invokeMethod(item, "evalExpressionViaWorker",
+ Q_ARG(QVariant, operations)));
+ waitForWorker(item);
+ QCOMPARE(QDeclarativeProperty(item, "result").read().toInt(), result);
+
+ delete item;
+ qApp->processEvents();
+}
+
+
+
+void tst_qdeclarativelistmodel::dynamic_worker_sync_data()
+{
+ dynamic_data();
+}
+
+void tst_qdeclarativelistmodel::dynamic_worker_sync()
+{
+ QFETCH(QString, script);
+ QFETCH(int, result);
+ QFETCH(QString, warning);
+
+ // This is the same as dynamic_worker() except that it executes a set of list operations
+ // from the worker script, calls sync(), and tests the changes are reflected in the
+ // list in the main thread
+
+ QDeclarativeListModel model;
+ QDeclarativeEngine eng;
+ QDeclarativeComponent component(&eng, QUrl::fromLocalFile(SRCDIR "/data/model.qml"));
+ QDeclarativeItem *item = createWorkerTest(&eng, &component, &model);
+ QVERIFY(item != 0);
+
+ if (script[0] == QLatin1Char('{') && script[script.length()-1] == QLatin1Char('}'))
+ script = script.mid(1, script.length() - 2);
+ QVariantList operations;
+ foreach (const QString &s, script.split(';')) {
+ if (!s.isEmpty())
+ operations << s;
}
+ if (!warning.isEmpty())
+ QTest::ignoreMessage(QtWarningMsg, warning.toLatin1());
+
+ // execute a set of commands on the worker list model, then check the
+ // changes are reflected in the list model in the main thread
+ if (QByteArray(QTest::currentDataTag()).startsWith("nested"))
+ QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: QML ListModel: Cannot add list-type data when modifying or after modification from a worker script");
+
+ QVERIFY(QMetaObject::invokeMethod(item, "evalExpressionViaWorker",
+ Q_ARG(QVariant, operations.mid(0, operations.length()-1))));
+ waitForWorker(item);
+
+ QDeclarativeExpression e(eng.rootContext(), &model, operations.last().toString());
+ if (!QByteArray(QTest::currentDataTag()).startsWith("nested"))
+ QCOMPARE(e.evaluate().toInt(), result);
+
delete item;
qApp->processEvents();
}
@@ -374,7 +439,7 @@ void tst_qdeclarativelistmodel::convertNestedToFlat_fail()
model.append(nestedListValue(&s_eng));
QCOMPARE(model.count(), 2);
- QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: QML ListModel: List contains nested list values and cannot be used from a worker script");
+ QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: QML ListModel: List contains list-type data and cannot be used from a worker script");
QVERIFY(QMetaObject::invokeMethod(item, "evalExpressionViaWorker", Q_ARG(QVariant, script)));
waitForWorker(item);
@@ -426,7 +491,7 @@ void tst_qdeclarativelistmodel::convertNestedToFlat_ok()
QCOMPARE(model.count(), count+1);
QScriptValue nested = nestedListValue(&s_eng);
- const char *warning = "<Unknown File>: QML ListModel: Cannot add nested list values when modifying or after modification from a worker script";
+ const char *warning = "<Unknown File>: QML ListModel: Cannot add list-type data when modifying or after modification from a worker script";
QTest::ignoreMessage(QtWarningMsg, warning);
model.append(nested);
@@ -595,6 +660,9 @@ void tst_qdeclarativelistmodel::error()
}
}
+/*
+ Test model changes from set() are available to the view
+*/
void tst_qdeclarativelistmodel::set()
{
QDeclarativeEngine engine;
@@ -618,6 +686,205 @@ void tst_qdeclarativelistmodel::set()
QCOMPARE(model.data(0, model.roles()[0]), qVariantFromValue(false));
}
+/*
+ Test model changes on values returned by get() are available to the view
+*/
+void tst_qdeclarativelistmodel::get()
+{
+ QFETCH(QString, expression);
+ QFETCH(int, index);
+ QFETCH(QString, roleName);
+ QFETCH(QVariant, roleValue);
+
+ QDeclarativeEngine eng;
+ QDeclarativeComponent component(&eng);
+ component.setData(
+ "import Qt 4.7\n"
+ "ListModel { \n"
+ "ListElement { roleA: 100 }\n"
+ "ListElement { roleA: 200; roleB: 400 } \n"
+ "ListElement { roleA: 200; roleB: 400 } \n"
+ "}", QUrl());
+ QDeclarativeListModel *model = qobject_cast<QDeclarativeListModel*>(component.create());
+ int role = roleFromName(model, roleName);
+
+ QSignalSpy spy(model, SIGNAL(itemsChanged(int, int, QList<int>)));
+ QDeclarativeExpression expr(eng.rootContext(), model, expression);
+ expr.evaluate();
+ QVERIFY(!expr.hasError());
+
+ QCOMPARE(model->data(index, role), roleValue);
+ QCOMPARE(spy.count(), 1);
+
+ QList<QVariant> spyResult = spy.takeFirst();
+ QCOMPARE(spyResult.at(0).toInt(), index);
+ QCOMPARE(spyResult.at(1).toInt(), 1); // only 1 item is modified at a time
+ QCOMPARE(spyResult.at(2).value<QList<int> >(), (QList<int>() << role));
+}
+
+void tst_qdeclarativelistmodel::get_data()
+{
+ QTest::addColumn<QString>("expression");
+ QTest::addColumn<int>("index");
+ QTest::addColumn<QString>("roleName");
+ QTest::addColumn<QVariant>("roleValue");
+
+ QTest::newRow("simple value") << "get(0).roleA = 500" << 0 << "roleA" << QVariant(500);
+ QTest::newRow("simple value 2") << "get(1).roleB = 500" << 1 << "roleB" << QVariant(500);
+
+ QVariantMap map;
+ map["zzz"] = 123;
+ QTest::newRow("object value") << "get(1).roleB = {'zzz':123}" << 1 << "roleB" << QVariant::fromValue(map);
+
+ QVariantList list;
+ map.clear(); map["a"] = 50; map["b"] = 500;
+ list << map;
+ map.clear(); map["c"] = 1000;
+ list << map;
+ QTest::newRow("list of objects") << "get(2).roleB = [{'a': 50, 'b': 500}, {'c': 1000}]" << 2 << "roleB" << QVariant::fromValue(list);
+}
+
+void tst_qdeclarativelistmodel::get_worker()
+{
+ QFETCH(QString, expression);
+ QFETCH(int, index);
+ QFETCH(QString, roleName);
+ QFETCH(QVariant, roleValue);
+
+ QDeclarativeListModel model;
+ QDeclarativeEngine eng;
+ QDeclarativeComponent component(&eng, QUrl::fromLocalFile(SRCDIR "/data/model.qml"));
+ QDeclarativeItem *item = createWorkerTest(&eng, &component, &model);
+ QVERIFY(item != 0);
+ QScriptEngine *seng = QDeclarativeEnginePrivate::getScriptEngine(&eng);
+
+ // Add some values like get() test
+ QScriptValue sv = seng->newObject();
+ sv.setProperty(QLatin1String("roleA"), seng->newVariant(QVariant::fromValue(100)));
+ model.append(sv);
+ sv = seng->newObject();
+ sv.setProperty(QLatin1String("roleA"), seng->newVariant(QVariant::fromValue(200)));
+ sv.setProperty(QLatin1String("roleB"), seng->newVariant(QVariant::fromValue(400)));
+ model.append(sv);
+ model.append(sv);
+ int role = roleFromName(&model, roleName);
+
+ const char *warning = "<Unknown File>: QML ListModel: Cannot add list-type data when modifying or after modification from a worker script";
+ if (roleValue.type() == QVariant::List || roleValue.type() == QVariant::Map)
+ QTest::ignoreMessage(QtWarningMsg, warning);
+ QSignalSpy spy(&model, SIGNAL(itemsChanged(int, int, QList<int>)));
+
+ // in the worker thread, change the model data and call sync()
+ QVERIFY(QMetaObject::invokeMethod(item, "evalExpressionViaWorker",
+ Q_ARG(QVariant, QStringList(expression))));
+ waitForWorker(item);
+
+ // see if we receive the model changes in the main thread's model
+ if (roleValue.type() == QVariant::List || roleValue.type() == QVariant::Map) {
+ QVERIFY(model.data(index, role) != roleValue);
+ QCOMPARE(spy.count(), 0);
+ } else {
+ QCOMPARE(model.data(index, role), roleValue);
+ QCOMPARE(spy.count(), 1);
+
+ QList<QVariant> spyResult = spy.takeFirst();
+ QCOMPARE(spyResult.at(0).toInt(), index);
+ QCOMPARE(spyResult.at(1).toInt(), 1); // only 1 item is modified at a time
+ QVERIFY(spyResult.at(2).value<QList<int> >().contains(role));
+ }
+}
+
+void tst_qdeclarativelistmodel::get_worker_data()
+{
+ get_data();
+}
+
+/*
+ Test that the tests run in get() also work for nested list data
+*/
+void tst_qdeclarativelistmodel::get_nested()
+{
+ QFETCH(QString, expression);
+ QFETCH(int, index);
+ QFETCH(QString, roleName);
+ QFETCH(QVariant, roleValue);
+
+ QDeclarativeEngine eng;
+ QDeclarativeComponent component(&eng);
+ component.setData(
+ "import Qt 4.7\n"
+ "ListModel { \n"
+ "ListElement {\n"
+ "listRoleA: [\n"
+ "ListElement { roleA: 100 },\n"
+ "ListElement { roleA: 200; roleB: 400 },\n"
+ "ListElement { roleA: 200; roleB: 400 } \n"
+ "]\n"
+ "}\n"
+ "ListElement {\n"
+ "listRoleA: [\n"
+ "ListElement { roleA: 100 },\n"
+ "ListElement { roleA: 200; roleB: 400 },\n"
+ "ListElement { roleA: 200; roleB: 400 } \n"
+ "]\n"
+ "listRoleB: [\n"
+ "ListElement { roleA: 100 },\n"
+ "ListElement { roleA: 200; roleB: 400 },\n"
+ "ListElement { roleA: 200; roleB: 400 } \n"
+ "]\n"
+ "listRoleC: [\n"
+ "ListElement { roleA: 100 },\n"
+ "ListElement { roleA: 200; roleB: 400 },\n"
+ "ListElement { roleA: 200; roleB: 400 } \n"
+ "]\n"
+ "}\n"
+ "}", QUrl());
+ QDeclarativeListModel *model = qobject_cast<QDeclarativeListModel*>(component.create());
+ QVERIFY(component.errorString().isEmpty());
+ QDeclarativeListModel *childModel;
+
+ // Test setting the inner list data for:
+ // get(0).listRoleA
+ // get(1).listRoleA
+ // get(1).listRoleB
+ // get(1).listRoleC
+
+ QList<QPair<int, QString> > testData;
+ testData << qMakePair(0, QString("listRoleA"));
+ testData << qMakePair(1, QString("listRoleA"));
+ testData << qMakePair(1, QString("listRoleB"));
+ testData << qMakePair(1, QString("listRoleC"));
+
+ for (int i=0; i<testData.count(); i++) {
+ int outerListIndex = testData[i].first;
+ QString outerListRoleName = testData[i].second;
+ int outerListRole = roleFromName(model, outerListRoleName);
+
+ childModel = qobject_cast<QDeclarativeListModel*>(model->data(outerListIndex, outerListRole).value<QObject*>());
+ QVERIFY(childModel);
+
+ QString extendedExpression = QString("get(%1).%2.%3").arg(outerListIndex).arg(outerListRoleName).arg(expression);
+ QDeclarativeExpression expr(eng.rootContext(), model, extendedExpression);
+
+ QSignalSpy spy(childModel, SIGNAL(itemsChanged(int, int, QList<int>)));
+ expr.evaluate();
+ QVERIFY(!expr.hasError());
+
+ int role = roleFromName(childModel, roleName);
+ QCOMPARE(childModel->data(index, role), roleValue);
+ QCOMPARE(spy.count(), 1);
+
+ QList<QVariant> spyResult = spy.takeFirst();
+ QCOMPARE(spyResult.at(0).toInt(), index);
+ QCOMPARE(spyResult.at(1).toInt(), 1); // only 1 item is modified at a time
+ QCOMPARE(spyResult.at(2).value<QList<int> >(), (QList<int>() << role));
+ }
+}
+
+void tst_qdeclarativelistmodel::get_nested_data()
+{
+ get_data();
+}
QTEST_MAIN(tst_qdeclarativelistmodel)
diff --git a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp
index e4b59a711a..cd17fadb83 100644
--- a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp
+++ b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp
@@ -1016,6 +1016,8 @@ void tst_QDeclarativeListView::currentIndex()
// no wrap
listview->setCurrentIndex(0);
QCOMPARE(listview->currentIndex(), 0);
+ // confirm that the velocity is updated
+ QTRY_VERIFY(listview->verticalVelocity() != 0.0);
listview->incrementCurrentIndex();
QCOMPARE(listview->currentIndex(), 1);
diff --git a/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp b/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp
index 3baf8481d0..b62392d326 100644
--- a/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp
+++ b/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp
@@ -61,15 +61,6 @@ inline QUrl TEST_FILE(const QString &filename)
return QUrl::fromLocalFile(QLatin1String(SRCDIR) + QLatin1String("/data/") + filename);
}
-#define TRY_WAIT(expr) \
- do { \
- for (int ii = 0; ii < 6; ++ii) { \
- if ((expr)) break; \
- QTest::qWait(50); \
- } \
- QVERIFY((expr)); \
- } while (false)
-
class tst_QDeclarativeLoader : public QObject
{
@@ -460,7 +451,7 @@ void tst_QDeclarativeLoader::networkRequestUrl()
QDeclarativeLoader *loader = qobject_cast<QDeclarativeLoader*>(component.create());
QVERIFY(loader != 0);
- TRY_WAIT(loader->status() == QDeclarativeLoader::Ready);
+ QTRY_VERIFY(loader->status() == QDeclarativeLoader::Ready);
QVERIFY(loader->item());
QCOMPARE(loader->progress(), 1.0);
@@ -491,7 +482,7 @@ void tst_QDeclarativeLoader::networkComponent()
QDeclarativeLoader *loader = qobject_cast<QDeclarativeLoader*>(item->QGraphicsObject::children().at(1));
QVERIFY(loader);
- TRY_WAIT(loader->status() == QDeclarativeLoader::Ready);
+ QTRY_VERIFY(loader->status() == QDeclarativeLoader::Ready);
QVERIFY(loader->item());
QCOMPARE(loader->progress(), 1.0);
@@ -515,7 +506,7 @@ void tst_QDeclarativeLoader::failNetworkRequest()
QDeclarativeLoader *loader = qobject_cast<QDeclarativeLoader*>(component.create());
QVERIFY(loader != 0);
- TRY_WAIT(loader->status() == QDeclarativeLoader::Error);
+ QTRY_VERIFY(loader->status() == QDeclarativeLoader::Error);
QVERIFY(loader->item() == 0);
QCOMPARE(loader->progress(), 0.0);
diff --git a/tests/auto/declarative/qdeclarativemousearea/data/doubleclick.qml b/tests/auto/declarative/qdeclarativemousearea/data/doubleclick.qml
new file mode 100644
index 0000000000..9cddf1bb91
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativemousearea/data/doubleclick.qml
@@ -0,0 +1,14 @@
+import Qt 4.7
+
+Item {
+ id: root
+ property int clicked: 0
+ property int doubleClicked: 0
+
+ MouseArea {
+ width: 200; height: 200
+ onClicked: { root.clicked++ }
+ onDoubleClicked: { root.doubleClicked++ }
+ }
+}
+
diff --git a/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp b/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp
index c9bb467fe0..e4ec01f63e 100644
--- a/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp
+++ b/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp
@@ -62,6 +62,7 @@ private slots:
void updateMouseAreaPosOnResize();
void noOnClickedWithPressAndHold();
void onMousePressRejected();
+ void doubleClick();
private:
QDeclarativeView *createView();
@@ -390,6 +391,37 @@ void tst_QDeclarativeMouseArea::onMousePressRejected()
QVERIFY(!canvas->rootObject()->property("mr2_released").toBool());
}
+void tst_QDeclarativeMouseArea::doubleClick()
+{
+ QDeclarativeView *canvas = createView();
+ canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/doubleclick.qml"));
+ canvas->show();
+ canvas->setFocus();
+ QVERIFY(canvas->rootObject() != 0);
+
+ QGraphicsScene *scene = canvas->scene();
+ QGraphicsSceneMouseEvent pressEvent(QEvent::GraphicsSceneMousePress);
+ pressEvent.setScenePos(QPointF(100, 100));
+ pressEvent.setButton(Qt::LeftButton);
+ pressEvent.setButtons(Qt::LeftButton);
+ QApplication::sendEvent(scene, &pressEvent);
+
+ QGraphicsSceneMouseEvent releaseEvent(QEvent::GraphicsSceneMouseRelease);
+ releaseEvent.setScenePos(QPointF(100, 100));
+ releaseEvent.setButton(Qt::LeftButton);
+ releaseEvent.setButtons(Qt::LeftButton);
+ QApplication::sendEvent(scene, &releaseEvent);
+
+ QGraphicsSceneMouseEvent dblClickEvent(QEvent::GraphicsSceneMouseDoubleClick);
+ dblClickEvent.setScenePos(QPointF(100, 100));
+ dblClickEvent.setButton(Qt::LeftButton);
+ dblClickEvent.setButtons(Qt::LeftButton);
+ QApplication::sendEvent(scene, &dblClickEvent);
+
+ QCOMPARE(canvas->rootObject()->property("clicked").toInt(), 1);
+ QCOMPARE(canvas->rootObject()->property("doubleClicked").toInt(), 1);
+}
+
QTEST_MAIN(tst_QDeclarativeMouseArea)
#include "tst_qdeclarativemousearea.moc"
diff --git a/tests/auto/declarative/qdeclarativepathview/data/datamodel.qml b/tests/auto/declarative/qdeclarativepathview/data/datamodel.qml
index a5c3772efa..fb3c91008a 100644
--- a/tests/auto/declarative/qdeclarativepathview/data/datamodel.qml
+++ b/tests/auto/declarative/qdeclarativepathview/data/datamodel.qml
@@ -21,6 +21,7 @@ PathView {
Rectangle {
id: wrapper
objectName: "wrapper"
+ property bool onPath: PathView.onPath
width: 20; height: 20; color: name
Text {
objectName: "myText"
diff --git a/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp b/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp
index 74d2f0a619..cbfbfbd715 100644
--- a/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp
+++ b/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp
@@ -152,27 +152,27 @@ public:
QString number(int index) const { return list.at(index).second; }
void addItem(const QString &name, const QString &number) {
- emit beginInsertRows(QModelIndex(), list.count(), list.count());
+ beginInsertRows(QModelIndex(), list.count(), list.count());
list.append(QPair<QString,QString>(name, number));
- emit endInsertRows();
+ endInsertRows();
}
void insertItem(int index, const QString &name, const QString &number) {
- emit beginInsertRows(QModelIndex(), index, index);
+ beginInsertRows(QModelIndex(), index, index);
list.insert(index, QPair<QString,QString>(name, number));
- emit endInsertRows();
+ endInsertRows();
}
void removeItem(int index) {
- emit beginRemoveRows(QModelIndex(), index, index);
+ beginRemoveRows(QModelIndex(), index, index);
list.removeAt(index);
- emit endRemoveRows();
+ endRemoveRows();
}
void moveItem(int from, int to) {
- emit beginMoveRows(QModelIndex(), from, from, QModelIndex(), to);
+ beginMoveRows(QModelIndex(), from, from, QModelIndex(), to);
list.move(from, to);
- emit endMoveRows();
+ endMoveRows();
}
void modifyItem(int idx, const QString &name, const QString &number) {
@@ -411,6 +411,13 @@ void tst_QDeclarativePathView::dataModel()
QVERIFY(text);
QCOMPARE(text->text(), model.name(3));
+ model.moveItem(3, 5);
+ QTRY_COMPARE(findItems<QDeclarativeItem>(pathview, "wrapper").count(), 5);
+ QList<QDeclarativeItem*> items = findItems<QDeclarativeItem>(pathview, "wrapper");
+ foreach (QDeclarativeItem *item, items) {
+ QVERIFY(item->property("onPath").toBool());
+ }
+
delete canvas;
}
diff --git a/tests/auto/declarative/qdeclarativestates/data/anchorRewindBug2.qml b/tests/auto/declarative/qdeclarativestates/data/anchorRewindBug2.qml
new file mode 100644
index 0000000000..4ed2815502
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativestates/data/anchorRewindBug2.qml
@@ -0,0 +1,25 @@
+import Qt 4.7
+
+Rectangle {
+ id: root
+ width:200; height:300
+
+ Rectangle {
+ id: rectangle
+ objectName: "mover"
+ color: "green"
+ width:50; height:50
+ }
+
+ states: [
+ State {
+ name: "anchored"
+ AnchorChanges {
+ target: rectangle
+ anchors.left: root.left
+ anchors.right: root.right
+ anchors.bottom: root.bottom
+ }
+ }
+ ]
+}
diff --git a/tests/auto/declarative/qdeclarativestates/data/editProperties.qml b/tests/auto/declarative/qdeclarativestates/data/editProperties.qml
new file mode 100644
index 0000000000..4cb1ddd539
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativestates/data/editProperties.qml
@@ -0,0 +1,34 @@
+import Qt 4.7
+Rectangle {
+ id: myRectangle
+
+ property color sourceColor: "blue"
+ width: 400; height: 400
+ color: "red"
+
+ Rectangle {
+ id: rect2
+ objectName: "rect2"
+ width: parent.width + 2
+ height: 200
+ color: "yellow"
+ }
+
+ states: [
+ State {
+ name: "blue"
+ PropertyChanges {
+ target: rect2
+ width:50
+ height: 40
+ }
+ },
+ State {
+ name: "green"
+ PropertyChanges {
+ target: rect2
+ width: myRectangle.width / 2
+ height: myRectangle.width / 4
+ }
+ }]
+}
diff --git a/tests/auto/declarative/qdeclarativestates/data/parentChange6.qml b/tests/auto/declarative/qdeclarativestates/data/parentChange6.qml
new file mode 100644
index 0000000000..be92abadd3
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativestates/data/parentChange6.qml
@@ -0,0 +1,30 @@
+import Qt 4.7
+
+Rectangle {
+ width: 400; height: 400
+ Rectangle {
+ id: myRect
+ objectName: "MyRect"
+ x: 5; y: 5
+ width: 100; height: 100
+ color: "red"
+ }
+ MouseArea {
+ id: clickable
+ anchors.fill: parent
+ }
+
+ Item {
+ id: newParent
+ rotation: 180
+ }
+
+ states: State {
+ name: "reparented"
+ when: clickable.pressed
+ ParentChange {
+ target: myRect
+ parent: newParent
+ }
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp b/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp
index 6ae27592b4..0d10c10d18 100644
--- a/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp
+++ b/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp
@@ -48,6 +48,7 @@
#include <private/qdeclarativepropertychanges_p.h>
#include <private/qdeclarativestategroup_p.h>
#include <private/qdeclarativeitem_p.h>
+#include <private/qdeclarativeproperty_p.h>
#ifdef Q_OS_SYMBIAN
// In Symbian OS test data is located in applications private dir
@@ -122,6 +123,7 @@ private slots:
void anchorChanges5();
void anchorChangesCrash();
void anchorRewindBug();
+ void anchorRewindBug2();
void script();
void restoreEntryValues();
void explicitChanges();
@@ -140,6 +142,7 @@ private slots:
void unnamedWhen();
void returnToBase();
void extendsBug();
+ void editProperties();
};
void tst_qdeclarativestates::initTestCase()
@@ -581,6 +584,21 @@ void tst_qdeclarativestates::parentChange()
//do a non-qFuzzyCompare fuzzy compare
QVERIFY(innerRect->y() < qreal(0.00001) && innerRect->y() > qreal(-0.00001));
}
+
+ {
+ QDeclarativeComponent rectComponent(&engine, SRCDIR "/data/parentChange6.qml");
+ QDeclarativeRectangle *rect = qobject_cast<QDeclarativeRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QDeclarativeRectangle *innerRect = qobject_cast<QDeclarativeRectangle*>(rect->findChild<QDeclarativeRectangle*>("MyRect"));
+ QVERIFY(innerRect != 0);
+
+ QDeclarativeItemPrivate::get(rect)->setState("reparented");
+ QCOMPARE(innerRect->rotation(), qreal(180));
+ QCOMPARE(innerRect->scale(), qreal(1));
+ QCOMPARE(innerRect->x(), qreal(-105));
+ QCOMPARE(innerRect->y(), qreal(-105));
+ }
}
void tst_qdeclarativestates::parentChangeErrors()
@@ -843,6 +861,32 @@ void tst_qdeclarativestates::anchorRewindBug()
delete rect;
}
+// QTBUG-11834
+void tst_qdeclarativestates::anchorRewindBug2()
+{
+ QDeclarativeEngine engine;
+
+ QDeclarativeComponent rectComponent(&engine, SRCDIR "/data/anchorRewindBug2.qml");
+ QDeclarativeRectangle *rect = qobject_cast<QDeclarativeRectangle*>(rectComponent.create());
+ QVERIFY(rect != 0);
+
+ QDeclarativeRectangle *mover = rect->findChild<QDeclarativeRectangle*>("mover");
+
+ QVERIFY(mover != 0);
+ QCOMPARE(mover->y(), qreal(0.0));
+ QCOMPARE(mover->width(), qreal(50.0));
+
+ QDeclarativeItemPrivate::get(rect)->setState("anchored");
+ QCOMPARE(mover->y(), qreal(250.0));
+ QCOMPARE(mover->width(), qreal(200.0));
+
+ QDeclarativeItemPrivate::get(rect)->setState("");
+ QCOMPARE(mover->y(), qreal(0.0));
+ QCOMPARE(mover->width(), qreal(50.0));
+
+ delete rect;
+}
+
void tst_qdeclarativestates::script()
{
QDeclarativeEngine engine;
@@ -1203,6 +1247,134 @@ void tst_qdeclarativestates::extendsBug()
QCOMPARE(greenRect->y(), qreal(100));
}
+void tst_qdeclarativestates::editProperties()
+{
+ QDeclarativeEngine engine;
+
+ QDeclarativeComponent c(&engine, SRCDIR "/data/editProperties.qml");
+ QDeclarativeRectangle *rect = qobject_cast<QDeclarativeRectangle*>(c.create());
+ QVERIFY(rect != 0);
+
+ QDeclarativeItemPrivate *rectPrivate = QDeclarativeItemPrivate::get(rect);
+
+ QDeclarativeStateGroup *stateGroup = rectPrivate->_states();
+ QVERIFY(stateGroup != 0);
+ qmlExecuteDeferred(stateGroup);
+
+ QDeclarativeState *blueState = stateGroup->findState("blue");
+ QVERIFY(blueState != 0);
+ qmlExecuteDeferred(blueState);
+
+ QDeclarativePropertyChanges *propertyChangesBlue = qobject_cast<QDeclarativePropertyChanges*>(blueState->operationAt(0));
+ QVERIFY(propertyChangesBlue != 0);
+
+ QDeclarativeState *greenState = stateGroup->findState("green");
+ QVERIFY(greenState != 0);
+ qmlExecuteDeferred(greenState);
+
+ QDeclarativePropertyChanges *propertyChangesGreen = qobject_cast<QDeclarativePropertyChanges*>(greenState->operationAt(0));
+ QVERIFY(propertyChangesGreen != 0);
+
+ QDeclarativeRectangle *childRect = rect->findChild<QDeclarativeRectangle*>("rect2");
+ QVERIFY(childRect != 0);
+ QCOMPARE(childRect->width(), qreal(402));
+ QVERIFY(QDeclarativePropertyPrivate::binding(QDeclarativeProperty(childRect, "width")));
+ QCOMPARE(childRect->height(), qreal(200));
+
+ rectPrivate->setState("blue");
+ QCOMPARE(childRect->width(), qreal(50));
+ QCOMPARE(childRect->height(), qreal(40));
+ QVERIFY(!QDeclarativePropertyPrivate::binding(QDeclarativeProperty(childRect, "width")));
+ QVERIFY(blueState->bindingInRevertList(childRect, "width"));
+
+
+ rectPrivate->setState("green");
+ QCOMPARE(childRect->width(), qreal(200));
+ QCOMPARE(childRect->height(), qreal(100));
+ QVERIFY(greenState->bindingInRevertList(childRect, "width"));
+
+
+ rectPrivate->setState("");
+
+
+ QCOMPARE(propertyChangesBlue->actions().length(), 2);
+ QVERIFY(propertyChangesBlue->containsValue("width"));
+ QVERIFY(!propertyChangesBlue->containsProperty("x"));
+ QCOMPARE(propertyChangesBlue->value("width").toInt(), 50);
+ QVERIFY(!propertyChangesBlue->value("x").isValid());
+
+ propertyChangesBlue->changeValue("width", 60);
+ QCOMPARE(propertyChangesBlue->value("width").toInt(), 60);
+ QCOMPARE(propertyChangesBlue->actions().length(), 2);
+
+
+ propertyChangesBlue->changeExpression("width", "myRectangle.width / 2");
+ QVERIFY(!propertyChangesBlue->containsValue("width"));
+ QVERIFY(propertyChangesBlue->containsExpression("width"));
+ QCOMPARE(propertyChangesBlue->value("width").toInt(), 0);
+ QCOMPARE(propertyChangesBlue->actions().length(), 2);
+
+ propertyChangesBlue->changeValue("width", 50);
+ QVERIFY(propertyChangesBlue->containsValue("width"));
+ QVERIFY(!propertyChangesBlue->containsExpression("width"));
+ QCOMPARE(propertyChangesBlue->value("width").toInt(), 50);
+ QCOMPARE(propertyChangesBlue->actions().length(), 2);
+
+ QVERIFY(QDeclarativePropertyPrivate::binding(QDeclarativeProperty(childRect, "width")));
+ rectPrivate->setState("blue");
+ QCOMPARE(childRect->width(), qreal(50));
+ QCOMPARE(childRect->height(), qreal(40));
+
+ propertyChangesBlue->changeValue("width", 60);
+ QCOMPARE(propertyChangesBlue->value("width").toInt(), 60);
+ QCOMPARE(propertyChangesBlue->actions().length(), 2);
+ QCOMPARE(childRect->width(), qreal(60));
+ QVERIFY(!QDeclarativePropertyPrivate::binding(QDeclarativeProperty(childRect, "width")));
+
+ propertyChangesBlue->changeExpression("width", "myRectangle.width / 2");
+ QVERIFY(!propertyChangesBlue->containsValue("width"));
+ QVERIFY(propertyChangesBlue->containsExpression("width"));
+ QCOMPARE(propertyChangesBlue->value("width").toInt(), 0);
+ QCOMPARE(propertyChangesBlue->actions().length(), 2);
+ QVERIFY(QDeclarativePropertyPrivate::binding(QDeclarativeProperty(childRect, "width")));
+ QCOMPARE(childRect->width(), qreal(200));
+
+ propertyChangesBlue->changeValue("width", 50);
+ QCOMPARE(childRect->width(), qreal(50));
+
+ rectPrivate->setState("");
+ QCOMPARE(childRect->width(), qreal(402));
+ QVERIFY(QDeclarativePropertyPrivate::binding(QDeclarativeProperty(childRect, "width")));
+
+ QCOMPARE(propertyChangesGreen->actions().length(), 2);
+ rectPrivate->setState("green");
+ QCOMPARE(childRect->width(), qreal(200));
+ QCOMPARE(childRect->height(), qreal(100));
+ QVERIFY(QDeclarativePropertyPrivate::binding(QDeclarativeProperty(childRect, "width")));
+ QVERIFY(greenState->bindingInRevertList(childRect, "width"));
+ QCOMPARE(propertyChangesGreen->actions().length(), 2);
+
+
+ propertyChangesGreen->removeProperty("height");
+ QVERIFY(!QDeclarativePropertyPrivate::binding(QDeclarativeProperty(childRect, "height")));
+ QCOMPARE(childRect->height(), qreal(200));
+
+ QVERIFY(greenState->bindingInRevertList(childRect, "width"));
+ QVERIFY(greenState->containsPropertyInRevertList(childRect, "width"));
+ propertyChangesGreen->removeProperty("width");
+ QVERIFY(QDeclarativePropertyPrivate::binding(QDeclarativeProperty(childRect, "width")));
+ QCOMPARE(childRect->width(), qreal(402));
+ QVERIFY(!greenState->bindingInRevertList(childRect, "width"));
+ QVERIFY(!greenState->containsPropertyInRevertList(childRect, "width"));
+
+ propertyChangesBlue->removeProperty("width");
+ QCOMPARE(childRect->width(), qreal(402));
+
+ rectPrivate->setState("blue");
+ QCOMPARE(childRect->width(), qreal(402));
+ QCOMPARE(childRect->height(), qreal(40));
+}
+
QTEST_MAIN(tst_qdeclarativestates)
#include "tst_qdeclarativestates.moc"
diff --git a/tests/auto/declarative/qdeclarativetext/data/alignments_cb.png b/tests/auto/declarative/qdeclarativetext/data/alignments_cb.png
index 99de2192de..b5c6bbad05 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 cb85251180..c9ffcc11d0 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 ddca549c82..eda0d250ce 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/qdeclarativevisualdatamodel/data/singlerole1.qml b/tests/auto/declarative/qdeclarativevisualdatamodel/data/singlerole1.qml
new file mode 100644
index 0000000000..7ea74f21fb
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativevisualdatamodel/data/singlerole1.qml
@@ -0,0 +1,11 @@
+import Qt 4.7
+
+ListView {
+ width: 100
+ height: 100
+ anchors.fill: parent
+ model: myModel
+ delegate: Component {
+ Text { objectName: "name"; text: name }
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativevisualdatamodel/data/singlerole2.qml b/tests/auto/declarative/qdeclarativevisualdatamodel/data/singlerole2.qml
new file mode 100644
index 0000000000..6654d6beec
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativevisualdatamodel/data/singlerole2.qml
@@ -0,0 +1,11 @@
+import Qt 4.7
+
+ListView {
+ width: 100
+ height: 100
+ anchors.fill: parent
+ model: myModel
+ delegate: Component {
+ Text { objectName: "name"; text: modelData }
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp b/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp
index 95ef4fcd59..d73a872d02 100644
--- a/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp
+++ b/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp
@@ -75,6 +75,39 @@ static void initStandardTreeModel(QStandardItemModel *model)
model->insertRow(2, item);
}
+class SingleRoleModel : public QAbstractListModel
+{
+ Q_OBJECT
+
+public:
+ SingleRoleModel(QObject *parent = 0) {
+ QHash<int, QByteArray> roles;
+ roles.insert(Qt::DisplayRole , "name");
+ setRoleNames(roles);
+ list << "one" << "two" << "three" << "four";
+ }
+
+public slots:
+ void set(int idx, QString string) {
+ list[idx] = string;
+ emit dataChanged(index(idx,0), index(idx,0));
+ }
+
+protected:
+ int rowCount(const QModelIndex &parent = QModelIndex()) const {
+ return list.count();
+ }
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const {
+ if (role == Qt::DisplayRole)
+ return list.at(index.row());
+ return QVariant();
+ }
+
+private:
+ QStringList list;
+};
+
+
class tst_qdeclarativevisualdatamodel : public QObject
{
Q_OBJECT
@@ -86,6 +119,7 @@ private slots:
void updateLayout();
void childChanged();
void objectListModel();
+ void singleRole();
private:
QDeclarativeEngine engine;
@@ -282,6 +316,54 @@ void tst_qdeclarativevisualdatamodel::objectListModel()
QCOMPARE(name->text(), QString("Changed"));
}
+void tst_qdeclarativevisualdatamodel::singleRole()
+{
+ {
+ QDeclarativeView view;
+
+ SingleRoleModel model;
+
+ QDeclarativeContext *ctxt = view.rootContext();
+ ctxt->setContextProperty("myModel", &model);
+
+ view.setSource(QUrl::fromLocalFile(SRCDIR "/data/singlerole1.qml"));
+
+ QDeclarativeListView *listview = qobject_cast<QDeclarativeListView*>(view.rootObject());
+ QVERIFY(listview != 0);
+
+ QDeclarativeItem *contentItem = listview->contentItem();
+ QVERIFY(contentItem != 0);
+
+ QDeclarativeText *name = findItem<QDeclarativeText>(contentItem, "name", 1);
+ QCOMPARE(name->text(), QString("two"));
+
+ model.set(1, "Changed");
+ QCOMPARE(name->text(), QString("Changed"));
+ }
+ {
+ QDeclarativeView view;
+
+ SingleRoleModel model;
+
+ QDeclarativeContext *ctxt = view.rootContext();
+ ctxt->setContextProperty("myModel", &model);
+
+ view.setSource(QUrl::fromLocalFile(SRCDIR "/data/singlerole2.qml"));
+
+ QDeclarativeListView *listview = qobject_cast<QDeclarativeListView*>(view.rootObject());
+ QVERIFY(listview != 0);
+
+ QDeclarativeItem *contentItem = listview->contentItem();
+ QVERIFY(contentItem != 0);
+
+ QDeclarativeText *name = findItem<QDeclarativeText>(contentItem, "name", 1);
+ QCOMPARE(name->text(), QString("two"));
+
+ model.set(1, "Changed");
+ QCOMPARE(name->text(), QString("Changed"));
+ }
+}
+
template<typename T>
T *tst_qdeclarativevisualdatamodel::findItem(QGraphicsObject *parent, const QString &objectName, int index)
{
diff --git a/tests/auto/declarative/qdeclarativexmlhttprequest/tst_qdeclarativexmlhttprequest.cpp b/tests/auto/declarative/qdeclarativexmlhttprequest/tst_qdeclarativexmlhttprequest.cpp
index ecce349203..89252fbb20 100644
--- a/tests/auto/declarative/qdeclarativexmlhttprequest/tst_qdeclarativexmlhttprequest.cpp
+++ b/tests/auto/declarative/qdeclarativexmlhttprequest/tst_qdeclarativexmlhttprequest.cpp
@@ -45,6 +45,7 @@
#include <QDebug>
#include <QNetworkCookieJar>
#include "testhttpserver.h"
+#include "../../../shared/util.h"
#define SERVER_PORT 14445
@@ -156,16 +157,6 @@ void tst_qdeclarativexmlhttprequest::domExceptionCodes()
delete object;
}
-#define TRY_WAIT(expr) \
- do { \
- for (int ii = 0; ii < 6; ++ii) { \
- if ((expr)) break; \
- QTest::qWait(50); \
- } \
- QVERIFY((expr)); \
- } while (false)
-
-
void tst_qdeclarativexmlhttprequest::callbackException_data()
{
QTest::addColumn<QString>("which");
@@ -193,7 +184,7 @@ void tst_qdeclarativexmlhttprequest::callbackException()
object->setProperty("which", which);
component.completeCreate();
- TRY_WAIT(object->property("threw").toBool() == true);
+ QTRY_VERIFY(object->property("threw").toBool() == true);
delete object;
}
@@ -289,7 +280,7 @@ void tst_qdeclarativexmlhttprequest::open()
QCOMPARE(object->property("responseText").toBool(), true);
QCOMPARE(object->property("responseXML").toBool(), true);
- TRY_WAIT(object->property("dataOK").toBool() == true);
+ QTRY_VERIFY(object->property("dataOK").toBool() == true);
delete server;
delete object;
@@ -372,7 +363,7 @@ void tst_qdeclarativexmlhttprequest::setRequestHeader()
object->setProperty("url", "http://127.0.0.1:14445/testdocument.html");
component.completeCreate();
- TRY_WAIT(object->property("dataOK").toBool() == true);
+ QTRY_VERIFY(object->property("dataOK").toBool() == true);
delete object;
}
@@ -442,7 +433,7 @@ void tst_qdeclarativexmlhttprequest::setRequestHeader_illegalName()
QCOMPARE(object->property("responseText").toBool(), true);
QCOMPARE(object->property("responseXML").toBool(), true);
- TRY_WAIT(object->property("dataOK").toBool() == true);
+ QTRY_VERIFY(object->property("dataOK").toBool() == true);
delete object;
}
@@ -464,7 +455,7 @@ void tst_qdeclarativexmlhttprequest::setRequestHeader_sent()
QCOMPARE(object->property("test").toBool(), true);
- TRY_WAIT(object->property("dataOK").toBool() == true);
+ QTRY_VERIFY(object->property("dataOK").toBool() == true);
delete object;
}
@@ -501,7 +492,7 @@ void tst_qdeclarativexmlhttprequest::send_alreadySent()
QVERIFY(object != 0);
QCOMPARE(object->property("test").toBool(), true);
- TRY_WAIT(object->property("dataOK").toBool() == true);
+ QTRY_VERIFY(object->property("dataOK").toBool() == true);
delete object;
}
@@ -523,7 +514,7 @@ void tst_qdeclarativexmlhttprequest::send_ignoreData()
object->setProperty("url", "http://127.0.0.1:14445/testdocument.html");
component.completeCreate();
- TRY_WAIT(object->property("dataOK").toBool() == true);
+ QTRY_VERIFY(object->property("dataOK").toBool() == true);
delete object;
}
@@ -542,7 +533,7 @@ void tst_qdeclarativexmlhttprequest::send_ignoreData()
object->setProperty("url", "http://127.0.0.1:14445/testdocument.html");
component.completeCreate();
- TRY_WAIT(object->property("dataOK").toBool() == true);
+ QTRY_VERIFY(object->property("dataOK").toBool() == true);
delete object;
}
@@ -566,7 +557,7 @@ void tst_qdeclarativexmlhttprequest::send_withdata()
object->setProperty("url", "http://127.0.0.1:14445/testdocument.html");
component.completeCreate();
- TRY_WAIT(object->property("dataOK").toBool() == true);
+ QTRY_VERIFY(object->property("dataOK").toBool() == true);
delete object;
}
@@ -601,7 +592,7 @@ void tst_qdeclarativexmlhttprequest::abort_unsent()
QCOMPARE(object->property("responseText").toBool(), true);
QCOMPARE(object->property("responseXML").toBool(), true);
- TRY_WAIT(object->property("dataOK").toBool() == true);
+ QTRY_VERIFY(object->property("dataOK").toBool() == true);
delete object;
}
@@ -622,7 +613,7 @@ void tst_qdeclarativexmlhttprequest::abort_opened()
QCOMPARE(object->property("responseText").toBool(), true);
QCOMPARE(object->property("responseXML").toBool(), true);
- TRY_WAIT(object->property("dataOK").toBool() == true);
+ QTRY_VERIFY(object->property("dataOK").toBool() == true);
delete object;
}
@@ -647,7 +638,7 @@ void tst_qdeclarativexmlhttprequest::abort()
QCOMPARE(object->property("didNotSeeUnsent").toBool(), true);
QCOMPARE(object->property("endStateUnsent").toBool(), true);
- TRY_WAIT(object->property("dataOK").toBool() == true);
+ QTRY_VERIFY(object->property("dataOK").toBool() == true);
delete object;
}
@@ -674,7 +665,7 @@ void tst_qdeclarativexmlhttprequest::getResponseHeader()
QCOMPARE(object->property("readyState").toBool(), true);
QCOMPARE(object->property("openedState").toBool(), true);
- TRY_WAIT(object->property("dataOK").toBool() == true);
+ QTRY_VERIFY(object->property("dataOK").toBool() == true);
QCOMPARE(object->property("headersReceivedState").toBool(), true);
QCOMPARE(object->property("headersReceivedNullHeader").toBool(), true);
@@ -722,7 +713,7 @@ void tst_qdeclarativexmlhttprequest::getResponseHeader_args()
QObject *object = component.create();
QVERIFY(object != 0);
- TRY_WAIT(object->property("exceptionThrown").toBool() == true);
+ QTRY_VERIFY(object->property("exceptionThrown").toBool() == true);
delete object;
}
@@ -748,7 +739,7 @@ void tst_qdeclarativexmlhttprequest::getAllResponseHeaders()
QCOMPARE(object->property("readyState").toBool(), true);
QCOMPARE(object->property("openedState").toBool(), true);
- TRY_WAIT(object->property("dataOK").toBool() == true);
+ QTRY_VERIFY(object->property("dataOK").toBool() == true);
QCOMPARE(object->property("headersReceivedState").toBool(), true);
QCOMPARE(object->property("headersReceivedHeader").toBool(), true);
@@ -790,7 +781,7 @@ void tst_qdeclarativexmlhttprequest::getAllResponseHeaders_args()
QObject *object = component.create();
QVERIFY(object != 0);
- TRY_WAIT(object->property("exceptionThrown").toBool() == true);
+ QTRY_VERIFY(object->property("exceptionThrown").toBool() == true);
delete object;
}
@@ -813,7 +804,7 @@ void tst_qdeclarativexmlhttprequest::status()
object->setProperty("expectedStatus", status);
component.completeCreate();
- TRY_WAIT(object->property("dataOK").toBool() == true);
+ QTRY_VERIFY(object->property("dataOK").toBool() == true);
QCOMPARE(object->property("unsentException").toBool(), true);
QCOMPARE(object->property("openedException").toBool(), true);
@@ -853,7 +844,7 @@ void tst_qdeclarativexmlhttprequest::statusText()
object->setProperty("expectedStatus", statusText);
component.completeCreate();
- TRY_WAIT(object->property("dataOK").toBool() == true);
+ QTRY_VERIFY(object->property("dataOK").toBool() == true);
QCOMPARE(object->property("unsentException").toBool(), true);
QCOMPARE(object->property("openedException").toBool(), true);
@@ -894,7 +885,7 @@ void tst_qdeclarativexmlhttprequest::responseText()
object->setProperty("expectedText", responseText);
component.completeCreate();
- TRY_WAIT(object->property("dataOK").toBool() == true);
+ QTRY_VERIFY(object->property("dataOK").toBool() == true);
QCOMPARE(object->property("unsent").toBool(), true);
QCOMPARE(object->property("opened").toBool(), true);
@@ -931,7 +922,7 @@ void tst_qdeclarativexmlhttprequest::nonUtf8()
object->setProperty("fileName", fileName);
QMetaObject::invokeMethod(object, "startRequest");
- TRY_WAIT(object->property("dataOK").toBool() == true);
+ QTRY_VERIFY(object->property("dataOK").toBool() == true);
QCOMPARE(object->property("responseText").toString(), responseText);
@@ -1000,7 +991,7 @@ void tst_qdeclarativexmlhttprequest::redirects()
object->setProperty("expectedText", "");
component.completeCreate();
- TRY_WAIT(object->property("done").toBool() == true);
+ QTRY_VERIFY(object->property("done").toBool() == true);
QCOMPARE(object->property("dataOK").toBool(), true);
delete object;
@@ -1019,7 +1010,7 @@ void tst_qdeclarativexmlhttprequest::redirects()
object->setProperty("expectedText", "");
component.completeCreate();
- TRY_WAIT(object->property("done").toBool() == true);
+ QTRY_VERIFY(object->property("done").toBool() == true);
QCOMPARE(object->property("dataOK").toBool(), true);
delete object;
@@ -1056,7 +1047,7 @@ void tst_qdeclarativexmlhttprequest::responseXML_invalid()
QObject *object = component.create();
QVERIFY(object != 0);
- TRY_WAIT(object->property("dataOK").toBool() == true);
+ QTRY_VERIFY(object->property("dataOK").toBool() == true);
QCOMPARE(object->property("xmlNull").toBool(), true);
@@ -1070,7 +1061,7 @@ void tst_qdeclarativexmlhttprequest::document()
QObject *object = component.create();
QVERIFY(object != 0);
- TRY_WAIT(object->property("dataOK").toBool() == true);
+ QTRY_VERIFY(object->property("dataOK").toBool() == true);
QCOMPARE(object->property("xmlTest").toBool(), true);
@@ -1084,7 +1075,7 @@ void tst_qdeclarativexmlhttprequest::element()
QObject *object = component.create();
QVERIFY(object != 0);
- TRY_WAIT(object->property("dataOK").toBool() == true);
+ QTRY_VERIFY(object->property("dataOK").toBool() == true);
QCOMPARE(object->property("xmlTest").toBool(), true);
@@ -1098,7 +1089,7 @@ void tst_qdeclarativexmlhttprequest::attr()
QObject *object = component.create();
QVERIFY(object != 0);
- TRY_WAIT(object->property("dataOK").toBool() == true);
+ QTRY_VERIFY(object->property("dataOK").toBool() == true);
QCOMPARE(object->property("xmlTest").toBool(), true);
@@ -1112,7 +1103,7 @@ void tst_qdeclarativexmlhttprequest::text()
QObject *object = component.create();
QVERIFY(object != 0);
- TRY_WAIT(object->property("dataOK").toBool() == true);
+ QTRY_VERIFY(object->property("dataOK").toBool() == true);
QCOMPARE(object->property("xmlTest").toBool(), true);
@@ -1126,7 +1117,7 @@ void tst_qdeclarativexmlhttprequest::cdata()
QObject *object = component.create();
QVERIFY(object != 0);
- TRY_WAIT(object->property("dataOK").toBool() == true);
+ QTRY_VERIFY(object->property("dataOK").toBool() == true);
QCOMPARE(object->property("xmlTest").toBool(), true);
diff --git a/tests/auto/gestures/tst_gestures.cpp b/tests/auto/gestures/tst_gestures.cpp
index ddc3939b67..667cdd3726 100644
--- a/tests/auto/gestures/tst_gestures.cpp
+++ b/tests/auto/gestures/tst_gestures.cpp
@@ -41,6 +41,7 @@
#include <QtTest/QtTest>
+#include <QtTest/qtesttouch.h>
#include "../../shared/util.h"
#include <qevent.h>
@@ -361,6 +362,7 @@ private slots:
void partialGesturePropagation();
void testQGestureRecognizerCleanup();
void testReuseCanceledGestures();
+ void bug_13501_gesture_not_accepted();
};
tst_Gestures::tst_Gestures()
@@ -2306,5 +2308,29 @@ void tst_Gestures::conflictingGesturesInGraphicsView()
QCOMPARE(item1->gestureEventsReceived, TotalGestureEventsCount);
}
+class NoConsumeWidgetBug13501 :public QWidget
+{
+ Q_OBJECT
+protected:
+ bool event(QEvent *e) {
+ if(e->type() == QEvent::Gesture) {
+ return false;
+ }
+ return QWidget::event(e);
+ }
+};
+
+void tst_Gestures::bug_13501_gesture_not_accepted()
+{
+ // Create a gesture event that is not accepted by any widget
+ // make sure this does not lead to an assert in QGestureManager
+ NoConsumeWidgetBug13501 w;
+ w.grabGesture(Qt::TapGesture);
+ w.show();
+ QTest::qWaitForWindowShown(&w);
+ //QTest::mousePress(&ignoreEvent, Qt::LeftButton);
+ QTest::touchEvent(&w).press(0, QPoint(10, 10), &w);
+}
+
QTEST_MAIN(tst_Gestures)
#include "tst_gestures.moc"
diff --git a/tests/auto/linguist/lupdate/testdata/good/heuristics/expectedoutput.txt b/tests/auto/linguist/lupdate/testdata/good/heuristics/expectedoutput.txt
index 093610dbdb..1eed403b7c 100644
--- a/tests/auto/linguist/lupdate/testdata/good/heuristics/expectedoutput.txt
+++ b/tests/auto/linguist/lupdate/testdata/good/heuristics/expectedoutput.txt
@@ -1,4 +1,3 @@
-*.*Function 'eval' is not implemented
Updating 'project\.ts'\.\.\.
Found 3 source text\(s\) \(3 new and 0 already existing\)
Removed 5 obsolete entries
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp b/tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp
index f58f932391..706e8d020a 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp
@@ -302,3 +302,44 @@ static inline QString message2()
}
}
+
+
+
+// QTBUG-11426: operator overloads
+class LotsaFun : public QObject
+{
+ Q_OBJECT
+public:
+ int operator<<(int left, int right);
+};
+
+int LotsaFun::operator<<(int left, int right)
+{
+ tr("this is inside operator<<");
+ return left << right;
+}
+
+
+
+// QTBUG-12683: define in re-opened namespace
+namespace NameSchpace {
+
+class YetMoreFun : public QObject
+{
+ Q_OBJECT
+public:
+ void funStuff();
+};
+
+}
+
+namespace NameSchpace {
+
+#define somevar 1
+
+void YetMoreFun::funStuff()
+{
+ tr("funStuff!");
+}
+
+}
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result
index 7ac318e685..f73fc64776 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result
@@ -141,6 +141,22 @@ backslashed \ stuff.</source>
</message>
</context>
<context>
+ <name>LotsaFun</name>
+ <message>
+ <location filename="main.cpp" line="318"/>
+ <source>this is inside operator&lt;&lt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>NameSchpace::YetMoreFun</name>
+ <message>
+ <location filename="main.cpp" line="342"/>
+ <source>funStuff!</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Plurals, QCoreApplication</name>
<message numerus="yes">
<location filename="main.cpp" line="81"/>
diff --git a/tests/auto/linguist/lupdate/tst_lupdate.cpp b/tests/auto/linguist/lupdate/tst_lupdate.cpp
index 5ba6c52694..e6d21350bc 100644
--- a/tests/auto/linguist/lupdate/tst_lupdate.cpp
+++ b/tests/auto/linguist/lupdate/tst_lupdate.cpp
@@ -122,12 +122,19 @@ static bool prepareMatch(const QString &expect, QString *tmpl, int *require, int
return true;
}
-void tst_lupdate::doCompare(const QStringList &actual, const QString &expectedFn, bool err)
+void tst_lupdate::doCompare(const QStringList &_actual, const QString &expectedFn, bool err)
{
QFile file(expectedFn);
QVERIFY2(file.open(QIODevice::ReadOnly | QIODevice::Text), qPrintable(expectedFn));
QStringList expected = QString(file.readAll()).split('\n');
+ QStringList actual;
+ actual.reserve(_actual.size());
+ QRegExp niRx(".*:Function '\\w+' is not implemented");
+ foreach (const QString &a, _actual)
+ if (!niRx.exactMatch(a))
+ actual << a;
+
int ei = 0, ai = 0, em = expected.size(), am = actual.size();
int oei = 0, oai = 0, oem = em, oam = am;
int require = 0, accept = 0;
diff --git a/tests/auto/moc/tst_moc.cpp b/tests/auto/moc/tst_moc.cpp
index f9c3ccbaff..bb23f497e2 100644
--- a/tests/auto/moc/tst_moc.cpp
+++ b/tests/auto/moc/tst_moc.cpp
@@ -1077,10 +1077,10 @@ void tst_Moc::qprivateslots()
class PrivatePropertyTest : public QObject
{
Q_OBJECT
- Q_PROPERTY(int foo READ foo WRITE setFoo);
- Q_PRIVATE_PROPERTY(d, int bar READ bar WRITE setBar);
- Q_PRIVATE_PROPERTY(PrivatePropertyTest::d, int plop READ plop WRITE setPlop);
- Q_PRIVATE_PROPERTY(PrivatePropertyTest::d_func(), int baz READ baz WRITE setBaz);
+ Q_PROPERTY(int foo READ foo WRITE setFoo)
+ Q_PRIVATE_PROPERTY(d, int bar READ bar WRITE setBar)
+ Q_PRIVATE_PROPERTY(PrivatePropertyTest::d, int plop READ plop WRITE setPlop)
+ Q_PRIVATE_PROPERTY(PrivatePropertyTest::d_func(), int baz READ baz WRITE setBaz)
class MyDPointer {
public:
MyDPointer() : mBar(0), mPlop(0) {}
diff --git a/tests/auto/q3table/tst_q3table.cpp b/tests/auto/q3table/tst_q3table.cpp
index 90bf80698a..93de2517bf 100644
--- a/tests/auto/q3table/tst_q3table.cpp
+++ b/tests/auto/q3table/tst_q3table.cpp
@@ -502,7 +502,7 @@ void tst_Q3Table::pageUpDownNavigation()
void tst_Q3Table::simpleKeyboardNavigation()
{
QApplication::setActiveWindow(testWidget);
- QTRY_COMPARE(QApplication::activeWindow(), testWidget);
+ QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(testWidget));
QWidget *w;
// Test for task #24726
@@ -1208,7 +1208,7 @@ void tst_Q3Table::editCheck()
table.show();
QApplication::setActiveWindow(&table);
QTest::qWaitForWindowShown(&table);
- QTRY_COMPARE(QApplication::activeWindow(), &table);
+ QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&table));
table.setCurrentCell(0, 0);
#ifdef WAITS
QTest::qWait(50);
@@ -1345,7 +1345,7 @@ void tst_Q3Table::valueChanged()
testWidget->show();
QApplication::setActiveWindow(testWidget);
QTest::qWaitForWindowShown(testWidget);
- QTRY_COMPARE(QApplication::activeWindow(), testWidget);
+ QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(testWidget));
#ifdef WAITS
QTest::qWait(50);
#endif
@@ -1395,7 +1395,7 @@ void tst_Q3Table::dateTimeEdit()
testWidget->show();
QApplication::setActiveWindow(testWidget);
QTest::qWaitForWindowShown(testWidget);
- QTRY_COMPARE(QApplication::activeWindow(), testWidget);
+ QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(testWidget));
#ifdef WAITS
QTest::qWait(50);
#endif
diff --git a/tests/auto/qcompleter/tst_qcompleter.cpp b/tests/auto/qcompleter/tst_qcompleter.cpp
index a62720b066..15905285c2 100644
--- a/tests/auto/qcompleter/tst_qcompleter.cpp
+++ b/tests/auto/qcompleter/tst_qcompleter.cpp
@@ -1324,7 +1324,7 @@ void tst_QCompleter::task253125_lineEditCompletion()
#endif
QTest::qWait(10);
QApplication::setActiveWindow(&edit);
- QTRY_COMPARE(QApplication::activeWindow(), &edit);
+ QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&edit));
QTest::keyClick(&edit, 'i');
QCOMPARE(edit.completer()->currentCompletion(), QString("iota"));
@@ -1362,7 +1362,7 @@ void tst_QCompleter::task247560_keyboardNavigation()
QTest::qWait(10);
QApplication::setActiveWindow(&edit);
- QTRY_COMPARE(QApplication::activeWindow(), &edit);
+ QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&edit));
QTest::keyClick(&edit, 'r');
QTest::keyClick(edit.completer()->popup(), Qt::Key_Down);
diff --git a/tests/auto/qfontdatabase/tst_qfontdatabase.cpp b/tests/auto/qfontdatabase/tst_qfontdatabase.cpp
index 357b82ed90..bddd92abcb 100644
--- a/tests/auto/qfontdatabase/tst_qfontdatabase.cpp
+++ b/tests/auto/qfontdatabase/tst_qfontdatabase.cpp
@@ -70,6 +70,11 @@ private slots:
void fixedPitch_data();
void fixedPitch();
+#ifdef Q_WS_MAC
+ void trickyFonts_data();
+ void trickyFonts();
+#endif
+
void widthTwoTimes_data();
void widthTwoTimes();
@@ -131,10 +136,16 @@ void tst_QFontDatabase::fixedPitch_data()
QTest::newRow( "Times New Roman" ) << QString( "Times New Roman" ) << false;
QTest::newRow( "Arial" ) << QString( "Arial" ) << false;
- QTest::newRow( "Script" ) << QString( "Script" ) << false;
+ QTest::newRow( "Andale Mono" ) << QString( "Andale Mono" ) << true;
QTest::newRow( "Courier" ) << QString( "Courier" ) << true;
QTest::newRow( "Courier New" ) << QString( "Courier New" ) << true;
+#ifndef Q_WS_MAC
+ QTest::newRow( "Script" ) << QString( "Script" ) << false;
QTest::newRow( "Lucida Console" ) << QString( "Lucida Console" ) << true;
+#else
+ QTest::newRow( "Menlo" ) << QString( "Menlo" ) << true;
+ QTest::newRow( "Monaco" ) << QString( "Monaco" ) << true;
+#endif
}
void tst_QFontDatabase::fixedPitch()
@@ -156,6 +167,28 @@ void tst_QFontDatabase::fixedPitch()
QCOMPARE(fi.fixedPitch(), fixedPitch);
}
+#ifdef Q_WS_MAC
+void tst_QFontDatabase::trickyFonts_data()
+{
+ QTest::addColumn<QString>("font");
+
+ QTest::newRow( "Geeza Pro" ) << QString( "Geeza Pro" );
+}
+
+void tst_QFontDatabase::trickyFonts()
+{
+ QFETCH(QString, font);
+
+ QFontDatabase fdb;
+ if (!fdb.families().contains(font))
+ QSKIP( "Font not installed", SkipSingle);
+
+ QFont qfont(font);
+ QFontInfo fi(qfont);
+ QCOMPARE(fi.family(), font);
+}
+#endif
+
void tst_QFontDatabase::widthTwoTimes_data()
{
QTest::addColumn<QString>("font");
diff --git a/tests/auto/qglthreads/tst_qglthreads.cpp b/tests/auto/qglthreads/tst_qglthreads.cpp
index 4777fb1438..38b0dab8a2 100644
--- a/tests/auto/qglthreads/tst_qglthreads.cpp
+++ b/tests/auto/qglthreads/tst_qglthreads.cpp
@@ -456,11 +456,71 @@ void tst_QGLThreads::renderInThread()
QVERIFY(!thread.failure);
}
+class Device
+{
+public:
+ virtual ~Device() {}
+ virtual QPaintDevice *realPaintDevice() = 0;
+ virtual void prepareDevice() {}
+};
+
+class GLWidgetWrapper : public Device
+{
+public:
+ GLWidgetWrapper() {
+ widget.resize(150, 150);
+ widget.show();
+ QTest::qWaitForWindowShown(&widget);
+ widget.doneCurrent();
+ }
+ QPaintDevice *realPaintDevice() { return &widget; }
+
+ ThreadSafeGLWidget widget;
+};
+
+class PixmapWrapper : public Device
+{
+public:
+ PixmapWrapper() { pixmap = new QPixmap(512, 512); }
+ ~PixmapWrapper() { delete pixmap; }
+ QPaintDevice *realPaintDevice() { return pixmap; }
+
+ QPixmap *pixmap;
+};
+
+class PixelBufferWrapper : public Device
+{
+public:
+ PixelBufferWrapper() { pbuffer = new QGLPixelBuffer(512, 512); }
+ ~PixelBufferWrapper() { delete pbuffer; }
+ QPaintDevice *realPaintDevice() { return pbuffer; }
+
+ QGLPixelBuffer *pbuffer;
+};
+
+
+class FrameBufferObjectWrapper : public Device
+{
+public:
+ FrameBufferObjectWrapper() {
+ widget.makeCurrent();
+ fbo = new QGLFramebufferObject(512, 512);
+ widget.doneCurrent();
+ }
+ ~FrameBufferObjectWrapper() { delete fbo; }
+ QPaintDevice *realPaintDevice() { return fbo; }
+ void prepareDevice() { widget.makeCurrent(); }
+
+ ThreadSafeGLWidget widget;
+ QGLFramebufferObject *fbo;
+};
+
+
class ThreadPainter : public QObject
{
Q_OBJECT
public:
- ThreadPainter(QPaintDevice *pd) : paintDevice(pd), fail(true) {
+ ThreadPainter(Device *pd) : device(pd), fail(true) {
pixmap = QPixmap(40, 40);
pixmap.fill(Qt::green);
QPainter p(&pixmap);
@@ -474,6 +534,8 @@ public slots:
QTime time;
time.start();
int rotAngle = 10;
+ device->prepareDevice();
+ QPaintDevice *paintDevice = device->realPaintDevice();
QSize s(paintDevice->width(), paintDevice->height());
while (time.elapsed() < RUNNING_TIME) {
QPainter p;
@@ -506,7 +568,7 @@ public slots:
private:
QPixmap pixmap;
- QPaintDevice *paintDevice;
+ Device *device;
bool fail;
};
@@ -520,16 +582,6 @@ public:
devices.append(new T);
threads.append(new QThread);
painters.append(new ThreadPainter(devices.at(i)));
- if (devices.at(i)->devType() == QInternal::Widget) {
- QWidget *widget = static_cast<QWidget *>(devices.at(i));
- widget->resize(150, 150);
- widget->show();
- QTest::qWaitForWindowShown(widget);
- if (widget->inherits("QGLWidget")) {
- QGLWidget *glWidget = static_cast<QGLWidget *>(widget);
- glWidget->doneCurrent();
- }
- }
painters.at(i)->moveToThread(threads.at(i));
painters.at(i)->connect(threads.at(i), SIGNAL(started()), painters.at(i), SLOT(draw()));
}
@@ -568,7 +620,7 @@ public:
private:
QList<QThread *> threads;
- QList<QPaintDevice *> devices;
+ QList<Device *> devices;
QList<ThreadPainter *> painters;
int numThreads;
};
@@ -587,7 +639,12 @@ void tst_QGLThreads::painterOnGLWidgetInThread()
#ifdef Q_OS_MAC
QSKIP("OpenGL threading tests are currently disabled on Mac as they were causing reboots", SkipAll);
#endif
- PaintThreadManager<ThreadSafeGLWidget> painterThreads(5);
+ if (!((QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_Version_2_0) ||
+ (QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_ES_Version_2_0))) {
+ QSKIP("The OpenGL based threaded QPainter tests requires OpenGL/ES 2.0.", SkipAll);
+ }
+
+ PaintThreadManager<GLWidgetWrapper> painterThreads(5);
painterThreads.start();
while (painterThreads.areRunning()) {
@@ -601,12 +658,6 @@ void tst_QGLThreads::painterOnGLWidgetInThread()
QVERIFY(!painterThreads.failed());
}
-class Pixmap : public QPixmap
-{
-public:
- Pixmap() : QPixmap(200, 200) {}
-};
-
/*
This test uses QPainter to draw onto different QPixmaps in
different threads at the same time.
@@ -616,7 +667,74 @@ void tst_QGLThreads::painterOnPixmapInThread()
#ifdef Q_WS_X11
QSKIP("Drawing text in threads onto X11 drawables currently crashes on some X11 servers.", SkipAll);
#endif
- PaintThreadManager<Pixmap> painterThreads(5);
+ PaintThreadManager<PixmapWrapper> painterThreads(5);
+ painterThreads.start();
+
+ while (painterThreads.areRunning()) {
+ qApp->processEvents();
+#ifdef Q_WS_WIN
+ Sleep(100);
+#else
+ usleep(100 * 1000);
+#endif
+ }
+ QVERIFY(!painterThreads.failed());
+}
+
+/* This test uses QPainter to draw onto different QGLPixelBuffer
+ objects in different threads at the same time.
+*/
+void tst_QGLThreads::painterOnPboInThread()
+{
+#ifdef Q_OS_MAC
+ QSKIP("OpenGL threading tests are currently disabled on Mac as they were causing reboots", SkipAll);
+#endif
+ if (!((QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_Version_2_0) ||
+ (QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_ES_Version_2_0))) {
+ QSKIP("The OpenGL based threaded QPainter tests requires OpenGL/ES 2.0.", SkipAll);
+ return;
+ }
+
+ if (!QGLPixelBuffer::hasOpenGLPbuffers()) {
+ QSKIP("This system doesn't support pbuffers.", SkipAll);
+ return;
+ }
+
+ PaintThreadManager<PixelBufferWrapper> painterThreads(5);
+ painterThreads.start();
+
+ while (painterThreads.areRunning()) {
+ qApp->processEvents();
+#ifdef Q_WS_WIN
+ Sleep(100);
+#else
+ usleep(100 * 1000);
+#endif
+ }
+ QVERIFY(!painterThreads.failed());
+}
+
+/* This test uses QPainter to draw onto different
+ QGLFramebufferObjects (bound in a QGLWidget's context) in different
+ threads at the same time.
+*/
+void tst_QGLThreads::painterOnFboInThread()
+{
+#ifdef Q_OS_MAC
+ QSKIP("OpenGL threading tests are currently disabled on Mac as they were causing reboots", SkipAll);
+#endif
+ if (!((QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_Version_2_0) ||
+ (QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_ES_Version_2_0))) {
+ QSKIP("The OpenGL based threaded QPainter tests requires OpenGL/ES 2.0.", SkipAll);
+ return;
+ }
+
+ if (!QGLFramebufferObject::hasOpenGLFramebufferObjects()) {
+ QSKIP("This system doesn't support framebuffer objects.", SkipAll);
+ return;
+ }
+
+ PaintThreadManager<FrameBufferObjectWrapper> painterThreads(5);
painterThreads.start();
while (painterThreads.areRunning()) {
diff --git a/tests/auto/qglthreads/tst_qglthreads.h b/tests/auto/qglthreads/tst_qglthreads.h
index ae6b9530c0..a8c2963047 100644
--- a/tests/auto/qglthreads/tst_qglthreads.h
+++ b/tests/auto/qglthreads/tst_qglthreads.h
@@ -58,6 +58,8 @@ private slots:
void renderInThread();
void painterOnGLWidgetInThread();
void painterOnPixmapInThread();
+ void painterOnPboInThread();
+ void painterOnFboInThread();
};
#endif // TST_QGLTHREADS_H
diff --git a/tests/auto/qglyphs/tst_qglyphs.cpp b/tests/auto/qglyphs/tst_qglyphs.cpp
index b75e801295..da91063d87 100644
--- a/tests/auto/qglyphs/tst_qglyphs.cpp
+++ b/tests/auto/qglyphs/tst_qglyphs.cpp
@@ -347,10 +347,6 @@ void tst_QGlyphs::drawMultiScriptText1()
void tst_QGlyphs::drawMultiScriptText2()
{
-#if defined(Q_WS_MAC)
- QSKIP("Unstable because of QTBUG-11145", SkipAll);
-#endif
-
QString text;
text += QChar(0x0621); // Arabic, Hamza
text += QChar(0x03D0); // Greek, beta
@@ -530,10 +526,6 @@ void tst_QGlyphs::drawUnderlinedText()
void tst_QGlyphs::drawRightToLeft()
{
-#if defined(Q_WS_MAC)
- QSKIP("Unstable because of QTBUG-11145", SkipAll);
-#endif
-
QString s;
s.append(QChar(1575));
s.append(QChar(1578));
diff --git a/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp b/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp
index fa6a5ecbd7..07fa630066 100644
--- a/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp
+++ b/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp
@@ -66,6 +66,7 @@ private slots:
void source();
void boundingRectFor();
void boundingRect();
+ void boundingRect2();
void draw();
void opacity();
void grayscale();
@@ -76,6 +77,7 @@ private slots:
void dropShadowClipping();
void childrenVisibilityShouldInvalidateCache();
void prepareGeometryChangeInvalidateCache();
+ void itemHasNoContents();
};
void tst_QGraphicsEffect::initTestCase()
@@ -263,6 +265,57 @@ void tst_QGraphicsEffect::boundingRect()
delete item;
}
+void tst_QGraphicsEffect::boundingRect2()
+{
+ CustomEffect *effect = new CustomEffect;
+ QGraphicsRectItem *root = new QGraphicsRectItem;
+ root->setGraphicsEffect(effect);
+
+ QGraphicsRectItem *child = new QGraphicsRectItem;
+ QRectF childRect(0, 0, 100, 100);
+ child->setFlag(QGraphicsItem::ItemClipsChildrenToShape);
+ child->setRect(childRect);
+ child->setParentItem(root);
+
+ QGraphicsRectItem *grandChild = new QGraphicsRectItem;
+ QRectF grandChildRect(0, 0, 200, 200);
+ grandChild->setRect(grandChildRect);
+ grandChild->setParentItem(child);
+
+ // Make sure the effect's bounding rect is clipped to the child's bounding rect.
+ QCOMPARE(effect->boundingRect(), effect->boundingRectFor(childRect));
+
+ // Disable ItemClipsChildrenToShape; effect's bounding rect is no longer clipped.
+ child->setFlag(QGraphicsItem::ItemClipsChildrenToShape, false);
+ QCOMPARE(effect->boundingRect(), effect->boundingRectFor(childRect | grandChildRect));
+
+ // Add root item to a scene, do the same tests as above. Results should be the same.
+ QGraphicsScene scene;
+ scene.addItem(root);
+
+ child->setFlag(QGraphicsItem::ItemClipsChildrenToShape);
+ QCOMPARE(effect->boundingRect(), effect->boundingRectFor(childRect));
+
+ child->setFlag(QGraphicsItem::ItemClipsChildrenToShape, false);
+ QCOMPARE(effect->boundingRect(), effect->boundingRectFor(childRect | grandChildRect));
+
+ // Now add the scene to a view, results should be the same.
+ QGraphicsView view(&scene);
+
+ child->setFlag(QGraphicsItem::ItemClipsChildrenToShape);
+ QCOMPARE(effect->boundingRect(), effect->boundingRectFor(childRect));
+
+ child->setFlag(QGraphicsItem::ItemClipsChildrenToShape, false);
+ QCOMPARE(effect->boundingRect(), effect->boundingRectFor(childRect | grandChildRect));
+
+ CustomEffect *childEffect = new CustomEffect;
+ child->setGraphicsEffect(childEffect);
+ QCOMPARE(effect->boundingRect(), effect->boundingRectFor(childEffect->boundingRectFor(childRect | grandChildRect)));
+
+ child->setGraphicsEffect(0);
+ QCOMPARE(effect->boundingRect(), effect->boundingRectFor(childRect | grandChildRect));
+}
+
void tst_QGraphicsEffect::draw()
{
QGraphicsScene scene;
@@ -675,6 +728,34 @@ void tst_QGraphicsEffect::prepareGeometryChangeInvalidateCache()
QCOMPARE(item->nbPaint, 0);
}
+void tst_QGraphicsEffect::itemHasNoContents()
+{
+ QGraphicsRectItem *parent = new QGraphicsRectItem;
+ parent->setFlag(QGraphicsItem::ItemHasNoContents);
+
+ MyGraphicsItem *child = new MyGraphicsItem;
+ child->setParentItem(parent);
+ child->resize(200, 200);
+
+ QGraphicsScene scene;
+ scene.addItem(parent);
+
+ QGraphicsView view(&scene);
+ view.show();
+ QTest::qWaitForWindowShown(&view);
+ QTRY_COMPARE(child->nbPaint, 1);
+
+ CustomEffect *effect = new CustomEffect;
+ parent->setGraphicsEffect(effect);
+ QTRY_COMPARE(effect->numRepaints, 1);
+
+ for (int i = 0; i < 3; ++i) {
+ effect->reset();
+ effect->update();
+ QTRY_COMPARE(effect->numRepaints, 1);
+ }
+}
+
QTEST_MAIN(tst_QGraphicsEffect)
#include "tst_qgraphicseffect.moc"
diff --git a/tests/auto/qgraphicslayoutitem/tst_qgraphicslayoutitem.cpp b/tests/auto/qgraphicslayoutitem/tst_qgraphicslayoutitem.cpp
index 879e12b0bd..dbffa6e389 100644
--- a/tests/auto/qgraphicslayoutitem/tst_qgraphicslayoutitem.cpp
+++ b/tests/auto/qgraphicslayoutitem/tst_qgraphicslayoutitem.cpp
@@ -75,6 +75,7 @@ private slots:
void setPreferredSize_data();
void setPreferredSize();
void setSizePolicy_data();
+ void setPreferredSize2();
void setSizePolicy();
};
@@ -343,6 +344,13 @@ void tst_QGraphicsLayoutItem::setPreferredSize()
}
}
+void tst_QGraphicsLayoutItem::setPreferredSize2()
+{
+ SubQGraphicsLayoutItem layoutItem;
+ layoutItem.setPreferredSize(QSizeF(30, -1));
+ QCOMPARE(layoutItem.preferredWidth(), qreal(30));
+}
+
void tst_QGraphicsLayoutItem::setSizePolicy_data()
{
QTest::addColumn<QSizePolicy>("policy");
diff --git a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp
index c145623240..b8e729eb7c 100644
--- a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp
+++ b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp
@@ -287,6 +287,7 @@ private slots:
void taskQTBUG_5904_crashWithDeviceCoordinateCache();
void taskQT657_paintIntoCacheWithTransparentParts();
void taskQTBUG_7863_paintIntoCacheWithTransparentParts();
+ void taskQT_3674_doNotCrash();
};
void tst_QGraphicsScene::initTestCase()
@@ -4565,6 +4566,25 @@ void tst_QGraphicsScene::taskQTBUG_7863_paintIntoCacheWithTransparentParts()
}
}
+void tst_QGraphicsScene::taskQT_3674_doNotCrash()
+{
+ QGraphicsScene scene;
+
+ QGraphicsView view(&scene);
+ view.resize(200, 200);
+
+ QPixmap pixmap(view.size());
+ QPainter painter(&pixmap);
+ view.render(&painter);
+ painter.end();
+
+ scene.addItem(new QGraphicsWidget);
+ scene.setBackgroundBrush(Qt::green);
+
+ QApplication::processEvents();
+ QApplication::processEvents();
+}
+
void tst_QGraphicsScene::zeroScale()
{
//should not crash
diff --git a/tests/auto/qimagereader/images/qtbug13653-no_eoi.jpg b/tests/auto/qimagereader/images/qtbug13653-no_eoi.jpg
new file mode 100644
index 0000000000..605e8a85da
--- /dev/null
+++ b/tests/auto/qimagereader/images/qtbug13653-no_eoi.jpg
Binary files differ
diff --git a/tests/auto/qimagereader/qimagereader.qrc b/tests/auto/qimagereader/qimagereader.qrc
index 1acc82f514..5536b38b32 100644
--- a/tests/auto/qimagereader/qimagereader.qrc
+++ b/tests/auto/qimagereader/qimagereader.qrc
@@ -63,5 +63,6 @@
<file>images/rect.svgz</file>
<file>images/corrupt.svg</file>
<file>images/corrupt.svgz</file>
+ <file>images/qtbug13653-no_eoi.jpg</file>
</qresource>
</RCC>
diff --git a/tests/auto/qimagereader/tst_qimagereader.cpp b/tests/auto/qimagereader/tst_qimagereader.cpp
index 5b30b04352..3bee5d98aa 100644
--- a/tests/auto/qimagereader/tst_qimagereader.cpp
+++ b/tests/auto/qimagereader/tst_qimagereader.cpp
@@ -239,6 +239,7 @@ void tst_QImageReader::readImage_data()
#if defined QTEST_HAVE_JPEG
QTest::newRow("JPEG: beavis") << QString("beavis.jpg") << true << QByteArray("jpeg");
+ QTest::newRow("JPEG: qtbug13653") << QString("qtbug13653-no_eoi.jpg") << true << QByteArray("jpeg");
#endif
#if defined QTEST_HAVE_GIF
QTest::newRow("GIF: earth") << QString("earth.gif") << true << QByteArray("gif");
@@ -1039,6 +1040,7 @@ void tst_QImageReader::readFromDevice_data()
QTest::newRow("jpeg-1") << QString("beavis.jpg") << QByteArray("jpeg");
QTest::newRow("jpeg-2") << QString("YCbCr_cmyk.jpg") << QByteArray("jpeg");
QTest::newRow("jpeg-3") << QString("YCbCr_rgb.jpg") << QByteArray("jpeg");
+ QTest::newRow("jpeg-4") << QString("qtbug13653-no_eoi.jpg") << QByteArray("jpeg");
#endif // QTEST_HAVE_JPEG
#ifdef QTEST_HAVE_GIF
QTest::newRow("gif-1") << QString("earth.gif") << QByteArray("gif");
@@ -1314,6 +1316,9 @@ void tst_QImageReader::readFromResources_data()
QTest::newRow("YCbCr_rgb.jpg") << QString("YCbCr_rgb.jpg")
<< QByteArray("jpg") << QSize(75, 50)
<< QString("");
+ QTest::newRow("qtbug13653-no_eoi.jpg") << QString("qtbug13653-no_eoi.jpg")
+ << QByteArray("jpg") << QSize(240, 180)
+ << QString("");
#endif
#ifdef QTEST_HAVE_MNG
QTest::newRow("corrupt.mng") << QString("corrupt.mng")
diff --git a/tests/auto/qlineedit/tst_qlineedit.cpp b/tests/auto/qlineedit/tst_qlineedit.cpp
index bfa940626a..93bd447b8c 100644
--- a/tests/auto/qlineedit/tst_qlineedit.cpp
+++ b/tests/auto/qlineedit/tst_qlineedit.cpp
@@ -3747,15 +3747,15 @@ void tst_QLineEdit::QTBUG697_paletteCurrentColorGroup()
void tst_QLineEdit::QTBUG13520_textNotVisible()
{
LineEdit le;
- le.setAlignment( Qt::AlignRight | Qt::AlignVCenter);
- le.show();
- QTest::qWaitForWindowShown(&le);
- le.setText("01-ST16-01SIL-MPL001wfgsdfgsdgsdfgsdfgsdfgsdfgsdfg");
- le.setCursorPosition(0);
- QTest::qWait(100); //just make sure we get he lineedit correcly painted
-
- QVERIFY(le.cursorRect().center().x() < le.width() / 2);
-
+ le.setAlignment( Qt::AlignRight | Qt::AlignVCenter);
+ le.show();
+ QTest::qWaitForWindowShown(&le);
+ le.setText("01-ST16-01SIL-MPL001wfgsdfgsdgsdfgsdfgsdfgsdfgsdfg");
+ le.setCursorPosition(0);
+ QTest::qWait(100); //just make sure we get he lineedit correcly painted
+
+ QVERIFY(le.cursorRect().center().x() < le.width() / 2);
+
}
diff --git a/tests/auto/qlist/tst_qlist.cpp b/tests/auto/qlist/tst_qlist.cpp
index 9f6b4a59ff..14b8057486 100644
--- a/tests/auto/qlist/tst_qlist.cpp
+++ b/tests/auto/qlist/tst_qlist.cpp
@@ -666,7 +666,7 @@ void tst_QList::testSTLIterators() const
void tst_QList::initializeList() const
{
-#ifdef QT_CXX0X_INITIALIZERLIST
+#ifdef Q_COMPILER_INITIALIZER_LISTS
QList<int> v1{2,3,4};
QCOMPARE(v1, QList<int>() << 2 << 3 << 4);
QCOMPARE(v1, (QList<int>{2,3,4}));
diff --git a/tests/auto/qmainwindow/tst_qmainwindow.cpp b/tests/auto/qmainwindow/tst_qmainwindow.cpp
index 1273e85603..5a69d9c314 100644
--- a/tests/auto/qmainwindow/tst_qmainwindow.cpp
+++ b/tests/auto/qmainwindow/tst_qmainwindow.cpp
@@ -1449,8 +1449,7 @@ Q_DECLARE_METATYPE(MoveList)
void MoveSeparator::apply(QMainWindow *mw) const
{
-
- QMainWindowLayout *l = qobject_cast<QMainWindowLayout*>(mw->layout());
+ QMainWindowLayout *l = qFindChild<QMainWindowLayout *>(mw);
QVERIFY(l);
QList<int> path;
diff --git a/tests/auto/qobject/tst_qobject.cpp b/tests/auto/qobject/tst_qobject.cpp
index abfe24b29e..24cd5a35e1 100644
--- a/tests/auto/qobject/tst_qobject.cpp
+++ b/tests/auto/qobject/tst_qobject.cpp
@@ -3285,16 +3285,16 @@ void tst_QObject::overloads()
QCOMPARE(obj2.s_num, 101);
emit obj1.sig(&obj2, &obj3); //this signal is connected
QCOMPARE(obj1.s_num, 11);
- QCOMPARE(obj1.o1_obj, &obj2);
+ QCOMPARE(obj1.o1_obj, (QObject *)&obj2);
QCOMPARE(obj1.o2_obj, &obj3);
QCOMPARE(obj1.o3_obj, (QObject *)0); //default arg of the signal
- QCOMPARE(obj1.o4_obj, qApp); //default arg of the slot
+ QCOMPARE(obj1.o4_obj, (QObject *)qApp); //default arg of the slot
QCOMPARE(obj2.s_num, 111);
- QCOMPARE(obj2.o1_obj, &obj2);
+ QCOMPARE(obj2.o1_obj, (QObject *)&obj2);
QCOMPARE(obj2.o2_obj, &obj3);
QCOMPARE(obj2.o3_obj, (QObject *)0); //default arg of the signal
- QCOMPARE(obj2.o4_obj, qApp); //default arg of the slot
+ QCOMPARE(obj2.o4_obj, (QObject *)qApp); //default arg of the slot
}
class ManySignals : public QObject
diff --git a/tests/auto/qpainter/tst_qpainter.cpp b/tests/auto/qpainter/tst_qpainter.cpp
index 1ba5859737..ae972854e4 100644
--- a/tests/auto/qpainter/tst_qpainter.cpp
+++ b/tests/auto/qpainter/tst_qpainter.cpp
@@ -221,6 +221,8 @@ private slots:
void drawRect_task215378();
void drawRect_task247505();
+ void drawText_subPixelPositionsInRaster_qtbug5053();
+
void drawImage_data();
void drawImage();
@@ -4541,6 +4543,14 @@ void tst_QPainter::clipBoundingRect()
QVERIFY(p.clipBoundingRect().contains(QRect(120, 120, 20, 20)));
QVERIFY(!p.clipBoundingRect().contains(QRectF(100, 100, 200, 100)));
+ // Test a basic float rectangle
+ p.setClipRect(QRectF(100, 100, 200, 100));
+ QVERIFY(p.clipBoundingRect().contains(QRectF(100, 100, 200, 100)));
+ QVERIFY(!p.clipBoundingRect().contains(QRectF(50, 50, 300, 200)));
+ p.setClipRect(QRectF(120, 120, 20, 20), Qt::IntersectClip);
+ QVERIFY(p.clipBoundingRect().contains(QRect(120, 120, 20, 20)));
+ QVERIFY(!p.clipBoundingRect().contains(QRectF(100, 100, 200, 100)));
+
// Test a basic path + region
QPainterPath path;
path.addRect(100, 100, 200, 100);
@@ -4562,6 +4572,65 @@ void tst_QPainter::clipBoundingRect()
}
+void tst_QPainter::drawText_subPixelPositionsInRaster_qtbug5053()
+{
+#if !defined(Q_WS_MAC) || !defined(QT_MAC_USE_COCOA)
+ QSKIP("Only Mac/Cocoa supports sub pixel positions in raster engine currently", SkipAll);
+#endif
+
+ int w = 10, h = 10;
+ QImage image(w, h, QImage::Format_RGB32);
+ image.fill(0xffffffff);
+ QPainter p(&image);
+ p.drawText(0, h, "X\\");
+ p.end();
+
+ bool foundNonGrayPixel = false;
+ const int *bits = (const int *) ((const QImage &) image).bits();
+ int bpl = image.bytesPerLine() / 4;
+ for (int y=0; y<w; ++y) {
+ for (int x=0; x<h; ++x) {
+ int r = qRed(bits[x]);
+ int g = qGreen(bits[x]);
+ int b = qBlue(bits[x]);
+ if (r != g || r != b) {
+ foundNonGrayPixel = true;
+ break;
+ }
+ }
+ bits += bpl;
+ }
+ if (!foundNonGrayPixel)
+ QSKIP("Font smoothing must be turned on for this test", SkipAll);
+
+ QFontMetricsF fm(qApp->font());
+
+ QImage baseLine(fm.width(QChar::fromLatin1('e')), fm.height(), QImage::Format_RGB32);
+ baseLine.fill(Qt::white);
+ {
+ QPainter p(&baseLine);
+ p.drawText(0, fm.ascent(), QString::fromLatin1("e"));
+ }
+
+ bool foundDifferentRasterization = false;
+ for (int i=1; i<12; ++i) {
+ QImage comparison(baseLine.size(), QImage::Format_RGB32);
+ comparison.fill(Qt::white);
+
+ {
+ QPainter p(&comparison);
+ p.drawText(QPointF(i / 12.0, fm.ascent()), QString::fromLatin1("e"));
+ }
+
+ if (comparison != baseLine) {
+ foundDifferentRasterization = true;
+ break;
+ }
+ }
+
+ QVERIFY(foundDifferentRasterization);
+}
+
QTEST_MAIN(tst_QPainter)
#include "tst_qpainter.moc"
diff --git a/tests/auto/qpixmap/tst_qpixmap.cpp b/tests/auto/qpixmap/tst_qpixmap.cpp
index 7e0f466cd5..8005ec5d50 100644
--- a/tests/auto/qpixmap/tst_qpixmap.cpp
+++ b/tests/auto/qpixmap/tst_qpixmap.cpp
@@ -742,6 +742,11 @@ void tst_QPixmap::testMetrics()
QCOMPARE(bitmap.width(), 100);
QCOMPARE(bitmap.height(), 100);
QCOMPARE(bitmap.depth(), 1);
+
+ QPixmap null;
+
+ QCOMPARE(null.size().width(), null.width());
+ QCOMPARE(null.size().height(), null.height());
}
void tst_QPixmap::createMaskFromColor()
diff --git a/tests/auto/qpixmapfilter/tst_qpixmapfilter.cpp b/tests/auto/qpixmapfilter/tst_qpixmapfilter.cpp
index f0f087d985..12d2c57dc3 100644
--- a/tests/auto/qpixmapfilter/tst_qpixmapfilter.cpp
+++ b/tests/auto/qpixmapfilter/tst_qpixmapfilter.cpp
@@ -72,6 +72,7 @@ private slots:
void convolutionBoundingRectFor();
void convolutionDrawSubRect();
void dropShadowBoundingRectFor();
+ void blurIndexed8();
void testDefaultImplementations();
};
@@ -423,6 +424,27 @@ void tst_QPixmapFilter::dropShadowBoundingRectFor()
QCOMPARE(filter.boundingRectFor(rect3), rect3.adjusted(-delta - 10, -delta - 10, 0, 0));
}
+QT_BEGIN_NAMESPACE
+void qt_blurImage(QImage &blurImage, qreal radius, bool quality, int transposed);
+QT_END_NAMESPACE
+
+void tst_QPixmapFilter::blurIndexed8()
+{
+ QImage img(16, 32, QImage::Format_Indexed8);
+ img.setColorCount(256);
+ for (int i = 0; i < 256; ++i)
+ img.setColor(i, qRgb(i, i, i));
+
+ img.fill(255);
+
+ QImage original = img;
+ qt_blurImage(img, 10, true, false);
+ QCOMPARE(original.size(), img.size());
+
+ original = img;
+ qt_blurImage(img, 10, true, true);
+ QCOMPARE(original.size(), QSize(img.height(), img.width()));
+}
QTEST_MAIN(tst_QPixmapFilter)
#include "tst_qpixmapfilter.moc"
diff --git a/tests/auto/qsequentialanimationgroup/tst_qsequentialanimationgroup.cpp b/tests/auto/qsequentialanimationgroup/tst_qsequentialanimationgroup.cpp
index e154528ea2..e16be8b93a 100644
--- a/tests/auto/qsequentialanimationgroup/tst_qsequentialanimationgroup.cpp
+++ b/tests/auto/qsequentialanimationgroup/tst_qsequentialanimationgroup.cpp
@@ -381,7 +381,7 @@ void tst_QSequentialAnimationGroup::setCurrentTimeWithUncontrolledAnimation()
QCOMPARE(a1_s_o2->currentLoopTime(), 250);
QCOMPARE(notTimeDriven->currentLoopTime(), 0);
QCOMPARE(loopsForever->currentLoopTime(), 0);
- QCOMPARE(group.currentAnimation(), notTimeDriven);
+ QCOMPARE(group.currentAnimation(), static_cast<QAbstractAnimation *>(notTimeDriven));
// Current time = 505
group.setCurrentTime(505);
@@ -391,7 +391,7 @@ void tst_QSequentialAnimationGroup::setCurrentTimeWithUncontrolledAnimation()
QCOMPARE(a1_s_o2->currentLoopTime(), 250);
QCOMPARE(notTimeDriven->currentLoopTime(), 5);
QCOMPARE(loopsForever->currentLoopTime(), 0);
- QCOMPARE(group.currentAnimation(), notTimeDriven);
+ QCOMPARE(group.currentAnimation(), static_cast<QAbstractAnimation *>(notTimeDriven));
QCOMPARE(sequence->state(), QAnimationGroup::Stopped);
QCOMPARE(a1_s_o1->state(), QAnimationGroup::Stopped);
QCOMPARE(a1_s_o2->state(), QAnimationGroup::Stopped);
diff --git a/tests/auto/qsettings/tst_qsettings.cpp b/tests/auto/qsettings/tst_qsettings.cpp
index 058a750fa5..0395eff4a8 100644
--- a/tests/auto/qsettings/tst_qsettings.cpp
+++ b/tests/auto/qsettings/tst_qsettings.cpp
@@ -60,6 +60,10 @@
#include <io.h>
#endif
+#if defined(Q_OS_WIN)
+#include <QtCore/qt_windows.h>
+#endif
+
#ifndef QSETTINGS_P_H_VERSION
#define QSETTINGS_P_H_VERSION 1
#endif
@@ -127,6 +131,9 @@ private slots:
#if !defined(Q_OS_WIN) && !defined(Q_OS_SYMBIAN)
void dontReorderIniKeysNeedlessly();
#endif
+#if defined(Q_OS_WIN)
+ void qtbug_13249();
+#endif
/*
These tests were developed for the Qt 3 QSettings class.
@@ -3801,6 +3808,62 @@ void tst_QSettings::setPathBug()
}
#endif
+#if defined(Q_OS_WIN)
+
+static DWORD readKeyType(HKEY handle, const QString &rSubKey)
+{
+ DWORD dataType;
+ DWORD dataSize;
+ LONG res = RegQueryValueEx(handle, reinterpret_cast<const wchar_t *>(rSubKey.utf16()), 0, &dataType, 0, &dataSize);
+
+ if (res == ERROR_SUCCESS)
+ return dataType;
+
+ return 0;
+}
+
+void tst_QSettings::qtbug_13249()
+{
+ QSettings settings1(QSettings::UserScope, "software.org", "KillerAPP");
+
+ qint32 x = 1024;
+ settings1.setValue("qtbug_13249_a", (qint32)x);
+ QCOMPARE(settings1.value("qtbug_13249_a").toInt(), (qint32)1024);
+ settings1.setValue("qtbug_13249_b", (quint32)x);
+ QCOMPARE(settings1.value("qtbug_13249_b").toUInt(), (quint32)1024);
+ settings1.setValue("qtbug_13249_c", (qint64)x);
+ QCOMPARE(settings1.value("qtbug_13249_c").toLongLong(), (qint64)1024);
+ settings1.setValue("qtbug_13249_d", (quint64)x);
+ QCOMPARE(settings1.value("qtbug_13249_d").toULongLong(), (quint64)1024);
+ settings1.sync();
+
+ HKEY handle;
+ LONG res;
+ QString keyName = "Software\\software.org\\KillerAPP";
+ res = RegOpenKeyEx(HKEY_CURRENT_USER, reinterpret_cast<const wchar_t *>(keyName.utf16()), 0, KEY_READ, &handle);
+ if (res == ERROR_SUCCESS)
+ {
+ DWORD dataType;
+ dataType = readKeyType(handle, QString("qtbug_13249_a"));
+ if (dataType != 0) {
+ QCOMPARE((int)REG_DWORD, (int)dataType);
+ }
+ dataType = readKeyType(handle, QString("qtbug_13249_b"));
+ if (dataType != 0) {
+ QCOMPARE((int)REG_DWORD, (int)dataType);
+ }
+ dataType = readKeyType(handle, QString("qtbug_13249_c"));
+ if (dataType != 0) {
+ QCOMPARE((int)REG_QWORD, (int)dataType);
+ }
+ dataType = readKeyType(handle, QString("qtbug_13249_d"));
+ if (dataType != 0) {
+ QCOMPARE((int)REG_QWORD, (int)dataType);
+ }
+ RegCloseKey(handle);
+ }
+}
+#endif
/*
// Not tested at the moment.
void tst_QSettings::oldSubkeyList()
diff --git a/tests/auto/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp b/tests/auto/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp
index 53fefeedc8..66caf4a71c 100644
--- a/tests/auto/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp
+++ b/tests/auto/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp
@@ -143,6 +143,7 @@ private slots:
void taskQTBUG_10287_unnecessaryMapCreation();
void testMultipleProxiesWithSelection();
+ void mapSelectionFromSource();
protected:
void buildHierarchy(const QStringList &data, QAbstractItemModel *model);
@@ -3075,6 +3076,44 @@ void tst_QSortFilterProxyModel::testMultipleProxiesWithSelection()
}
+static bool isValid(const QItemSelection &selection) {
+ foreach(const QItemSelectionRange &range, selection)
+ if (!range.isValid())
+ return false;
+ return true;
+}
+
+void tst_QSortFilterProxyModel::mapSelectionFromSource()
+{
+ QStringListModel model;
+ const QStringList initial = QString("bravo charlie delta echo").split(" ");
+ model.setStringList(initial);
+
+ QSortFilterProxyModel proxy;
+ proxy.setDynamicSortFilter(true);
+ proxy.setFilterRegExp("d.*");
+ proxy.setSourceModel(&model);
+
+ // Only "delta" remains.
+ QVERIFY(proxy.rowCount() == 1);
+
+ QItemSelection selection;
+ QModelIndex charlie = model.index(1, 0);
+ selection.append(QItemSelectionRange(charlie, charlie));
+ QModelIndex delta = model.index(2, 0);
+ selection.append(QItemSelectionRange(delta, delta));
+ QModelIndex echo = model.index(3, 0);
+ selection.append(QItemSelectionRange(echo, echo));
+
+ QVERIFY(isValid(selection));
+
+ QItemSelection proxiedSelection = proxy.mapSelectionFromSource(selection);
+
+ // Only "delta" is in the mapped result.
+ QVERIFY(proxiedSelection.size() == 1);
+ QVERIFY(isValid(proxiedSelection));
+}
+
class Model10287 : public QStandardItemModel
{
Q_OBJECT
diff --git a/tests/auto/qstatictext/tst_qstatictext.cpp b/tests/auto/qstatictext/tst_qstatictext.cpp
index 49d6633100..daf0fa3dfa 100644
--- a/tests/auto/qstatictext/tst_qstatictext.cpp
+++ b/tests/auto/qstatictext/tst_qstatictext.cpp
@@ -94,6 +94,8 @@ private slots:
void drawStruckOutText();
void drawOverlinedText();
void drawUnderlinedText();
+
+ void unprintableCharacter_qtbug12614();
};
void tst_QStaticText::init()
@@ -359,7 +361,7 @@ bool tst_QStaticText::supportsTransformations() const
QPaintEngine::Type type = engine->type();
if (type == QPaintEngine::OpenGL
-#if !defined Q_WS_WIN
+#if !defined(Q_WS_WIN) && !defined(Q_WS_X11)
|| type == QPaintEngine::Raster
#endif
)
@@ -772,5 +774,14 @@ void tst_QStaticText::drawUnderlinedText()
QCOMPARE(imageDrawText, imageDrawStaticText);
}
+void tst_QStaticText::unprintableCharacter_qtbug12614()
+{
+ QString s(QChar(0x200B)); // U+200B, ZERO WIDTH SPACE
+
+ QStaticText staticText(s);
+
+ QVERIFY(staticText.size().isValid()); // Force layout. Should not crash.
+}
+
QTEST_MAIN(tst_QStaticText)
#include "tst_qstatictext.moc"
diff --git a/tests/auto/qtimer/tst_qtimer.cpp b/tests/auto/qtimer/tst_qtimer.cpp
index b651187e9c..f23d0655d6 100644
--- a/tests/auto/qtimer/tst_qtimer.cpp
+++ b/tests/auto/qtimer/tst_qtimer.cpp
@@ -87,6 +87,8 @@ private slots:
void cancelLongTimer();
void singleShotStaticFunctionZeroTimeout();
void recurseOnTimeoutAndStopTimer();
+
+ void QTBUG13633_dontBlockEvents();
};
class TimerHelper : public QObject
@@ -269,13 +271,7 @@ void tst_QTimer::livelock()
QCOMPARE(tester.timeoutsForFirst, 1);
QCOMPARE(tester.timeoutsForExtra, 0);
QCOMPARE(tester.timeoutsForSecond, 1);
-#if defined(Q_OS_MAC)
- QEXPECT_FAIL("zero timer", "Posted events source are handled AFTER timers", Continue);
- QEXPECT_FAIL("non-zero timer", "Posted events source are handled AFTER timers", Continue);
-#elif defined(Q_OS_UNIX) && !defined(Q_OS_SYMBIAN)
- QEXPECT_FAIL("zero timer", "", Continue);
- QEXPECT_FAIL("non-zero timer", "", Continue);
-#elif defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
+#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
if (QSysInfo::WindowsVersion < QSysInfo::WV_XP)
QEXPECT_FAIL("non-zero timer", "Multimedia timers are not available on Windows 2000", Continue);
#elif defined(Q_OS_WINCE)
@@ -668,5 +664,64 @@ void tst_QTimer::recurseOnTimeoutAndStopTimer()
QVERIFY(!t.two->isActive());
}
+
+
+class DontBlockEvents : public QObject
+{
+ Q_OBJECT
+public:
+ DontBlockEvents();
+ void timerEvent(QTimerEvent*);
+
+ int count;
+ int total;
+ QBasicTimer m_timer;
+
+public slots:
+ void paintEvent();
+
+};
+
+DontBlockEvents::DontBlockEvents()
+{
+ count = 0;
+ total = 0;
+
+ //QTBUG-13633 need few unrelated timer running to reproduce the bug.
+ (new QTimer(this))->start(2000);
+ (new QTimer(this))->start(2500);
+ (new QTimer(this))->start(3000);
+ (new QTimer(this))->start(5000);
+ (new QTimer(this))->start(1000);
+ (new QTimer(this))->start(2000);
+
+ m_timer.start(1, this);
+}
+
+void DontBlockEvents::timerEvent(QTimerEvent* event)
+{
+ if (event->timerId() == m_timer.timerId()) {
+ QMetaObject::invokeMethod(this, "paintEvent", Qt::QueuedConnection);
+ m_timer.start(0, this);
+ count++;
+ QCOMPARE(count, 1);
+ total++;
+ }
+}
+
+void DontBlockEvents::paintEvent()
+{
+ count--;
+ QCOMPARE(count, 0);
+}
+
+
+void tst_QTimer::QTBUG13633_dontBlockEvents()
+{
+ DontBlockEvents t;
+ QTest::qWait(60);
+ QVERIFY(t.total > 2);
+}
+
QTEST_MAIN(tst_QTimer)
#include "tst_qtimer.moc"
diff --git a/tests/auto/qurl/tst_qurl.cpp b/tests/auto/qurl/tst_qurl.cpp
index 8091607dc3..eff4658a39 100644
--- a/tests/auto/qurl/tst_qurl.cpp
+++ b/tests/auto/qurl/tst_qurl.cpp
@@ -2489,16 +2489,26 @@ void tst_QUrl::isValid()
QUrl url = QUrl::fromEncoded("http://strange;hostname/here");
QVERIFY(!url.isValid());
QCOMPARE(url.path(), QString("/here"));
+ url.setAuthority("strange;hostname");
+ QVERIFY(!url.isValid());
url.setAuthority("foobar@bar");
QVERIFY(url.isValid());
+ url.setAuthority("strange;hostname");
+ QVERIFY(!url.isValid());
+ QVERIFY(url.errorString().contains("invalid hostname"));
}
{
QUrl url = QUrl::fromEncoded("foo://stuff;1/g");
QVERIFY(!url.isValid());
QCOMPARE(url.path(), QString("/g"));
+ url.setHost("stuff;1");
+ QVERIFY(!url.isValid());
url.setHost("stuff-1");
QVERIFY(url.isValid());
+ url.setHost("stuff;1");
+ QVERIFY(!url.isValid());
+ QVERIFY(url.errorString().contains("invalid hostname"));
}
}
diff --git a/tests/auto/qvector/tst_qvector.cpp b/tests/auto/qvector/tst_qvector.cpp
index d8dfacfeaf..a04ce604b4 100644
--- a/tests/auto/qvector/tst_qvector.cpp
+++ b/tests/auto/qvector/tst_qvector.cpp
@@ -837,7 +837,7 @@ void tst_QVector::QTBUG6416_reserve()
void tst_QVector::initializeList()
{
-#ifdef QT_CXX0X_INITIALIZERLIST
+#ifdef Q_COMPILER_INITIALIZER_LISTS
QVector<int> v1{2,3,4};
QCOMPARE(v1, QVector<int>() << 2 << 3 << 4);
QCOMPARE(v1, (QVector<int>{2,3,4}));
diff --git a/tools/assistant/tools/assistant/helpenginewrapper.cpp b/tools/assistant/tools/assistant/helpenginewrapper.cpp
index dc35b2d1eb..8a5bb9c225 100644
--- a/tools/assistant/tools/assistant/helpenginewrapper.cpp
+++ b/tools/assistant/tools/assistant/helpenginewrapper.cpp
@@ -115,7 +115,7 @@ private:
QMap<QString, RecentSignal> m_recentQchUpdates;
};
-const QString HelpEngineWrapper::TrUnfiltered = tr("Unfiltered");
+const QString HelpEngineWrapper::TrUnfiltered = HelpEngineWrapper::tr("Unfiltered");
HelpEngineWrapper *HelpEngineWrapper::helpEngineWrapper = 0;
diff --git a/tools/assistant/tools/qhelpconverter/filespage.cpp b/tools/assistant/tools/qhelpconverter/filespage.cpp
index 4ebf391f6a..fd4a40e8c9 100644
--- a/tools/assistant/tools/qhelpconverter/filespage.cpp
+++ b/tools/assistant/tools/qhelpconverter/filespage.cpp
@@ -59,8 +59,8 @@ FilesPage::FilesPage(QWidget *parent)
connect(m_ui.removeAllButton, SIGNAL(clicked()),
this, SLOT(removeAllFiles()));
- m_ui.fileLabel->setText(tr("<p><b>Warning:</b> Be aware "
- "when removing images or stylesheets since those files "
+ m_ui.fileLabel->setText(tr("<p><b>Warning:</b> "
+ "When removing images or stylesheets, be aware that those files "
"are not directly referenced by the .adp or .dcf "
"file.</p>"));
}
diff --git a/tools/assistant/tools/qhelpconverter/filterpage.cpp b/tools/assistant/tools/qhelpconverter/filterpage.cpp
index c782943875..c15a580b22 100644
--- a/tools/assistant/tools/qhelpconverter/filterpage.cpp
+++ b/tools/assistant/tools/qhelpconverter/filterpage.cpp
@@ -50,7 +50,7 @@ FilterPage::FilterPage(QWidget *parent)
setTitle(tr("Filter Settings"));
setSubTitle(tr("Specify the filter attributes for the "
"documentation. If filter attributes are used, "
- "also define a custom filter for it. Both, the "
+ "also define a custom filter for it. Both the "
"filter attributes and the custom filters are "
"optional."));
diff --git a/tools/configure/configure.pro b/tools/configure/configure.pro
index a3473af359..8a62fe169f 100644
--- a/tools/configure/configure.pro
+++ b/tools/configure/configure.pro
@@ -92,6 +92,7 @@ SOURCES = main.cpp configureapp.cpp environment.cpp tools.cpp \
$$QT_SOURCE_TREE/src/corelib/io/qiodevice.cpp \
$$QT_SOURCE_TREE/src/corelib/io/qtextstream.cpp \
$$QT_SOURCE_TREE/src/corelib/io/qtemporaryfile.cpp \
+ $$QT_SOURCE_TREE/src/corelib/plugin/qsystemlibrary.cpp \
$$QT_SOURCE_TREE/src/corelib/tools/qbitarray.cpp \
$$QT_SOURCE_TREE/src/corelib/tools/qdatetime.cpp \
$$QT_SOURCE_TREE/src/corelib/tools/qmap.cpp \
diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp
index 882dafee87..391bcf8f62 100644
--- a/tools/configure/configureapp.cpp
+++ b/tools/configure/configureapp.cpp
@@ -279,6 +279,7 @@ Configure::Configure(int& argc, char** argv)
dictionary[ "DIRECTSHOW" ] = "no";
dictionary[ "WEBKIT" ] = "auto";
dictionary[ "DECLARATIVE" ] = "auto";
+ dictionary[ "DECLARATIVE_DEBUG" ]= "yes";
dictionary[ "PLUGIN_MANIFESTS" ] = "yes";
QString version;
@@ -957,10 +958,16 @@ void Configure::parseCmdLine()
dictionary[ "WEBKIT" ] = "no";
} else if (configCmdLine.at(i) == "-webkit") {
dictionary[ "WEBKIT" ] = "yes";
+ } else if (configCmdLine.at(i) == "-webkit-debug") {
+ dictionary[ "WEBKIT" ] = "debug";
} else if (configCmdLine.at(i) == "-no-declarative") {
dictionary[ "DECLARATIVE" ] = "no";
} else if (configCmdLine.at(i) == "-declarative") {
dictionary[ "DECLARATIVE" ] = "yes";
+ } else if (configCmdLine.at(i) == "-no-declarative-debug") {
+ dictionary[ "DECLARATIVE_DEBUG" ] = "no";
+ } else if (configCmdLine.at(i) == "-declarative-debug") {
+ dictionary[ "DECLARATIVE_DEBUG" ] = "yes";
} else if (configCmdLine.at(i) == "-no-plugin-manifests") {
dictionary[ "PLUGIN_MANIFESTS" ] = "no";
} else if (configCmdLine.at(i) == "-plugin-manifests") {
@@ -1646,7 +1653,7 @@ bool Configure::displayHelp()
"[-phonon] [-no-phonon-backend] [-phonon-backend]\n"
"[-no-multimedia] [-multimedia] [-no-audio-backend] [-audio-backend]\n"
"[-no-script] [-script] [-no-scripttools] [-scripttools]\n"
- "[-no-webkit] [-webkit] [-graphicssystem raster|opengl|openvg]\n\n", 0, 7);
+ "[-no-webkit] [-webkit] [-webkit-debug] [-graphicssystem raster|opengl|openvg]\n\n", 0, 7);
desc("Installation options:\n\n");
@@ -1830,12 +1837,15 @@ bool Configure::displayHelp()
desc("AUDIO_BACKEND", "yes","-audio-backend", "Compile in the platform audio backend into QtMultimedia");
desc("WEBKIT", "no", "-no-webkit", "Do not compile in the WebKit module");
desc("WEBKIT", "yes", "-webkit", "Compile in the WebKit module (WebKit is built if a decent C++ compiler is used.)");
+ desc("WEBKIT", "debug", "-webkit-debug", "Compile in the WebKit module with debug symbols.");
desc("SCRIPT", "no", "-no-script", "Do not build the QtScript module.");
desc("SCRIPT", "yes", "-script", "Build the QtScript module.");
desc("SCRIPTTOOLS", "no", "-no-scripttools", "Do not build the QtScriptTools module.");
desc("SCRIPTTOOLS", "yes", "-scripttools", "Build the QtScriptTools module.");
desc("DECLARATIVE", "no", "-no-declarative", "Do not build the declarative module");
desc("DECLARATIVE", "yes", "-declarative", "Build the declarative module");
+ desc("DECLARATIVE_DEBUG", "no", "-no-declarative-debug", "Do not build the declarative debugging support");
+ desc("DECLARATIVE_DEBUG", "yes", "-declarative-debug", "Build the declarative debugging support");
desc( "-arch <arch>", "Specify an architecture.\n"
"Available values for <arch>:");
@@ -2288,6 +2298,8 @@ void Configure::autoDetection()
dictionary["WEBKIT"] = checkAvailability("WEBKIT") ? "yes" : "no";
if (dictionary["DECLARATIVE"] == "auto")
dictionary["DECLARATIVE"] = dictionary["SCRIPT"] == "yes" ? "yes" : "no";
+ if (dictionary["DECLARATIVE_DEBUG"] == "auto")
+ dictionary["DECLARATIVE_DEBUG"] = dictionary["DECLARATIVE"] == "yes" ? "yes" : "no";
if (dictionary["AUDIO_BACKEND"] == "auto")
dictionary["AUDIO_BACKEND"] = checkAvailability("AUDIO_BACKEND") ? "yes" : "no";
if (dictionary["WMSDK"] == "auto")
@@ -2698,10 +2710,12 @@ void Configure::generateOutputVars()
QString dst = buildPath + "/mkspecs/modules/qt_webkit_version.pri";
QFile::remove(dst);
- if (dictionary["WEBKIT"] == "yes") {
+ if (dictionary["WEBKIT"] != "no") {
// This include takes care of adding "webkit" to QT_CONFIG.
QString src = sourcePath + "/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri";
QFile::copy(src, dst);
+ if (dictionary["WEBKIT"] == "debug")
+ qtConfig += "webkit-debug";
}
if (dictionary["DECLARATIVE"] == "yes") {
@@ -3071,10 +3085,7 @@ void Configure::generateConfigfiles()
tmpStream << "/* Machine byte-order */" << endl;
tmpStream << "#define Q_BIG_ENDIAN 4321" << endl;
tmpStream << "#define Q_LITTLE_ENDIAN 1234" << endl;
- if (QSysInfo::ByteOrder == QSysInfo::BigEndian)
- tmpStream << "#define Q_BYTE_ORDER Q_BIG_ENDIAN" << endl;
- else
- tmpStream << "#define Q_BYTE_ORDER Q_LITTLE_ENDIAN" << endl;
+ tmpStream << "#define Q_BYTE_ORDER Q_LITTLE_ENDIAN" << endl;
tmpStream << endl << "// Compile time features" << endl;
tmpStream << "#define QT_ARCH_" << dictionary["ARCHITECTURE"].toUpper() << endl;
@@ -3116,6 +3127,7 @@ void Configure::generateConfigfiles()
if (dictionary["IPV6"] == "no") qconfigList += "QT_NO_IPV6";
if (dictionary["WEBKIT"] == "no") qconfigList += "QT_NO_WEBKIT";
if (dictionary["DECLARATIVE"] == "no") qconfigList += "QT_NO_DECLARATIVE";
+ if (dictionary["DECLARATIVE_DEBUG"] == "no") qconfigList += "QDECLARATIVE_NO_DEBUG_PROTOCOL";
if (dictionary["PHONON"] == "no") qconfigList += "QT_NO_PHONON";
if (dictionary["MULTIMEDIA"] == "no") qconfigList += "QT_NO_MULTIMEDIA";
if (dictionary["XMLPATTERNS"] == "no") qconfigList += "QT_NO_XMLPATTERNS";
@@ -3411,8 +3423,14 @@ void Configure::displayConfig()
cout << "QtXmlPatterns support......." << dictionary[ "XMLPATTERNS" ] << endl;
cout << "Phonon support.............." << dictionary[ "PHONON" ] << endl;
cout << "QtMultimedia support........" << dictionary[ "MULTIMEDIA" ] << endl;
- cout << "WebKit support.............." << dictionary[ "WEBKIT" ] << endl;
+ {
+ QString webkit = dictionary[ "WEBKIT" ];
+ if (webkit == "debug")
+ webkit = "yes (debug)";
+ cout << "WebKit support.............." << webkit;
+ }
cout << "Declarative support........." << dictionary[ "DECLARATIVE" ] << endl;
+ cout << "Declarative debugging......." << dictionary[ "DECLARATIVE_DEBUG" ] << endl;
cout << "QtScript support............" << dictionary[ "SCRIPT" ] << endl;
cout << "QtScriptTools support......." << dictionary[ "SCRIPTTOOLS" ] << endl;
cout << "Graphics System............." << dictionary[ "GRAPHICS_SYSTEM" ] << endl;
diff --git a/tools/designer/src/components/formeditor/formeditor_optionspage.cpp b/tools/designer/src/components/formeditor/formeditor_optionspage.cpp
index 102f44a390..8e0cc66962 100644
--- a/tools/designer/src/components/formeditor/formeditor_optionspage.cpp
+++ b/tools/designer/src/components/formeditor/formeditor_optionspage.cpp
@@ -86,9 +86,11 @@ ZoomSettingsWidget::ZoomSettingsWidget(QWidget *parent) :
m_zoomCombo->setEditable(false);
const IntList zoomValues = ZoomMenu::zoomValues();
const IntList::const_iterator cend = zoomValues.constEnd();
- //: Zoom percentage
- for (IntList::const_iterator it = zoomValues.constBegin(); it != cend; ++it)
+
+ for (IntList::const_iterator it = zoomValues.constBegin(); it != cend; ++it) {
+ //: Zoom percentage
m_zoomCombo->addItem(QCoreApplication::translate("FormEditorOptionsPage", "%1 %").arg(*it), QVariant(*it));
+ }
// Layout
setCheckable(true);
diff --git a/tools/designer/src/components/formeditor/qdesigner_resource.cpp b/tools/designer/src/components/formeditor/qdesigner_resource.cpp
index a29bc1fcee..7fabf68381 100644
--- a/tools/designer/src/components/formeditor/qdesigner_resource.cpp
+++ b/tools/designer/src/components/formeditor/qdesigner_resource.cpp
@@ -1381,34 +1381,6 @@ DomLayoutItem *QDesignerResource::createDom(QLayoutItem *item, DomLayout *ui_lay
} else {
return 0;
}
-
- if (m_chain.size() && item->widget()) {
- if (QGridLayout *grid = qobject_cast<QGridLayout*>(m_chain.top())) {
- const int index = Utils::indexOfWidget(grid, item->widget());
-
- int row, column, rowspan, colspan;
- grid->getItemPosition(index, &row, &column, &rowspan, &colspan);
- ui_item->setAttributeRow(row);
- ui_item->setAttributeColumn(column);
-
- if (colspan != 1)
- ui_item->setAttributeColSpan(colspan);
-
- if (rowspan != 1)
- ui_item->setAttributeRowSpan(rowspan);
- } else {
- if (QFormLayout *form = qobject_cast<QFormLayout*>(m_chain.top())) {
- const int index = Utils::indexOfWidget(form, item->widget());
- int row, column, colspan;
- getFormLayoutItemPosition(form, index, &row, &column, 0, &colspan);
- ui_item->setAttributeRow(row);
- ui_item->setAttributeColumn(column);
- if (colspan != 1)
- ui_item->setAttributeColSpan(colspan);
- }
- }
- }
-
return ui_item;
}
diff --git a/tools/designer/src/components/propertyeditor/designerpropertymanager.cpp b/tools/designer/src/components/propertyeditor/designerpropertymanager.cpp
index e251511f26..8e7312f064 100644
--- a/tools/designer/src/components/propertyeditor/designerpropertymanager.cpp
+++ b/tools/designer/src/components/propertyeditor/designerpropertymanager.cpp
@@ -83,6 +83,7 @@ static const char *validationModesAttributeC = "validationMode";
static const char *superPaletteAttributeC = "superPalette";
static const char *defaultResourceAttributeC = "defaultResource";
static const char *fontAttributeC = "font";
+static const char *themeAttributeC = "theme";
class DesignerFlagPropertyType
{
@@ -113,13 +114,15 @@ public:
void setTextPropertyValidationMode(TextPropertyValidationMode vm);
void setRichTextDefaultFont(const QFont &font) { m_richTextDefaultFont = font; }
- QFont richTextDefaultFont() const { return m_richTextDefaultFont; }
+ QFont richTextDefaultFont() const { return m_richTextDefaultFont; }
void setSpacing(int spacing);
TextPropertyEditor::UpdateMode updateMode() const { return m_editor->updateMode(); }
void setUpdateMode(TextPropertyEditor::UpdateMode um) { m_editor->setUpdateMode(um); }
+ void setIconThemeModeEnabled(bool enable);
+
public slots:
void setText(const QString &text);
@@ -132,6 +135,8 @@ private slots:
void fileActionActivated();
private:
TextPropertyEditor *m_editor;
+ IconThemeEditor *m_themeEditor;
+ bool m_iconThemeModeEnabled;
QFont m_richTextDefaultFont;
QToolButton *m_button;
QMenu *m_menu;
@@ -144,6 +149,8 @@ private:
TextEditor::TextEditor(QDesignerFormEditorInterface *core, QWidget *parent) :
QWidget(parent),
m_editor(new TextPropertyEditor(this)),
+ m_themeEditor(new IconThemeEditor(this, false)),
+ m_iconThemeModeEnabled(false),
m_richTextDefaultFont(QApplication::font()),
m_button(new QToolButton(this)),
m_menu(new QMenu(this)),
@@ -152,7 +159,11 @@ TextEditor::TextEditor(QDesignerFormEditorInterface *core, QWidget *parent) :
m_layout(new QHBoxLayout(this)),
m_core(core)
{
+ m_themeEditor->setVisible(false);
+ m_button->setVisible(false);
+
m_layout->addWidget(m_editor);
+ m_layout->addWidget(m_themeEditor);
m_button->setText(tr("..."));
m_button->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Ignored);
m_button->setFixedWidth(20);
@@ -163,9 +174,10 @@ TextEditor::TextEditor(QDesignerFormEditorInterface *core, QWidget *parent) :
connect(m_resourceAction, SIGNAL(triggered()), this, SLOT(resourceActionActivated()));
connect(m_fileAction, SIGNAL(triggered()), this, SLOT(fileActionActivated()));
connect(m_editor, SIGNAL(textChanged(QString)), this, SIGNAL(textChanged(QString)));
+ connect(m_themeEditor, SIGNAL(edited(QString)), this, SIGNAL(textChanged(QString)));
connect(m_button, SIGNAL(clicked()), this, SLOT(buttonClicked()));
+
setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed));
- m_button->setVisible(false);
setFocusProxy(m_editor);
m_menu->addAction(m_resourceAction);
@@ -177,6 +189,22 @@ void TextEditor::setSpacing(int spacing)
m_layout->setSpacing(spacing);
}
+void TextEditor::setIconThemeModeEnabled(bool enable)
+{
+ if (m_iconThemeModeEnabled == enable)
+ return; // nothing changes
+ m_iconThemeModeEnabled = enable;
+ m_editor->setVisible(!enable);
+ m_themeEditor->setVisible(enable);
+ if (enable) {
+ m_themeEditor->setTheme(m_editor->text());
+ setFocusProxy(m_themeEditor);
+ } else {
+ m_editor->setText(m_themeEditor->theme());
+ setFocusProxy(m_editor);
+ }
+}
+
TextPropertyValidationMode TextEditor::textPropertyValidationMode() const
{
return m_editor->textPropertyValidationMode();
@@ -199,7 +227,10 @@ void TextEditor::setTextPropertyValidationMode(TextPropertyValidationMode vm)
void TextEditor::setText(const QString &text)
{
- m_editor->setText(text);
+ if (m_iconThemeModeEnabled)
+ m_themeEditor->setTheme(text);
+ else
+ m_editor->setText(text);
}
void TextEditor::buttonClicked()
@@ -279,6 +310,49 @@ void TextEditor::fileActionActivated()
emit textChanged(newText);
}
+// ------------ ThemeInputDialog
+
+class IconThemeDialog : public QDialog
+{
+ Q_OBJECT
+public:
+ static QString getTheme(QWidget *parent, const QString &theme, bool *ok);
+private:
+ IconThemeDialog(QWidget *parent);
+ IconThemeEditor *m_editor;
+};
+
+IconThemeDialog::IconThemeDialog(QWidget *parent)
+ : QDialog(parent)
+{
+ setWindowTitle(tr("Set Icon From Theme"));
+
+ QVBoxLayout *layout = new QVBoxLayout(this);
+ QLabel *label = new QLabel(tr("Input icon name from the current theme:"), this);
+ m_editor = new IconThemeEditor(this);
+ QDialogButtonBox *buttons = new QDialogButtonBox(this);
+ buttons->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
+
+ layout->addWidget(label);
+ layout->addWidget(m_editor);
+ layout->addWidget(buttons);
+
+ connect(buttons, SIGNAL(accepted()), this, SLOT(accept()));
+ connect(buttons, SIGNAL(rejected()), this, SLOT(reject()));
+}
+
+QString IconThemeDialog::getTheme(QWidget *parent, const QString &theme, bool *ok)
+{
+ IconThemeDialog dlg(parent);
+ dlg.m_editor->setTheme(theme);
+ if (dlg.exec() == QDialog::Accepted) {
+ *ok = true;
+ return dlg.m_editor->theme();
+ }
+ *ok = false;
+ return QString();
+}
+
// ------------ PixmapEditor
class PixmapEditor : public QWidget
{
@@ -288,12 +362,15 @@ public:
void setSpacing(int spacing);
void setPixmapCache(DesignerPixmapCache *cache);
+ void setIconThemeModeEnabled(bool enabled);
public slots:
void setPath(const QString &path);
+ void setTheme(const QString &theme);
void setDefaultPixmap(const QPixmap &pixmap);
signals:
void pathChanged(const QString &path);
+ void themeChanged(const QString &theme);
protected:
void contextMenuEvent(QContextMenuEvent *event);
@@ -302,32 +379,39 @@ private slots:
void defaultActionActivated();
void resourceActionActivated();
void fileActionActivated();
+ void themeActionActivated();
void copyActionActivated();
void pasteActionActivated();
void clipboardDataChanged();
private:
+ void updateLabels();
+ bool m_iconThemeModeEnabled;
QDesignerFormEditorInterface *m_core;
QLabel *m_pixmapLabel;
QLabel *m_pathLabel;
QToolButton *m_button;
QAction *m_resourceAction;
QAction *m_fileAction;
+ QAction *m_themeAction;
QAction *m_copyAction;
QAction *m_pasteAction;
QHBoxLayout *m_layout;
QPixmap m_defaultPixmap;
QString m_path;
+ QString m_theme;
DesignerPixmapCache *m_pixmapCache;
};
PixmapEditor::PixmapEditor(QDesignerFormEditorInterface *core, QWidget *parent) :
QWidget(parent),
+ m_iconThemeModeEnabled(false),
m_core(core),
m_pixmapLabel(new QLabel(this)),
m_pathLabel(new QLabel(this)),
m_button(new QToolButton(this)),
m_resourceAction(new QAction(tr("Choose Resource..."), this)),
m_fileAction(new QAction(tr("Choose File..."), this)),
+ m_themeAction(new QAction(tr("Set Icon From Theme..."), this)),
m_copyAction(new QAction(createIconSet(QLatin1String("editcopy.png")), tr("Copy Path"), this)),
m_pasteAction(new QAction(createIconSet(QLatin1String("editpaste.png")), tr("Paste Path"), this)),
m_layout(new QHBoxLayout(this)),
@@ -345,10 +429,12 @@ PixmapEditor::PixmapEditor(QDesignerFormEditorInterface *core, QWidget *parent)
m_pixmapLabel->setFixedWidth(16);
m_pixmapLabel->setAlignment(Qt::AlignCenter);
m_pathLabel->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed));
+ m_themeAction->setVisible(false);
QMenu *menu = new QMenu(this);
menu->addAction(m_resourceAction);
menu->addAction(m_fileAction);
+ menu->addAction(m_themeAction);
m_button->setMenu(menu);
m_button->setText(tr("..."));
@@ -356,6 +442,7 @@ PixmapEditor::PixmapEditor(QDesignerFormEditorInterface *core, QWidget *parent)
connect(m_button, SIGNAL(clicked()), this, SLOT(defaultActionActivated()));
connect(m_resourceAction, SIGNAL(triggered()), this, SLOT(resourceActionActivated()));
connect(m_fileAction, SIGNAL(triggered()), this, SLOT(fileActionActivated()));
+ connect(m_themeAction, SIGNAL(triggered()), this, SLOT(themeActionActivated()));
connect(m_copyAction, SIGNAL(triggered()), this, SLOT(copyActionActivated()));
connect(m_pasteAction, SIGNAL(triggered()), this, SLOT(pasteActionActivated()));
setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Ignored));
@@ -370,6 +457,14 @@ void PixmapEditor::setPixmapCache(DesignerPixmapCache *cache)
m_pixmapCache = cache;
}
+void PixmapEditor::setIconThemeModeEnabled(bool enabled)
+{
+ if (m_iconThemeModeEnabled == enabled)
+ return;
+ m_iconThemeModeEnabled = enabled;
+ m_themeAction->setVisible(enabled);
+}
+
void PixmapEditor::setSpacing(int spacing)
{
m_layout->setSpacing(spacing);
@@ -378,22 +473,40 @@ void PixmapEditor::setSpacing(int spacing)
void PixmapEditor::setPath(const QString &path)
{
m_path = path;
- if (m_path.isEmpty()) {
- m_pathLabel->setText(path);
- m_pixmapLabel->setPixmap(m_defaultPixmap);
- m_copyAction->setEnabled(false);
- } else {
- m_pathLabel->setText(QFileInfo(m_path).fileName());
- if (m_pixmapCache)
- m_pixmapLabel->setPixmap(QIcon(m_pixmapCache->pixmap(PropertySheetPixmapValue(path))).pixmap(16, 16));
+ updateLabels();
+}
+
+void PixmapEditor::setTheme(const QString &theme)
+{
+ m_theme = theme;
+ updateLabels();
+}
+
+void PixmapEditor::updateLabels()
+{
+ if (m_iconThemeModeEnabled && QIcon::hasThemeIcon(m_theme)) {
+ m_pixmapLabel->setPixmap(QIcon::fromTheme(m_theme).pixmap(16, 16));
+ m_pathLabel->setText(tr("[Theme] %1").arg(m_theme));
m_copyAction->setEnabled(true);
+ } else {
+ if (m_path.isEmpty()) {
+ m_pathLabel->setText(m_path);
+ m_pixmapLabel->setPixmap(m_defaultPixmap);
+ m_copyAction->setEnabled(false);
+ } else {
+ m_pathLabel->setText(QFileInfo(m_path).fileName());
+ if (m_pixmapCache)
+ m_pixmapLabel->setPixmap(QIcon(m_pixmapCache->pixmap(PropertySheetPixmapValue(m_path))).pixmap(16, 16));
+ m_copyAction->setEnabled(true);
+ }
}
}
void PixmapEditor::setDefaultPixmap(const QPixmap &pixmap)
{
m_defaultPixmap = QIcon(pixmap).pixmap(16, 16);
- if (m_path.isEmpty())
+ const bool hasThemeIcon = m_iconThemeModeEnabled && QIcon::hasThemeIcon(m_theme);
+ if (!hasThemeIcon && m_path.isEmpty())
m_pixmapLabel->setPixmap(m_defaultPixmap);
}
@@ -408,6 +521,10 @@ void PixmapEditor::contextMenuEvent(QContextMenuEvent *event)
void PixmapEditor::defaultActionActivated()
{
+ if (m_iconThemeModeEnabled && QIcon::hasThemeIcon(m_theme)) {
+ themeActionActivated();
+ return;
+ }
// Default to resource
const PropertySheetPixmapValue::PixmapSource ps = m_path.isEmpty() ? PropertySheetPixmapValue::ResourcePixmap : PropertySheetPixmapValue::getPixmapSource(m_core, m_path);
switch (ps) {
@@ -426,6 +543,7 @@ void PixmapEditor::resourceActionActivated()
const QString oldPath = m_path;
const QString newPath = IconSelector::choosePixmapResource(m_core, m_core->resourceModel(), oldPath, this);
if (!newPath.isEmpty() && newPath != oldPath) {
+ setTheme(QString());
setPath(newPath);
emit pathChanged(newPath);
}
@@ -435,15 +553,30 @@ void PixmapEditor::fileActionActivated()
{
const QString newPath = IconSelector::choosePixmapFile(m_path, m_core->dialogGui(), this);
if (!newPath.isEmpty() && newPath != m_path) {
+ setTheme(QString());
setPath(newPath);
emit pathChanged(newPath);
}
}
+void PixmapEditor::themeActionActivated()
+{
+ bool ok;
+ const QString newTheme = IconThemeDialog::getTheme(this, m_theme, &ok);
+ if (ok && newTheme != m_theme) {
+ setTheme(newTheme);
+ setPath(QString());
+ emit themeChanged(newTheme);
+ }
+}
+
void PixmapEditor::copyActionActivated()
{
QClipboard *clipboard = QApplication::clipboard();
- clipboard->setText(m_path);
+ if (m_iconThemeModeEnabled && QIcon::hasThemeIcon(m_theme))
+ clipboard->setText(m_theme);
+ else
+ clipboard->setText(m_path);
}
void PixmapEditor::pasteActionActivated()
@@ -455,8 +588,15 @@ void PixmapEditor::pasteActionActivated()
QStringList list = text.split(QLatin1Char('\n'));
if (list.size() > 0) {
text = list.at(0);
- setPath(text);
- emit pathChanged(text);
+ if (m_iconThemeModeEnabled && QIcon::hasThemeIcon(text)) {
+ setTheme(text);
+ setPath(QString());
+ emit themeChanged(text);
+ } else {
+ setPath(text);
+ setTheme(QString());
+ emit pathChanged(text);
+ }
}
}
}
@@ -807,8 +947,13 @@ void DesignerPropertyManager::slotValueChanged(QtProperty *property, const QVari
} else if (QtProperty *iProperty = m_iconSubPropertyToProperty.value(property, 0)) {
QtVariantProperty *iconProperty = variantProperty(iProperty);
PropertySheetIconValue icon = qvariant_cast<PropertySheetIconValue>(iconProperty->value());
- QPair<QIcon::Mode, QIcon::State> pair = m_iconSubPropertyToState.value(property);
- icon.setPixmap(pair.first, pair.second, qvariant_cast<PropertySheetPixmapValue>(value));
+ QMap<QtProperty *, QPair<QIcon::Mode, QIcon::State> >::ConstIterator itState = m_iconSubPropertyToState.constFind(property);
+ if (itState != m_iconSubPropertyToState.constEnd()) {
+ QPair<QIcon::Mode, QIcon::State> pair = m_iconSubPropertyToState.value(property);
+ icon.setPixmap(pair.first, pair.second, qvariant_cast<PropertySheetPixmapValue>(value));
+ } else { // must be theme property
+ icon.setTheme(value.toString());
+ }
QtProperty *origSourceOfChange = m_sourceOfChange;
if (!origSourceOfChange)
m_sourceOfChange = property;
@@ -859,12 +1004,16 @@ void DesignerPropertyManager::slotPropertyDestroyed(QtProperty *property)
m_keySequenceToDisambiguation.remove(keySequenceDisambiguationProperty);
m_disambiguationToKeySequence.remove(property);
} else if (QtProperty *iconProperty = m_iconSubPropertyToProperty.value(property, 0)) {
- QMap<QtProperty *, QMap<QPair<QIcon::Mode, QIcon::State>, QtProperty *> >::iterator it =
- m_propertyToIconSubProperties.find(iconProperty);
- QPair<QIcon::Mode, QIcon::State> state = m_iconSubPropertyToState.value(property);
- QMap<QPair<QIcon::Mode, QIcon::State>, QtProperty *> &propertyList = it.value();
- propertyList.remove(state);
- m_iconSubPropertyToState.remove(property);
+ if (m_propertyToTheme.value(iconProperty) == property) {
+ m_propertyToTheme.remove(iconProperty);
+ } else {
+ QMap<QtProperty *, QMap<QPair<QIcon::Mode, QIcon::State>, QtProperty *> >::iterator it =
+ m_propertyToIconSubProperties.find(iconProperty);
+ QPair<QIcon::Mode, QIcon::State> state = m_iconSubPropertyToState.value(property);
+ QMap<QPair<QIcon::Mode, QIcon::State>, QtProperty *> &propertyList = it.value();
+ propertyList.remove(state);
+ m_iconSubPropertyToState.remove(property);
+ }
m_iconSubPropertyToProperty.remove(property);
} else {
m_fontManager.slotPropertyDestroyed(property);
@@ -887,6 +1036,7 @@ QStringList DesignerPropertyManager::attributes(int propertyType) const
} else if (propertyType == designerStringTypeId() || propertyType == QVariant::String) {
list.append(QLatin1String(validationModesAttributeC));
list.append(QLatin1String(fontAttributeC));
+ list.append(QLatin1String(themeAttributeC));
} else if (propertyType == QVariant::Palette) {
list.append(QLatin1String(superPaletteAttributeC));
}
@@ -912,6 +1062,8 @@ int DesignerPropertyManager::attributeType(int propertyType, const QString &attr
return QVariant::Int;
if (attribute == QLatin1String(fontAttributeC))
return QVariant::Font;
+ if (attribute == QLatin1String(themeAttributeC))
+ return QVariant::Bool;
}
if (propertyType == QVariant::Palette && attribute == QLatin1String(superPaletteAttributeC))
return QVariant::Palette;
@@ -949,6 +1101,12 @@ QVariant DesignerPropertyManager::attributeValue(const QtProperty *property, con
return it.value();
}
+ if (attribute == QLatin1String(themeAttributeC)) {
+ const PropertyBoolMap::const_iterator it = m_stringThemeAttributes.constFind(prop);
+ if (it != m_stringThemeAttributes.constEnd())
+ return it.value();
+ }
+
if (attribute == QLatin1String(superPaletteAttributeC)) {
PropertyPaletteDataMap::const_iterator it = m_paletteValues.constFind(prop);
if (it != m_paletteValues.constEnd())
@@ -1057,6 +1215,21 @@ void DesignerPropertyManager::setAttribute(QtProperty *property,
it.value() = newValue;
emit attributeChanged(property, attribute, newValue);
+ } else if (attribute == QLatin1String(themeAttributeC) && m_stringThemeAttributes.contains(property)) {
+ if (value.userType() != QVariant::Bool)
+ return;
+
+ const PropertyBoolMap::iterator it = m_stringThemeAttributes.find(property);
+ const bool oldValue = it.value();
+
+ const bool newValue = value.toBool();
+
+ if (oldValue == newValue)
+ return;
+
+ it.value() = newValue;
+
+ emit attributeChanged(property, attribute, newValue);
} else if (attribute == QLatin1String(superPaletteAttributeC) && m_paletteValues.contains(property)) {
if (value.userType() != QVariant::Palette)
return;
@@ -1234,7 +1407,11 @@ QString DesignerPropertyManager::valueText(const QtProperty *property) const
return inherited;
}
if (m_iconValues.contains(const_cast<QtProperty *>(property))) {
- const PropertySheetIconValue::ModeStateToPixmapMap paths = m_iconValues.value(const_cast<QtProperty *>(property)).paths();
+ const PropertySheetIconValue icon = m_iconValues.value(const_cast<QtProperty *>(property));
+ const QString theme = icon.theme();
+ if (!theme.isEmpty() && QIcon::hasThemeIcon(theme))
+ return tr("[Theme] %1").arg(theme);
+ const PropertySheetIconValue::ModeStateToPixmapMap paths = icon.paths();
const PropertySheetIconValue::ModeStateToPixmapMap::const_iterator it = paths.constFind(qMakePair(QIcon::Normal, QIcon::Off));
if (it == paths.constEnd())
return QString();
@@ -1339,6 +1516,8 @@ QIcon DesignerPropertyManager::valueIcon(const QtProperty *property) const
qdesigner_internal::FormWindowBase *fwb = qobject_cast<qdesigner_internal::FormWindowBase *>(formWindow);
if (fwb)
return fwb->pixmapCache()->pixmap(m_pixmapValues.value(const_cast<QtProperty *>(property)));
+ } else if (m_stringThemeAttributes.value(const_cast<QtProperty *>(property), false)) {
+ return QIcon::fromTheme(value(property).toString());
} else {
QIcon rc;
if (m_brushManager.valueIcon(property, &rc))
@@ -1604,6 +1783,12 @@ void DesignerPropertyManager::setValue(QtProperty *property, const QVariant &val
subProperty->setAttribute(QLatin1String(defaultResourceAttributeC),
defaultIcon.pixmap(16, 16, pair.first, pair.second));
}
+ QtVariantProperty *themeSubProperty = variantProperty(m_propertyToTheme.value(property));
+ if (themeSubProperty) {
+ const QString theme = icon.theme();
+ themeSubProperty->setModified(!theme.isEmpty());
+ themeSubProperty->setValue(theme);
+ }
emit QtVariantPropertyManager::valueChanged(property, QVariant::fromValue(icon));
emit propertyChanged(property);
@@ -1766,6 +1951,7 @@ void DesignerPropertyManager::initializeProperty(QtProperty *property)
case QVariant::String:
m_stringAttributes[property] = ValidationSingleLine;
m_stringFontAttributes[property] = QApplication::font();
+ m_stringThemeAttributes[property] = false;
break;
case QVariant::UInt:
m_uintValues[property] = 0;
@@ -1820,6 +2006,13 @@ void DesignerPropertyManager::initializeProperty(QtProperty *property)
m_iconValues[property] = PropertySheetIconValue();
m_defaultIcons[property] = QIcon();
+ QtVariantProperty *themeProp = addProperty(QVariant::String, tr("Theme"));
+ themeProp->setAttribute(QLatin1String(themeAttributeC), true);
+ m_iconSubPropertyToProperty[themeProp] = property;
+ m_propertyToTheme[property] = themeProp;
+ m_resetMap[themeProp] = true;
+ property->addSubProperty(themeProp);
+
createIconSubProperty(property, QIcon::Normal, QIcon::Off, tr("Normal Off"));
createIconSubProperty(property, QIcon::Normal, QIcon::On, tr("Normal On"));
createIconSubProperty(property, QIcon::Disabled, QIcon::Off, tr("Disabled Off"));
@@ -1833,6 +2026,7 @@ void DesignerPropertyManager::initializeProperty(QtProperty *property)
m_stringValues[property] = val;
m_stringAttributes[property] = ValidationMultiLine;
m_stringFontAttributes[property] = QApplication::font();
+ m_stringThemeAttributes[property] = false;
QtVariantProperty *translatable = addProperty(QVariant::Bool, tr("translatable"));
translatable->setValue(val.translatable());
@@ -1921,37 +2115,43 @@ void DesignerPropertyManager::uninitializeProperty(QtProperty *property)
QtProperty *stringComment = m_stringToComment.value(property);
if (stringComment) {
delete stringComment;
- m_stringToComment.remove(stringComment);
+ m_commentToString.remove(stringComment);
}
QtProperty *stringTranslatable = m_stringToTranslatable.value(property);
if (stringTranslatable) {
delete stringTranslatable;
- m_stringToTranslatable.remove(stringTranslatable);
+ m_translatableToString.remove(stringTranslatable);
}
QtProperty *stringDisambiguation = m_stringToDisambiguation.value(property);
if (stringDisambiguation) {
delete stringDisambiguation;
- m_stringToDisambiguation.remove(stringDisambiguation);
+ m_disambiguationToString.remove(stringDisambiguation);
}
QtProperty *keySequenceComment = m_keySequenceToComment.value(property);
if (keySequenceComment) {
delete keySequenceComment;
- m_keySequenceToComment.remove(keySequenceComment);
+ m_commentToKeySequence.remove(keySequenceComment);
}
QtProperty *keySequenceTranslatable = m_keySequenceToTranslatable.value(property);
if (keySequenceTranslatable) {
delete keySequenceTranslatable;
- m_keySequenceToTranslatable.remove(keySequenceTranslatable);
+ m_translatableToKeySequence.remove(keySequenceTranslatable);
}
QtProperty *keySequenceDisambiguation = m_keySequenceToDisambiguation.value(property);
if (keySequenceDisambiguation) {
delete keySequenceDisambiguation;
- m_keySequenceToDisambiguation.remove(keySequenceDisambiguation);
+ m_disambiguationToKeySequence.remove(keySequenceDisambiguation);
+ }
+
+ QtProperty *iconTheme = m_propertyToTheme.value(property);
+ if (iconTheme) {
+ delete iconTheme;
+ m_iconSubPropertyToProperty.remove(iconTheme);
}
m_propertyToAlignH.remove(property);
@@ -2010,15 +2210,20 @@ bool DesignerPropertyManager::resetFontSubProperty(QtProperty *property)
bool DesignerPropertyManager::resetIconSubProperty(QtProperty *property)
{
- if (!m_iconSubPropertyToProperty.contains(property))
- return false;
-
- if (!m_pixmapValues.contains(property))
+ QtProperty *iconProperty = m_iconSubPropertyToProperty.value(property);
+ if (!iconProperty)
return false;
- QtVariantProperty *pixmapProperty = variantProperty(property);
- pixmapProperty->setValue(QVariant::fromValue(PropertySheetPixmapValue()));
- return true;
+ if (m_pixmapValues.contains(property)) {
+ QtVariantProperty *pixmapProperty = variantProperty(property);
+ pixmapProperty->setValue(QVariant::fromValue(PropertySheetPixmapValue()));
+ return true;
+ } else if (m_propertyToTheme.contains(iconProperty)) {
+ QtVariantProperty *themeProperty = variantProperty(property);
+ themeProperty->setValue(QString());
+ return true;
+ }
+ return false;
}
// -------- DesignerEditorFactory
@@ -2116,6 +2321,10 @@ void DesignerEditorFactory::slotAttributeChanged(QtProperty *property, const QSt
const QFont font = qvariant_cast<QFont>(value);
applyToEditors(m_stringPropertyToEditors.value(property), &TextEditor::setRichTextDefaultFont, font);
}
+ if (attribute == QLatin1String(themeAttributeC)) {
+ const bool themeEnabled = value.toBool();
+ applyToEditors(m_stringPropertyToEditors.value(property), &TextEditor::setIconThemeModeEnabled, themeEnabled);
+ }
} else if (type == QVariant::Palette && attribute == QLatin1String(superPaletteAttributeC)) {
const QPalette palette = qvariant_cast<QPalette>(value);
applyToEditors(m_palettePropertyToEditors.value(property), &PaletteEditorButton::setSuperPalette, palette);
@@ -2174,14 +2383,18 @@ void DesignerEditorFactory::slotValueChanged(QtProperty *property, const QVarian
applyToEditors(m_stringListPropertyToEditors.value(property), &StringListEditorButton::setStringList, value.toStringList());
break;
default:
- if (type == DesignerPropertyManager::designerIconTypeId())
- applyToEditors(m_iconPropertyToEditors.value(property), &PixmapEditor::setPath, qvariant_cast<PropertySheetIconValue>(value).pixmap(QIcon::Normal, QIcon::Off).path());
- else if (type == DesignerPropertyManager::designerPixmapTypeId())
+ if (type == DesignerPropertyManager::designerIconTypeId()) {
+ PropertySheetIconValue iconValue = qvariant_cast<PropertySheetIconValue>(value);
+ const QString theme = iconValue.theme();
+ applyToEditors(m_iconPropertyToEditors.value(property), &PixmapEditor::setTheme, iconValue.theme());
+ applyToEditors(m_iconPropertyToEditors.value(property), &PixmapEditor::setPath, iconValue.pixmap(QIcon::Normal, QIcon::Off).path());
+ } else if (type == DesignerPropertyManager::designerPixmapTypeId()) {
applyToEditors(m_pixmapPropertyToEditors.value(property), &PixmapEditor::setPath, qvariant_cast<PropertySheetPixmapValue>(value).path());
- else if (type == DesignerPropertyManager::designerStringTypeId())
+ } else if (type == DesignerPropertyManager::designerStringTypeId()) {
applyToEditors(m_stringPropertyToEditors.value(property), &TextEditor::setText, qvariant_cast<PropertySheetStringValue>(value).value());
- else if (type == DesignerPropertyManager::designerKeySequenceTypeId())
+ } else if (type == DesignerPropertyManager::designerKeySequenceTypeId()) {
applyToEditors(m_keySequencePropertyToEditors.value(property), &QtKeySequenceEdit::setKeySequence, qvariant_cast<PropertySheetKeySequenceValue>(value).value());
+ }
break;
}
}
@@ -2215,6 +2428,8 @@ QWidget *DesignerEditorFactory::createEditor(QtVariantPropertyManager *manager,
const QVariant richTextDefaultFont = manager->attributeValue(property, QLatin1String(fontAttributeC));
if (richTextDefaultFont.type() == QVariant::Font)
ed->setRichTextDefaultFont(qvariant_cast<QFont>(richTextDefaultFont));
+ const bool themeEnabled = manager->attributeValue(property, QLatin1String(themeAttributeC)).toBool();
+ ed->setIconThemeModeEnabled(themeEnabled);
m_stringPropertyToEditors[property].append(ed);
m_editorToStringProperty[ed] = property;
connect(ed, SIGNAL(destroyed(QObject*)), this, SLOT(slotEditorDestroyed(QObject*)));
@@ -2308,7 +2523,9 @@ QWidget *DesignerEditorFactory::createEditor(QtVariantPropertyManager *manager,
} else if (type == DesignerPropertyManager::designerIconTypeId()) {
PixmapEditor *ed = new PixmapEditor(m_core, parent);
ed->setPixmapCache(m_fwb->pixmapCache());
+ ed->setIconThemeModeEnabled(true);
PropertySheetIconValue value = qvariant_cast<PropertySheetIconValue>(manager->value(property));
+ ed->setTheme(value.theme());
ed->setPath(value.pixmap(QIcon::Normal, QIcon::Off).path());
QPixmap defaultPixmap;
if (!property->isModified())
@@ -2321,6 +2538,7 @@ QWidget *DesignerEditorFactory::createEditor(QtVariantPropertyManager *manager,
m_editorToIconProperty[ed] = property;
connect(ed, SIGNAL(destroyed(QObject*)), this, SLOT(slotEditorDestroyed(QObject*)));
connect(ed, SIGNAL(pathChanged(QString)), this, SLOT(slotIconChanged(QString)));
+ connect(ed, SIGNAL(themeChanged(QString)), this, SLOT(slotIconThemeChanged(QString)));
editor = ed;
} else if (type == DesignerPropertyManager::designerStringTypeId()) {
const TextPropertyValidationMode tvm = static_cast<TextPropertyValidationMode>(manager->attributeValue(property, QLatin1String(validationModesAttributeC)).toInt());
@@ -2512,6 +2730,14 @@ void DesignerEditorFactory::slotIconChanged(const QString &value)
QVariant::fromValue(PropertySheetIconValue(PropertySheetPixmapValue(value))));
}
+void DesignerEditorFactory::slotIconThemeChanged(const QString &value)
+{
+ PropertySheetIconValue icon;
+ icon.setTheme(value);
+ updateManager(this, &m_changingPropertyValue, m_editorToIconProperty, qobject_cast<QWidget *>(sender()),
+ QVariant::fromValue(icon));
+}
+
void DesignerEditorFactory::slotStringListChanged(const QStringList &value)
{
updateManager(this, &m_changingPropertyValue, m_editorToStringListProperty, qobject_cast<QWidget *>(sender()), QVariant::fromValue(value));
diff --git a/tools/designer/src/components/propertyeditor/designerpropertymanager.h b/tools/designer/src/components/propertyeditor/designerpropertymanager.h
index 11f900bde1..03e3dca636 100644
--- a/tools/designer/src/components/propertyeditor/designerpropertymanager.h
+++ b/tools/designer/src/components/propertyeditor/designerpropertymanager.h
@@ -180,6 +180,7 @@ private:
QMap<QtProperty *, QMap<QPair<QIcon::Mode, QIcon::State>, QtProperty *> > m_propertyToIconSubProperties;
QMap<QtProperty *, QPair<QIcon::Mode, QIcon::State> > m_iconSubPropertyToState;
PropertyToPropertyMap m_iconSubPropertyToProperty;
+ PropertyToPropertyMap m_propertyToTheme;
QMap<QtProperty *, qdesigner_internal::PropertySheetStringValue> m_stringValues;
QMap<QtProperty *, QtProperty *> m_stringToComment;
@@ -221,6 +222,7 @@ private:
PropertyIntMap m_stringAttributes;
typedef QMap<QtProperty *, QFont> PropertyFontMap;
PropertyFontMap m_stringFontAttributes;
+ PropertyBoolMap m_stringThemeAttributes;
BrushPropertyManager m_brushManager;
FontPropertyManager m_fontManager;
@@ -261,6 +263,7 @@ private slots:
void slotPaletteChanged(const QPalette &value);
void slotPixmapChanged(const QString &value);
void slotIconChanged(const QString &value);
+ void slotIconThemeChanged(const QString &value);
void slotUintChanged(const QString &value);
void slotLongLongChanged(const QString &value);
void slotULongLongChanged(const QString &value);
diff --git a/tools/designer/src/lib/shared/iconselector.cpp b/tools/designer/src/lib/shared/iconselector.cpp
index 8931b9f2e9..ef20cd2a9e 100644
--- a/tools/designer/src/lib/shared/iconselector.cpp
+++ b/tools/designer/src/lib/shared/iconselector.cpp
@@ -583,7 +583,6 @@ IconThemeEditor::IconThemeEditor(QWidget *parent, bool wantResetButton) :
mainHLayout->setMargin(0);
// Vertically center theme preview label
- d->m_themeLabel->setFrameStyle(QFrame::Box);
d->m_themeLabel->setPixmap(d->m_emptyPixmap);
QVBoxLayout *themeLabelVLayout = new QVBoxLayout;
@@ -608,6 +607,7 @@ IconThemeEditor::IconThemeEditor(QWidget *parent, bool wantResetButton) :
}
setLayout(mainHLayout);
+ setFocusProxy(d->m_themeLineEdit);
}
IconThemeEditor::~IconThemeEditor()
diff --git a/tools/designer/src/lib/shared/qdesigner_utils.cpp b/tools/designer/src/lib/shared/qdesigner_utils.cpp
index 03d7cfa290..bd89c53601 100644
--- a/tools/designer/src/lib/shared/qdesigner_utils.cpp
+++ b/tools/designer/src/lib/shared/qdesigner_utils.cpp
@@ -640,8 +640,8 @@ namespace qdesigner_internal
static inline QPair<QIcon::Mode, QIcon::State> subPropertyFlagToIconModeState(unsigned flag)
{
switch (flag) {
- case NormalOffIconMask:
- return qMakePair(QIcon::Normal, QIcon::Off);
+ case NormalOnIconMask:
+ return qMakePair(QIcon::Normal, QIcon::On);
case DisabledOffIconMask:
return qMakePair(QIcon::Disabled, QIcon::Off);
case DisabledOnIconMask:
@@ -654,11 +654,11 @@ namespace qdesigner_internal
return qMakePair(QIcon::Selected, QIcon::Off);
case SelectedOnIconMask:
return qMakePair(QIcon::Selected, QIcon::On);
- case NormalOnIconMask:
+ case NormalOffIconMask:
default:
break;
}
- return qMakePair(QIcon::Normal, QIcon::On);
+ return qMakePair(QIcon::Normal, QIcon::Off);
}
uint PropertySheetIconValue::mask() const
diff --git a/tools/designer/src/lib/uilib/abstractformbuilder.cpp b/tools/designer/src/lib/uilib/abstractformbuilder.cpp
index ad2aa05a3f..3f40d81449 100644
--- a/tools/designer/src/lib/uilib/abstractformbuilder.cpp
+++ b/tools/designer/src/lib/uilib/abstractformbuilder.cpp
@@ -1381,9 +1381,83 @@ DomActionRef *QAbstractFormBuilder::createActionRefDom(QAction *action)
return ui_action_ref;
}
+// Struct to store layout item parameters for saving layout items
+struct FormBuilderSaveLayoutEntry {
+ explicit FormBuilderSaveLayoutEntry(QLayoutItem *li = 0) :
+ item(li), row(-1), column(-1), rowSpan(0), columnSpan(0) {}
+
+ QLayoutItem *item;
+ int row;
+ int column;
+ int rowSpan;
+ int columnSpan;
+};
+
+// Create list from standard box layout
+static QList<FormBuilderSaveLayoutEntry> saveLayoutEntries(const QLayout *layout)
+{
+ QList<FormBuilderSaveLayoutEntry> rc;
+ if (const int count = layout->count()) {
+ rc.reserve(count);
+ for (int idx = 0; idx < count; ++idx) {
+ QLayoutItem *item = layout->itemAt(idx);
+ rc.append(FormBuilderSaveLayoutEntry(item));
+ }
+ }
+ return rc;
+}
+
+// Create list from grid layout
+static QList<FormBuilderSaveLayoutEntry> saveGridLayoutEntries(QGridLayout *gridLayout)
+{
+ QList<FormBuilderSaveLayoutEntry> rc;
+ if (const int count = gridLayout->count()) {
+ rc.reserve(count);
+ for (int idx = 0; idx < count; ++idx) {
+ QLayoutItem *item = gridLayout->itemAt(idx);
+ FormBuilderSaveLayoutEntry entry(item);
+ gridLayout->getItemPosition(idx, &entry.row, &entry.column, &entry.rowSpan,&entry.columnSpan);
+ rc.append(entry);
+ }
+ }
+ return rc;
+}
+
+#ifndef QT_NO_FORMLAYOUT
+// Create list from form layout
+static QList<FormBuilderSaveLayoutEntry> saveFormLayoutEntries(const QFormLayout *formLayout)
+{
+ QList<FormBuilderSaveLayoutEntry> rc;
+ if (const int count = formLayout->count()) {
+ rc.reserve(count);
+ for (int idx = 0; idx < count; ++idx) {
+ QLayoutItem *item = formLayout->itemAt(idx);
+ QFormLayout::ItemRole role = QFormLayout::LabelRole;
+ FormBuilderSaveLayoutEntry entry(item);
+ formLayout->getItemPosition(idx, &entry.row, &role);
+ switch (role ) {
+ case QFormLayout::LabelRole:
+ entry.column = 0;
+ break;
+ case QFormLayout::FieldRole:
+ entry.column = 1;
+ break;
+ case QFormLayout::SpanningRole:
+ entry.column = 0;
+ entry.columnSpan = 2;
+ break;
+ }
+ rc.push_back(entry);
+ }
+ }
+ return rc;
+}
+#endif
+
/*!
\internal
*/
+
DomLayout *QAbstractFormBuilder::createDom(QLayout *layout, DomLayout *ui_layout, DomWidget *ui_parentWidget)
{
Q_UNUSED(ui_layout)
@@ -1394,37 +1468,30 @@ DomLayout *QAbstractFormBuilder::createDom(QLayout *layout, DomLayout *ui_layout
lay->setAttributeName(objectName);
lay->setElementProperty(computeProperties(layout));
- QList<DomLayoutItem*> ui_items;
-
- QMap<QObject *, QLayoutItem *> objectToItem;
- QList<QLayoutItem *> spacerItems;
- QList<QLayoutItem *> newList;
-
- for (int idx=0; layout->itemAt(idx); ++idx) {
- QLayoutItem *item = layout->itemAt(idx);
- if (item->widget())
- objectToItem[item->widget()] = item;
- else if (item->layout())
- objectToItem[item->layout()] = item;
- else if (item->spacerItem())
- spacerItems.append(item);
- newList.append(item);
- }
-
- if (qobject_cast<QGridLayout *>(layout)) {
- newList.clear();
- QList<QObject *> childrenList = layout->parentWidget()->children();
- foreach (QObject *o, childrenList) {
- if (objectToItem.contains(o))
- newList.append(objectToItem[o]);
- }
- newList += spacerItems;
+ QList<FormBuilderSaveLayoutEntry> newList;
+ if (QGridLayout *gridLayout = qobject_cast<QGridLayout *>(layout)) {
+ newList = saveGridLayoutEntries(gridLayout);
+#ifndef QT_NO_FORMLAYOUT
+ } else if (const QFormLayout *formLayout = qobject_cast<const QFormLayout *>(layout)) {
+ newList = saveFormLayoutEntries(formLayout);
+#endif
+ } else {
+ newList = saveLayoutEntries(layout);
}
- foreach (QLayoutItem *item, newList) {
- DomLayoutItem *ui_item = createDom(item, lay, ui_parentWidget);
- if (ui_item)
+ QList<DomLayoutItem*> ui_items;
+ foreach (const FormBuilderSaveLayoutEntry &item, newList) {
+ if (DomLayoutItem *ui_item = createDom(item.item, lay, ui_parentWidget)) {
+ if (item.row >= 0)
+ ui_item->setAttributeRow(item.row);
+ if (item.column >= 0)
+ ui_item->setAttributeColumn(item.column);
+ if (item.rowSpan > 1)
+ ui_item->setAttributeRowSpan(item.rowSpan);
+ if (item.columnSpan > 1)
+ ui_item->setAttributeColSpan(item.columnSpan);
ui_items.append(ui_item);
+ }
}
lay->setElementItem(ui_items);
diff --git a/tools/linguist/linguist/mainwindow.cpp b/tools/linguist/linguist/mainwindow.cpp
index efdf9ef9fc..8520cf75be 100644
--- a/tools/linguist/linguist/mainwindow.cpp
+++ b/tools/linguist/linguist/mainwindow.cpp
@@ -1522,7 +1522,7 @@ void MainWindow::selectedMessageChanged(const QModelIndex &sortedIndex, const QM
}
m_phraseView->setSourceText(-1, QString());
}
- if (m) {
+ if (m && !m->fileName().isEmpty()) {
if (hasFormPreview(m->fileName())) {
m_sourceAndFormView->setCurrentWidget(m_formPreviewView);
m_formPreviewView->setSourceContext(model, m);
@@ -1577,7 +1577,7 @@ void MainWindow::updateTranslation(const QStringList &translations)
return;
m->setTranslations(translations);
- if (hasFormPreview(m->fileName()))
+ if (!m->fileName().isEmpty() && hasFormPreview(m->fileName()))
m_formPreviewView->setSourceContext(m_currentIndex.model(), m);
updateDanger(m_currentIndex, true);
@@ -1996,7 +1996,7 @@ void MainWindow::updateLatestModel(int model)
if (m_currentIndex.isValid()) {
if (MessageItem *item = m_dataModel->messageItem(m_currentIndex)) {
- if (hasFormPreview(item->fileName()))
+ if (!item->fileName().isEmpty() && hasFormPreview(item->fileName()))
m_formPreviewView->setSourceContext(model, item);
if (enableRw && !item->isObsolete())
m_phraseView->setSourceText(model, item->text());
diff --git a/tools/linguist/linguist/sourcecodeview.cpp b/tools/linguist/linguist/sourcecodeview.cpp
index b8dd9c04ff..d2eef56670 100644
--- a/tools/linguist/linguist/sourcecodeview.cpp
+++ b/tools/linguist/linguist/sourcecodeview.cpp
@@ -64,7 +64,7 @@ void SourceCodeView::setSourceContext(const QString &fileName, const int lineNum
m_fileToLoad.clear();
setToolTip(fileName);
- if (fileName.isNull()) {
+ if (fileName.isEmpty()) {
clear();
m_currentFileName.clear();
appendHtml(tr("<i>Source code not available</i>"));
diff --git a/tools/linguist/lupdate/cpp.cpp b/tools/linguist/lupdate/cpp.cpp
index 970d44b705..6ea7299dd2 100644
--- a/tools/linguist/lupdate/cpp.cpp
+++ b/tools/linguist/lupdate/cpp.cpp
@@ -489,6 +489,7 @@ STRING(class);
STRING(findMessage);
STRING(friend);
STRING(namespace);
+STRING(operator);
STRING(qtTrId);
STRING(return);
STRING(struct);
@@ -753,6 +754,20 @@ uint CppParser::getToken()
if (yyWord == strnamespace)
return Tok_namespace;
break;
+ case 'o':
+ if (yyWord == stroperator) {
+ // Operator overload declaration/definition.
+ // We need to prevent those characters from confusing the followup
+ // parsing. Actually using them does not add value, so just eat them.
+ while (isspace(yyCh))
+ yyCh = getChar();
+ while (yyCh == '+' || yyCh == '-' || yyCh == '*' || yyCh == '/' || yyCh == '%'
+ || yyCh == '=' || yyCh == '<' || yyCh == '>' || yyCh == '!'
+ || yyCh == '&' || yyCh == '|' || yyCh == '~' || yyCh == '^'
+ || yyCh == '[' || yyCh == ']')
+ yyCh = getChar();
+ }
+ break;
case 'q':
if (yyWord == strqtTrId)
return Tok_trid;
@@ -1678,6 +1693,8 @@ void CppParser::parseInternal(ConversionData &cd, QSet<QString> &inclusions)
functionContextUnresolved.clear(); // Pointless
prospectiveContext.clear();
pendingContext.clear();
+
+ yyTok = getToken();
}
break;
case Tok_namespace:
@@ -1689,7 +1706,6 @@ void CppParser::parseInternal(ConversionData &cd, QSet<QString> &inclusions)
HashString ns = HashString(text);
yyTok = getToken();
if (yyTok == Tok_LeftBrace) {
- yyTok = getToken();
namespaceDepths.push(namespaces.count());
enterNamespace(&namespaces, ns);
@@ -1697,6 +1713,7 @@ void CppParser::parseInternal(ConversionData &cd, QSet<QString> &inclusions)
functionContextUnresolved.clear();
prospectiveContext.clear();
pendingContext.clear();
+ yyTok = getToken();
} else if (yyTok == Tok_Equals) {
// e.g. namespace Is = OuterSpace::InnerSpace;
QList<HashString> fullName;
diff --git a/tools/linguist/shared/translator.h b/tools/linguist/shared/translator.h
index cfb2178425..02cfb07ea3 100644
--- a/tools/linguist/shared/translator.h
+++ b/tools/linguist/shared/translator.h
@@ -123,8 +123,8 @@ class Translator
public:
Translator();
- bool load(const QString &filename, ConversionData &err, const QString &format /*= "auto"*/);
- bool save(const QString &filename, ConversionData &err, const QString &format /*= "auto"*/) const;
+ bool load(const QString &filename, ConversionData &err, const QString &format /* = "auto" */);
+ bool save(const QString &filename, ConversionData &err, const QString &format /* = "auto" */) const;
bool release(QFile *iod, ConversionData &cd) const;
int find(const TranslatorMessage &msg) const;
diff --git a/tools/porting/src/rpp.cpp b/tools/porting/src/rpp.cpp
index 7b0bea1d52..2e2aa975cf 100644
--- a/tools/porting/src/rpp.cpp
+++ b/tools/porting/src/rpp.cpp
@@ -60,7 +60,7 @@ Source *Preprocessor::parse(const TokenEngine::TokenContainer &tokenContainer,
const QVector<Type> &tokenTypeList, TypedPool<Item> *memoryPool)
{
m_memoryPool = memoryPool;
- Source *m_source = createNode<Source>(m_memoryPool); //node whith no parent
+ Source *m_source = createNode<Source>(m_memoryPool); //node with no parent
m_tokenContainer = tokenContainer;
m_tokenTypeList = tokenTypeList;
lexerTokenIndex = 0;
@@ -538,7 +538,7 @@ bool Preprocessor::parsePragmaDirective(Item *group)
}
/*
Reads a preprocessor line from the source by advancing lexerTokenIndex and
- returing a TokenSection containg the read line. Text lines separated by
+ returning a TokenSection containing the read line. Text lines separated by
an escaped newline are joined.
*/
TokenSection Preprocessor::readLine()
diff --git a/tools/porting/src/semantic.cpp b/tools/porting/src/semantic.cpp
index cf0b1414ca..bd9175f31e 100644
--- a/tools/porting/src/semantic.cpp
+++ b/tools/porting/src/semantic.cpp
@@ -806,10 +806,10 @@ void Semantic::parseNameUse(NameAST* name)
}
/*
- looks up name used in basescope. If name->isGlobal() is true or if classOrNamespaceList()
+ Looks up name used in basescope. If name->isGlobal() is true or if classOrNamespaceList()
returns a non-empty list, the C++ qualified name lookup rules are used. Otherwise the
unquialified name lookup rules are used. Returns the a list of members that was found,
- In most cases this list will contain zero or one element, exept in the case of overloaded functions.
+ In most cases this list will contain zero or one element, except in the case of overloaded functions.
TODO: Argument-dependent name lookup
*/
QList<CodeModel::Member *> Semantic::nameLookup(CodeModel::Scope *baseScope, const NameAST* name)
diff --git a/tools/porting/src/tokenengine.h b/tools/porting/src/tokenengine.h
index d998411991..db68d8851b 100644
--- a/tools/porting/src/tokenengine.h
+++ b/tools/porting/src/tokenengine.h
@@ -55,7 +55,7 @@ namespace TokenEngine {
class TokenContainer;
/*
- A token is defined as a start-postion and a lenght. Since the actual text
+ A token is defined as a start-position and a length. Since the actual text
storage is not reffered to here, Token needs to be used together with
a TokenContainer in order to be useful.
*/
diff --git a/tools/porting/src/tokenreplacements.cpp b/tools/porting/src/tokenreplacements.cpp
index 02b775152d..fa3cff844e 100644
--- a/tools/porting/src/tokenreplacements.cpp
+++ b/tools/porting/src/tokenreplacements.cpp
@@ -126,7 +126,7 @@ int QualifiedNameParser::findScopeOperator(Direction direction)
{
int tokenIndex = currentIndex;
QByteArray tokenText;
- //loop until we get a token containg text or we pass the beginning/end of the source
+ //loop until we get a token containing text or we pass the beginning/end of the source
tokenIndex += direction;
while(tokenText.isEmpty() && isValidIndex(tokenIndex)) {
tokenText = tokenContainer.text(tokenIndex).trimmed();
@@ -146,7 +146,7 @@ int QualifiedNameParser::nextScopeToken(Direction direction)
if (tokenIndex == -1)
return -1;
QByteArray tokenText;
- //loop until we get a token containg text or we pass the start of the source
+ //loop until we get a token containing text or we pass the start of the source
tokenIndex += direction;
while(tokenText.isEmpty() && isValidIndex(tokenIndex)) {
tokenText = tokenContainer.text(tokenIndex).trimmed();
@@ -266,7 +266,7 @@ bool ScopedTokenReplacement::doReplace(const TokenContainer &tokenContainer, int
if (!attributes->attribute(sourceIndex, "unknown").isEmpty())
return false;
// If nameUse is set we test if the nameUse refers to the correct declaration.
- // This is done by checking the parentScope attriute, wich returns the scope
+ // This is done by checking the parentScope attribute, which returns the scope
// for the declaration associated with this name use.
const bool haveNameUseInfo = !attributes->attribute(sourceIndex, "nameUse").isEmpty();
if (haveNameUseInfo) {
@@ -314,7 +314,7 @@ bool ScopedTokenReplacement::doReplace(const TokenContainer &tokenContainer, int
const QByteArray sourceScope = tokenContainer.text(sourceScopeIndex);
// If we have no name use info and the source and old scopes don't match,
- // we generally dont't do a replace, unless the old scope is Qt and
+ // we generally don't do a replace, unless the old scope is Qt and
// the source scope inherits Qt. For example, QWidget::ButtonState should
// be renamed to Qt::ButtonState.
if (!haveNameUseInfo && sourceScope != oldScope) {
diff --git a/tools/qdoc3/doc/files/qt.qdocconf b/tools/qdoc3/doc/files/qt.qdocconf
index 09c112ad4c..4546c7a881 100644
--- a/tools/qdoc3/doc/files/qt.qdocconf
+++ b/tools/qdoc3/doc/files/qt.qdocconf
@@ -22,7 +22,7 @@ edition.DesktopLight.groups = -graphicsview-api
qhp.projects = Qt
qhp.Qt.file = qt.qhp
-qhp.Qt.namespace = com.trolltech.qt.470
+qhp.Qt.namespace = com.trolltech.qt.471
qhp.Qt.virtualFolder = qdoc
qhp.Qt.indexTitle = Qt Reference Documentation
qhp.Qt.indexRoot =
@@ -36,9 +36,9 @@ qhp.Qt.extraFiles = classic.css \
images/dynamiclayouts-example.png \
images/stylesheet-coffee-plastique.png
-qhp.Qt.filterAttributes = qt 4.7.0 qtrefdoc
-qhp.Qt.customFilters.Qt.name = Qt 4.7.0
-qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.0
+qhp.Qt.filterAttributes = qt 4.7.1 qtrefdoc
+qhp.Qt.customFilters.Qt.name = Qt 4.7.1
+qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.1
qhp.Qt.subprojects = classes overviews examples
qhp.Qt.subprojects.classes.title = Classes
qhp.Qt.subprojects.classes.indexTitle = Qt's Classes
diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp
index bc71b6e276..77e306aa6f 100644
--- a/tools/qdoc3/htmlgenerator.cpp
+++ b/tools/qdoc3/htmlgenerator.cpp
@@ -943,10 +943,10 @@ int HtmlGenerator::generateAtom(const Atom *atom,
}
}
else {
- out() << "<ol type=";
+ out() << "<ol class=";
if (atom->string() == ATOM_LIST_UPPERALPHA) {
out() << "\"A\"";
- } /* why type? */
+ } /* why type? changed to */
else if (atom->string() == ATOM_LIST_LOWERALPHA) {
out() << "\"a\"";
}
@@ -1966,7 +1966,7 @@ void HtmlGenerator::generateFooter(const Node *node)
switch (application) {
case Online:
out() << " <script src=\"scripts/functions.js\" type=\"text/javascript\"></script>\n";
- out() << " <!-- <script type=\"text/javascript\">\n";
+ out() << " <script type=\"text/javascript\">\n";
out() << " var _gaq = _gaq || [];\n";
out() << " _gaq.push(['_setAccount', 'UA-4457116-5']);\n";
out() << " _gaq.push(['_trackPageview']);\n";
@@ -1977,7 +1977,7 @@ void HtmlGenerator::generateFooter(const Node *node)
out() << "'.google-analytics.com/ga.js';\n";
out() << " var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n";
out() << " })();\n";
- out() << " </script> -->\n";
+ out() << " </script>\n";
out() << "</body>\n";
break;
case Creator:
@@ -4185,36 +4185,16 @@ void HtmlGenerator::generateQmlSummary(const Section& section,
CodeMarker *marker)
{
if (!section.members.isEmpty()) {
- NodeList::ConstIterator m;
- int count = section.members.size();
- bool twoColumn = false;
- if (section.members.first()->type() == Node::QmlProperty) {
- twoColumn = (count >= 5);
- twoColumn = false;
- }
- if (twoColumn)
- out() << "<table class=\"qmlsummary\">\n";
- if (++numTableRows % 2 == 1)
- out() << "<tr class=\"odd topAlign\">";
- else
- out() << "<tr class=\"even topAlign\">";
- // << "<tr><td class=\"topAlign\">";
out() << "<ul>\n";
-
- int row = 0;
+ NodeList::ConstIterator m;
m = section.members.begin();
while (m != section.members.end()) {
- if (twoColumn && row == (int) (count + 1) / 2)
- out() << "</ul></td><td class=\"topAlign\"><ul>\n";
out() << "<li class=\"fn\">";
generateQmlItem(*m,relative,marker,true);
out() << "</li>\n";
- row++;
++m;
}
out() << "</ul>\n";
- if (twoColumn)
- out() << "</td></tr>\n</table>\n";
}
}
diff --git a/tools/qdoc3/test/qt-build-docs.qdocconf b/tools/qdoc3/test/qt-build-docs.qdocconf
index a674c72cc8..6a06a8c304 100644
--- a/tools/qdoc3/test/qt-build-docs.qdocconf
+++ b/tools/qdoc3/test/qt-build-docs.qdocconf
@@ -103,6 +103,7 @@ excludedirs = $QT_SOURCE_TREE/src/3rdparty/clucene \
$QT_SOURCE_TREE/src/3rdparty/freetype \
$QT_SOURCE_TREE/src/3rdparty/harfbuzz \
$QT_SOURCE_TREE/src/3rdparty/kdebase \
+ $QT_SOURCE_TREE/src/3rdparty/libconninet \
$QT_SOURCE_TREE/src/3rdparty/libjpeg \
$QT_SOURCE_TREE/src/3rdparty/libmng \
$QT_SOURCE_TREE/src/3rdparty/libpng \
diff --git a/tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf b/tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf
index e0bb630759..c24ddef691 100644
--- a/tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf
+++ b/tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf
@@ -32,9 +32,9 @@ qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.0
qhp.Qt.extraFiles = index.html \
images/bg_l.png \
images/bg_l_blank.png \
- images/bg_ll_blank.png \
- images/bg_ul_blank.png \
- images/header_bg.png \
+ images/bg_ll_blank.png \
+ images/bg_ul_blank.png \
+ images/header_bg.png \
images/bg_r.png \
images/box_bg.png \
images/breadcrumb.png \
@@ -73,6 +73,7 @@ excludedirs = $QT_SOURCE_TREE/src/3rdparty/clucene \
$QT_SOURCE_TREE/src/3rdparty/freetype \
$QT_SOURCE_TREE/src/3rdparty/harfbuzz \
$QT_SOURCE_TREE/src/3rdparty/kdebase \
+ $QT_SOURCE_TREE/src/3rdparty/libconninet \
$QT_SOURCE_TREE/src/3rdparty/libjpeg \
$QT_SOURCE_TREE/src/3rdparty/libmng \
$QT_SOURCE_TREE/src/3rdparty/libpng \
diff --git a/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf b/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf
index 4a79991c99..d932dfb9b3 100644
--- a/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf
+++ b/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf
@@ -32,9 +32,9 @@ qhp.Qt.customFilters.Qt.filterAttributes = qt 4.8.0
qhp.Qt.extraFiles = index.html \
images/bg_l.png \
images/bg_l_blank.png \
- images/bg_ll_blank.png \
- images/bg_ul_blank.png \
- images/header_bg.png \
+ images/bg_ll_blank.png \
+ images/bg_ul_blank.png \
+ images/header_bg.png \
images/bg_r.png \
images/box_bg.png \
images/breadcrumb.png \
@@ -73,6 +73,7 @@ excludedirs = $QT_SOURCE_TREE/src/3rdparty/clucene \
$QT_SOURCE_TREE/src/3rdparty/freetype \
$QT_SOURCE_TREE/src/3rdparty/harfbuzz \
$QT_SOURCE_TREE/src/3rdparty/kdebase \
+ $QT_SOURCE_TREE/src/3rdparty/libconninet \
$QT_SOURCE_TREE/src/3rdparty/libjpeg \
$QT_SOURCE_TREE/src/3rdparty/libmng \
$QT_SOURCE_TREE/src/3rdparty/libpng \
diff --git a/tools/qdoc3/test/qt-html-templates.qdocconf b/tools/qdoc3/test/qt-html-templates.qdocconf
index cf028efe6e..b3bf764ac8 100644
--- a/tools/qdoc3/test/qt-html-templates.qdocconf
+++ b/tools/qdoc3/test/qt-html-templates.qdocconf
@@ -9,11 +9,6 @@ HTML.postheader = " <div class=\"header\" id=\"qtdocheader\">\n" \
" <div id=\"nav-logo\">\n" \
" <a href=\"index.html\">Home</a></div>\n" \
" <a href=\"index.html\" class=\"qtref\"><span>Qt Reference Documentation</span></a>\n" \
- " <div id=\"narrowsearch\"><form onsubmit=\"return false;\" action=\"\" id=\"qtdocsearchTop\">\n" \
- " <fieldset>\n" \
- " <input type=\"text\" value=\"\" id=\"pageType2\" name=\"searchstring\"/>\n" \
- " </fieldset>\n" \
- " </form></div>\n" \
" <div id=\"nav-topright\">\n" \
" <ul>\n" \
" <li class=\"nav-topright-home\"><a href=\"http://qt.nokia.com/\">Qt HOME</a></li>\n" \
@@ -89,7 +84,7 @@ HTML.postheader = " <div class=\"header\" id=\"qtdocheader\">\n" \
" <li class=\"defaultLink\"><a href=\"modules.html\">Modules</a></li>\n" \
" <li class=\"defaultLink\"><a href=\"namespaces.html\">Namespaces</a></li>\n" \
" <li class=\"defaultLink\"><a href=\"qtglobal.html\">Global Declarations</a></li>\n" \
- " <li class=\"defaultLink\"><a href=\"qmlelements.html\">QML elements</a></li>\n" \
+ " <li class=\"defaultLink\"><a href=\"qdeclarativeelements.html\">QML elements</a></li>\n" \
" </ul> \n" \
" </div>\n" \
" </div>\n" \
@@ -98,13 +93,13 @@ HTML.postheader = " <div class=\"header\" id=\"qtdocheader\">\n" \
" Qt Topics</h2>\n" \
" <div id=\"list002\" class=\"list\">\n" \
" <ul id=\"ul002\" >\n" \
- " <li><a href=\"qt-basic-concepts.html\">Programming with Qt</a></li> \n" \
- " <li><a href=\"qtquick.html\">Device UI's &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" \
+ " <li class=\"defaultLink\"><a href=\"qt-basic-concepts.html\">Programming with Qt</a></li> \n" \
+ " <li class=\"defaultLink\"><a href=\"qtquick.html\">Device UI's &amp; Qt Quick</a></li> \n" \
+ " <li class=\"defaultLink\"><a href=\"qt-gui-concepts.html\">UI Design with Qt</a></li> \n" \
+ " <li class=\"defaultLink\"><a href=\"developing-with-qt.html\">Cross-platform and Platform-specific</a></li> \n" \
+ " <li class=\"defaultLink\"><a href=\"platform-specific.html\">Platform-specific info</a></li> \n" \
+ " <li class=\"defaultLink\"><a href=\"technology-apis.html\">Qt and Key Technologies</a></li> \n" \
+ " <li class=\"defaultLink\"><a href=\"best-practices.html\">How-To's and Best Practices</a></li> \n" \
" </ul> \n" \
" </div>\n" \
" </div>\n" \
@@ -138,20 +133,20 @@ HTML.postpostheader = " </ul>\n" \
" <li id=\"print\" class=\"t_button\"><a href=\"javascript:this.print();\">\n" \
" <span>Print</span></a></li>\n" \
" </ul>\n" \
- " </div>\n" \
+ " </div>\n" \
" </div>\n" \
" <div class=\"content\">\n"
-HTML.footer = " <!-- /div -->\n" \
+HTML.footer = "" \
" <div class=\"feedback t_button\">\n" \
" [+] Documentation Feedback</div>\n" \
" </div>\n" \
" </div>\n" \
+ " </div> \n" \
" <div class=\"ft\">\n" \
" <span></span>\n" \
" </div>\n" \
" </div> \n" \
- " </div> \n" \
" <div class=\"footer\">\n" \
" <p>\n" \
" <acronym title=\"Copyright\">&copy;</acronym> 2008-2010 Nokia Corporation and/or its\n" \
@@ -160,26 +155,24 @@ HTML.footer = " <!-- /div -->\n" \
" <p>\n" \
" All other trademarks are property of their respective owners. <a title=\"Privacy Policy\"\n" \
" href=\"http://qt.nokia.com/about/privacy-policy\">Privacy Policy</a></p>\n" \
+ " <br />\n" \
+ " <p>\n" \
+ " Licensees holding valid Qt Commercial licenses may use this document in accordance with the" \
+ " Qt Commercial License Agreement provided with the Software or, alternatively, in accordance" \
+ " with the terms contained in a written agreement between you and Nokia.</p>\n" \
+ " <p>\n" \
+ " Alternatively, this document may be used under the terms of the <a href=\"http://www.gnu.org/licenses/fdl.html\">GNU\n" \
+ " Free Documentation License version 1.3</a>\n" \
+ " as published by the Free Software Foundation.</p>\n" \
" </div>\n" \
" <div id=\"feedbackBox\">\n" \
" <div id=\"feedcloseX\" class=\"feedclose t_button\">X</div>\n" \
" <form id=\"feedform\" action=\"http://doc.qt.nokia.com/docFeedbck/feedback.php\" method=\"get\">\n" \
- " <p id=\"noteHead\">Thank you for giving your feedback. <div class=\"note\">Make sure it is related to this specific page. For more general bugs and \n" \
- " requests, please use the <a href=\"http://bugreports.qt.nokia.com/secure/Dashboard.jspa\">Qt Bug Tracker</a>.</div></p>\n" \
+ " <p id=\"noteHead\">Thank you for giving your feedback.</p> <p class=\"note\">Make sure it is related to this specific page. For more general bugs and \n" \
+ " requests, please use the <a href=\"http://bugreports.qt.nokia.com/secure/Dashboard.jspa\">Qt Bug Tracker</a>.</p>\n" \
" <p><textarea id=\"feedbox\" name=\"feedText\" rows=\"5\" cols=\"40\"></textarea></p>\n" \
" <p><input id=\"feedsubmit\" class=\"feedclose\" type=\"submit\" name=\"feedback\" /></p>\n" \
" </form>\n" \
" </div>\n" \
" <div id=\"blurpage\">\n" \
- " </div>\n" \
- " <!--/div -->\n" \
- "<script type=\"text/javascript\">\n" \
- " var _gaq = _gaq || [];\n" \
- " _gaq.push([\'_setAccount\', \'UA-4457116-5\']);\n" \
- " _gaq.push([\'_trackPageview\']);\n" \
- " (function() {\n" \
- " var ga = document.createElement(\'script\'); ga.type = \'text/javascript\'; ga.async = true;\n" \
- " ga.src = (\'https:\' == document.location.protocol ? \'https://ssl\' : \'http://www\') + \'.google-analytics.com/ga.js\';\n" \
- " var s = document.getElementsByTagName(\'script\')[0]; s.parentNode.insertBefore(ga, s);\n" \
- " })();\n" \
- "</script>\n"
+ " </div>\n"
diff --git a/tools/qdoc3/test/qt-html-templates_ja_JP.qdocconf b/tools/qdoc3/test/qt-html-templates_ja_JP.qdocconf
index e2abd2a487..da20766eb6 100644
--- a/tools/qdoc3/test/qt-html-templates_ja_JP.qdocconf
+++ b/tools/qdoc3/test/qt-html-templates_ja_JP.qdocconf
@@ -156,6 +156,15 @@ HTML.footer = " <!-- /div -->\n" \
" <p>\n" \
" All other trademarks are property of their respective owners. <a title=\"Privacy Policy\"\n" \
" href=\"http://qt.nokia.com/about/privacy-policy\">Privacy Policy</a></p>\n" \
+ " <br />\n" \
+ " <p>\n" \
+ " Licensees holding valid Qt Commercial licenses may use this document in accordance with the" \
+ " Qt Commercial License Agreement provided with the Software or, alternatively, in accordance" \
+ " with the terms contained in a written agreement between you and Nokia.</p>\n" \
+ " <p>\n" \
+ " Alternatively, this document may be used under the terms of the <a href=\"http://www.gnu.org/licenses/fdl.html\">GNU\n" \
+ " Free Documentation License version 1.3</a>\n" \
+ " as published by the Free Software Foundation.</p>\n" \
" </div>\n" \
" <div id=\"feedbackBox\">\n" \
" <div id=\"feedcloseX\" class=\"feedclose t_button\">X</div>\n" \
diff --git a/tools/qdoc3/test/qt-html-templates_zh_CN.qdocconf b/tools/qdoc3/test/qt-html-templates_zh_CN.qdocconf
index 2c5c9d9687..b91530ff14 100644
--- a/tools/qdoc3/test/qt-html-templates_zh_CN.qdocconf
+++ b/tools/qdoc3/test/qt-html-templates_zh_CN.qdocconf
@@ -156,6 +156,15 @@ HTML.footer = " <!-- /div -->\n" \
" <p>\n" \
" All other trademarks are property of their respective owners. <a title=\"Privacy Policy\"\n" \
" href=\"http://qt.nokia.com/about/privacy-policy\">Privacy Policy</a></p>\n" \
+ " <br />\n" \
+ " <p>\n" \
+ " Licensees holding valid Qt Commercial licenses may use this document in accordance with the" \
+ " Qt Commercial License Agreement provided with the Software or, alternatively, in accordance" \
+ " with the terms contained in a written agreement between you and Nokia.</p>\n" \
+ " <p>\n" \
+ " Alternatively, this document may be used under the terms of the <a href=\"http://www.gnu.org/licenses/fdl.html\">GNU\n" \
+ " Free Documentation License version 1.3</a>\n" \
+ " as published by the Free Software Foundation.</p>\n" \
" </div>\n" \
" <div id=\"feedbackBox\">\n" \
" <div id=\"feedcloseX\" class=\"feedclose t_button\">X</div>\n" \
diff --git a/tools/qdoc3/test/qt.qdocconf b/tools/qdoc3/test/qt.qdocconf
index 3874915ebf..f50cb69524 100644
--- a/tools/qdoc3/test/qt.qdocconf
+++ b/tools/qdoc3/test/qt.qdocconf
@@ -103,6 +103,7 @@ excludedirs = $QTDIR/src/3rdparty/clucene \
$QTDIR/src/3rdparty/freetype \
$QTDIR/src/3rdparty/harfbuzz \
$QTDIR/src/3rdparty/kdebase \
+ $QTDIR/src/3rdparty/libconninet \
$QTDIR/src/3rdparty/libjpeg \
$QTDIR/src/3rdparty/libmng \
$QTDIR/src/3rdparty/libpng \
diff --git a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.cpp b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.cpp
new file mode 100644
index 0000000000..0670ac4a8e
--- /dev/null
+++ b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.cpp
@@ -0,0 +1,133 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+#define ENSURE_RUNNING_MEEGO {if (! QMeeGoGraphicsSystemHelper::isRunningMeeGo()) { qFatal("Using meego functionality but not running meego graphics system!"); }}
+
+#include "qmeegographicssystemhelper.h"
+#include <private/qapplication_p.h>
+#include <private/qgraphicssystem_runtime_p.h>
+#include <private/qpixmap_raster_p.h>
+#include "qmeegoruntime.h"
+
+QString QMeeGoGraphicsSystemHelper::runningGraphicsSystemName()
+{
+ if (! QApplicationPrivate::instance()) {
+ qWarning("Querying graphics system but application not running yet!");
+ return QString();
+ }
+
+ QString name = QApplicationPrivate::instance()->graphics_system_name;
+ if (name == QLatin1String("runtime")) {
+ QRuntimeGraphicsSystem *rsystem = (QRuntimeGraphicsSystem *) QApplicationPrivate::instance()->graphics_system;
+ name = rsystem->graphicsSystemName();
+ }
+
+ return name;
+}
+
+bool QMeeGoGraphicsSystemHelper::isRunningMeeGo()
+{
+ return (runningGraphicsSystemName() == QLatin1String("meego"));
+}
+
+void QMeeGoGraphicsSystemHelper::switchToMeeGo()
+{
+ if (isRunningMeeGo())
+ return;
+
+ if (QApplicationPrivate::instance()->graphics_system_name != QLatin1String("runtime"))
+ qWarning("Can't switch to meego - switching only supported with 'runtime' graphics system.");
+ else {
+ QApplication *app = static_cast<QApplication *>(QCoreApplication::instance());
+ app->setGraphicsSystem(QLatin1String("meego"));
+ }
+}
+
+void QMeeGoGraphicsSystemHelper::switchToRaster()
+{
+ if (runningGraphicsSystemName() == QLatin1String("raster"))
+ return;
+
+ if (QApplicationPrivate::instance()->graphics_system_name != QLatin1String("runtime"))
+ qWarning("Can't switch to raster - switching only supported with 'runtime' graphics system.");
+ else {
+ QApplication *app = static_cast<QApplication *>(QCoreApplication::instance());
+ app->setGraphicsSystem(QLatin1String("raster"));
+ }
+}
+
+Qt::HANDLE QMeeGoGraphicsSystemHelper::imageToEGLSharedImage(const QImage &image)
+{
+ ENSURE_RUNNING_MEEGO;
+ return QMeeGoRuntime::imageToEGLSharedImage(image);
+}
+
+QPixmap QMeeGoGraphicsSystemHelper::pixmapFromEGLSharedImage(Qt::HANDLE handle, const QImage &softImage)
+{
+ // 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);
+}
+
+QPixmap QMeeGoGraphicsSystemHelper::pixmapWithGLTexture(int w, int h)
+{
+ ENSURE_RUNNING_MEEGO;
+ return QMeeGoRuntime::pixmapWithGLTexture(w, h);
+}
+
+bool QMeeGoGraphicsSystemHelper::destroyEGLSharedImage(Qt::HANDLE handle)
+{
+ ENSURE_RUNNING_MEEGO;
+ return QMeeGoRuntime::destroyEGLSharedImage(handle);
+}
+
+void QMeeGoGraphicsSystemHelper::updateEGLSharedImagePixmap(QPixmap *p)
+{
+ ENSURE_RUNNING_MEEGO;
+ return QMeeGoRuntime::updateEGLSharedImagePixmap(p);
+}
+
+void QMeeGoGraphicsSystemHelper::setTranslucent(bool translucent)
+{
+ ENSURE_RUNNING_MEEGO;
+ QMeeGoRuntime::setTranslucent(translucent);
+}
diff --git a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h
new file mode 100644
index 0000000000..02f2fa2b41
--- /dev/null
+++ b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h
@@ -0,0 +1,175 @@
+/****************************************************************************
+**
+** 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 QMEEGOGRAPHICSSYSTEMHELPER_H
+#define QMEEGOGRAPHICSSYSTEMHELPER_H
+
+#include <QPixmap>
+#include <QImage>
+#include "qmeegolivepixmap.h"
+
+class QLibrary;
+
+//! The base class for accressing special meego graphics system features.
+/*!
+ This class is a helper class with static-only methods for accessing various
+ meego graphics system functionalities. The way it works is that the helper
+ dynamically calls-in to the loaded graphicssystem plugin... therefore, you're
+ expected to make sure that you're indeed running with 'meego' before using any
+ of the specialized methods.
+
+ In example:
+
+ \code
+ QPixmap p;
+ if (QMeeGoGraphicsSystemHelper::isRunningMeeGo()) {
+ p = QMeeGoGraphicsSystemHelper::pixmapWithGLTexture(64, 64);
+ } else {
+ p = QPixmap(64, 64);
+ }
+ \endcode
+
+ Calling any of the meego-specific features while not running meego might
+ give unpredictable results. The only functions safe to call at all times are:
+
+ \code
+ QMeeGoGraphicsSystemHelper::isRunningMeeGo();
+ QMeeGoGraphicsSystemHelper::runningGraphicsSystemName();
+ QMeeGoGraphicsSystemHelper::switchToMeeGo();
+ QMeeGoGraphicsSystemHelper::switchToRaster();
+ \endcode
+*/
+
+class Q_DECL_EXPORT QMeeGoGraphicsSystemHelper
+{
+public:
+ //! Returns true if running meego.
+ /*!
+ Returns true if the currently active (running) system is 'meego' with OpenGL.
+ This returns both true if the app was started with 'meego' or was started with
+ 'runtime' graphics system and the currently active system through the runtime
+ switching is 'meego'.
+ */
+ static bool isRunningMeeGo();
+
+ //! Switches to meego graphics system.
+ /*!
+ When running with the 'runtime' graphics system, sets the currently active
+ system to 'meego'. The window surface and all the resources are automatically
+ migrated to OpenGL. Will fail if the active graphics system is not 'runtime'.
+ */
+ static void switchToMeeGo();
+
+ //! Switches to raster graphics system
+ /*!
+ When running with the 'runtime' graphics system, sets the currently active
+ system to 'raster'. The window surface and the graphics resources (including the
+ EGL shared image resources) are automatically migrated back to the CPU. All OpenGL
+ resources (surface, context, cache, font cache) are automaticall anihilated.
+ */
+ static void switchToRaster();
+
+ //! Returns the name of the active graphics system
+ /*!
+ Returns the name of the currently active system. If running with 'runtime' graphics
+ system, returns the name of the active system inside the runtime graphics system
+ */
+ static QString runningGraphicsSystemName();
+
+ //! Creates a new EGL shared image.
+ /*!
+ Creates a new EGL shared image from the given image. The EGL shared image wraps
+ a GL texture in the native format and can be easily accessed from other processes.
+ */
+ static Qt::HANDLE imageToEGLSharedImage(const QImage &image);
+
+ //! Creates a QPixmap from an EGL shared image
+ /*!
+ Creates a new QPixmap from the given EGL shared image handle. The QPixmap can be
+ used for painting like any other pixmap. The softImage should point to an alternative,
+ software version of the graphical resource -- ie. obtained from theme daemon. The
+ softImage can be allocated on a QSharedMemory slice for easy sharing across processes
+ too. When the application is migrated ToRaster, this softImage will replace the
+ contents of the sharedImage.
+
+ It's ok to call this function too when not running 'meego' graphics system. In this
+ case it'll create a QPixmap backed with a raster data (from softImage)... but when
+ the system is switched back to 'meego', the QPixmap will be migrated to a EGL-shared image
+ backed storage (handle).
+ */
+ static QPixmap pixmapFromEGLSharedImage(Qt::HANDLE handle, const QImage &softImage);
+
+ //! Destroys an EGL shared image.
+ /*!
+ Destroys an EGLSharedImage previously created with an ::imageToEGLSharedImage call.
+ Returns true if the image was found and the destruction was successfull. Notice that
+ this destroys the image for all processes using it.
+ */
+ static bool destroyEGLSharedImage(Qt::HANDLE handle);
+
+ //! Updates the QPixmap backed with an EGLShared image.
+ /*!
+ This function re-reads the softImage that was specified when creating the pixmap with
+ ::pixmapFromEGLSharedImage and updates the EGL Shared image contents. It can be used
+ to share cross-proccess mutable EGLShared images.
+ */
+ static void updateEGLSharedImagePixmap(QPixmap *p);
+
+ //! Create a new QPixmap with a GL texture.
+ /*!
+ Creates a new QPixmap which is backed by an OpenGL local texture. Drawing to this
+ QPixmap will be accelerated by hardware -- unlike the normal (new QPixmap()) pixmaps,
+ which are backed by a software engine and only migrated to GPU when used. Migrating those
+ GL-backed pixmaps when going ToRaster is expsensive (they need to be downloaded from
+ GPU to CPU) so use wisely.
+ */
+ static QPixmap pixmapWithGLTexture(int w, int h);
+
+ //! Sets translucency (alpha) on the base window surface.
+ /*!
+ This function needs to be called *before* any widget/content is created.
+ When called with true, the base window surface will be translucent and initialized
+ with QGLFormat.alpha == true.
+ */
+ static void setTranslucent(bool translucent);
+};
+
+#endif
diff --git a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.pro b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.pro
new file mode 100644
index 0000000000..1e6e233225
--- /dev/null
+++ b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.pro
@@ -0,0 +1,10 @@
+TEMPLATE = lib
+TARGET = QtMeeGoGraphicsSystemHelper
+
+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
diff --git a/tools/qmeegographicssystemhelper/qmeegoliveimage.cpp b/tools/qmeegographicssystemhelper/qmeegoliveimage.cpp
new file mode 100644
index 0000000000..83a1e28e43
--- /dev/null
+++ b/tools/qmeegographicssystemhelper/qmeegoliveimage.cpp
@@ -0,0 +1,115 @@
+/****************************************************************************
+**
+** 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
new file mode 100644
index 0000000000..1e21e7bed5
--- /dev/null
+++ b/tools/qmeegographicssystemhelper/qmeegoliveimage.h
@@ -0,0 +1,106 @@
+/****************************************************************************
+**
+** 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/qmeegoliveimage_p.h b/tools/qmeegographicssystemhelper/qmeegoliveimage_p.h
new file mode 100644
index 0000000000..085fed41d5
--- /dev/null
+++ b/tools/qmeegographicssystemhelper/qmeegoliveimage_p.h
@@ -0,0 +1,63 @@
+/****************************************************************************
+**
+** 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"
+
+#ifndef QMEEGOLIVEIMAGE_P_H
+#define QMEEGOLIVEIMAGE_P_H
+
+class QMeeGoLiveImagePrivate
+{
+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;
+};
+
+#endif
diff --git a/tools/qmeegographicssystemhelper/qmeegolivepixmap.cpp b/tools/qmeegographicssystemhelper/qmeegolivepixmap.cpp
new file mode 100644
index 0000000000..2a1c04b2ce
--- /dev/null
+++ b/tools/qmeegographicssystemhelper/qmeegolivepixmap.cpp
@@ -0,0 +1,163 @@
+/****************************************************************************
+**
+** 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 "qmeegolivepixmap.h"
+#include <private/qimage_p.h>
+#include <private/qpixmap_raster_p.h>
+#include "qmeegolivepixmap_p.h"
+#include "qmeegoliveimage_p.h"
+#include <QSharedMemory>
+
+/* QMeeGoLivePixmapPrivate */
+
+QMeeGoLivePixmapPrivate::QMeeGoLivePixmapPrivate() : shm(0), shmSerial(0), owns(true), parentImage(0)
+{
+}
+
+void QMeeGoLivePixmapPrivate::copyBackFrom(const void *raw)
+{
+ 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()
+{
+ Q_Q(QMeeGoLivePixmap);
+
+ if (parentImage)
+ parentImage->d_ptr->detachPixmap(q);
+
+ if (shm)
+ shm->detach();
+
+ if (owns)
+ delete shm;
+}
+
+/* QMeeGoLivePixmap */
+
+QMeeGoLivePixmap::QMeeGoLivePixmap(QPixmapData *p) : QPixmap(p), d_ptr(new QMeeGoLivePixmapPrivate())
+{
+ Q_D(QMeeGoLivePixmap);
+ d->q_ptr = this;
+}
+
+QMeeGoLivePixmap* QMeeGoLivePixmap::fromLiveImage(QMeeGoLiveImage *liveImage)
+{
+ 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);
+
+ return livePixmap;
+}
+
+QMeeGoLivePixmap* QMeeGoLivePixmap::fromHandle(Qt::HANDLE 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;
+}
+
+QMeeGoLivePixmap::~QMeeGoLivePixmap()
+{
+}
+
+Qt::HANDLE QMeeGoLivePixmap::handle()
+{
+ Q_D(QMeeGoLivePixmap);
+ return d->shmSerial;
+}
diff --git a/tools/qmeegographicssystemhelper/qmeegolivepixmap.h b/tools/qmeegographicssystemhelper/qmeegolivepixmap.h
new file mode 100644
index 0000000000..2fa9db248d
--- /dev/null
+++ b/tools/qmeegographicssystemhelper/qmeegolivepixmap.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 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 QMEEGOLIVEPIXMAP_H
+#define QMEEGOLIVEPIXMAP_H
+
+#include <QPixmap>
+#include "qmeegoliveimage.h"
+
+class QMeeGoLivePixmapPrivate;
+class QSharedMemory;
+class QImage;
+
+//! A pixmap representing streamed content.
+/*!
+*/
+
+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.
+ */
+ static QMeeGoLivePixmap* fromLiveImage(QMeeGoLiveImage *liveImage);
+
+ //! Creates a new QMeeGoLivePixmap from the specified handle.
+ /*!
+ The handle can be used to share QMeeGoLivePixmap cross-process.
+ */
+ static QMeeGoLivePixmap* fromHandle(Qt::HANDLE handle);
+
+ //! Returns the handle for this QMeeGoLivePixmap.
+ /*!
+ The handle can be used to share QMeeGoLivePixmap cross-process.
+ */
+ Qt::HANDLE handle();
+
+ //! 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);
+ 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
new file mode 100644
index 0000000000..c2591dc540
--- /dev/null
+++ b/tools/qmeegographicssystemhelper/qmeegolivepixmap_p.h
@@ -0,0 +1,66 @@
+/****************************************************************************
+**
+** 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 "qmeegolivepixmap.h"
+
+#ifndef QMEEGOLIVEPIXMAP_P_H
+#define QMEEGOLIVEPIXMAP_P_H
+
+class QMeeGoLivePixmapPrivate
+{
+public:
+ Q_DECLARE_PUBLIC(QMeeGoLivePixmap);
+ QMeeGoLivePixmapPrivate();
+ void copyBackFrom(const void *raw);
+ virtual ~QMeeGoLivePixmapPrivate();
+
+ QSharedMemory *shm;
+ int shmSerial;
+ bool owns;
+ QMeeGoLiveImage *parentImage;
+
+ QMeeGoLivePixmap *q_ptr;
+
+ friend class QMeeGoLiveImage;
+ friend class QMeeGoLiveImagePrivate;
+};
+
+#endif
diff --git a/tools/qmeegographicssystemhelper/qmeegooverlaywidget.cpp b/tools/qmeegographicssystemhelper/qmeegooverlaywidget.cpp
new file mode 100644
index 0000000000..f9f14ae88a
--- /dev/null
+++ b/tools/qmeegographicssystemhelper/qmeegooverlaywidget.cpp
@@ -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 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 <QDebug>
+#include <QEvent>
+#include <QMouseEvent>
+#include <QCoreApplication>
+#include "qmeegooverlaywidget.h"
+#include "qmeegographicssystemhelper.h"
+#include "qmeegoruntime.h"
+
+QMeeGoOverlayWidget::QMeeGoOverlayWidget(int surfaceWidth, int surfaceHeight, QWidget *parent) : QWidget(parent, 0),
+ sw(surfaceWidth),
+ sh(surfaceHeight)
+{
+ if (! QMeeGoGraphicsSystemHelper::isRunningMeeGo())
+ qFatal("QMeeGoOverlayWidget can only be used when running with 'meego' graphics system!");
+
+ QMeeGoRuntime::setSurfaceFixedSize(surfaceWidth, surfaceHeight);
+
+ scaleW = sw / 864.0;
+ scaleH = sh / 480.0;
+ installEventFilter(this);
+}
+
+QPoint QMeeGoOverlayWidget::convertPoint(const QPoint &p)
+{
+ int x = p.x() * scaleW;
+ int y = p.y() * scaleH;
+ return QPoint(x, y);
+}
+
+void QMeeGoOverlayWidget::showEvent(QShowEvent *)
+{
+ QMeeGoRuntime::setSurfaceScaling(0, 0, width(), height());
+}
+
+bool QMeeGoOverlayWidget::eventFilter(QObject *, QEvent *event)
+{
+ if (event->spontaneous() == false)
+ return false;
+
+ switch(event->type()) {
+ case QEvent::MouseButtonPress:
+ case QEvent::MouseButtonRelease:
+ {
+ QMouseEvent *e = static_cast <QMouseEvent *>(event);
+ QMouseEvent newEvent = QMouseEvent(e->type(),
+ convertPoint(e->pos()),
+ convertPoint(e->globalPos()),
+ e->button(),
+ e->buttons(),
+ e->modifiers());
+ QCoreApplication::sendEvent(this, &newEvent);
+ return true;
+ }
+
+ default:
+ return false;
+ }
+}
diff --git a/tools/qmeegographicssystemhelper/qmeegooverlaywidget.h b/tools/qmeegographicssystemhelper/qmeegooverlaywidget.h
new file mode 100644
index 0000000000..c2c08b44fd
--- /dev/null
+++ b/tools/qmeegographicssystemhelper/qmeegooverlaywidget.h
@@ -0,0 +1,86 @@
+/****************************************************************************
+**
+** 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 QMEEGOOVERLAYWIDGET_H
+#define QMEEGOOVERLAYWIDGET_H
+
+#include <QWidget>
+
+//! A widget automatically scaling it's content.
+/*!
+*/
+
+class QMeeGoOverlayWidget : public QWidget
+{
+public:
+ //! Constructs a new scaling widget.
+ /*!
+ The real surface used for this widget will have the specified
+ width and height.
+ */
+ QMeeGoOverlayWidget(int surfaceWidth, int surfaceHeight, QWidget *parent = 0);
+
+
+ //! Event filtering function.
+ /*!
+ Converts coordinates for mouse/touch event. Do not
+ call manually.
+ */
+ bool eventFilter(QObject *obj, QEvent *event);
+
+ //! Standard override.
+ /*!
+ The surface scaling on the target paint device is being
+ set when the widget is displayed for the first time.
+ */
+ virtual void showEvent(QShowEvent *event);
+
+private:
+ //! Converts coordinates between real & virtual area of the widget.
+ QPoint convertPoint(const QPoint &p);
+
+ int sw; /// Surface real width.
+ int sh; /// Surface real height.
+ float scaleW; /// Width scaling factor.
+ float scaleH; /// Height scaling factor.
+};
+
+#endif
diff --git a/tools/qmeegographicssystemhelper/qmeegoruntime.cpp b/tools/qmeegographicssystemhelper/qmeegoruntime.cpp
new file mode 100644
index 0000000000..70b5dc148b
--- /dev/null
+++ b/tools/qmeegographicssystemhelper/qmeegoruntime.cpp
@@ -0,0 +1,158 @@
+/****************************************************************************
+**
+** 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 "qmeegoruntime.h"
+
+#include <private/qlibrary_p.h>
+#include <private/qfactoryloader_p.h>
+#include <private/qgraphicssystemplugin_p.h>
+
+#define ENSURE_INITIALIZED {if (!initialized) initialize();}
+
+bool QMeeGoRuntime::initialized = false;
+
+typedef int (*QMeeGoImageToEglSharedImageFunc) (const QImage&);
+typedef QPixmapData* (*QMeeGoPixmapDataFromEglSharedImageFunc) (Qt::HANDLE handle, const QImage&);
+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);
+
+static QMeeGoImageToEglSharedImageFunc qt_meego_image_to_egl_shared_image = NULL;
+static QMeeGoPixmapDataFromEglSharedImageFunc qt_meego_pixmapdata_from_egl_shared_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;
+
+void QMeeGoRuntime::initialize()
+{
+ QFactoryLoader loader(QGraphicsSystemFactoryInterface_iid, QLatin1String("/graphicssystems"), Qt::CaseInsensitive);
+
+ QLibraryPrivate *libraryPrivate = loader.library(QLatin1String("meego"));
+ Q_ASSERT(libraryPrivate);
+
+ QLibrary library(libraryPrivate->fileName, libraryPrivate->fullVersion);
+
+ bool success = library.load();
+
+ 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_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)
+ {
+ qDebug("Successfully resolved MeeGo graphics system: %s %s\n", qPrintable(libraryPrivate->fileName), qPrintable(libraryPrivate->fullVersion));
+ }
+ } else {
+ Q_ASSERT(false);
+ }
+
+ initialized = true;
+}
+
+Qt::HANDLE QMeeGoRuntime::imageToEGLSharedImage(const QImage &image)
+{
+ ENSURE_INITIALIZED;
+ Q_ASSERT(qt_meego_image_to_egl_shared_image);
+ return qt_meego_image_to_egl_shared_image(image);
+}
+
+QPixmap QMeeGoRuntime::pixmapFromEGLSharedImage(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));
+}
+
+QPixmap QMeeGoRuntime::pixmapWithGLTexture(int w, int h)
+{
+ ENSURE_INITIALIZED;
+ Q_ASSERT(qt_meego_pixmapdata_with_gl_texture);
+ return QPixmap(qt_meego_pixmapdata_with_gl_texture(w, h));
+}
+
+bool QMeeGoRuntime::destroyEGLSharedImage(Qt::HANDLE handle)
+{
+ ENSURE_INITIALIZED;
+ Q_ASSERT(qt_meego_destroy_egl_shared_image);
+ return qt_meego_destroy_egl_shared_image(handle);
+}
+
+void QMeeGoRuntime::updateEGLSharedImagePixmap(QPixmap *p)
+{
+ ENSURE_INITIALIZED;
+ Q_ASSERT(qt_meego_update_egl_shared_image_pixmap);
+ return qt_meego_update_egl_shared_image_pixmap(p);
+}
+
+void QMeeGoRuntime::setSurfaceFixedSize(int w, int h)
+{
+ ENSURE_INITIALIZED;
+ Q_ASSERT(qt_meego_set_surface_fixed_size);
+ qt_meego_set_surface_fixed_size(w, h);
+}
+
+void QMeeGoRuntime::setSurfaceScaling(int x, int y, int w, int h)
+{
+ ENSURE_INITIALIZED;
+ Q_ASSERT(qt_meego_set_surface_scaling);
+ qt_meego_set_surface_scaling(x, y, w, h);
+}
+
+void QMeeGoRuntime::setTranslucent(bool translucent)
+{
+ ENSURE_INITIALIZED;
+ Q_ASSERT(qt_meego_set_translucent);
+ qt_meego_set_translucent(translucent);
+}
diff --git a/tools/qmeegographicssystemhelper/qmeegoruntime.h b/tools/qmeegographicssystemhelper/qmeegoruntime.h
new file mode 100644
index 0000000000..82fdb52d26
--- /dev/null
+++ b/tools/qmeegographicssystemhelper/qmeegoruntime.h
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** 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 <QPixmap>
+#include <QImage>
+
+class QMeeGoRuntime
+{
+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 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);
+
+private:
+ static bool initialized;
+};
diff --git a/tools/qml/qmlruntime.cpp b/tools/qml/qmlruntime.cpp
index b38e80dc6c..c59621a26a 100644
--- a/tools/qml/qmlruntime.cpp
+++ b/tools/qml/qmlruntime.cpp
@@ -692,12 +692,14 @@ QDeclarativeViewer::~QDeclarativeViewer()
void QDeclarativeViewer::enableExperimentalGestures()
{
+#ifndef QT_NO_GESTURES
canvas->viewport()->grabGesture(Qt::TapGesture,Qt::DontStartGestureOnChildren|Qt::ReceivePartialGestures|Qt::IgnoredGesturesPropagateToParent);
canvas->viewport()->grabGesture(Qt::TapAndHoldGesture,Qt::DontStartGestureOnChildren|Qt::ReceivePartialGestures|Qt::IgnoredGesturesPropagateToParent);
canvas->viewport()->grabGesture(Qt::PanGesture,Qt::DontStartGestureOnChildren|Qt::ReceivePartialGestures|Qt::IgnoredGesturesPropagateToParent);
canvas->viewport()->grabGesture(Qt::PinchGesture,Qt::DontStartGestureOnChildren|Qt::ReceivePartialGestures|Qt::IgnoredGesturesPropagateToParent);
canvas->viewport()->grabGesture(Qt::SwipeGesture,Qt::DontStartGestureOnChildren|Qt::ReceivePartialGestures|Qt::IgnoredGesturesPropagateToParent);
canvas->viewport()->setAttribute(Qt::WA_AcceptTouchEvents);
+#endif
}
QDeclarativeView *QDeclarativeViewer::view() const
@@ -1067,11 +1069,7 @@ void QDeclarativeViewer::loadDummyDataFiles(const QString& directory)
QStringList list = dir.entryList();
for (int i = 0; i < list.size(); ++i) {
QString qml = list.at(i);
- QFile f(dir.filePath(qml));
- f.open(QIODevice::ReadOnly);
- QByteArray data = f.readAll();
- QDeclarativeComponent comp(canvas->engine());
- comp.setData(data, QUrl());
+ QDeclarativeComponent comp(canvas->engine(), dir.filePath(qml));
QObject *dummyData = comp.create();
if(comp.isError()) {
diff --git a/tools/runonphone/ossignalconverter.cpp b/tools/runonphone/ossignalconverter.cpp
index 6554e9f1e4..8566458df7 100644
--- a/tools/runonphone/ossignalconverter.cpp
+++ b/tools/runonphone/ossignalconverter.cpp
@@ -42,6 +42,7 @@
#include "ossignalconverter_p.h"
#include <signal.h>
#include <QTimer>
+#include <stdio.h>
Q_GLOBAL_STATIC(OsSignalConverter, osSignalConverter);
diff --git a/tools/tools.pro b/tools/tools.pro
index 8002b4bf8a..e82bcaab27 100644
--- a/tools/tools.pro
+++ b/tools/tools.pro
@@ -43,3 +43,7 @@ embedded: SUBDIRS += makeqpf
CONFIG+=ordered
QTDIR_build:REQUIRES = "contains(QT_CONFIG, full-config)"
+
+!win32:!embedded:!mac:!symbian:CONFIG += x11
+
+x11:contains(QT_CONFIG, opengles2):contains(QT_CONFIG, egl):SUBDIRS += qmeegographicssystemhelper
diff --git a/translations/assistant_de.ts b/translations/assistant_de.ts
index 0f4d0d60a5..95fabaf220 100644
--- a/translations/assistant_de.ts
+++ b/translations/assistant_de.ts
@@ -75,7 +75,7 @@ Grund:
</message>
<message>
<source>Error reading collection file &apos;%1&apos;: %2</source>
- <translation>Fehler beim Lesen der Katalogdatei &apos;%1&apos;: %2</translation>
+ <translation type="obsolete">Fehler beim Lesen der Katalogdatei &apos;%1&apos;: %2</translation>
</message>
<message>
<source>Cannot load sqlite database driver!</source>
@@ -110,6 +110,17 @@ Grund:
</message>
</context>
<context>
+ <name>BookmarkItem</name>
+ <message>
+ <source>New Folder</source>
+ <translation>Neuer Ordner</translation>
+ </message>
+ <message>
+ <source>Untitled</source>
+ <translation>Ohne Titel</translation>
+ </message>
+</context>
+<context>
<name>BookmarkManager</name>
<message>
<source>Untitled</source>
@@ -327,6 +338,39 @@ Grund:
<translation>Die Katalogdatei &apos;%1&apos; existiert nicht.</translation>
</message>
<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 type="unfinished"></translation>
+ </message>
+ <message>
<source>Missing collection file.</source>
<translation>Fehlende Katalogdatei.</translation>
</message>
@@ -375,6 +419,60 @@ Grund:
</message>
</context>
<context>
+ <name>ConversionWizard</name>
+ <message>
+ <source>Help Conversion Wizard</source>
+ <translation>Konvertierungsassistant für Hilfedateien</translation>
+ </message>
+ <message>
+ <source>Converting %1...</source>
+ <translation>Konvertiere %1...</translation>
+ </message>
+ <message>
+ <source>Writing help collection file...</source>
+ <translation>Schreibe Hilfedatei...</translation>
+ </message>
+ <message>
+ <source>Done.</source>
+ <translation>Beendet.</translation>
+ </message>
+</context>
+<context>
+ <name>FilesPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Form</translation>
+ </message>
+ <message>
+ <source>Files:</source>
+ <translation>Dateien:</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>Entfernen</translation>
+ </message>
+ <message>
+ <source>Remove All</source>
+ <translation>Alle entfernen</translation>
+ </message>
+ <message>
+ <source>Unreferenced Files</source>
+ <translation>Unreferenzierte Dateien</translation>
+ </message>
+ <message>
+ <source>Remove files which are neither referenced by a keyword nor by the TOC.</source>
+ <translation>Entfernt Dateien, die weder vom Inhaltsverzeichnis noch von einem Schlüsselwort referenziert werden.</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;Warnhinweis:&lt;/b&gt; Beachten Sie beim Löschen von Bilddateien oder Stylesheet-Dateien, dass diese nicht direkt von den .adp- oder .dcf-Dateien referenziert werden.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; Be aware when removing images or stylesheets since those files are not directly referenced by the .adp or .dcf file.&lt;/p&gt;</source>
+ <translation type="obsolete">&lt;p&gt;&lt;b&gt;Warnhinweis:&lt;/b&gt; Be aware when removing images or stylesheets since those files are not directly referenced by the .adp or .dcf file.&lt;/p&gt;</translation>
+ </message>
+</context>
+<context>
<name>FilterNameDialogClass</name>
<message>
<source>Add Filter Name</source>
@@ -386,6 +484,70 @@ Grund:
</message>
</context>
<context>
+ <name>FilterPage</name>
+ <message>
+ <source>Form</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Filter attributes for current documentation (comma separated list):</source>
+ <translation>Attribute der Filter für die angezeigte Dokumentation (durch Komma getrennte Liste):</translation>
+ </message>
+ <message>
+ <source>Custom Filters</source>
+ <translation>Benutzerdefinierte Filter</translation>
+ </message>
+ <message>
+ <source>1</source>
+ <translation>1</translation>
+ </message>
+ <message>
+ <source>2</source>
+ <translation>2</translation>
+ </message>
+ <message>
+ <source>Add</source>
+ <translation>Hinzufügen</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>Entfernen</translation>
+ </message>
+ <message>
+ <source>Filter Settings</source>
+ <translation>Filtereinstellungen</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 type="obsolete">Geben Sie die Attribute der Filter für die Dokumentation an. Wenn Attribute verwendet werden, sollte auch ein benutzerdefiniertes Filter festgelegt werden. Sowohl Filter-Attribute als auch benutzerdefinierte Filter sind jedoch optional.</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>Geben Sie die Attribute der Filter für die Dokumentation an. Wenn Attribute verwendet werden, sollte auch ein benutzerdefiniertes Filter festgelegt werden. Sowohl Filter-Attribute als auch benutzerdefinierte Filter sind jedoch optional.</translation>
+ </message>
+ <message>
+ <source>Filter Name</source>
+ <translation>Filtername</translation>
+ </message>
+ <message>
+ <source>Filter Attributes</source>
+ <translation>Attribute des Filters</translation>
+ </message>
+ <message>
+ <source>The custom filter &apos;%1&apos; is defined multiple times.</source>
+ <translation>Das benutzerdefinierte Filter &apos;%1&apos; wurde mehrfach definiert.</translation>
+ </message>
+ <message>
+ <source>The attributes for custom filter &apos;%1&apos; are defined multiple times.</source>
+ <translation>Die Attribute des benutzerdefinierten Filters &apos;%1&apos; wurden mehrfach definiert.</translation>
+ </message>
+ <message>
+ <source>unfiltered</source>
+ <comment>list of available documentation</comment>
+ <translation>Ungefiltert</translation>
+ </message>
+</context>
+<context>
<name>FindWidget</name>
<message>
<source>Previous</source>
@@ -405,6 +567,17 @@ Grund:
</message>
</context>
<context>
+ <name>FinishPage</name>
+ <message>
+ <source>Converting File</source>
+ <translation>Konvertiere Datei</translation>
+ </message>
+ <message>
+ <source>Creating the new Qt help files from the old ADP file.</source>
+ <translation>Erzeuge die neuen Qt-Hilfedateien aus den alten ADP-Dateien.</translation>
+ </message>
+</context>
+<context>
<name>FontPanel</name>
<message>
<source>Font</source>
@@ -428,6 +601,59 @@ Grund:
</message>
</context>
<context>
+ <name>GeneralPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Form</translation>
+ </message>
+ <message>
+ <source>Namespace:</source>
+ <translation>Namensraum:</translation>
+ </message>
+ <message>
+ <source>Virtual Folder:</source>
+ <translation>Virtueller Ordner:</translation>
+ </message>
+ <message>
+ <source>General Settings</source>
+ <translation>Allgemeine Einstellungen</translation>
+ </message>
+ <message>
+ <source>Specify the namespace and the virtual folder for the documentation.</source>
+ <translation>Geben Sie den Namensraum und den virtuellen Ordner für die Dokumentation an.</translation>
+ </message>
+ <message>
+ <source>Namespace Error</source>
+ <translation>Fehlerhafter Namensraum</translation>
+ </message>
+ <message>
+ <source>The namespace contains some invalid characters.</source>
+ <translation>Der Namensraum enthält einige ungültige Zeichen.</translation>
+ </message>
+ <message>
+ <source>Virtual Folder Error</source>
+ <translation>Fehlerhafter virtueller Ordner</translation>
+ </message>
+ <message>
+ <source>The virtual folder contains some invalid characters.</source>
+ <translation>Der virtuelle Ornder enthält einige ungültige Zeichen.</translation>
+ </message>
+</context>
+<context>
+ <name>HelpEngineWrapper</name>
+ <message>
+ <source>Unfiltered</source>
+ <translation>Ungefiltert</translation>
+ </message>
+</context>
+<context>
+ <name>HelpGenerator</name>
+ <message>
+ <source>Warning: %1</source>
+ <translation>Warnung: %1</translation>
+ </message>
+</context>
+<context>
<name>HelpViewer</name>
<message>
<source>&lt;title&gt;about:blank&lt;/title&gt;</source>
@@ -451,6 +677,40 @@ Grund:
</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;Assistent&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>Bezeichner erzeugen</translation>
+ </message>
+ <message>
+ <source>Global prefix:</source>
+ <translation>Globaler Präfix:</translation>
+ </message>
+ <message>
+ <source>Inherit prefix from file names</source>
+ <translation>Präfixe aus Dateinamen entnehmen</translation>
+ </message>
+ <message>
+ <source>Identifiers</source>
+ <translation>Bezeichner</translation>
+ </message>
+ <message>
+ <source>This page allows you to create identifiers from the keywords found in the .adp or .dcf file.</source>
+ <translation>Diese Seite gestattet das Erzeugen von Bezeichnern aus den Schlüsselwörtern, die in den .adp- oder .dcf-Dateien gefunden werden.</translation>
+ </message>
+</context>
+<context>
<name>IndexWindow</name>
<message>
<source>&amp;Look for:</source>
@@ -466,6 +726,53 @@ Grund:
</message>
</context>
<context>
+ <name>InputPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Form</translation>
+ </message>
+ <message>
+ <source>File name:</source>
+ <translation>Dateiname:</translation>
+ </message>
+ <message>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+ <message>
+ <source>Input File</source>
+ <translation>Eingabedatei:</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>Geben Sie die .adp- oder .dcf-Datei an, die Sie in die neuen Qt-Hilfedateiformate konvertieren möchten.</translation>
+ </message>
+ <message>
+ <source>Open file</source>
+ <translation>Datei öffnen</translation>
+ </message>
+ <message>
+ <source>Qt Help Files (*.adp *.dcf)</source>
+ <translation>Qt-Hilfedateien (*.adp *.dcf)</translation>
+ </message>
+ <message>
+ <source>File Open Error</source>
+ <translation>Fehler beim Öffnen der Datei</translation>
+ </message>
+ <message>
+ <source>The specified file could not be opened!</source>
+ <translation>Die angegebene Datei konnte nicht geöffnet werden.</translation>
+ </message>
+ <message>
+ <source>File Parsing Error</source>
+ <translation>Fehler beim Auslesen der Datei</translation>
+ </message>
+ <message>
+ <source>Parsing error in line %1!</source>
+ <translation>Fehler bei Zeile %1.</translation>
+ </message>
+</context>
+<context>
<name>InstallDialog</name>
<message>
<source>Install Documentation</source>
@@ -681,6 +988,10 @@ Grund:
<translation>Ctrl+Alt+Left</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 type="unfinished"></translation>
+ </message>
+ <message>
<source>Could not register file &apos;%1&apos;: %2</source>
<translation>Die Datei &apos;%1&apos; konnte nicht registriert werden: %2</translation>
</message>
@@ -778,6 +1089,92 @@ Grund:
</message>
</context>
<context>
+ <name>OutputPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Form</translation>
+ </message>
+ <message>
+ <source>Project file name:</source>
+ <translation>Name der Projektdatei:</translation>
+ </message>
+ <message>
+ <source>Collection file name:</source>
+ <translation>Name der Katalogdatei:</translation>
+ </message>
+ <message>
+ <source>Output File Names</source>
+ <translation>Ausgabedateien</translation>
+ </message>
+ <message>
+ <source>Specify the file names for the output files.</source>
+ <translation>Geben Sie die Namen der Ausgabedateien an.</translation>
+ </message>
+ <message>
+ <source>Convert...</source>
+ <translation>Konvertiere ...</translation>
+ </message>
+ <message>
+ <source>Qt Help Project File</source>
+ <translation>Qt-Hilfe-Projektdatei</translation>
+ </message>
+ <message>
+ <source>Qt Help Collection Project File</source>
+ <translation>Qt-Hilfe-Katalogdatei</translation>
+ </message>
+ <message>
+ <source>The specified file %1 already exist.
+
+Do you want to remove it?</source>
+ <translation>Die Datei %1 existiert bereits.
+
+Möchten Sie sie löschen?</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>Entfernen</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Abbrechen</translation>
+ </message>
+</context>
+<context>
+ <name>PathPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Form</translation>
+ </message>
+ <message>
+ <source>File filters:</source>
+ <translation>Dateifilter:</translation>
+ </message>
+ <message>
+ <source>Documentation source file paths:</source>
+ <translation>Pfade der Dokumentations-Quelldateien:</translation>
+ </message>
+ <message>
+ <source>Add</source>
+ <translation>Hinzufügen</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>Entfernen</translation>
+ </message>
+ <message>
+ <source>Source File Paths</source>
+ <translation>Pfade der Quelldateien</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>Geben Sie die Pfade an, unter denen sich die Quelldateien befinden. Es werden alle Dateien aus diesen Verzeichnissen aufgenommen, die dem Dateifilter entsprechen.</translation>
+ </message>
+ <message>
+ <source>Source File Path</source>
+ <translation>Pfade der Quelldateien</translation>
+ </message>
+</context>
+<context>
<name>PreferencesDialog</name>
<message>
<source>Add Documentation</source>
@@ -912,6 +1309,147 @@ Grund:
</message>
</context>
<context>
+ <name>QCollectionGenerator</name>
+ <message>
+ <source>Unknown token at line %1.</source>
+ <translation>Unbekanntes Schlüsselwort bei Zeile %1.</translation>
+ </message>
+ <message>
+ <source>Unknown token at line %1. Expected &quot;QtHelpCollectionProject&quot;.</source>
+ <translation>Unbekanntes Schlüsselwort bei Zeile %1. Es wird &quot;QtHelpCollectionProject&quot; erwartet.</translation>
+ </message>
+ <message>
+ <source>Missing end tags.</source>
+ <translation>Es fehlen schließende Elemente.</translation>
+ </message>
+ <message>
+ <source>Missing input or output file for help file generation.</source>
+ <translation>Es fehlen einige der für die Erzeugung der Hilfedateien benötigte Eingabe- oder Ausgabedateien.</translation>
+ </message>
+ <message>
+ <source>Missing output file name.</source>
+ <translation>Es wurde kein Name für die Ausgabedatei angegeben.</translation>
+ </message>
+ <message>
+ <source>Qt Collection Generator version 1.0 (Qt %1)
+</source>
+ <translation>Qt Collection Generator Version 1.0 (Qt %1)
+</translation>
+ </message>
+ <message>
+ <source>Missing collection config file.</source>
+ <translation>Die für den Katalog benötigte Konfigurationsdatei fehlt.</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 type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Could not open %1.
+</source>
+ <translation>Die Datei &apos;%1&apos; konnte nicht geöffnet werden.
+</translation>
+ </message>
+ <message>
+ <source>Reading collection config file...
+</source>
+ <translation>Lese Konfigurationsdatei des Katalogs...
+</translation>
+ </message>
+ <message>
+ <source>Collection config file error: %1
+</source>
+ <translation>Fehler in der Konfigurationsdatei des Katalogs %1</translation>
+ </message>
+ <message>
+ <source>Generating help for %1...
+</source>
+ <translation>Erzeuge Hilfe für %1...
+</translation>
+ </message>
+ <message>
+ <source>Creating collection file...
+</source>
+ <translation>Erzeuge Katalogdatei...
+</translation>
+ </message>
+ <message>
+ <source>The file %1 cannot be overwritten.
+</source>
+ <translation>Die Datei %1 konnte nicht überschrieben werden.</translation>
+ </message>
+ <message>
+ <source>Cannot open %1.
+</source>
+ <translation>Die Datei &apos;%1&apos; konnte nicht geöffnet werden.
+</translation>
+ </message>
+ <message>
+ <source>Cannot open referenced image file %1.
+</source>
+ <translation>Die referenzierte Bilddatei %1 konnte nicht geöffnet werden.
+</translation>
+ </message>
+</context>
+<context>
+ <name>QHelpGenerator</name>
+ <message>
+ <source>Missing output file name.</source>
+ <translation>Es wurde kein Name für die Ausgabedatei angegeben.</translation>
+ </message>
+ <message>
+ <source>Qt Help Generator version 1.0 (Qt %1)
+</source>
+ <translation>Qt Help Generator Version 1.0 (Qt %1)
+</translation>
+ </message>
+ <message>
+ <source>Missing Qt help project file.</source>
+ <translation>Die Qt-Hilfe-Projektdatei fehlt.</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 type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Could not open %1.
+</source>
+ <translation>Die Datei &apos;%1&apos; konnte nicht geöffnet werden.
+</translation>
+ </message>
+ <message>
+ <source>Could not create output directory: %1
+</source>
+ <translation>Der Ausgabeordner &apos;%1 konnte nicht erzeugt werden</translation>
+ </message>
+</context>
+<context>
<name>RemoteControl</name>
<message>
<source>Debugging Remote Control</source>
diff --git a/translations/assistant_sl.ts b/translations/assistant_sl.ts
index 05429bdf08..cb3779c322 100644
--- a/translations/assistant_sl.ts
+++ b/translations/assistant_sl.ts
@@ -115,6 +115,17 @@ Razlog:
</message>
</context>
<context>
+ <name>BookmarkItem</name>
+ <message>
+ <source>New Folder</source>
+ <translation>Nova mapa</translation>
+ </message>
+ <message>
+ <source>Untitled</source>
+ <translation>Brez naslova</translation>
+ </message>
+</context>
+<context>
<name>BookmarkManager</name>
<message>
<source>Untitled</source>
@@ -320,6 +331,64 @@ Razlog:
<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>Uporaba: assistant [možnosti]
+
+-collectionFile file Namesto privzete datoteke zbirke
+ uporabi navedeno
+-showUrl url Prikaže dokument z URL-jem
+-enableRemoteControl Omogoča oddaljeni nadzor
+-show podokno Prikaže navedeno podokno,
+ ki je lahko »contents«, »index«,
+ »bookmarks« ali »search«.
+-activate podokno Aktivira navedeno podokno,
+ ki je lahko »contents«, »index«,
+ »bookmarks« ali »search».
+-hide podokno Skrije navedeno podokno,
+ ki je lahko »contents«, »index«
+ »bookmarks« ali »search«.
+-register datoteka Registrira navedeno datoteko s pomočjo
+ (.qch) v dani datoteki zbirke.
+-unregister datoteka Odregistrira navedeno datoteko s pomočjo
+ (.qch) iz dane datoteke zbirke.
+-setCurrentFilter filter Nastavi filter kot aktiven.
+-remove-search-index Odstrani kazalo za iskanje po celotnem besedilu.
+-rebuild-search-index Znova zgradi kazalo za iskanje po celotnem besedilu (lahko počasno).
+-quiet Ne prikaže nobenega sporočila
+ napake ali stanja.
+-help Prikaže to pomoč.
+</translation>
+ </message>
+ <message>
<source>Unknown option: %1</source>
<translation>Neznana možnost: %1</translation>
</message>
@@ -380,6 +449,56 @@ Razlog:
</message>
</context>
<context>
+ <name>ConversionWizard</name>
+ <message>
+ <source>Help Conversion Wizard</source>
+ <translation>Čarovnik za pretvorbo pomoči</translation>
+ </message>
+ <message>
+ <source>Converting %1...</source>
+ <translation>Pretvarjanje %1 ...</translation>
+ </message>
+ <message>
+ <source>Writing help collection file...</source>
+ <translation>Zapisovanje datoteke z zbirko pomoči ...</translation>
+ </message>
+ <message>
+ <source>Done.</source>
+ <translation>Opravljeno.</translation>
+ </message>
+</context>
+<context>
+ <name>FilesPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Obrazec</translation>
+ </message>
+ <message>
+ <source>Files:</source>
+ <translation>Datoteke:</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>Odstrani</translation>
+ </message>
+ <message>
+ <source>Remove All</source>
+ <translation>Odstrani vse</translation>
+ </message>
+ <message>
+ <source>Unreferenced Files</source>
+ <translation>Nesklicevane datoteke</translation>
+ </message>
+ <message>
+ <source>Remove files which are neither referenced by a keyword nor by the TOC.</source>
+ <translation>Odstrani datoteke, na katere se ne sklicuje niti ključna beseda niti vsebinsko kazalo.</translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; Be aware when removing images or stylesheets since those files are not directly referenced by the .adp or .dcf file.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;&lt;b&gt;Opozorilo:&lt;/b&gt; Pazite pri odstranjevanju slik ali slogovnih predlog, saj se nanje datoteke *.adp ali *.dcf ne sklicujejo neposredno.&lt;/p&gt;</translation>
+ </message>
+</context>
+<context>
<name>FilterNameDialogClass</name>
<message>
<source>Add Filter Name</source>
@@ -391,6 +510,66 @@ Razlog:
</message>
</context>
<context>
+ <name>FilterPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Obrazec</translation>
+ </message>
+ <message>
+ <source>Filter attributes for current documentation (comma separated list):</source>
+ <translation>Filtrirne lastnosti za trenutno dokumentacijo (seznam, ločen z vejicami):</translation>
+ </message>
+ <message>
+ <source>Custom Filters</source>
+ <translation>Filtri po meri</translation>
+ </message>
+ <message>
+ <source>1</source>
+ <translation>1</translation>
+ </message>
+ <message>
+ <source>2</source>
+ <translation>2</translation>
+ </message>
+ <message>
+ <source>Add</source>
+ <translation>Dodaj</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>Odstrani</translation>
+ </message>
+ <message>
+ <source>Filter Settings</source>
+ <translation>Nastavitve filtra</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>Določite filtrirne lastnosti za dokumentacijo. Če so uporabljene filtrirne lastnosti, določite tudi filter po meri zanje. Filtrirne lastnosti in filtri po meri niso obvezni.</translation>
+ </message>
+ <message>
+ <source>Filter Name</source>
+ <translation>Ime filtra</translation>
+ </message>
+ <message>
+ <source>Filter Attributes</source>
+ <translation>Filtrirne lastnosti</translation>
+ </message>
+ <message>
+ <source>The custom filter &apos;%1&apos; is defined multiple times.</source>
+ <translation>Filter po meri »%1« je določen večkrat.</translation>
+ </message>
+ <message>
+ <source>The attributes for custom filter &apos;%1&apos; are defined multiple times.</source>
+ <translation>Lastnosti za filer po meri »%1« so določene večkrat.</translation>
+ </message>
+ <message>
+ <source>unfiltered</source>
+ <comment>list of available documentation</comment>
+ <translation>nefiltrirano</translation>
+ </message>
+</context>
+<context>
<name>FindWidget</name>
<message>
<source>Previous</source>
@@ -410,6 +589,17 @@ Razlog:
</message>
</context>
<context>
+ <name>FinishPage</name>
+ <message>
+ <source>Converting File</source>
+ <translation>Pretvarjanje datoteke</translation>
+ </message>
+ <message>
+ <source>Creating the new Qt help files from the old ADP file.</source>
+ <translation>Ustvarjanje novih datotek s pomočjo za Qt iz starih datotek ADP.</translation>
+ </message>
+</context>
+<context>
<name>FontPanel</name>
<message>
<source>Font</source>
@@ -433,6 +623,52 @@ Razlog:
</message>
</context>
<context>
+ <name>GeneralPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Obrazec</translation>
+ </message>
+ <message>
+ <source>Namespace:</source>
+ <translation>Imenski prostor:</translation>
+ </message>
+ <message>
+ <source>Virtual Folder:</source>
+ <translation>Navidezna mapa:</translation>
+ </message>
+ <message>
+ <source>General Settings</source>
+ <translation>Splošne nastavitve</translation>
+ </message>
+ <message>
+ <source>Specify the namespace and the virtual folder for the documentation.</source>
+ <translation>Določite imenski prostor in navidezno mapo za dokumentacijo.</translation>
+ </message>
+ <message>
+ <source>Namespace Error</source>
+ <translation>Napaka imenskega prostora</translation>
+ </message>
+ <message>
+ <source>The namespace contains some invalid characters.</source>
+ <translation>Imenski prostor vsebuje neveljavne znake.</translation>
+ </message>
+ <message>
+ <source>Virtual Folder Error</source>
+ <translation>Napaka navidezne mape</translation>
+ </message>
+ <message>
+ <source>The virtual folder contains some invalid characters.</source>
+ <translation>Navidezna mapa vsebuje neveljavne znake.</translation>
+ </message>
+</context>
+<context>
+ <name>HelpGenerator</name>
+ <message>
+ <source>Warning: %1</source>
+ <translation>Opozorilo: %1</translation>
+ </message>
+</context>
+<context>
<name>HelpViewer</name>
<message>
<source>&lt;title&gt;about:blank&lt;/title&gt;</source>
@@ -456,6 +692,40 @@ Razlog:
</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;Čarovniški pomočnik&lt;/b&gt;&lt;/center&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>IdentifierPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Obrazec</translation>
+ </message>
+ <message>
+ <source>Create identifiers</source>
+ <translation>Ustvari identifikatorje</translation>
+ </message>
+ <message>
+ <source>Global prefix:</source>
+ <translation>Globalna predpona:</translation>
+ </message>
+ <message>
+ <source>Inherit prefix from file names</source>
+ <translation>Predpono prevzemi iz imen datotek</translation>
+ </message>
+ <message>
+ <source>Identifiers</source>
+ <translation>Identifikatorji</translation>
+ </message>
+ <message>
+ <source>This page allows you to create identifiers from the keywords found in the .adp or .dcf file.</source>
+ <translation>Ta stran vam omogoča, da iz ključnih besed v datoteki *.adp ali *.dcf ustvarite identifikatorje.</translation>
+ </message>
+</context>
+<context>
<name>IndexWindow</name>
<message>
<source>&amp;Look for:</source>
@@ -471,6 +741,53 @@ Razlog:
</message>
</context>
<context>
+ <name>InputPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Obrazec</translation>
+ </message>
+ <message>
+ <source>File name:</source>
+ <translation>Ime datoteke:</translation>
+ </message>
+ <message>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+ <message>
+ <source>Input File</source>
+ <translation>Vhodna datoteka</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>Določite datoteko *.adp ali *.dcf, ki jo želite pretvoriti v novo obliko projekta pomoči za Qt in/ali zbirke.</translation>
+ </message>
+ <message>
+ <source>Open file</source>
+ <translation>Odpri datoteko</translation>
+ </message>
+ <message>
+ <source>Qt Help Files (*.adp *.dcf)</source>
+ <translation>Datoteke s pomočjo za Qt (*.adp, *.dcf)</translation>
+ </message>
+ <message>
+ <source>File Open Error</source>
+ <translation>Napaka odpiranja datoteke</translation>
+ </message>
+ <message>
+ <source>The specified file could not be opened!</source>
+ <translation>Navedene datoteke ni bilo moč odpreti.</translation>
+ </message>
+ <message>
+ <source>File Parsing Error</source>
+ <translation>Napaka razčlenjevanja datoteke</translation>
+ </message>
+ <message>
+ <source>Parsing error in line %1!</source>
+ <translation>Napaka razčlenjevanja v vrstici %1.</translation>
+ </message>
+</context>
+<context>
<name>InstallDialog</name>
<message>
<source>Install Documentation</source>
@@ -770,6 +1087,10 @@ Razlog:
<translation>Povezane postavke vsebine ni bilo moč najti.</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;Različica %2&lt;/p&gt;&lt;/center&gt;&lt;p&gt;Avtorske pravice © 2010 Nokia Corporation in/ali njene podružnice.&lt;/p&gt;&lt;p&gt;Prevedel: &lt;a href=&quot;mailto:jlp@holodeck1.com&quot;&gt;Jure Repinc&lt;/a&gt;, &lt;a href=&quot;http://www.lugos.si/&quot;&gt;LUGOS&lt;/a&gt;&lt;/p&gt;</translation>
+ </message>
+ <message>
<source>About %1</source>
<translation>O %1</translation>
</message>
@@ -783,6 +1104,92 @@ Razlog:
</message>
</context>
<context>
+ <name>OutputPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Obrazec</translation>
+ </message>
+ <message>
+ <source>Project file name:</source>
+ <translation>Ime projektne datoteke:</translation>
+ </message>
+ <message>
+ <source>Collection file name:</source>
+ <translation>Ime datoteke zbirke:</translation>
+ </message>
+ <message>
+ <source>Output File Names</source>
+ <translation>Imena izhodnih datotek</translation>
+ </message>
+ <message>
+ <source>Specify the file names for the output files.</source>
+ <translation>Določite imena datotek za izhodne datoteke.</translation>
+ </message>
+ <message>
+ <source>Convert...</source>
+ <translation>Pretvori ...</translation>
+ </message>
+ <message>
+ <source>Qt Help Project File</source>
+ <translation>Projektna datoteka pomoči za Qt</translation>
+ </message>
+ <message>
+ <source>Qt Help Collection Project File</source>
+ <translation>Projektna datoteka zbirke pomoči za Qt</translation>
+ </message>
+ <message>
+ <source>The specified file %1 already exist.
+
+Do you want to remove it?</source>
+ <translation>Navedena datoteka %1 že obstaja.
+
+Ali jo želite odstraniti?</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>Odstrani</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Prekliči</translation>
+ </message>
+</context>
+<context>
+ <name>PathPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Obrazec</translation>
+ </message>
+ <message>
+ <source>File filters:</source>
+ <translation>Datotečni filtri:</translation>
+ </message>
+ <message>
+ <source>Documentation source file paths:</source>
+ <translation>Poti z izvornimi datotekami za dokumentacijo:</translation>
+ </message>
+ <message>
+ <source>Add</source>
+ <translation>Dodaj</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>Odstrani</translation>
+ </message>
+ <message>
+ <source>Source File Paths</source>
+ <translation>Poti izvornih datotek</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>Določite poti do mest, kjer se nahajajo izvorne datoteke. Privzeto bodo vključene vse datoteke iz map, ki se ujemajo z datotečnim filtrom.</translation>
+ </message>
+ <message>
+ <source>Source File Path</source>
+ <translation>Pot izvorne datoteke</translation>
+ </message>
+</context>
+<context>
<name>PreferencesDialog</name>
<message>
<source>Add Documentation</source>
@@ -917,6 +1324,176 @@ Razlog:
</message>
</context>
<context>
+ <name>QCollectionGenerator</name>
+ <message>
+ <source>Unknown token at line %1.</source>
+ <translation>Neznan žeton v vrstici %1.</translation>
+ </message>
+ <message>
+ <source>Unknown token at line %1. Expected &quot;QtHelpCollectionProject&quot;.</source>
+ <translation>Neznan žeton v vrstici %1. Pričakocan »QtHelpCollectionProject«.</translation>
+ </message>
+ <message>
+ <source>Missing end tags.</source>
+ <translation>Manjkajoče končne značke.</translation>
+ </message>
+ <message>
+ <source>Missing input or output file for help file generation.</source>
+ <translation>Manjkajoča vhodna ali izhodna datoteka za ustvarjanje datoteke s pomočjo.</translation>
+ </message>
+ <message>
+ <source>Missing output file name.</source>
+ <translation>Manjkajoče ime izhodne datoteke.</translation>
+ </message>
+ <message>
+ <source>Qt Collection Generator version 1.0 (Qt %1)
+</source>
+ <translation>Qt Collection Generator različice 1.0 (Qt %1)
+</translation>
+ </message>
+ <message>
+ <source>Missing collection config file.</source>
+ <translation>Manjkajoča nastavitvena datoteka zbirke.</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>
+Uporaba:
+
+qcollectiongenerator &lt;nastavitvena-datoteka&gt; [možnosti]
+
+ -o &lt;datoteka-zbirke&gt; Ustvari datoteko zbirke z
+ imenom &lt;datoteka-zbirke&gt;. če
+ ta možnost ni uporabljena,
+ se uporabi privzeto ime.
+ -v Prikaže različico za
+ qcollectiongenerator.
+
+</translation>
+ </message>
+ <message>
+ <source>Could not open %1.
+</source>
+ <translation>Ni bilo moč odpreti %1.
+</translation>
+ </message>
+ <message>
+ <source>Reading collection config file...
+</source>
+ <translation>Branje nastavitvene datoteke zbirke ...
+</translation>
+ </message>
+ <message>
+ <source>Collection config file error: %1
+</source>
+ <translation>Napaka nastavitvene datoteke zbirke: %1
+</translation>
+ </message>
+ <message>
+ <source>Generating help for %1...
+</source>
+ <translation>Ustvarjanje pomoči za %1 ...
+</translation>
+ </message>
+ <message>
+ <source>Creating collection file...
+</source>
+ <translation>Ustvarjanje datoteke zbirke ...
+</translation>
+ </message>
+ <message>
+ <source>The file %1 cannot be overwritten.
+</source>
+ <translation>Datoteke %1 ni moč nadomestiti.
+</translation>
+ </message>
+ <message>
+ <source>Cannot open %1.
+</source>
+ <translation>Ni moč odpreti %1.
+</translation>
+ </message>
+ <message>
+ <source>Cannot open referenced image file %1.
+</source>
+ <translation>Ni moč odpreti sklicane slikovne datoteke %1.
+</translation>
+ </message>
+</context>
+<context>
+ <name>QHelpGenerator</name>
+ <message>
+ <source>Missing output file name.</source>
+ <translation>Manjkajoče ime izhodne datoteke.</translation>
+ </message>
+ <message>
+ <source>Qt Help Generator version 1.0 (Qt %1)
+</source>
+ <translation>Qt Help Generator različice 1.0 (Qt %1)
+</translation>
+ </message>
+ <message>
+ <source>Missing Qt help project file.</source>
+ <translation>Manjkajoča projektna datoteka pomoči za 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>
+Uporaba:
+
+qcollectiongenerator &lt;projektna-datoteka&gt; [možnosti]
+
+ -o &lt;stisnjena-datoteka&gt; Ustvari stisnjeno datoteko pomoči
+ za Qt, z imenom &lt;stisnjena-datoteka&gt;. če
+ ta možnost ni uporabljena,
+ se uporabi privzeto ime.
+ -c Preveri, ali vse povezave v datotekah HTML
+ kažejo na datoteke v tem projektu pomoči.
+ -v Prikaže različico za
+ qhelpgenerator
+
+</translation>
+ </message>
+ <message>
+ <source>Could not open %1.
+</source>
+ <translation>Ni bilo moč odpreti %1.
+</translation>
+ </message>
+ <message>
+ <source>Could not create output directory: %1
+</source>
+ <translation>Ni bilo moč ustvariti izhodne mape: %1
+</translation>
+ </message>
+</context>
+<context>
<name>RemoteControl</name>
<message>
<source>Debugging Remote Control</source>
@@ -939,7 +1516,7 @@ Razlog:
</message>
<message>
<source>Open Link in New Tab</source>
- <translation>Odpri povezavo v novem &amp;zavihku</translation>
+ <translation>Odpri povezavo v novem zavihku</translation>
</message>
<message>
<source>Select All</source>
diff --git a/translations/designer_de.ts b/translations/designer_de.ts
index 9ff509948f..f0546c7919 100644
--- a/translations/designer_de.ts
+++ b/translations/designer_de.ts
@@ -25,6 +25,49 @@
</message>
</context>
<context>
+ <name>AbstractItemEditor</name>
+ <message>
+ <source>Selectable</source>
+ <translation>Selectable</translation>
+ </message>
+ <message>
+ <source>Editable</source>
+ <translation>Editable</translation>
+ </message>
+ <message>
+ <source>DragEnabled</source>
+ <translation>DragEnabled</translation>
+ </message>
+ <message>
+ <source>DropEnabled</source>
+ <translation>DropEnabled</translation>
+ </message>
+ <message>
+ <source>UserCheckable</source>
+ <translation>UserCheckable</translation>
+ </message>
+ <message>
+ <source>Enabled</source>
+ <translation>Enabled</translation>
+ </message>
+ <message>
+ <source>Tristate</source>
+ <translation>Tristate</translation>
+ </message>
+ <message>
+ <source>Unchecked</source>
+ <translation>Unchecked</translation>
+ </message>
+ <message>
+ <source>PartiallyChecked</source>
+ <translation>PartiallyChecked</translation>
+ </message>
+ <message>
+ <source>Checked</source>
+ <translation>Checked</translation>
+ </message>
+</context>
+<context>
<name>AddLinkDialog</name>
<message>
<source>Insert Link</source>
@@ -851,6 +894,7 @@ Parsing grid layout minimum size values</extracomment>
<name>FormEditorOptionsPage</name>
<message>
<source>%1 %</source>
+ <extracomment>Zoom percentage</extracomment>
<translation>%1 %</translation>
</message>
<message>
@@ -2509,6 +2553,10 @@ Empty class name passed to widget factory method</extracomment>
<context>
<name>QtLocalePropertyManager</name>
<message>
+ <source>&lt;Invalid&gt;</source>
+ <translation>&lt;Ungültig&gt;</translation>
+ </message>
+ <message>
<source>%1, %2</source>
<translation>%1, %2</translation>
</message>
@@ -4730,6 +4778,14 @@ Please select another name.</source>
<translation>Nach neu installierten Plugins mit benutzerdefinierten Widgets suchen.</translation>
</message>
<message>
+ <source>Loaded Plugins</source>
+ <translation>Geladene Plugins</translation>
+ </message>
+ <message>
+ <source>Failed Plugins</source>
+ <translation>Fehlgeschlagene Plugins</translation>
+ </message>
+ <message>
<source>Qt Designer couldn&apos;t find any plugins</source>
<translation>Qt Designer kann keine Plugins finden</translation>
</message>
diff --git a/translations/designer_sl.ts b/translations/designer_sl.ts
index d925f0940c..1b906f56b0 100644
--- a/translations/designer_sl.ts
+++ b/translations/designer_sl.ts
@@ -32,6 +32,49 @@
</message>
</context>
<context>
+ <name>AbstractItemEditor</name>
+ <message>
+ <source>Selectable</source>
+ <translation>Moč izbrati</translation>
+ </message>
+ <message>
+ <source>Editable</source>
+ <translation>Moč urejati</translation>
+ </message>
+ <message>
+ <source>DragEnabled</source>
+ <translation>Omogočena vleka</translation>
+ </message>
+ <message>
+ <source>DropEnabled</source>
+ <translation>Omogočeno spuščanje</translation>
+ </message>
+ <message>
+ <source>UserCheckable</source>
+ <translation>Uporabnik lahko omogoči</translation>
+ </message>
+ <message>
+ <source>Enabled</source>
+ <translation>Omogočeno</translation>
+ </message>
+ <message>
+ <source>Tristate</source>
+ <translation>Tri stanja</translation>
+ </message>
+ <message>
+ <source>Unchecked</source>
+ <translation>Neomogočeno</translation>
+ </message>
+ <message>
+ <source>PartiallyChecked</source>
+ <translation>Delno omogočeno</translation>
+ </message>
+ <message>
+ <source>Checked</source>
+ <translation>Omogočeno</translation>
+ </message>
+</context>
+<context>
<name>AddLinkDialog</name>
<message>
<source>Insert Link</source>
@@ -2546,6 +2589,10 @@ Empty class name passed to widget factory method
<context>
<name>QtLocalePropertyManager</name>
<message>
+ <source>&lt;Invalid&gt;</source>
+ <translation>&lt;neveljavno&gt;</translation>
+ </message>
+ <message>
<source>%1, %2</source>
<translation>%1, %2</translation>
</message>
@@ -3658,7 +3705,7 @@ Ali želite nadomestiti predlogo?</translation>
</message>
<message>
<source>Page</source>
- <translation>Stran %1</translation>
+ <translation>Stran</translation>
</message>
<message>
<source>Page %1 of %2</source>
@@ -3843,7 +3890,7 @@ Ali želite nadomestiti predlogo?</translation>
</message>
<message>
<source>Delete String</source>
- <translation>Z&amp;briši niz</translation>
+ <translation>Zbriši niz</translation>
</message>
<message>
<source>&amp;Delete</source>
@@ -3962,7 +4009,7 @@ Ali želite nadomestiti predlogo?</translation>
</message>
<message>
<source>Key Resize</source>
- <translation type="unfinished"></translation>
+ <translation>Sprememba velikosti s tipko</translation>
</message>
<message>
<source>Cannot paste widgets. Designer could not find a container without a layout to paste into.</source>
@@ -4632,7 +4679,7 @@ Please select another name.</source>
<name>qdesigner_internal::ObjectInspector</name>
<message>
<source>Change Current Page</source>
- <translation type="unfinished">Spreminjanje trenutne strani</translation>
+ <translation>Spremeni trenutno stran</translation>
</message>
<message>
<source>&amp;Find in Text...</source>
@@ -4780,6 +4827,14 @@ Please select another name.</source>
<translation>Preveri razpoložljivost na novo nameščenih vstavkov za gradnike po meri.</translation>
</message>
<message>
+ <source>Loaded Plugins</source>
+ <translation>Naloženi vstavki</translation>
+ </message>
+ <message>
+ <source>Failed Plugins</source>
+ <translation>Neuspeli vstavki</translation>
+ </message>
+ <message>
<source>Qt Designer couldn&apos;t find any plugins</source>
<translation>Qt Designer ni našel nobenega vstavka</translation>
</message>
@@ -4815,7 +4870,7 @@ Please select another name.</source>
</message>
<message>
<source>Load Custom Device Skin</source>
- <translation type="unfinished">Naloži temo za napravo po meri</translation>
+ <translation>Naloži temo za napravo po meri</translation>
</message>
<message>
<source>All QVFB Skins (*.%1)</source>
@@ -5826,49 +5881,4 @@ To nakazuje na neskladnost v datoteki *.ui.</translation>
<translation>&amp;Povečava</translation>
</message>
</context>
-<context>
- <name></name>
- <message>
- <source>&lt;Filter&gt;</source>
- <comment>qdesigner_internal::FilterWidget|</comment>
- <translation type="obsolete">&lt;filter&gt;</translation>
- </message>
- <message>
- <source>Change Current Page</source>
- <comment>qdesigner_internal::ObjectInspector::ObjectInspectorPrivate|</comment>
- <translation type="obsolete">Spreminjanje trenutne strani</translation>
- </message>
- <message>
- <source>Load Custom Device Skin</source>
- <comment>qdesigner_internal::PreviewConfigurationWidget::PreviewConfigurationWidgetPrivate|</comment>
- <translation type="obsolete">Naloži temo za napravo po meri</translation>
- </message>
- <message>
- <source>All QVFB Skins (*.%1)</source>
- <comment>qdesigner_internal::PreviewConfigurationWidget::PreviewConfigurationWidgetPrivate|</comment>
- <translation type="obsolete">Vse teme za QVFB (*.%1)</translation>
- </message>
- <message>
- <source>%1 - Duplicate Skin</source>
- <comment>qdesigner_internal::PreviewConfigurationWidget::PreviewConfigurationWidgetPrivate|</comment>
- <translation type="obsolete">%1 - podvojena tema</translation>
- </message>
- <message>
- <source>The skin &apos;%1&apos; already exists.</source>
- <comment>qdesigner_internal::PreviewConfigurationWidget::PreviewConfigurationWidgetPrivate|</comment>
- <translation type="obsolete">Tema »%1« že obstaja.</translation>
- </message>
- <message>
- <source>%1 - Error</source>
- <comment>qdesigner_internal::PreviewConfigurationWidget::PreviewConfigurationWidgetPrivate|</comment>
- <translation type="obsolete">%1 - napaka</translation>
- </message>
- <message>
- <source>%1 is not a valid skin directory:
-%2</source>
- <comment>qdesigner_internal::PreviewConfigurationWidget::PreviewConfigurationWidgetPrivate|</comment>
- <translation type="obsolete">%1 ni veljavna mapa s temo:
-%2</translation>
- </message>
-</context>
</TS>
diff --git a/translations/linguist_de.ts b/translations/linguist_de.ts
index b4e0a4589f..aa992a9b7f 100644
--- a/translations/linguist_de.ts
+++ b/translations/linguist_de.ts
@@ -257,6 +257,99 @@ Es wird mit einer einfachen Universalform gearbeitet.</translation>
</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"></translation>
+ </message>
+</context>
+<context>
<name>LRelease</name>
<message numerus="yes">
<source>Dropped %n message(s) which had no ID.</source>
@@ -306,6 +399,586 @@ Es wird mit einer einfachen Universalform gearbeitet.</translation>
</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"></translation>
+ </message>
+ <message>
+ <source>lrelease error: %1</source>
+ <translation>Fehler in lrelease: %1</translation>
+ </message>
+ <message>
+ <source>Updating &apos;%1&apos;...
+</source>
+ <translation>Bringe &apos;%1&apos; auf aktuellen Stand...
+</translation>
+ </message>
+ <message>
+ <source>Removing translations equal to source text in &apos;%1&apos;...
+</source>
+ <translation>Entferne Übersetzungen, die dem unübersetzten Text entsprechen, in &apos;%1&apos;...
+</translation>
+ </message>
+ <message>
+ <source>lrelease error: cannot create &apos;%1&apos;: %2
+</source>
+ <translation>Fehler in lrelease: &apos;%1&apos; kann nicht erzeugt werden: %2
+</translation>
+ </message>
+ <message>
+ <source>lrelease error: cannot save &apos;%1&apos;: %2</source>
+ <translation>Fehler in lrelease: &apos;%1&apos; kann nicht gespeichert werden: %2
+</translation>
+ </message>
+ <message>
+ <source>lrelease version %1
+</source>
+ <translation>lrelease Version %1
+</translation>
+ </message>
+ <message>
+ <source>lrelease error: cannot read project file &apos;%1&apos;.
+</source>
+ <translation>Fehler in lrelease: Die Projektdatei &apos;%1&apos; kann nicht gelesen werden.
+</translation>
+ </message>
+ <message>
+ <source>lrelease error: cannot process project file &apos;%1&apos;.
+</source>
+ <translation>Fehler in lrelease: Die Projektdatei &apos;%1&apos; kann verarbeitet werden.
+</translation>
+ </message>
+ <message>
+ <source>lrelease warning: Met no &apos;TRANSLATIONS&apos; entry in project file &apos;%1&apos;
+</source>
+ <translation>Warnung in lrelease : Die Projektdatei &apos;%1&apos; enthält keinen &apos;TRANSLATIONS&apos;-Eintrag
+</translation>
+ </message>
+</context>
+<context>
+ <name>LUpdate</name>
+ <message>
+ <source>Parenthesis/bracket/brace mismatch between #if and #else branches; using #if branch
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Parenthesis/brace mismatch between #if and #else branches; using #if branch
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unterminated C++ comment
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unterminated C++ string
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Excess closing brace in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Excess closing parenthesis in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Excess closing bracket in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>circular inclusion of %1
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cannot open %1: %2
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>//% cannot be used with tr() / QT_TR_NOOP(). Ignoring
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Qualifying with unknown namespace/class %1::%2
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>tr() cannot be called without context
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Class &apos;%1&apos; lacks Q_OBJECT macro
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It is not recommended to call tr() from within a constructor &apos;%1::%2&apos;
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>//% cannot be used with translate() / QT_TRANSLATE_NOOP(). Ignoring
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>//= cannot be used with qtTrId() / QT_TRID_NOOP(). Ignoring
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unexpected character in meta string
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unterminated meta string
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cannot invoke tr() like this
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Discarding unconsumed meta data
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unbalanced opening brace in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unbalanced opening parenthesis in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unbalanced opening bracket in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cannot open %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unterminated Java comment.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Invalid Unicode value.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unterminated string.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>String used in translation can contain only literals concatenated with other literals, not expressions or numbers.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&apos;class&apos; must be followed by a class name.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Excess closing brace.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&apos;package&apos; must be followed by package name.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unbalanced opening brace.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unbalanced opening parenthesis.
+</source>
+ <translation type="unfinished"></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"></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 type="unfinished"></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 type="unfinished"></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 type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Updating &apos;%1&apos;...
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stripping non plural forms in &apos;%1&apos;...
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate warning: Codec for source &apos;%1&apos; is invalid. Falling back to codec for tr().
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate warning: TS files from command line will override TRANSLATIONS in %1.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate warning: TS files from command line prevent recursing into %1.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate warning: no TS files specified. Only diagnostics will be produced for &apos;%1&apos;.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The option -target-language requires a parameter.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The option -source-language requires a parameter.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The option -disable-heuristic requires a parameter.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Invalid heuristic name passed to -disable-heuristic.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The option -locations requires a parameter.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Invalid parameter passed to -locations.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The -codecfortr option should be followed by a codec name.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The -extensions option should be followed by an extension list.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The -pro option should be followed by a filename of .pro file.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The -I option should be followed by a path.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unrecognized option &apos;%1&apos;.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate error: List file &apos;%1&apos; is not readable.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate warning: For some reason, &apos;%1&apos; is not writable.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate error: File &apos;%1&apos; has no recognized extension.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate error: File &apos;%1&apos; does not exist.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Scanning directory &apos;%1&apos;...
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate warning: -target-language usually only makes sense with exactly one TS file.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate warning: -codecfortr has no effect without -ts.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate warning: no TS files specified. Only diagnostics will be produced.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate error: Both project and source files / include paths specified.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <source> Found %n source text(s) (%1 new and %2 already existing)
+</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Removed %n obsolete entries
+</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Kept %n obsolete entries
+</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Number heuristic provided %n translation(s)
+</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Same-text heuristic provided %n translation(s)
+</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Similar-text heuristic provided %n translation(s)
+</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>Illegal character</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unclosed string at end of line</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Illegal escape squence</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Illegal unicode escape sequence</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unclosed comment at end of file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Illegal syntax for exponential number</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Identifier cannot start with numeric literal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unterminated regular expression literal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>//% cannot be used with %1(). Ignoring
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1() requires at least two arguments.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1(): both arguments must be literal strings.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1() requires at least one argument.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1(): text to translate must be a literal string.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>//= cannot be used with %1(). Ignoring
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1(): identifier must be a literal string.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Expected </source>
+ <extracomment>Beginning of the string that contains comma-separated list of expected tokens</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>XML error: Parse error at line %1, column %2 (%3).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Parse error in UI file</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -1307,6 +1980,13 @@ Zeile: %2</translation>
</message>
</context>
<context>
+ <name>PhraseBook</name>
+ <message>
+ <source>Parse error at line %1, column %2 (%3).</source>
+ <translation>Parse-Fehler bei Zeile %1, Spalte %2 (%3).</translation>
+ </message>
+</context>
+<context>
<name>PhraseBookBox</name>
<message>
<source></source>
@@ -1478,6 +2158,12 @@ Zeile: %2</translation>
<source>Qt Linguist &apos;Phrase Book&apos;</source>
<translation>Qt-Linguist-Wörterbuch</translation>
</message>
+ <message>
+ <source>lupdate version %1
+</source>
+ <translation>lupdate Version %1
+</translation>
+ </message>
</context>
<context>
<name>SourceCodeView</name>
diff --git a/translations/linguist_sl.ts b/translations/linguist_sl.ts
index 0b5b0844b9..f749513923 100644
--- a/translations/linguist_sl.ts
+++ b/translations/linguist_sl.ts
@@ -233,6 +233,11 @@ Privzeta bo edninska univerzalna oblika.</translation>
<source>Cancel</source>
<translation>Prekliči</translation>
</message>
+ <message>
+ <source></source>
+ <comment>Choose Edit|Find from the menu bar or press Ctrl+F to pop up the Find dialog</comment>
+ <translation></translation>
+ </message>
</context>
<context>
<name>FormMultiWidget</name>
@@ -264,6 +269,99 @@ Privzeta bo edninska univerzalna oblika.</translation>
</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"></translation>
+ </message>
+</context>
+<context>
<name>LRelease</name>
<message numerus="yes">
<source>Dropped %n message(s) which had no ID.</source>
@@ -301,6 +399,590 @@ Privzeta bo edninska univerzalna oblika.</translation>
<numerusform> Prezrl %n neprevedenih izvornih besedil</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"></translation>
+ </message>
+ <message>
+ <source>lrelease error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Updating &apos;%1&apos;...
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Removing translations equal to source text in &apos;%1&apos;...
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lrelease error: cannot create &apos;%1&apos;: %2
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lrelease error: cannot save &apos;%1&apos;: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lrelease version %1
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lrelease error: cannot read project file &apos;%1&apos;.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lrelease error: cannot process project file &apos;%1&apos;.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lrelease warning: Met no &apos;TRANSLATIONS&apos; entry in project file &apos;%1&apos;
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LUpdate</name>
+ <message>
+ <source>Parenthesis/bracket/brace mismatch between #if and #else branches; using #if branch
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Parenthesis/brace mismatch between #if and #else branches; using #if branch
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unterminated C++ comment
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unterminated C++ string
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Excess closing brace in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Excess closing parenthesis in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Excess closing bracket in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>circular inclusion of %1
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cannot open %1: %2
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>//% cannot be used with tr() / QT_TR_NOOP(). Ignoring
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Qualifying with unknown namespace/class %1::%2
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>tr() cannot be called without context
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Class &apos;%1&apos; lacks Q_OBJECT macro
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It is not recommended to call tr() from within a constructor &apos;%1::%2&apos;
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>//% cannot be used with translate() / QT_TRANSLATE_NOOP(). Ignoring
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>//= cannot be used with qtTrId() / QT_TRID_NOOP(). Ignoring
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unexpected character in meta string
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unterminated meta string
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cannot invoke tr() like this
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Discarding unconsumed meta data
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unbalanced opening brace in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unbalanced opening parenthesis in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unbalanced opening bracket in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cannot open %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unterminated Java comment.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Invalid Unicode value.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unterminated string.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>String used in translation can contain only literals concatenated with other literals, not expressions or numbers.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&apos;class&apos; must be followed by a class name.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Excess closing brace.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&apos;package&apos; must be followed by package name.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unbalanced opening brace.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unbalanced opening parenthesis.
+</source>
+ <translation type="unfinished"></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"></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 type="unfinished"></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 type="unfinished"></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 type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Updating &apos;%1&apos;...
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stripping non plural forms in &apos;%1&apos;...
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate warning: Codec for source &apos;%1&apos; is invalid. Falling back to codec for tr().
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate warning: TS files from command line will override TRANSLATIONS in %1.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate warning: TS files from command line prevent recursing into %1.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate warning: no TS files specified. Only diagnostics will be produced for &apos;%1&apos;.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The option -target-language requires a parameter.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The option -source-language requires a parameter.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The option -disable-heuristic requires a parameter.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Invalid heuristic name passed to -disable-heuristic.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The option -locations requires a parameter.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Invalid parameter passed to -locations.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The -codecfortr option should be followed by a codec name.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The -extensions option should be followed by an extension list.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The -pro option should be followed by a filename of .pro file.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The -I option should be followed by a path.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unrecognized option &apos;%1&apos;.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate error: List file &apos;%1&apos; is not readable.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate warning: For some reason, &apos;%1&apos; is not writable.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate error: File &apos;%1&apos; has no recognized extension.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate error: File &apos;%1&apos; does not exist.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Scanning directory &apos;%1&apos;...
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate warning: -target-language usually only makes sense with exactly one TS file.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate warning: -codecfortr has no effect without -ts.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate warning: no TS files specified. Only diagnostics will be produced.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate error: Both project and source files / include paths specified.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <source> Found %n source text(s) (%1 new and %2 already existing)
+</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Removed %n obsolete entries
+</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Kept %n obsolete entries
+</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Number heuristic provided %n translation(s)
+</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Same-text heuristic provided %n translation(s)
+</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Similar-text heuristic provided %n translation(s)
+</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>Illegal character</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unclosed string at end of line</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Illegal escape squence</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Illegal unicode escape sequence</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unclosed comment at end of file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Illegal syntax for exponential number</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Identifier cannot start with numeric literal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unterminated regular expression literal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>//% cannot be used with %1(). Ignoring
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1() requires at least two arguments.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1(): both arguments must be literal strings.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1() requires at least one argument.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1(): text to translate must be a literal string.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>//= cannot be used with %1(). Ignoring
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1(): identifier must be a literal string.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Expected </source>
+ <extracomment>Beginning of the string that contains comma-separated list of expected tokens</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>XML error: Parse error at line %1, column %2 (%3).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Parse error in UI file</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -845,6 +1527,11 @@ Privzeta bo edninska univerzalna oblika.</translation>
<translation>Dolžinske inačice</translation>
</message>
<message>
+ <source></source>
+ <comment>This is the application&apos;s main window.</comment>
+ <translation></translation>
+ </message>
+ <message>
<source>Source text</source>
<translation>Izvorno besedilo</translation>
</message>
@@ -1192,6 +1879,11 @@ Vse datoteke (*)</translation>
<context>
<name>MessageEditor</name>
<message>
+ <source></source>
+ <comment>This is the right panel of the main window.</comment>
+ <translation></translation>
+ </message>
+ <message>
<source>Russian</source>
<translation>Ruščina</translation>
</message>
@@ -1290,6 +1982,13 @@ Vrstica: %2</translation>
</message>
</context>
<context>
+ <name>PhraseBook</name>
+ <message>
+ <source>Parse error at line %1, column %2 (%3).</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PhraseBookBox</name>
<message>
<source>Edit Phrase Book</source>
@@ -1360,6 +2059,11 @@ Vrstica: %2</translation>
<translation>Zapri</translation>
</message>
<message>
+ <source></source>
+ <comment>Go to Phrase &gt; Edit Phrase Book... The dialog that pops up is a PhraseBookBox.</comment>
+ <translation></translation>
+ </message>
+ <message>
<source>(New Entry)</source>
<translation>(Nov vnos)</translation>
</message>
@@ -1456,6 +2160,11 @@ Vrstica: %2</translation>
<source>XLIFF localization files</source>
<translation>Prevajalske datoteke XLIFF</translation>
</message>
+ <message>
+ <source>lupdate version %1
+</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SourceCodeView</name>
diff --git a/translations/qt_de.ts b/translations/qt_de.ts
index 7a062dc550..3b9bbb04e0 100644
--- a/translations/qt_de.ts
+++ b/translations/qt_de.ts
@@ -1707,19 +1707,19 @@ nach
<name>QDeclarativeCompositeTypeManager</name>
<message>
<source>Resource %1 unavailable</source>
- <translation>Auf die Ressource %1 konnte nicht zugegriffen werden</translation>
+ <translation type="obsolete">Auf die Ressource %1 konnte nicht zugegriffen werden</translation>
</message>
<message>
<source>Namespace %1 cannot be used as a type</source>
- <translation>Der Namensraum %1 kann nicht als Typangabe verwendet werden</translation>
+ <translation type="obsolete">Der Namensraum %1 kann nicht als Typangabe verwendet werden</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>Der Typ %1 ist nicht verfügbar</translation>
+ <translation type="obsolete">Der Typ %1 ist nicht verfügbar</translation>
</message>
</context>
<context>
@@ -2122,6 +2122,40 @@ nach
</message>
</context>
<context>
+ <name>QDeclarativeTypeData</name>
+ <message>
+ <source>Type %1 unavailable</source>
+ <translation type="obsolete">Der Typ %1 ist nicht verfügbar</translation>
+ </message>
+ <message>
+ <source>Namespace %1 cannot be used as a type</source>
+ <translation type="obsolete">Der Namensraum %1 kann nicht als Typangabe verwendet werden</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>Das Skript %1 ist nicht verfügbar</translation>
+ </message>
+ <message>
+ <source>Type %1 unavailable</source>
+ <translation>Der Typ %1 ist nicht verfügbar</translation>
+ </message>
+ <message>
+ <source>Namespace %1 cannot be used as a type</source>
+ <translation>Der Namensraum %1 kann nicht als Typangabe verwendet werden</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>
@@ -3340,7 +3374,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<name>QLibrary</name>
<message>
<source>Could not mmap &apos;%1&apos;: %2</source>
- <translation>Operation mmap fehlgeschlagen für &apos;%1&apos;: %2</translation>
+ <translation type="obsolete">Operation mmap fehlgeschlagen für &apos;%1&apos;: %2</translation>
</message>
<message>
<source>Plugin verification data mismatch in &apos;%1&apos;</source>
@@ -3348,7 +3382,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
</message>
<message>
<source>Could not unmap &apos;%1&apos;: %2</source>
- <translation>Operation unmap fehlgeschlagen für &apos;%1&apos;: %2</translation>
+ <translation type="obsolete">Operation unmap fehlgeschlagen für &apos;%1&apos;: %2</translation>
</message>
<message>
<source>The plugin &apos;%1&apos; uses incompatible Qt library. (%2.%3.%4) [%5]</source>
diff --git a/translations/qt_gl.ts b/translations/qt_gl.ts
new file mode 100644
index 0000000000..6f41ddf70d
--- /dev/null
+++ b/translations/qt_gl.ts
@@ -0,0 +1,9828 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="gl_ES" sourcelanguage="en">
+<context>
+ <name>CloseButton</name>
+ <message>
+ <source>Close Tab</source>
+ <translation>Pechar a lingüeta</translation>
+ </message>
+</context>
+<context>
+ <name>FakeReply</name>
+ <message>
+ <source>Fake error !</source>
+ <translation>Erro falso!</translation>
+ </message>
+ <message>
+ <source>Invalid URL</source>
+ <translation>URL non válido</translation>
+ </message>
+</context>
+<context>
+ <name>MAC_APPLICATION_MENU</name>
+ <message>
+ <source>Services</source>
+ <translation>Servizos</translation>
+ </message>
+ <message>
+ <source>Hide %1</source>
+ <translation>Acochar %1</translation>
+ </message>
+ <message>
+ <source>Hide Others</source>
+ <translation>Acochar os outros</translation>
+ </message>
+ <message>
+ <source>Show All</source>
+ <translation>Mostrar todos</translation>
+ </message>
+ <message>
+ <source>Preferences...</source>
+ <translation>Preferencias...</translation>
+ </message>
+ <message>
+ <source>Quit %1</source>
+ <translation>Saír de %1</translation>
+ </message>
+ <message>
+ <source>About %1</source>
+ <translation>Acerca de %1</translation>
+ </message>
+</context>
+<context>
+ <name>QApplication</name>
+ <message>
+ <source>QT_LAYOUT_DIRECTION</source>
+ <comment>Translate this string to the string &apos;LTR&apos; in left-to-right languages or to &apos;RTL&apos; in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout.</comment>
+ <translation>LTR</translation>
+ </message>
+ <message>
+ <source>Activate</source>
+ <translation>Activar</translation>
+ </message>
+ <message>
+ <source>Activates the program&apos;s main window</source>
+ <translation>Activa a fiestra principal do programa</translation>
+ </message>
+ <message>
+ <source>Executable &apos;%1&apos; requires Qt %2, found Qt %3.</source>
+ <translation>O executábel «%1» require de Qt %2, e achouse Qt %3.</translation>
+ </message>
+ <message>
+ <source>Incompatible Qt Library Error</source>
+ <translation>Erro de bibliotecas Qt incompatíbeis</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::</name>
+ <message>
+ <source>Notifications</source>
+ <translation>Notificacións</translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation>Música</translation>
+ </message>
+ <message>
+ <source>Video</source>
+ <translation>Vídeo</translation>
+ </message>
+ <message>
+ <source>Communication</source>
+ <translation>Comunicación</translation>
+ </message>
+ <message>
+ <source>Games</source>
+ <translation>Xogos</translation>
+ </message>
+ <message>
+ <source>Accessibility</source>
+ <translation>Accesibilidade</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::AudioOutput</name>
+ <message>
+ <source>&lt;html&gt;The audio playback device &lt;b&gt;%1&lt;/b&gt; does not work.&lt;br/&gt;Falling back to &lt;b&gt;%2&lt;/b&gt;.&lt;/html&gt;</source>
+ <translation>&lt;html&gt;O dispositivo de reprodución de son &lt;b&gt;%1&lt;/b&gt; non funciona.&lt;br/&gt;No seu
+lugar usarase o &lt;b&gt;%2&lt;/b&gt;.&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;html&gt;Switching to the audio playback device &lt;b&gt;%1&lt;/b&gt;&lt;br/&gt;which just became available and has higher preference.&lt;/html&gt;</source>
+ <translation>&lt;html&gt;Mudando para o dispositivo de reprodución de son &lt;b&gt;%1&lt;/b&gt;&lt;br/&gt;que
+acaba de pórse dispoñíbel e ten maior preferencia.&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <source>Revert back to device &apos;%1&apos;</source>
+ <translation>Estase a voltar para o dispositivo «%1»</translation>
+ </message>
+ <message>
+ <source>&lt;html&gt;Switching to the audio playback device &lt;b&gt;%1&lt;/b&gt;&lt;br/&gt;which has higher preference or is specifically configured for this stream.&lt;/html&gt;</source>
+ <translation>&lt;html&gt;Mudando para o dispositivo de reprodución de son &lt;b&gt;%1&lt;/b&gt;&lt;br/&gt;que ten
+máis preferencia ou está configurado especificamente para este fluxo.&lt;/html&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::Gstreamer::Backend</name>
+ <message>
+ <source>Warning: You do not seem to have the package gstreamer0.10-plugins-good installed.
+ Some video features have been disabled.</source>
+ <translation>Aviso: Non semella ter instalado o paquete gstreamer0.10-plugins-good.
+ Desactiváronse algunhas funcionalidades de vídeo.</translation>
+ </message>
+ <message>
+ <source>Warning: You do not seem to have the base GStreamer plugins installed.
+ All audio and video support has been disabled</source>
+ <translation>Aviso: Non semella ter instaladas as extensións básicas de GStreamer.
+ Desactivouse todo o soporte de son e vídeo</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::Gstreamer::MediaObject</name>
+ <message>
+ <source>Cannot start playback.
+
+Check your GStreamer installation and make sure you
+have libgstreamer-plugins-base installed.</source>
+ <translation>Non é posíbel reproducir.
+
+Comprobe a instalación de GStreamer e verifique que ten instalado libgstreamer-plugins-base.</translation>
+ </message>
+ <message>
+ <source>Missing codec helper script assistant.</source>
+ <translation>Falta o asistente do script auxiliar do códec.</translation>
+ </message>
+ <message>
+ <source>Plugin codec installation failed for codec: %0</source>
+ <translation>Fallou a instalación da extensión dun códec: %0</translation>
+ </message>
+ <message>
+ <source>A required codec is missing. You need to install the following codec(s) to play this content: %0</source>
+ <translation>Falta un códec requirido, polo que deberá instalar os seguintes códecs para
+reproducir este contido: %0</translation>
+ </message>
+ <message>
+ <source>Could not open media source.</source>
+ <translation>Non foi posíbel abrir a orixe dos medios.</translation>
+ </message>
+ <message>
+ <source>Invalid source type.</source>
+ <translation>Tipo de orixe non válido.</translation>
+ </message>
+ <message>
+ <source>Could not locate media source.</source>
+ <translation>Non foi posíbel localizar a orixe do medio.</translation>
+ </message>
+ <message>
+ <source>Could not open audio device. The device is already in use.</source>
+ <translation>Non foi posíbel abrir o dispositivo de audio. O dispositivo xa está en uso.</translation>
+ </message>
+ <message>
+ <source>Could not decode media source.</source>
+ <translation>Non foi posíbel descodificar a fonte do medio.</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF</name>
+ <message>
+ <source>Audio Output</source>
+ <translation>Saída de son</translation>
+ </message>
+ <message>
+ <source>The audio output device</source>
+ <translation>O dispositivo de saída do son</translation>
+ </message>
+ <message>
+ <source>No error</source>
+ <translation>Sen erros</translation>
+ </message>
+ <message>
+ <source>Not found</source>
+ <translation>Non atopado</translation>
+ </message>
+ <message>
+ <source>Out of memory</source>
+ <translation>Esgotouse a memoria</translation>
+ </message>
+ <message>
+ <source>Not supported</source>
+ <translation>Non soportado</translation>
+ </message>
+ <message>
+ <source>Overflow</source>
+ <translation>Desbordamento</translation>
+ </message>
+ <message>
+ <source>Underflow</source>
+ <translation>Esgotamento</translation>
+ </message>
+ <message>
+ <source>Already exists</source>
+ <translation>Xa existe</translation>
+ </message>
+ <message>
+ <source>Path not found</source>
+ <translation>Non se atopou a rota</translation>
+ </message>
+ <message>
+ <source>In use</source>
+ <translation>En uso</translation>
+ </message>
+ <message>
+ <source>Not ready</source>
+ <translation>Non preparado</translation>
+ </message>
+ <message>
+ <source>Access denied</source>
+ <translation>Acceso denegado</translation>
+ </message>
+ <message>
+ <source>Could not connect</source>
+ <translation>Non foi posíbel conectar</translation>
+ </message>
+ <message>
+ <source>Disconnected</source>
+ <translation>Desconectado</translation>
+ </message>
+ <message>
+ <source>Permission denied</source>
+ <translation>Permiso negado</translation>
+ </message>
+ <message>
+ <source>Insufficient bandwidth</source>
+ <translation>Largo de banda insuficiente</translation>
+ </message>
+ <message>
+ <source>Network unavailable</source>
+ <translation>Rede non dispoñíbel</translation>
+ </message>
+ <message>
+ <source>Network communication error</source>
+ <translation>Erro de comunicación pola reda</translation>
+ </message>
+ <message>
+ <source>Streaming not supported</source>
+ <translation>Non está soportada a retransmisión</translation>
+ </message>
+ <message>
+ <source>Server alert</source>
+ <translation>Alerta do servidor</translation>
+ </message>
+ <message>
+ <source>Invalid protocol</source>
+ <translation>Protocolo non válido</translation>
+ </message>
+ <message>
+ <source>Invalid URL</source>
+ <translation>URL non válido</translation>
+ </message>
+ <message>
+ <source>Multicast error</source>
+ <translation>Erro de multicast</translation>
+ </message>
+ <message>
+ <source>Proxy server error</source>
+ <translation>Erro do servidor proxy</translation>
+ </message>
+ <message>
+ <source>Proxy server not supported</source>
+ <translation>O servidor proxy non está soportado</translation>
+ </message>
+ <message>
+ <source>Audio output error</source>
+ <translation>Erro da saída de son</translation>
+ </message>
+ <message>
+ <source>Video output error</source>
+ <translation>Erro da saída de vídeo</translation>
+ </message>
+ <message>
+ <source>Decoder error</source>
+ <translation>Erro do descodificador</translation>
+ </message>
+ <message>
+ <source>Audio or video components could not be played</source>
+ <translation>Non foi posíbel reproducir as compoñentes de son nin de video</translation>
+ </message>
+ <message>
+ <source>DRM error</source>
+ <translation>Erro da DRM</translation>
+ </message>
+ <message>
+ <source>Unknown error (%1)</source>
+ <translation>Erro descoñecido (%1)</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::AbstractMediaPlayer</name>
+ <message>
+ <source>Not ready to play</source>
+ <translation>Non está preparado para reproducir</translation>
+ </message>
+ <message>
+ <source>Error opening file</source>
+ <translation>Aconteceu un erro ao abrir o ficheiro</translation>
+ </message>
+ <message>
+ <source>Error opening URL</source>
+ <translation>Aconteceu un erro ao abrir o URL</translation>
+ </message>
+ <message>
+ <source>Error opening resource</source>
+ <translation>Aconteceu un erro ao abrir o recurso</translation>
+ </message>
+ <message>
+ <source>Error opening source: resource not opened</source>
+ <translation>Erro ao abrir o recurso: non se abriu o recurso</translation>
+ </message>
+ <message>
+ <source>Setting volume failed</source>
+ <translation>Fallou a configuración do volume</translation>
+ </message>
+ <message>
+ <source>Loading clip failed</source>
+ <translation>Fallou a carga do clip</translation>
+ </message>
+ <message>
+ <source>Playback complete</source>
+ <translation>Completouse a reprodución</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::AbstractVideoPlayer</name>
+ <message>
+ <source>Pause failed</source>
+ <translation>Fallou o pór en pausa</translation>
+ </message>
+ <message>
+ <source>Seek failed</source>
+ <translation>Fallou o salto</translation>
+ </message>
+ <message>
+ <source>Getting position failed</source>
+ <translation>Fallou a obtención da posición</translation>
+ </message>
+ <message>
+ <source>Opening clip failed</source>
+ <translation>Fallou a abertura do clip</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::AudioEqualizer</name>
+ <message>
+ <source>%1 Hz</source>
+ <translation>%1 Hz</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::AudioPlayer</name>
+ <message>
+ <source>Getting position failed</source>
+ <translation>Fallou a obtención da posición</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::DsaVideoPlayer</name>
+ <message>
+ <source>Video display error</source>
+ <translation>Erro na visualización do vídeo</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::EffectFactory</name>
+ <message>
+ <source>Enabled</source>
+ <translation>Activado</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::EnvironmentalReverb</name>
+ <message>
+ <source>Decay HF ratio (%)</source>
+ <extracomment>DecayHFRatio: Ratio of high-frequency decay time to the value specified by DecayTime.</extracomment>
+ <translation>Taxa de decaemento de HF (%)</translation>
+ </message>
+ <message>
+ <source>Decay time (ms)</source>
+ <extracomment>DecayTime: Time over which reverberation is diminished.</extracomment>
+ <translation>Período de decaemento (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>Densidade (%)</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>Difusión (%)</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>Retardo dos reflexos (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>Nivel dos reflexos (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>Retardo da reverberación (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>Nivel da reverberación (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>Nivel de HF da sala</translation>
+ </message>
+ <message>
+ <source>Room level (mB)</source>
+ <extracomment>RoomLevel: Master volume control for all reflected sound.</extracomment>
+ <translation>Nivel da sala (mB)</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::MediaObject</name>
+ <message>
+ <source>Error opening source: type not supported</source>
+ <translation>Erro ao abrir a fonte: tipo non soportado</translation>
+ </message>
+ <message>
+ <source>Error opening source: resource is compressed</source>
+ <translation>Erro ao abrir a fonte: o recurso está comprimido</translation>
+ </message>
+ <message>
+ <source>Error opening source: resource not valid</source>
+ <translation>Erro ao abrir a fonte: o recurso non é válido</translation>
+ </message>
+ <message>
+ <source>Error opening source: media type could not be determined</source>
+ <translation>Erro ao abrir a fonte: non foi posíbel determinar o tipo de medio</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::StereoWidening</name>
+ <message>
+ <source>Level (%)</source>
+ <translation>Nivel (%)</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::SurfaceVideoPlayer</name>
+ <message>
+ <source>Video display error</source>
+ <translation>Erro na visualización do vídeo</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::VolumeSlider</name>
+ <message>
+ <source>Volume: %1%</source>
+ <translation>Volume: %1%</translation>
+ </message>
+ <message>
+ <source>Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%</source>
+ <translation>Use esta barra deslizante para axustar o volume. A posición da esquerda é o
+0%, a da dereita o %1%</translation>
+ </message>
+ <message>
+ <source>Muted</source>
+ <translation>Silenciado</translation>
+ </message>
+</context>
+<context>
+ <name>Q3Accel</name>
+ <message>
+ <source>%1, %2 not defined</source>
+ <translation>%1, %2 non definido</translation>
+ </message>
+ <message>
+ <source>Ambiguous %1 not handled</source>
+ <translation>Non se xestionou o %1 ambiguo</translation>
+ </message>
+</context>
+<context>
+ <name>Q3DataTable</name>
+ <message>
+ <source>True</source>
+ <translation>Verdadeiro</translation>
+ </message>
+ <message>
+ <source>False</source>
+ <translation>Falso</translation>
+ </message>
+ <message>
+ <source>Insert</source>
+ <translation>Inserir</translation>
+ </message>
+ <message>
+ <source>Update</source>
+ <translation>Actualizar</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>Borrar</translation>
+ </message>
+</context>
+<context>
+ <name>Q3FileDialog</name>
+ <message>
+ <source>Copy or Move a File</source>
+ <translation>Copiar ou mover un ficheiro</translation>
+ </message>
+ <message>
+ <source>Read: %1</source>
+ <translation>Ler: %1</translation>
+ </message>
+ <message>
+ <source>Write: %1</source>
+ <translation>Escribir: %1</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+ <message>
+ <source>All Files (*)</source>
+ <translation>Todos os ficheiros (*)</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Nome</translation>
+ </message>
+ <message>
+ <source>Size</source>
+ <translation>Tamaño</translation>
+ </message>
+ <message>
+ <source>Type</source>
+ <translation>Tipo</translation>
+ </message>
+ <message>
+ <source>Date</source>
+ <translation>Data</translation>
+ </message>
+ <message>
+ <source>Attributes</source>
+ <translation>Atributos</translation>
+ </message>
+ <message>
+ <source>&amp;OK</source>
+ <translation>&amp;Aceptar</translation>
+ </message>
+ <message>
+ <source>Look &amp;in:</source>
+ <translation>P&amp;rocurar en:</translation>
+ </message>
+ <message>
+ <source>File &amp;name:</source>
+ <translation>&amp;Nome do ficheiro:</translation>
+ </message>
+ <message>
+ <source>File &amp;type:</source>
+ <translation>&amp;Tipo de ficheiro:</translation>
+ </message>
+ <message>
+ <source>Back</source>
+ <translation>Atrás</translation>
+ </message>
+ <message>
+ <source>One directory up</source>
+ <translation>Subir un directorio</translation>
+ </message>
+ <message>
+ <source>Create New Folder</source>
+ <translation>Crear un cartafol novo</translation>
+ </message>
+ <message>
+ <source>List View</source>
+ <translation>Vista en lista</translation>
+ </message>
+ <message>
+ <source>Detail View</source>
+ <translation>Vista de detalles</translation>
+ </message>
+ <message>
+ <source>Preview File Info</source>
+ <translation>Información da vista previa do ficheiro</translation>
+ </message>
+ <message>
+ <source>Preview File Contents</source>
+ <translation>Contido da previsualización do ficheiro</translation>
+ </message>
+ <message>
+ <source>Read-write</source>
+ <translation>Lectura e escrita</translation>
+ </message>
+ <message>
+ <source>Read-only</source>
+ <translation>Só lectura</translation>
+ </message>
+ <message>
+ <source>Write-only</source>
+ <translation>Só escrita</translation>
+ </message>
+ <message>
+ <source>Inaccessible</source>
+ <translation>Inaccesíbel</translation>
+ </message>
+ <message>
+ <source>Symlink to File</source>
+ <translation>Ligazón simbólica a un ficheiro</translation>
+ </message>
+ <message>
+ <source>Symlink to Directory</source>
+ <translation>Ligazón simbólica a un directorio</translation>
+ </message>
+ <message>
+ <source>Symlink to Special</source>
+ <translation>Ligazón simbólica a un ficheiro especial</translation>
+ </message>
+ <message>
+ <source>File</source>
+ <translation>Ficheiro</translation>
+ </message>
+ <message>
+ <source>Dir</source>
+ <translation>Dir</translation>
+ </message>
+ <message>
+ <source>Special</source>
+ <translation>Especial</translation>
+ </message>
+ <message>
+ <source>Open</source>
+ <translation>Abrir</translation>
+ </message>
+ <message>
+ <source>Save As</source>
+ <translation>Gardar como</translation>
+ </message>
+ <message>
+ <source>&amp;Open</source>
+ <translation>&amp;Abrir</translation>
+ </message>
+ <message>
+ <source>&amp;Save</source>
+ <translation>&amp;Gardar</translation>
+ </message>
+ <message>
+ <source>&amp;Rename</source>
+ <translation>&amp;Mudar o nome</translation>
+ </message>
+ <message>
+ <source>&amp;Delete</source>
+ <translation>&amp;Borrar</translation>
+ </message>
+ <message>
+ <source>R&amp;eload</source>
+ <translation>&amp;Cargar de novo</translation>
+ </message>
+ <message>
+ <source>Sort by &amp;Name</source>
+ <translation>Ordenar segundo o &amp;nome</translation>
+ </message>
+ <message>
+ <source>Sort by &amp;Size</source>
+ <translation>Ordenar segundo o &amp;tamaño</translation>
+ </message>
+ <message>
+ <source>Sort by &amp;Date</source>
+ <translation>Ordenar segundo a &amp;data</translation>
+ </message>
+ <message>
+ <source>&amp;Unsorted</source>
+ <translation>&amp;Sen ordenar</translation>
+ </message>
+ <message>
+ <source>Sort</source>
+ <translation>Ordenar</translation>
+ </message>
+ <message>
+ <source>Show &amp;hidden files</source>
+ <translation>Mostrar os ficheiros &amp;acochados</translation>
+ </message>
+ <message>
+ <source>the file</source>
+ <translation>o ficheiro</translation>
+ </message>
+ <message>
+ <source>the directory</source>
+ <translation>o cartafol</translation>
+ </message>
+ <message>
+ <source>the symlink</source>
+ <translation>a ligazón simbólica</translation>
+ </message>
+ <message>
+ <source>Delete %1</source>
+ <translation>Borrar %1</translation>
+ </message>
+ <message>
+ <source>&lt;qt&gt;Are you sure you wish to delete %1 &quot;%2&quot;?&lt;/qt&gt;</source>
+ <translation>&lt;qt&gt;Desexa realmente borrar %1 «%2»?&lt;/qt&gt;</translation>
+ </message>
+ <message>
+ <source>&amp;Yes</source>
+ <translation>&amp;Si</translation>
+ </message>
+ <message>
+ <source>&amp;No</source>
+ <translation>&amp;Non</translation>
+ </message>
+ <message>
+ <source>New Folder 1</source>
+ <translation>Novo cartafol 1</translation>
+ </message>
+ <message>
+ <source>New Folder</source>
+ <translation>Novo cartafol</translation>
+ </message>
+ <message>
+ <source>New Folder %1</source>
+ <translation>Novo cartafol %1</translation>
+ </message>
+ <message>
+ <source>Find Directory</source>
+ <translation>Procurar un cartafol</translation>
+ </message>
+ <message>
+ <source>Directories</source>
+ <translation>Cartafoles</translation>
+ </message>
+ <message>
+ <source>Directory:</source>
+ <translation>Cartafol:</translation>
+ </message>
+ <message>
+ <source>Error</source>
+ <translation>Erro</translation>
+ </message>
+ <message>
+ <source>%1
+File not found.
+Check path and filename.</source>
+ <translation>%1
+Non se atopou o ficheiro.
+Verifique a rota e o nome do ficheiro.</translation>
+ </message>
+ <message>
+ <source>All Files (*.*)</source>
+ <translation>Todos os ficheiros (*.*)</translation>
+ </message>
+ <message>
+ <source>Open </source>
+ <translation>Abrir</translation>
+ </message>
+ <message>
+ <source>Select a Directory</source>
+ <translation>Escolla un cartafol</translation>
+ </message>
+</context>
+<context>
+ <name>Q3LocalFs</name>
+ <message>
+ <source>Could not read directory
+%1</source>
+ <translation>Non foi posíbel ler o cartafol
+%1</translation>
+ </message>
+ <message>
+ <source>Could not create directory
+%1</source>
+ <translation>Non foi posíbel crear o cartafol %1</translation>
+ </message>
+ <message>
+ <source>Could not remove file or directory
+%1</source>
+ <translation>Non foi posíbel eliminar o ficheiro ou cartafol
+%1</translation>
+ </message>
+ <message>
+ <source>Could not rename
+%1
+to
+%2</source>
+ <translation>Non foi posíbel mudar o nome de
+%1
+para
+%2</translation>
+ </message>
+ <message>
+ <source>Could not open
+%1</source>
+ <translation>Non foi posíbel abrir
+%1</translation>
+ </message>
+ <message>
+ <source>Could not write
+%1</source>
+ <translation>Non foi posíbel escribir
+%1</translation>
+ </message>
+</context>
+<context>
+ <name>Q3MainWindow</name>
+ <message>
+ <source>Line up</source>
+ <translation>Aliñar en riba</translation>
+ </message>
+ <message>
+ <source>Customize...</source>
+ <translation>Personalizar...</translation>
+ </message>
+</context>
+<context>
+ <name>Q3NetworkProtocol</name>
+ <message>
+ <source>Operation stopped by the user</source>
+ <translation>Operación interrompida polo usuario</translation>
+ </message>
+</context>
+<context>
+ <name>Q3ProgressDialog</name>
+ <message>
+ <source>Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+</context>
+<context>
+ <name>Q3TabDialog</name>
+ <message>
+ <source>OK</source>
+ <translation>Aceptar</translation>
+ </message>
+ <message>
+ <source>Apply</source>
+ <translation>Aplicar</translation>
+ </message>
+ <message>
+ <source>Help</source>
+ <translation>Axuda</translation>
+ </message>
+ <message>
+ <source>Defaults</source>
+ <translation>Predeterminado</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+</context>
+<context>
+ <name>Q3TextEdit</name>
+ <message>
+ <source>&amp;Undo</source>
+ <translation>&amp;Desfacer</translation>
+ </message>
+ <message>
+ <source>&amp;Redo</source>
+ <translation>&amp;Refacer</translation>
+ </message>
+ <message>
+ <source>Cu&amp;t</source>
+ <translation>Cor&amp;tar</translation>
+ </message>
+ <message>
+ <source>&amp;Copy</source>
+ <translation>&amp;Copiar</translation>
+ </message>
+ <message>
+ <source>&amp;Paste</source>
+ <translation>A&amp;pegar</translation>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Limpar</translation>
+ </message>
+ <message>
+ <source>Select All</source>
+ <translation>Escoller todo</translation>
+ </message>
+</context>
+<context>
+ <name>Q3TitleBar</name>
+ <message>
+ <source>System</source>
+ <translation>Sistema</translation>
+ </message>
+ <message>
+ <source>Restore up</source>
+ <translation>Restaurar</translation>
+ </message>
+ <message>
+ <source>Minimize</source>
+ <translation>Minimizar</translation>
+ </message>
+ <message>
+ <source>Restore down</source>
+ <translation>Restaurar en pequeno</translation>
+ </message>
+ <message>
+ <source>Maximize</source>
+ <translation>Maximizar</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>Pechar</translation>
+ </message>
+ <message>
+ <source>Contains commands to manipulate the window</source>
+ <translation>Contén ordes para manipular a fiestra</translation>
+ </message>
+ <message>
+ <source>Puts a minimized window back to normal</source>
+ <translation>Volta unha fiestra minimizada ao tamaño normal</translation>
+ </message>
+ <message>
+ <source>Moves the window out of the way</source>
+ <translation>Vota a un lado a fiestra</translation>
+ </message>
+ <message>
+ <source>Puts a maximized window back to normal</source>
+ <translation>Volta unha fiestra maximizada ao tamaño normal</translation>
+ </message>
+ <message>
+ <source>Makes the window full screen</source>
+ <translation>Pon a fiestra a pantalla completa</translation>
+ </message>
+ <message>
+ <source>Closes the window</source>
+ <translation>Pecha a fiestra</translation>
+ </message>
+ <message>
+ <source>Displays the name of the window and contains controls to manipulate it</source>
+ <translation>Mostra o nome da fiestra e contén controles para manipulala</translation>
+ </message>
+</context>
+<context>
+ <name>Q3ToolBar</name>
+ <message>
+ <source>More...</source>
+ <translation>Máis...</translation>
+ </message>
+</context>
+<context>
+ <name>Q3UrlOperator</name>
+ <message>
+ <source>The protocol `%1&apos; is not supported</source>
+ <translation>O protocolo «%1» non está soportado.</translation>
+ </message>
+ <message>
+ <source>The protocol `%1&apos; does not support listing directories</source>
+ <translation>O protocolo «%1» non soporta sacar listaxes de cartafoles</translation>
+ </message>
+ <message>
+ <source>The protocol `%1&apos; does not support creating new directories</source>
+ <translation>O protocolo «%1» non soporta crear cartafoles novos</translation>
+ </message>
+ <message>
+ <source>The protocol `%1&apos; does not support removing files or directories</source>
+ <translation>O protocolo «%1» non soporta eliminar nin ficheiros nin cartafoles</translation>
+ </message>
+ <message>
+ <source>The protocol `%1&apos; does not support renaming files or directories</source>
+ <translation>O protocolo «%1» non soporta mudar o nome dos ficheiros nin dos cartafoles</translation>
+ </message>
+ <message>
+ <source>The protocol `%1&apos; does not support getting files</source>
+ <translation>O protocolo «%1» non soporta obter ficheiros</translation>
+ </message>
+ <message>
+ <source>The protocol `%1&apos; does not support putting files</source>
+ <translation>O protocolo «%1» non soporta enviar ficheiros</translation>
+ </message>
+ <message>
+ <source>The protocol `%1&apos; does not support copying or moving files or directories</source>
+ <translation>O protocolo «%1» non soporta copiar nin mover nin ficheiros nin cartafoles</translation>
+ </message>
+ <message>
+ <source>(unknown)</source>
+ <translation>(descoñecido)</translation>
+ </message>
+</context>
+<context>
+ <name>Q3Wizard</name>
+ <message>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Cancelar</translation>
+ </message>
+ <message>
+ <source>&lt; &amp;Back</source>
+ <translation>&lt; &amp;Anterior</translation>
+ </message>
+ <message>
+ <source>&amp;Next &gt;</source>
+ <translation>&amp;Seguinte &gt;</translation>
+ </message>
+ <message>
+ <source>&amp;Finish</source>
+ <translation>&amp;Finalizar</translation>
+ </message>
+ <message>
+ <source>&amp;Help</source>
+ <translation>&amp;Axuda</translation>
+ </message>
+</context>
+<context>
+ <name>QAbstractSocket</name>
+ <message>
+ <source>Socket operation timed out</source>
+ <translation>A operación do socket esgotou o tempo-límite</translation>
+ </message>
+ <message>
+ <source>Operation on socket is not supported</source>
+ <translation>A operación no socket non está soportada</translation>
+ </message>
+ <message>
+ <source>Host not found</source>
+ <translation>Non se atopou o servidor</translation>
+ </message>
+ <message>
+ <source>Connection refused</source>
+ <translation>A conexión foi rexeitada</translation>
+ </message>
+ <message>
+ <source>Connection timed out</source>
+ <translation>A conexión esgotou o tempo-límite</translation>
+ </message>
+ <message>
+ <source>Socket is not connected</source>
+ <translation>O socket non está conectado</translation>
+ </message>
+ <message>
+ <source>Network unreachable</source>
+ <translation>Non foi posíbel acadar a rede</translation>
+ </message>
+</context>
+<context>
+ <name>QHttp</name>
+ <message>
+ <source>Connection refused</source>
+ <translation>Rexeitouse a conexión</translation>
+ </message>
+ <message>
+ <source>Connection closed</source>
+ <translation>Pechouse a conexión</translation>
+ </message>
+ <message>
+ <source>Proxy requires authentication</source>
+ <translation>O proxy require autenticación</translation>
+ </message>
+ <message>
+ <source>Host requires authentication</source>
+ <translation>O servidor require autenticación</translation>
+ </message>
+ <message>
+ <source>Data corrupted</source>
+ <translation>Datos corrompidos</translation>
+ </message>
+ <message>
+ <source>Unknown protocol specified</source>
+ <translation>Especificouse un protocolo descoñecido</translation>
+ </message>
+ <message>
+ <source>SSL handshake failed</source>
+ <translation>Fallou a negociación de SSL</translation>
+ </message>
+ <message>
+ <source>HTTPS connection requested but SSL support not compiled in</source>
+ <translation>Pediuse unha conexión HTTPS pero non se compilou con soporte de SSL</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Erro descoñecido</translation>
+ </message>
+ <message>
+ <source>Request aborted</source>
+ <translation>Pedido abortado</translation>
+ </message>
+ <message>
+ <source>No server set to connect to</source>
+ <translation>Non se indicou ningún servidor co que conectar</translation>
+ </message>
+ <message>
+ <source>Wrong content length</source>
+ <translation>Longitude do contido incorrecta</translation>
+ </message>
+ <message>
+ <source>Server closed connection unexpectedly</source>
+ <translation>O servidor pechou a conexión inesperadamente</translation>
+ </message>
+ <message>
+ <source>Connection refused (or timed out)</source>
+ <translation>Rexeitouse a conexión (ou esgouto o tempo-límite)</translation>
+ </message>
+ <message>
+ <source>Host %1 not found</source>
+ <translation>Non se atopou o servidor %1</translation>
+ </message>
+ <message>
+ <source>HTTP request failed</source>
+ <translation>O pedido HTTP fallou</translation>
+ </message>
+ <message>
+ <source>Invalid HTTP response header</source>
+ <translation>A cabeceira da resposta HTTP non é válida</translation>
+ </message>
+ <message>
+ <source>Unknown authentication method</source>
+ <translation>Método descoñecido de autenticación</translation>
+ </message>
+ <message>
+ <source>Proxy authentication required</source>
+ <translation>Requírese de autenticación no proxy</translation>
+ </message>
+ <message>
+ <source>Authentication required</source>
+ <translation>Requírese de autenticación</translation>
+ </message>
+ <message>
+ <source>Invalid HTTP chunked body</source>
+ <translation>Corpo HTTP en pedazos non válido</translation>
+ </message>
+ <message>
+ <source>Error writing response to device</source>
+ <translation>Erro ao escribir a resposta no dispositivo</translation>
+ </message>
+ <message>
+ <source>Host %1 found</source>
+ <translation>Atopouse o servidor %1</translation>
+ </message>
+ <message>
+ <source>Connected to host %1</source>
+ <translation>Conectado co servidor %1</translation>
+ </message>
+ <message>
+ <source>Connection to %1 closed</source>
+ <translation>Pechouse a conexión con %1</translation>
+ </message>
+ <message>
+ <source>Host found</source>
+ <translation>Atopouse un servidor</translation>
+ </message>
+ <message>
+ <source>Connected to host</source>
+ <translation>Conectado co servidor</translation>
+ </message>
+</context>
+<context>
+ <name>QSocks5SocketEngine</name>
+ <message>
+ <source>Connection to proxy refused</source>
+ <translation>A conexión co proxy foi rexeitada</translation>
+ </message>
+ <message>
+ <source>Connection to proxy closed prematurely</source>
+ <translation>A conexión co proxy pechouse antes de tempo</translation>
+ </message>
+ <message>
+ <source>Proxy host not found</source>
+ <translation>Non se atopou o servidor proxy</translation>
+ </message>
+ <message>
+ <source>Connection to proxy timed out</source>
+ <translation>A conexión co proxy esgotou o tempo-límite</translation>
+ </message>
+ <message>
+ <source>Proxy authentication failed</source>
+ <translation>Fallou a autenticación co proxy</translation>
+ </message>
+ <message>
+ <source>Proxy authentication failed: %1</source>
+ <translation>Fallou a autenticación no proxy: %1</translation>
+ </message>
+ <message>
+ <source>SOCKS version 5 protocol error</source>
+ <translation>Erro do protocolo SOCKS versión 5</translation>
+ </message>
+ <message>
+ <source>General SOCKSv5 server failure</source>
+ <translation>Fallo xeral do servidor SOCKSv5</translation>
+ </message>
+ <message>
+ <source>Connection not allowed by SOCKSv5 server</source>
+ <translation>O servidor SOCKSv5 non permitiu a conexión</translation>
+ </message>
+ <message>
+ <source>TTL expired</source>
+ <translation>Esgotouse o TTL</translation>
+ </message>
+ <message>
+ <source>SOCKSv5 command not supported</source>
+ <translation>A orde SOCKSv5 non está soportada</translation>
+ </message>
+ <message>
+ <source>Address type not supported</source>
+ <translation>Tipo de enderezo non soportado</translation>
+ </message>
+ <message>
+ <source>Unknown SOCKSv5 proxy error code 0x%1</source>
+ <translation>Código de erro descoñecido (0x%1) do proxy SOCKSv5</translation>
+ </message>
+ <message>
+ <source>Network operation timed out</source>
+ <translation>A operación de rede esgotou o tempo-límite</translation>
+ </message>
+</context>
+<context>
+ <name>QAbstractSpinBox</name>
+ <message>
+ <source>&amp;Select All</source>
+ <translation>Escoller &amp;todo</translation>
+ </message>
+ <message>
+ <source>&amp;Step up</source>
+ <translation>&amp;Subir</translation>
+ </message>
+ <message>
+ <source>Step &amp;down</source>
+ <translation>&amp;Baixar</translation>
+ </message>
+</context>
+<context>
+ <name>QAccessibleButton</name>
+ <message>
+ <source>Press</source>
+ <translation>Premer</translation>
+ </message>
+</context>
+<context>
+ <name>QCheckBox</name>
+ <message>
+ <source>Uncheck</source>
+ <translation>Desmarcar</translation>
+ </message>
+ <message>
+ <source>Check</source>
+ <translation>Marcar</translation>
+ </message>
+ <message>
+ <source>Toggle</source>
+ <translation>Conmutar</translation>
+ </message>
+</context>
+<context>
+ <name>QPushButton</name>
+ <message>
+ <source>Open</source>
+ <translation>Abrir</translation>
+ </message>
+</context>
+<context>
+ <name>QRadioButton</name>
+ <message>
+ <source>Check</source>
+ <translation>Marcar</translation>
+ </message>
+</context>
+<context>
+ <name>QToolButton</name>
+ <message>
+ <source>Press</source>
+ <translation>Premer</translation>
+ </message>
+ <message>
+ <source>Open</source>
+ <translation>Abrir</translation>
+ </message>
+</context>
+<context>
+ <name>QAxSelect</name>
+ <message>
+ <source>Select ActiveX Control</source>
+ <translation>Escoller n control ActiveX</translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation>Aceptar</translation>
+ </message>
+ <message>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Cancelar</translation>
+ </message>
+ <message>
+ <source>COM &amp;Object:</source>
+ <translation>&amp;Obxecto COM:</translation>
+ </message>
+</context>
+<context>
+ <name>QColorDialog</name>
+ <message>
+ <source>Hu&amp;e:</source>
+ <translation>&amp;Ton:</translation>
+ </message>
+ <message>
+ <source>&amp;Sat:</source>
+ <translation>&amp;Satur:</translation>
+ </message>
+ <message>
+ <source>&amp;Val:</source>
+ <translation>&amp;Valor:</translation>
+ </message>
+ <message>
+ <source>&amp;Red:</source>
+ <translation>&amp;Vermello:</translation>
+ </message>
+ <message>
+ <source>&amp;Green:</source>
+ <translation>V&amp;erde:</translation>
+ </message>
+ <message>
+ <source>Bl&amp;ue:</source>
+ <translation>A&amp;zul:</translation>
+ </message>
+ <message>
+ <source>A&amp;lpha channel:</source>
+ <translation>Canle &amp;alfa:</translation>
+ </message>
+ <message>
+ <source>Select Color</source>
+ <translation>Escoller unha cor</translation>
+ </message>
+ <message>
+ <source>&amp;Basic colors</source>
+ <translation>Cores &amp;básicas</translation>
+ </message>
+ <message>
+ <source>&amp;Custom colors</source>
+ <translation>Cores &amp;personalizadas</translation>
+ </message>
+ <message>
+ <source>&amp;Add to Custom Colors</source>
+ <translation>&amp;Engadir ás cores personalizadas</translation>
+ </message>
+</context>
+<context>
+ <name>QComboBox</name>
+ <message>
+ <source>False</source>
+ <translation>Falso</translation>
+ </message>
+ <message>
+ <source>True</source>
+ <translation>Verdadeiro</translation>
+ </message>
+ <message>
+ <source>Open</source>
+ <translation>Abrir</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>Pechar</translation>
+ </message>
+</context>
+<context>
+ <name>QTabBar</name>
+ <message>
+ <source>Scroll Left</source>
+ <translation>Desprazar cara a esquerda</translation>
+ </message>
+ <message>
+ <source>Scroll Right</source>
+ <translation>Desprazar cara a dereita</translation>
+ </message>
+</context>
+<context>
+ <name>QCoreApplication</name>
+ <message>
+ <source>%1: already exists</source>
+ <comment>QSystemSemaphore</comment>
+ <translation>%1: xa existe</translation>
+ </message>
+ <message>
+ <source>%1: does not exist</source>
+ <comment>QSystemSemaphore</comment>
+ <translation>%1: non existe</translation>
+ </message>
+ <message>
+ <source>%1: out of resources</source>
+ <comment>QSystemSemaphore</comment>
+ <translation>%1: esgotou os recursos</translation>
+ </message>
+ <message>
+ <source>%1: unknown error %2</source>
+ <comment>QSystemSemaphore</comment>
+ <translation>%1: erro descoñecido %2</translation>
+ </message>
+ <message>
+ <source>%1: key is empty</source>
+ <comment>QSystemSemaphore</comment>
+ <translation>%1: a chave está baleira</translation>
+ </message>
+ <message>
+ <source>%1: unable to make key</source>
+ <comment>QSystemSemaphore</comment>
+ <translation>%1: non foi posíbel crear a chave</translation>
+ </message>
+ <message>
+ <source>%1: ftok failed</source>
+ <comment>QSystemSemaphore</comment>
+ <translation>%1: fallou ftok</translation>
+ </message>
+</context>
+<context>
+ <name>QSystemSemaphore</name>
+ <message>
+ <source>%1: permission denied</source>
+ <translation>%1: negouse o permiso</translation>
+ </message>
+ <message>
+ <source>%1: already exists</source>
+ <translation>%1: xa existe</translation>
+ </message>
+ <message>
+ <source>%1: does not exist</source>
+ <translation>%1: non existe</translation>
+ </message>
+ <message>
+ <source>%1: out of resources</source>
+ <translation>%1: esgotou os recursos</translation>
+ </message>
+ <message>
+ <source>%1: unknown error %2</source>
+ <translation>%1: erro descoñecido %2</translation>
+ </message>
+</context>
+<context>
+ <name>QDB2Driver</name>
+ <message>
+ <source>Unable to connect</source>
+ <translation>Non foi posíbel conectar</translation>
+ </message>
+ <message>
+ <source>Unable to commit transaction</source>
+ <translation>Non foi posíbel entregar a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to rollback transaction</source>
+ <translation>Non foi posíbel anular a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to set autocommit</source>
+ <translation>Non foi posíbel activar a entrega automática</translation>
+ </message>
+</context>
+<context>
+ <name>QDB2Result</name>
+ <message>
+ <source>Unable to execute statement</source>
+ <translation>Non foi posíbel executar a sentenza</translation>
+ </message>
+ <message>
+ <source>Unable to prepare statement</source>
+ <translation>Non foi posíbel preparar a sentenza</translation>
+ </message>
+ <message>
+ <source>Unable to bind variable</source>
+ <translation>Non foi posíbel asociar a variábel</translation>
+ </message>
+ <message>
+ <source>Unable to fetch record %1</source>
+ <translation>Non foi posíbel traer o rexistro %1</translation>
+ </message>
+ <message>
+ <source>Unable to fetch next</source>
+ <translation>Non foi posíbel acadar o seguinte</translation>
+ </message>
+ <message>
+ <source>Unable to fetch first</source>
+ <translation>Non foi posíbel acadar o primeiro</translation>
+ </message>
+</context>
+<context>
+ <name>QODBCResult</name>
+ <message>
+ <source>Unable to fetch last</source>
+ <translation>Non foi posíbel acadar o último</translation>
+ </message>
+ <message>
+ <source>QODBCResult::reset: Unable to set &apos;SQL_CURSOR_STATIC&apos; as statement attribute. Please check your ODBC driver configuration</source>
+ <translation>QODBCResult::reset: Non foi posíbel estabelecer «SQL_CURSOR_STATIC» como
+atributo da sentenza. Verifique a configuración do controlador ODBC</translation>
+ </message>
+ <message>
+ <source>Unable to execute statement</source>
+ <translation>Non foi posíbel executar a sentenza</translation>
+ </message>
+ <message>
+ <source>Unable to fetch</source>
+ <translation>Non foi posíbel acadar</translation>
+ </message>
+ <message>
+ <source>Unable to fetch next</source>
+ <translation>Non foi posíbel acadar o seguinte</translation>
+ </message>
+ <message>
+ <source>Unable to fetch first</source>
+ <translation>Non foi posíbel acadar o primeiro</translation>
+ </message>
+ <message>
+ <source>Unable to fetch previous</source>
+ <translation>Non foi posíbel acadar o anterior</translation>
+ </message>
+ <message>
+ <source>Unable to prepare statement</source>
+ <translation>Non foi posíbel preparar a sentenza</translation>
+ </message>
+ <message>
+ <source>Unable to bind variable</source>
+ <translation>Non foi posíbel asociar a variábel</translation>
+ </message>
+</context>
+<context>
+ <name>QDateTimeEdit</name>
+ <message>
+ <source>AM</source>
+ <translation>AM</translation>
+ </message>
+ <message>
+ <source>am</source>
+ <translation>am</translation>
+ </message>
+ <message>
+ <source>PM</source>
+ <translation>PM</translation>
+ </message>
+ <message>
+ <source>pm</source>
+ <translation>pm</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeAbstractAnimation</name>
+ <message>
+ <source>Cannot animate non-existent property &quot;%1&quot;</source>
+ <translation>Non se pode animar a propriedade inexistente «%1»</translation>
+ </message>
+ <message>
+ <source>Cannot animate read-only property &quot;%1&quot;</source>
+ <translation>Non se pode animar a propriedade só para lectura «%1»</translation>
+ </message>
+ <message>
+ <source>Animation is an abstract class</source>
+ <translation>A animación é unha clase abstracta</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeAnchorAnimation</name>
+ <message>
+ <source>Cannot set a duration of &lt; 0</source>
+ <translation>Non se pode indicar unha duración &lt; 0</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeParentAnimation</name>
+ <message>
+ <source>Unable to preserve appearance under complex transform</source>
+ <translation>Non é posíbel conservar a aparencia con transformación complexa</translation>
+ </message>
+ <message>
+ <source>Unable to preserve appearance under non-uniform scale</source>
+ <translation>Non é posíbel conservar a aparencia con escalado non uniforme</translation>
+ </message>
+ <message>
+ <source>Unable to preserve appearance under scale of 0</source>
+ <translation>Non é posíbel conservar a aparencia con escala de 0</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativePauseAnimation</name>
+ <message>
+ <source>Cannot set a duration of &lt; 0</source>
+ <translation>Non se pode indicar unha duración &lt; 0</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativePropertyAnimation</name>
+ <message>
+ <source>Cannot set a duration of &lt; 0</source>
+ <translation>Non se pode indicar unha duración &lt; 0</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeXmlListModel</name>
+ <message>
+ <source>Qt was built without support for xmlpatterns</source>
+ <translation>Qt construíuse sen soporte para xmlpatterns</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeAnchors</name>
+ <message>
+ <source>Possible anchor loop detected on fill.</source>
+ <translation>Detectouse un posíbel ciclo de enganche no recheo.</translation>
+ </message>
+ <message>
+ <source>Possible anchor loop detected on centerIn.</source>
+ <translation>Detectouse un posíbel ciclo de enganche en centerIn.</translation>
+ </message>
+ <message>
+ <source>Cannot anchor to an item that isn&apos;t a parent or sibling.</source>
+ <translation>Non se pode enganchar a un elemento que non é pai nin irmao.</translation>
+ </message>
+ <message>
+ <source>Possible anchor loop detected on vertical anchor.</source>
+ <translation>Detectouse un posíbel ciclo de enganche no enganche vertical.</translation>
+ </message>
+ <message>
+ <source>Possible anchor loop detected on horizontal anchor.</source>
+ <translation>Detectouse un posíbel ciclo de enganche no enganche horizontal.</translation>
+ </message>
+ <message>
+ <source>Cannot specify left, right, and hcenter anchors.</source>
+ <translation>Non se poden especificar os enganches esquerdo, dereito e hcenter.</translation>
+ </message>
+ <message>
+ <source>Cannot anchor to a null item.</source>
+ <translation>Non se pode enganchar a un elemento nulo.</translation>
+ </message>
+ <message>
+ <source>Cannot anchor a horizontal edge to a vertical edge.</source>
+ <translation>Non se pode enganchar un contorno horizontal a un vertical.</translation>
+ </message>
+ <message>
+ <source>Cannot anchor item to self.</source>
+ <translation>Non se pode enganchar o elemento consigo mesmo.</translation>
+ </message>
+ <message>
+ <source>Cannot specify top, bottom, and vcenter anchors.</source>
+ <translation>Non se poden especificar os enganches superior, inferior e vcenter.</translation>
+ </message>
+ <message>
+ <source>Baseline anchor cannot be used in conjunction with top, bottom, or vcenter anchors.</source>
+ <translation>O enganche de liña de base non se pode empregar xunto cos enganches
+superior, inferior nin vcenter.</translation>
+ </message>
+ <message>
+ <source>Cannot anchor a vertical edge to a horizontal edge.</source>
+ <translation>Non se pode enganchar un contorno vertical a un horizontal.</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeAnimatedImage</name>
+ <message>
+ <source>Qt was built without support for QMovie</source>
+ <translation>Qt construíuse sen soporte para QMovie</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeKeyNavigationAttached</name>
+ <message>
+ <source>KeyNavigation is only available via attached properties</source>
+ <translation>KeyNavigation só está dispoñíbel mediante as propriedades anexadas</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeKeysAttached</name>
+ <message>
+ <source>Keys is only available via attached properties</source>
+ <translation>Keys só está dispoñíbel mediante as propriedades anexadas</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeBehavior</name>
+ <message>
+ <source>Cannot change the animation assigned to a Behavior.</source>
+ <translation>Non se pode mudar a animación asignada a un Behavior.</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeBinding</name>
+ <message>
+ <source>Binding loop detected for property &quot;%1&quot;</source>
+ <translation>Detectouse un ciclo de unión para a propriedade «%1»</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeCompiledBindings</name>
+ <message>
+ <source>Binding loop detected for property &quot;%1&quot;</source>
+ <translation>Detectouse un ciclo de unión para a propriedade «%1»</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeCompiler</name>
+ <message>
+ <source>Invalid property assignment: &quot;%1&quot; is a read-only property</source>
+ <translation>Asignación de propriedade non válida: «%1» é unha propriedade só para lectura</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: unknown enumeration</source>
+ <translation>Asignación de propriedade non válida: enumeración descoñecida</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: string expected</source>
+ <translation>Asignación de propriedade non válida: agardábase unha cadea</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: url expected</source>
+ <translation>Asignación de propriedade non válida: agardábase un URL</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: unsigned int expected</source>
+ <translation>Asignación de propriedade non válida: agardábase un unsigned int</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: int expected</source>
+ <translation>Asignación de propriedade non válida: agardábase un int</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: number expected</source>
+ <translation>Asignación de propriedade non válida: agardábase un número</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: color expected</source>
+ <translation>Asignación de propriedade non válida: agardábase unha cor</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: date expected</source>
+ <translation>Asignación de propriedade non válida: agardábase unha date</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: time expected</source>
+ <translation>Asignación de propriedade non válida: agardábase un time</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: datetime expected</source>
+ <translation>Asignación de propriedade non válida: agardábase un datetime</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: point expected</source>
+ <translation>Asignación de propriedade non válida: agardábase un punto</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: size expected</source>
+ <translation>Asignación de propriedade non válida: agardábase un tamaño</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: rect expected</source>
+ <translation>Asignación de propriedade non válida: agardábase un rect</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: boolean expected</source>
+ <translation>Asignación de propriedade non válida: agardábase un booleano</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: 3D vector expected</source>
+ <translation>Asignación de propriedade non válida: agardábase un vector 3D</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: unsupported type &quot;%1&quot;</source>
+ <translation>Asignación de propriedade non válida: tipo non soportado «%1»</translation>
+ </message>
+ <message>
+ <source>Element is not creatable.</source>
+ <translation>O elemento non é creábel.</translation>
+ </message>
+ <message>
+ <source>Component elements may not contain properties other than id</source>
+ <translation>Os elementos compoñentes non poden conter máis propriedades que o id</translation>
+ </message>
+ <message>
+ <source>Invalid component id specification</source>
+ <translation>Especificación non válida do id dun compoñente</translation>
+ </message>
+ <message>
+ <source>id is not unique</source>
+ <translation>O id non é único</translation>
+ </message>
+ <message>
+ <source>Invalid component body specification</source>
+ <translation>Especificación non válida do corpo dun compoñente</translation>
+ </message>
+ <message>
+ <source>Component objects cannot declare new properties.</source>
+ <translation>Os obxectos compoñentes non poden declarar novas propriedades.</translation>
+ </message>
+ <message>
+ <source>Component objects cannot declare new signals.</source>
+ <translation>Os obxectos compoñentes non poden declarar novas sinais.</translation>
+ </message>
+ <message>
+ <source>Component objects cannot declare new functions.</source>
+ <translation>Os obxectos compoñentes non poden declarar novas funcións.</translation>
+ </message>
+ <message>
+ <source>Cannot create empty component specification</source>
+ <translation>Non se pode crear unha especificación de compoñente baleira</translation>
+ </message>
+ <message>
+ <source>Incorrectly specified signal assignment</source>
+ <translation>Especificouse incorrectamente a asignación de sinal</translation>
+ </message>
+ <message>
+ <source>Cannot assign a value to a signal (expecting a script to be run)</source>
+ <translation>Non foi posíbel asignar un valor a un sinal (agardábase que se executase un script)</translation>
+ </message>
+ <message>
+ <source>Empty signal assignment</source>
+ <translation>Asignación baleira de sinal</translation>
+ </message>
+ <message>
+ <source>Empty property assignment</source>
+ <translation>Asignación baleira de propriedade</translation>
+ </message>
+ <message>
+ <source>Attached properties cannot be used here</source>
+ <translation>As propriedades anexas non se poden empregar aquí</translation>
+ </message>
+ <message>
+ <source>Non-existent attached object</source>
+ <translation>Anexáronse propriedades inexistentes</translation>
+ </message>
+ <message>
+ <source>Invalid attached object assignment</source>
+ <translation>Asignación de obxecto anexo non válido</translation>
+ </message>
+ <message>
+ <source>Cannot assign to non-existent default property</source>
+ <translation>Non se pode asignar a unha propriedade predeterminada inexistente</translation>
+ </message>
+ <message>
+ <source>Cannot assign to non-existent property &quot;%1&quot;</source>
+ <translation>Non se pode asignar a unha propriedade inexistente «%1»</translation>
+ </message>
+ <message>
+ <source>Invalid use of namespace</source>
+ <translation>Uso non válido do espazo de nomes</translation>
+ </message>
+ <message>
+ <source>Not an attached property name</source>
+ <translation>Non é un nome de propriedade anexa</translation>
+ </message>
+ <message>
+ <source>Invalid use of id property</source>
+ <translation>Uso non válido da propriedade id</translation>
+ </message>
+ <message>
+ <source>Property has already been assigned a value</source>
+ <translation>Xa se lle asignou un valor a esta propriedade</translation>
+ </message>
+ <message>
+ <source>Invalid grouped property access</source>
+ <translation>Acceso non válido a unha propriedade agrupada</translation>
+ </message>
+ <message>
+ <source>Cannot assign a value directly to a grouped property</source>
+ <translation>Non se pode asignar directamente un valor a unha propriedade agrupada</translation>
+ </message>
+ <message>
+ <source>Invalid property use</source>
+ <translation>Uso non válido da propriedade</translation>
+ </message>
+ <message>
+ <source>Property assignment expected</source>
+ <translation>Agardábase unha asignación de propriedade</translation>
+ </message>
+ <message>
+ <source>Single property assignment expected</source>
+ <translation>Agardábase unha única asignación a propriedade</translation>
+ </message>
+ <message>
+ <source>Unexpected object assignment</source>
+ <translation>Asignación de obxecto inesperada</translation>
+ </message>
+ <message>
+ <source>Cannot assign object to list</source>
+ <translation>Non se pode asignar un obxecto a unha lista</translation>
+ </message>
+ <message>
+ <source>Can only assign one binding to lists</source>
+ <translation>Só se pode asignar unha combinación ás listas</translation>
+ </message>
+ <message>
+ <source>Cannot assign primitives to lists</source>
+ <translation>Non se poden asignar primitivas ás listas</translation>
+ </message>
+ <message>
+ <source>Cannot assign multiple values to a script property</source>
+ <translation>Non se poden asignar varios valores a unha propriedade de script</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: script expected</source>
+ <translation>Asignación de propriedade non válida: agardábase un script</translation>
+ </message>
+ <message>
+ <source>Cannot assign object to property</source>
+ <translation>Non se pode asignar un obxecto a unha propriedade</translation>
+ </message>
+ <message>
+ <source>&quot;%1&quot; cannot operate on &quot;%2&quot;</source>
+ <translation>«%1» non pode operar en «%2»</translation>
+ </message>
+ <message>
+ <source>Duplicate default property</source>
+ <translation>Propriedade predeterminada duplicada</translation>
+ </message>
+ <message>
+ <source>Duplicate property name</source>
+ <translation>Nome de propriedade duplicado</translation>
+ </message>
+ <message>
+ <source>Property names cannot begin with an upper case letter</source>
+ <translation>Os nomes das propriedades non poden comezar por maiúscula</translation>
+ </message>
+ <message>
+ <source>Illegal property name</source>
+ <translation>Nome ilegal de propriedade</translation>
+ </message>
+ <message>
+ <source>Duplicate signal name</source>
+ <translation>Nome de sinal duplicado</translation>
+ </message>
+ <message>
+ <source>Signal names cannot begin with an upper case letter</source>
+ <translation>Os nomes de sinal non poden comezar por maiúscula</translation>
+ </message>
+ <message>
+ <source>Illegal signal name</source>
+ <translation>Nome ilegal de sinal</translation>
+ </message>
+ <message>
+ <source>Duplicate method name</source>
+ <translation>Nome de método duplicado</translation>
+ </message>
+ <message>
+ <source>Method names cannot begin with an upper case letter</source>
+ <translation>Os nomes de método non poden comezar por maiúscula</translation>
+ </message>
+ <message>
+ <source>Illegal method name</source>
+ <translation>Nome ilegal de método</translation>
+ </message>
+ <message>
+ <source>Property value set multiple times</source>
+ <translation>O valor dunha propriedade indicouse varias veces</translation>
+ </message>
+ <message>
+ <source>Invalid property nesting</source>
+ <translation>Aniñamento non válido de propriedade</translation>
+ </message>
+ <message>
+ <source>Cannot override FINAL property</source>
+ <translation>Non se pode sobrescribir a propriedade FINAL</translation>
+ </message>
+ <message>
+ <source>Invalid property type</source>
+ <translation>Tipo de propriedade non válido</translation>
+ </message>
+ <message>
+ <source>Invalid empty ID</source>
+ <translation>ID baleiro non válido</translation>
+ </message>
+ <message>
+ <source>IDs cannot start with an uppercase letter</source>
+ <translation>Os ID non poden iniciar por unha maiúscula</translation>
+ </message>
+ <message>
+ <source>IDs must start with a letter or underscore</source>
+ <translation>Os ID deben comezar por unha letra ou por un guión baixo</translation>
+ </message>
+ <message>
+ <source>IDs must contain only letters, numbers, and underscores</source>
+ <translation>Os ID só deben conter letras, números e guións baixos</translation>
+ </message>
+ <message>
+ <source>ID illegally masks global JavaScript property</source>
+ <translation>O ID enmascara ilegalmente unha propriedade JavaScript global</translation>
+ </message>
+ <message>
+ <source>No property alias location</source>
+ <translation>Falta a localización dun alcume dunha propriedade</translation>
+ </message>
+ <message>
+ <source>Invalid alias location</source>
+ <translation>Localización non válida dun alcume</translation>
+ </message>
+ <message>
+ <source>Invalid alias reference. An alias reference must be specified as &lt;id&gt; or &lt;id&gt;.&lt;property&gt;</source>
+ <translation>Referencianon válida a un alcume. Unha referencia a un alcume debe indicarse como &lt;id&gt; ou como &lt;id&gt;.&lt;propriedade&gt;</translation>
+ </message>
+ <message>
+ <source>Invalid alias reference. Unable to find id &quot;%1&quot;</source>
+ <translation>Referencia non válida a un alcume. Non foi posíbel achar o id «%1»</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeComponent</name>
+ <message>
+ <source>Invalid empty URL</source>
+ <translation>URL baleiro non válido</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeCompositeTypeManager</name>
+ <message>
+ <source>Resource %1 unavailable</source>
+ <translation>O recurso %1 non está dispoñíbel</translation>
+ </message>
+ <message>
+ <source>Namespace %1 cannot be used as a type</source>
+ <translation>O espazo de nomes %1 non se pode empregar como un tipo</translation>
+ </message>
+ <message>
+ <source>%1 %2</source>
+ <translation>%1 %2</translation>
+ </message>
+ <message>
+ <source>Type %1 unavailable</source>
+ <translation>O tipo %1 non está dispoñíbel</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeConnections</name>
+ <message>
+ <source>Cannot assign to non-existent property &quot;%1&quot;</source>
+ <translation>Non é posíbel asignar a unha propriedade non existente «%1»</translation>
+ </message>
+ <message>
+ <source>Connections: nested objects not allowed</source>
+ <translation>Conexións: non se permiten obxectos aniñados</translation>
+ </message>
+ <message>
+ <source>Connections: syntax error</source>
+ <translation>Conexións: erro de sintaxe</translation>
+ </message>
+ <message>
+ <source>Connections: script expected</source>
+ <translation>Conexións: agardábase un script</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeEngine</name>
+ <message>
+ <source>executeSql called outside transaction()</source>
+ <translation>chamouse a executeSql fora dunha transaction()</translation>
+ </message>
+ <message>
+ <source>Read-only Transaction</source>
+ <translation>Transacción só para lectura</translation>
+ </message>
+ <message>
+ <source>Version mismatch: expected %1, found %2</source>
+ <translation>Non se corresponden as versións: agardábase a %1 pero achouse a %2</translation>
+ </message>
+ <message>
+ <source>SQL transaction failed</source>
+ <translation>Fallou a transacción SQL</translation>
+ </message>
+ <message>
+ <source>transaction: missing callback</source>
+ <translation>transacción: falta a chamada de retorno</translation>
+ </message>
+ <message>
+ <source>SQL: database version mismatch</source>
+ <translation>SQL: a versión da base de datos non se corresponde</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeFlipable</name>
+ <message>
+ <source>front is a write-once property</source>
+ <translation>front é unha propriedade só para escrita</translation>
+ </message>
+ <message>
+ <source>back is a write-once property</source>
+ <translation>bach é unha propriedade só para escrita</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeImportDatabase</name>
+ <message>
+ <source>module &quot;%1&quot; definition &quot;%2&quot; not readable</source>
+ <translation>a definición «%2» no módulo «%1» non é lexíbel</translation>
+ </message>
+ <message>
+ <source>plugin cannot be loaded for module &quot;%1&quot;: %2</source>
+ <translation>non foi posíbel cargar a extensión para o módulo «%1»: %2</translation>
+ </message>
+ <message>
+ <source>module &quot;%1&quot; plugin &quot;%2&quot; not found</source>
+ <translation>non se atopou a extensión «%2» do módulo «%1»</translation>
+ </message>
+ <message>
+ <source>module &quot;%1&quot; version %2.%3 is not installed</source>
+ <translation>a versión %2.%3 do módulo «%1» non está instalada</translation>
+ </message>
+ <message>
+ <source>module &quot;%1&quot; is not installed</source>
+ <translation>o módulo «%1» non está instalado</translation>
+ </message>
+ <message>
+ <source>&quot;%1&quot;: no such directory</source>
+ <translation>«%1»: non hai tal directorio</translation>
+ </message>
+ <message>
+ <source>import &quot;%1&quot; has no qmldir and no namespace</source>
+ <translation>import &quot;%1&quot; non ten qmldir nin espazo de nomes</translation>
+ </message>
+ <message>
+ <source>- %1 is not a namespace</source>
+ <translation>: %1 non é un espazo de nomes</translation>
+ </message>
+ <message>
+ <source>- nested namespaces not allowed</source>
+ <translation>: non se permiten os espazos de nomes aniñados</translation>
+ </message>
+ <message>
+ <source>local directory</source>
+ <translation>directorio local</translation>
+ </message>
+ <message>
+ <source>is ambiguous. Found in %1 and in %2</source>
+ <translation>é ambíguo. Atopouse en %1 e en %2</translation>
+ </message>
+ <message>
+ <source>is ambiguous. Found in %1 in version %2.%3 and %4.%5</source>
+ <translation>é ambiguo. Atopouse en %1 nas versións %2.%3 e %4.%5</translation>
+ </message>
+ <message>
+ <source>is instantiated recursively</source>
+ <translation>é instanciada de xeito recursivo</translation>
+ </message>
+ <message>
+ <source>is not a type</source>
+ <translation>non é un tipo</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeListModel</name>
+ <message>
+ <source>remove: index %1 out of range</source>
+ <translation>eliminar: o índice %1 está fora do intervalo</translation>
+ </message>
+ <message>
+ <source>insert: value is not an object</source>
+ <translation>inserir: o valor non é un obxecto</translation>
+ </message>
+ <message>
+ <source>insert: index %1 out of range</source>
+ <translation>inserir: o índice %1 está fora do intervalo</translation>
+ </message>
+ <message>
+ <source>move: out of range</source>
+ <translation>mover: fora do intervalo</translation>
+ </message>
+ <message>
+ <source>append: value is not an object</source>
+ <translation>engadir: o valor non é un obxecto</translation>
+ </message>
+ <message>
+ <source>set: value is not an object</source>
+ <translation>definir: o valor non é un obxecto</translation>
+ </message>
+ <message>
+ <source>set: index %1 out of range</source>
+ <translation>definir: o índice %1 está fora do intervalo</translation>
+ </message>
+ <message>
+ <source>ListElement: cannot contain nested elements</source>
+ <translation>Elemento de lista: non pode conter elementos aniñados</translation>
+ </message>
+ <message>
+ <source>ListElement: cannot use reserved &quot;id&quot; property</source>
+ <translation>Elemento de lista: non pode empregar a propriedade «id» porque está reservada</translation>
+ </message>
+ <message>
+ <source>ListElement: cannot use script for property value</source>
+ <translation>Elemento de lista: non pode empregar script como valor de propriedade</translation>
+ </message>
+ <message>
+ <source>ListModel: undefined property &apos;%1&apos;</source>
+ <translation>Modelo de lista: a propriedade «%1» non está definida</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeLoader</name>
+ <message>
+ <source>Loader does not support loading non-visual elements.</source>
+ <translation>O cargador non permite cargar elementos non visuais.</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeParentChange</name>
+ <message>
+ <source>Unable to preserve appearance under complex transform</source>
+ <translation>Non é posíbel conservar a aparencia con transformación complexa</translation>
+ </message>
+ <message>
+ <source>Unable to preserve appearance under non-uniform scale</source>
+ <translation>Non é posíbel conservar a aparencia con escalado non uniforme</translation>
+ </message>
+ <message>
+ <source>Unable to preserve appearance under scale of 0</source>
+ <translation>Non é posíbel conservar a aparencia con escala de 0</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeParser</name>
+ <message>
+ <source>Illegal unicode escape sequence</source>
+ <translation>Secuencia de escape unicode ilegal</translation>
+ </message>
+ <message>
+ <source>Illegal character</source>
+ <translation>Caracter ilegal</translation>
+ </message>
+ <message>
+ <source>Unclosed string at end of line</source>
+ <translation>Cadea non pechada no fin dunha liña</translation>
+ </message>
+ <message>
+ <source>Illegal escape squence</source>
+ <translation>Secuencia de escape ilegal</translation>
+ </message>
+ <message>
+ <source>Unclosed comment at end of file</source>
+ <translation>Comentario non pechado ao final dunha liña</translation>
+ </message>
+ <message>
+ <source>Illegal syntax for exponential number</source>
+ <translation>Sintaxe ilegal para un número exponencial</translation>
+ </message>
+ <message>
+ <source>Identifier cannot start with numeric literal</source>
+ <translation>O identificador non pode comezar por un literal numérico</translation>
+ </message>
+ <message>
+ <source>Unterminated regular expression literal</source>
+ <translation>Literal de expresión regular non terminado</translation>
+ </message>
+ <message>
+ <source>Invalid regular expression flag &apos;%0&apos;</source>
+ <translation>Indicador de expresión regular «%0 »non válido</translation>
+ </message>
+ <message>
+ <source>Unterminated regular expression backslash sequence</source>
+ <translation>Secuencia de expresión regular non terminda con contrabarra</translation>
+ </message>
+ <message>
+ <source>Unterminated regular expression class</source>
+ <translation>Clase de expresión regular non terminada</translation>
+ </message>
+ <message>
+ <source>Syntax error</source>
+ <translation>Erro de sintaxe</translation>
+ </message>
+ <message>
+ <source>Unexpected token `%1&apos;</source>
+ <translation>Token «%1» non agardado.</translation>
+ </message>
+ <message>
+ <source>Expected token `%1&apos;</source>
+ <translation>Agardábase o token «%1»</translation>
+ </message>
+ <message>
+ <source>Property value set multiple times</source>
+ <translation>O valor da propriedade estabeleceuse varias veces</translation>
+ </message>
+ <message>
+ <source>Expected type name</source>
+ <translation>Agardábase o nome dun tipo</translation>
+ </message>
+ <message>
+ <source>Invalid import qualifier ID</source>
+ <translation>ID do calificador de importación non válido</translation>
+ </message>
+ <message>
+ <source>Reserved name &quot;Qt&quot; cannot be used as an qualifier</source>
+ <translation>O nome reservado «Qt» non se pode empregar como calificador</translation>
+ </message>
+ <message>
+ <source>Script import qualifiers must be unique.</source>
+ <translation>Os calificadores de importación de script deben ser únicos.</translation>
+ </message>
+ <message>
+ <source>Script import requires a qualifier</source>
+ <translation>A importación de script require dun calificador</translation>
+ </message>
+ <message>
+ <source>Library import requires a version</source>
+ <translation>A importación de bibliotecas require dunha versión</translation>
+ </message>
+ <message>
+ <source>Expected parameter type</source>
+ <translation>Agardábase un tipo de parámetro</translation>
+ </message>
+ <message>
+ <source>Invalid property type modifier</source>
+ <translation>Modificador de tipo da propriedade non válido</translation>
+ </message>
+ <message>
+ <source>Unexpected property type modifier</source>
+ <translation>Modificador do tipo da propriedade non agardado</translation>
+ </message>
+ <message>
+ <source>Expected property type</source>
+ <translation>Agardábase o tipo dunha propriedade</translation>
+ </message>
+ <message>
+ <source>Readonly not yet supported</source>
+ <translation>Aínda non se soporta o só para leitura</translation>
+ </message>
+ <message>
+ <source>JavaScript declaration outside Script element</source>
+ <translation>Declaración de JavaScript fora dun elemento Script</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativePixmap</name>
+ <message>
+ <source>Error decoding: %1: %2</source>
+ <translation>Aconteceu un erro ao descodificar: %1: %2</translation>
+ </message>
+ <message>
+ <source>Failed to get image from provider: %1</source>
+ <translation>Fallou a obtención da imaxe do provedor: %1</translation>
+ </message>
+ <message>
+ <source>Cannot open: %1</source>
+ <translation>Non foi posíbel abrir %1</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativePropertyChanges</name>
+ <message>
+ <source>PropertyChanges does not support creating state-specific objects.</source>
+ <translation>PropertyChanges non soporta crear obxectos específicos dun estado.</translation>
+ </message>
+ <message>
+ <source>Cannot assign to non-existent property &quot;%1&quot;</source>
+ <translation>Non é posíbel asignar á propriedade inexistente «%1»</translation>
+ </message>
+ <message>
+ <source>Cannot assign to read-only property &quot;%1&quot;</source>
+ <translation>Non é posíbel asignar a unha propriedade só para lectura «%1»</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeTextInput</name>
+ <message>
+ <source>Could not load cursor delegate</source>
+ <translation>Non foi posíbel cargar o delegado do cursor</translation>
+ </message>
+ <message>
+ <source>Could not instantiate cursor delegate</source>
+ <translation>Non foi posíbel instanciar o delegado do cursor</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeVME</name>
+ <message>
+ <source>Unable to create object of type %1</source>
+ <translation>Non foi posíbel crear un obxecto do tipo %1</translation>
+ </message>
+ <message>
+ <source>Cannot assign value %1 to property %2</source>
+ <translation>Non é posíbel asignar o valor %1 á propriedade %2</translation>
+ </message>
+ <message>
+ <source>Cannot assign object type %1 with no default method</source>
+ <translation>Non é posíbel asignar un obxecto do tipo %1 sen método predeterminado</translation>
+ </message>
+ <message>
+ <source>Cannot connect mismatched signal/slot %1 %vs. %2</source>
+ <translation>Non é posíbel conectar o sinal/slot non coincidente %1 %vs. %2</translation>
+ </message>
+ <message>
+ <source>Cannot assign an object to signal property %1</source>
+ <translation>Non é posíbel asignar un obxecto á propriedade de sinal %1</translation>
+ </message>
+ <message>
+ <source>Cannot assign object to list</source>
+ <translation>Non é posíbel asignar un obxecto a unha listaxe</translation>
+ </message>
+ <message>
+ <source>Cannot assign object to interface property</source>
+ <translation>Non é posíbel asignar un obxecto a unha propriedade dunha interface</translation>
+ </message>
+ <message>
+ <source>Unable to create attached object</source>
+ <translation>Non foi posíbel crear o obxecto anexo</translation>
+ </message>
+ <message>
+ <source>Cannot set properties on %1 as it is null</source>
+ <translation>Non se poden definir propriedades de %1 porque é nulo</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeVisualDataModel</name>
+ <message>
+ <source>Delegate component must be Item type.</source>
+ <translation>O componente delegado debe ser do tipo Item.</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeXmlListModelRole</name>
+ <message>
+ <source>An XmlRole query must not start with &apos;/&apos;</source>
+ <translation>Unha pescuda XmlRole non pode comezar por «/»</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeXmlRoleList</name>
+ <message>
+ <source>An XmlListModel query must start with &apos;/&apos; or &quot;//&quot;</source>
+ <translation>Unha pescuda XmlListModel non pode comezar por «/» nin por «//»</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <source>&quot;%1&quot; duplicates a previous role name and will be disabled.</source>
+ <translation>«%1» duplica un nome de rol anterior e desactivarase.</translation>
+ </message>
+ <message>
+ <source>invalid query: &quot;%1&quot;</source>
+ <translation>pescuda non válida: «%1»</translation>
+ </message>
+ <message>
+ <source>PulseAudio Sound Server</source>
+ <translation>Servidor de son PulseAudio</translation>
+ </message>
+</context>
+<context>
+ <name>QDial</name>
+ <message>
+ <source>QDial</source>
+ <translation>QDial</translation>
+ </message>
+ <message>
+ <source>SpeedoMeter</source>
+ <translation>Velocímetro</translation>
+ </message>
+ <message>
+ <source>SliderHandle</source>
+ <translation>Asa da barra deslizante</translation>
+ </message>
+</context>
+<context>
+ <name>QDoubleSpinBox</name>
+ <message>
+ <source>More</source>
+ <translation>Máis</translation>
+ </message>
+ <message>
+ <source>Less</source>
+ <translation>Menos</translation>
+ </message>
+</context>
+<context>
+ <name>QScrollBar</name>
+ <message>
+ <source>Line up</source>
+ <translation>Aliñar en riba</translation>
+ </message>
+ <message>
+ <source>Position</source>
+ <translation>Posición</translation>
+ </message>
+ <message>
+ <source>Line down</source>
+ <translation>Aliñar en baixo</translation>
+ </message>
+ <message>
+ <source>Scroll here</source>
+ <translation>Desprazar cara aquí</translation>
+ </message>
+ <message>
+ <source>Left edge</source>
+ <translation>Borde esquerdo</translation>
+ </message>
+ <message>
+ <source>Top</source>
+ <translation>Cume</translation>
+ </message>
+ <message>
+ <source>Right edge</source>
+ <translation>Borde dereito</translation>
+ </message>
+ <message>
+ <source>Bottom</source>
+ <translation>Fondo</translation>
+ </message>
+ <message>
+ <source>Page left</source>
+ <translation>Páxina á esquerda</translation>
+ </message>
+ <message>
+ <source>Page up</source>
+ <translation>Páxina en riba</translation>
+ </message>
+ <message>
+ <source>Page right</source>
+ <translation>Páxina á dereita</translation>
+ </message>
+ <message>
+ <source>Page down</source>
+ <translation>Páxina en baixo</translation>
+ </message>
+ <message>
+ <source>Scroll left</source>
+ <translation>Desprazar cara á esquerda</translation>
+ </message>
+ <message>
+ <source>Scroll up</source>
+ <translation>Desprazar cara arriba</translation>
+ </message>
+ <message>
+ <source>Scroll right</source>
+ <translation>Desprazar cara á dereita</translation>
+ </message>
+ <message>
+ <source>Scroll down</source>
+ <translation>Desprazar cara abaixo</translation>
+ </message>
+</context>
+<context>
+ <name>QSlider</name>
+ <message>
+ <source>Page left</source>
+ <translation>Páxina á esquerda</translation>
+ </message>
+ <message>
+ <source>Page up</source>
+ <translation>Páxina en riba</translation>
+ </message>
+ <message>
+ <source>Position</source>
+ <translation>Posición</translation>
+ </message>
+ <message>
+ <source>Page right</source>
+ <translation>Páxina á dereita</translation>
+ </message>
+ <message>
+ <source>Page down</source>
+ <translation>Páxina en baixo</translation>
+ </message>
+</context>
+<context>
+ <name>QSpinBox</name>
+ <message>
+ <source>More</source>
+ <translation>Máis</translation>
+ </message>
+ <message>
+ <source>Less</source>
+ <translation>Menos</translation>
+ </message>
+</context>
+<context>
+ <name>QDialog</name>
+ <message>
+ <source>Done</source>
+ <translation>Feito</translation>
+ </message>
+ <message>
+ <source>What&apos;s This?</source>
+ <translation>Que é isto?</translation>
+ </message>
+</context>
+<context>
+ <name>QDialogButtonBox</name>
+ <message>
+ <source>OK</source>
+ <translation>Aceptar</translation>
+ </message>
+ <message>
+ <source>&amp;OK</source>
+ <translation>&amp;Aceptar</translation>
+ </message>
+ <message>
+ <source>&amp;Save</source>
+ <translation>&amp;Gardar</translation>
+ </message>
+ <message>
+ <source>Save</source>
+ <translation>Gardar</translation>
+ </message>
+ <message>
+ <source>Open</source>
+ <translation>Abrir</translation>
+ </message>
+ <message>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Cancelar</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+ <message>
+ <source>&amp;Close</source>
+ <translation>&amp;Pechar</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>Pechar</translation>
+ </message>
+ <message>
+ <source>Apply</source>
+ <translation>Aplicar</translation>
+ </message>
+ <message>
+ <source>Reset</source>
+ <translation>Reiniciar</translation>
+ </message>
+ <message>
+ <source>Help</source>
+ <translation>Axuda</translation>
+ </message>
+ <message>
+ <source>Don&apos;t Save</source>
+ <translation>Non gardar</translation>
+ </message>
+ <message>
+ <source>Close without Saving</source>
+ <translation>Pechar sen gardar</translation>
+ </message>
+ <message>
+ <source>Discard</source>
+ <translation>Descartar</translation>
+ </message>
+ <message>
+ <source>&amp;Yes</source>
+ <translation>&amp;Si</translation>
+ </message>
+ <message>
+ <source>Yes to &amp;All</source>
+ <translation>Si a &amp;todo</translation>
+ </message>
+ <message>
+ <source>&amp;No</source>
+ <translation>&amp;Non</translation>
+ </message>
+ <message>
+ <source>N&amp;o to All</source>
+ <translation>Non a to&amp;do</translation>
+ </message>
+ <message>
+ <source>Save All</source>
+ <translation>Gardar todo</translation>
+ </message>
+ <message>
+ <source>Abort</source>
+ <translation>Abortar</translation>
+ </message>
+ <message>
+ <source>Retry</source>
+ <translation>Tentar de novo</translation>
+ </message>
+ <message>
+ <source>Ignore</source>
+ <translation>Ignorar</translation>
+ </message>
+ <message>
+ <source>Restore Defaults</source>
+ <translation>Repor as predefinicións</translation>
+ </message>
+</context>
+<context>
+ <name>QMessageBox</name>
+ <message>
+ <source>Show Details...</source>
+ <translation>Mostrar os detalles...</translation>
+ </message>
+ <message>
+ <source>Hide Details...</source>
+ <translation>Agochar os detalles...</translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation>Aceptar</translation>
+ </message>
+ <message>
+ <source>Help</source>
+ <translation>Axuda</translation>
+ </message>
+ <message>
+ <source>&lt;h3&gt;About Qt&lt;/h3&gt;&lt;p&gt;This program uses Qt version %1.&lt;/p&gt;</source>
+ <translation>&lt;h3&gt;Acerca de Qt&lt;/h3&gt;&lt;p&gt;Este programa emprega a versión %1 de Qt.&lt;/p&gt;</translation>
+ </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>&lt;p&gt;Qt é un toolkit de C++ para o desenvolvemento de programas multiplataforma.&lt;/p&gt; &lt;p&gt;Qt fornece portabilidade entre MS&amp;nbsp;Windows, Mac&amp;nbsp;OS&amp;nbsp;X, Linux e as principais variantes comerciais de Unix cun único código fonte. Qt tamén está dispoñíbel para dispositivos incrustados como Qt para Embedded Linux e Qt para Windows CE.&lt;/p&gt;
+&lt;p&gt;Qt está dispoñíbel en tres opcións de licenzas diferentes deseñadas para adaptarse ás necesidades dos diferentes usuarios.&lt;/p&gt;
+&lt;/p&gt;Qt distribuída sob o acordo de licenza comercial é adecuado para o desenvolvemento de software proprietario
+ou comercial onde non é preciso compartir ningún código fonte con terceiras partes ou que non poden cumprir os termos das licenzas GNU LGPL versión 2.1 nin da versión 3.0.&lt;/p&gt;
+&lt;p&gt;Qt sob a licenza GNU General Public License versión 2.1 é apropriada para o desenvolvemento de programas Qt (proprietario ou de fontes abertas) supoñendo que poda cumprir cos termos e condicións da licenza GNU GPL versión 2.1.&lt;/p&gt;
+&lt;p&gt;Qt sob a licenza GNU General Public License versión 3.0 é apropriada para o desenvolvemento de programas Qt onde desexe empregar tales programas en combinación con software suxeito aos termos da GNU GPL versión 3.0 ou onde desexe cumprir cos termos da GNU GPL versión 3.0.&lt;/p&gt;
+&lt;p&gt;Consulte &lt;a href=&quot;http://qt.nokia.com/products/licensing&quot;&gt;qt.nokia.com/products/licensing&lt;/a&gt; para ler un resumo das licenzas de Qt.&lt;/p&gt;
+&lt;p&gt;Copyright (C) 2010 Nokia Corporation ou as súas subsidiarias.&lt;/p&gt;
+&lt;p&gt;Qt é un produto de Nokia. Consulte &lt;a href=&quot;http://qt.nokia.com/&quot;&gt;qt.nokia.com&lt;/a&gt; para máis información.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>About Qt</source>
+ <translation>Acerca de Qt</translation>
+ </message>
+</context>
+<context>
+ <name>QDirModel</name>
+ <message>
+ <source>Name</source>
+ <translation>Nome</translation>
+ </message>
+ <message>
+ <source>Size</source>
+ <translation>Tamaño</translation>
+ </message>
+ <message>
+ <source>Kind</source>
+ <comment>Match OS X Finder</comment>
+ <translation>Tipo</translation>
+ </message>
+ <message>
+ <source>Type</source>
+ <comment>All other platforms</comment>
+ <translation>Tipo</translation>
+ </message>
+ <message>
+ <source>Date Modified</source>
+ <translation>Data de modificación</translation>
+ </message>
+</context>
+<context>
+ <name>QFileDialog</name>
+ <message>
+ <source>My Computer</source>
+ <translation>O meu ordenador</translation>
+ </message>
+ <message>
+ <source>Look in:</source>
+ <translation>Procurar en:</translation>
+ </message>
+ <message>
+ <source>Back</source>
+ <translation>Atrás</translation>
+ </message>
+ <message>
+ <source>Go back</source>
+ <translation>Recuar</translation>
+ </message>
+ <message>
+ <source>Forward</source>
+ <translation>Adiante</translation>
+ </message>
+ <message>
+ <source>Go forward</source>
+ <translation>Avanzar</translation>
+ </message>
+ <message>
+ <source>Parent Directory</source>
+ <translation>Cartafol superior</translation>
+ </message>
+ <message>
+ <source>Go to the parent directory</source>
+ <translation>Ir ao directorio superior</translation>
+ </message>
+ <message>
+ <source>Create New Folder</source>
+ <translation>Crear un cartafol novo</translation>
+ </message>
+ <message>
+ <source>Create a New Folder</source>
+ <translation>Crea un cartafol novo</translation>
+ </message>
+ <message>
+ <source>List View</source>
+ <translation>Vista de lista</translation>
+ </message>
+ <message>
+ <source>Change to list view mode</source>
+ <translation>Troca para o modo de vista en lista</translation>
+ </message>
+ <message>
+ <source>Detail View</source>
+ <translation>Vista de detalles</translation>
+ </message>
+ <message>
+ <source>Change to detail view mode</source>
+ <translation>Troca para o modo de vista de detalles</translation>
+ </message>
+ <message>
+ <source>Files of type:</source>
+ <translation>Ficheiros do tipo:</translation>
+ </message>
+ <message>
+ <source>Find Directory</source>
+ <translation>Procurar un cartafol</translation>
+ </message>
+ <message>
+ <source>Open</source>
+ <translation>Abrir</translation>
+ </message>
+ <message>
+ <source>Save As</source>
+ <translation>Gardar como</translation>
+ </message>
+ <message>
+ <source>All Files (*)</source>
+ <translation>Todos os ficheiros (*)</translation>
+ </message>
+ <message>
+ <source>Show </source>
+ <translation>Mostrar</translation>
+ </message>
+ <message>
+ <source>&amp;Rename</source>
+ <translation>&amp;Mudar o nome</translation>
+ </message>
+ <message>
+ <source>&amp;Delete</source>
+ <translation>&amp;Borrar</translation>
+ </message>
+ <message>
+ <source>Show &amp;hidden files</source>
+ <translation>Mostrar os ficheiros &amp;acochados</translation>
+ </message>
+ <message>
+ <source>&amp;New Folder</source>
+ <translation>&amp;Novo cartafol</translation>
+ </message>
+ <message>
+ <source>Directory:</source>
+ <translation>Cartafol:</translation>
+ </message>
+ <message>
+ <source>File &amp;name:</source>
+ <translation>&amp;Nome do ficheiro:</translation>
+ </message>
+ <message>
+ <source>&amp;Open</source>
+ <translation>&amp;Abrir</translation>
+ </message>
+ <message>
+ <source>&amp;Save</source>
+ <translation>&amp;Gardar</translation>
+ </message>
+ <message>
+ <source>Directories</source>
+ <translation>Cartafoles</translation>
+ </message>
+ <message>
+ <source>&amp;Choose</source>
+ <translation>&amp;Escoller</translation>
+ </message>
+ <message>
+ <source>%1
+Directory not found.
+Please verify the correct directory name was given.</source>
+ <translation>%1
+Non se achou o cartafol.
+Verifique que se indicase o nome correcto.</translation>
+ </message>
+ <message>
+ <source>%1 already exists.
+Do you want to replace it?</source>
+ <translation>Xa existe %1.
+Desexa substituílo?</translation>
+ </message>
+ <message>
+ <source>%1
+File not found.
+Please verify the correct file name was given.</source>
+ <translation>%1
+Non se atopou o ficheiro.
+Verifique que se indicase o nome de ficheiro correcto.</translation>
+ </message>
+ <message>
+ <source>New Folder</source>
+ <translation>Novo cartafol</translation>
+ </message>
+ <message>
+ <source>&apos;%1&apos; is write protected.
+Do you want to delete it anyway?</source>
+ <translation>«%1» está protexido contra escrita.
+Desexa aínda así borralo?</translation>
+ </message>
+ <message>
+ <source>Are sure you want to delete &apos;%1&apos;?</source>
+ <translation>Desexa realmente borrar «%1»?</translation>
+ </message>
+ <message>
+ <source>Could not delete directory.</source>
+ <translation>Non foi posíbel borrar o cartafol.</translation>
+ </message>
+ <message>
+ <source>Recent Places</source>
+ <translation>Lugares recentes</translation>
+ </message>
+ <message>
+ <source>All Files (*.*)</source>
+ <translation>Todos os ficheiros (*.*)</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>Eliminar</translation>
+ </message>
+ <message>
+ <source>Drive</source>
+ <translation>Dispositivo</translation>
+ </message>
+ <message>
+ <source>File</source>
+ <translation>Ficheiro</translation>
+ </message>
+ <message>
+ <source>File Folder</source>
+ <comment>Match Windows Explorer</comment>
+ <translation>Cartafol</translation>
+ </message>
+ <message>
+ <source>Folder</source>
+ <comment>All other platforms</comment>
+ <translation>Cartafol</translation>
+ </message>
+ <message>
+ <source>Alias</source>
+ <comment>Mac OS X Finder</comment>
+ <translation>Atallo</translation>
+ </message>
+ <message>
+ <source>Shortcut</source>
+ <comment>All other platforms</comment>
+ <translation>Atallo</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <translation>Descoñecido</translation>
+ </message>
+</context>
+<context>
+ <name>QFileSystemModel</name>
+ <message>
+ <source>%1 byte(s)</source>
+ <translation>%1 byte(s)</translation>
+ </message>
+ <message>
+ <source>%1 TB</source>
+ <translation>%1 TB</translation>
+ </message>
+ <message>
+ <source>%1 GB</source>
+ <translation>%1 GB</translation>
+ </message>
+ <message>
+ <source>%1 MB</source>
+ <translation>%1 MB</translation>
+ </message>
+ <message>
+ <source>%1 KB</source>
+ <translation>%1 KB</translation>
+ </message>
+ <message>
+ <source>%1 bytes</source>
+ <translation>%1 bytes</translation>
+ </message>
+ <message>
+ <source>Invalid filename</source>
+ <translation>O nome do ficheiro non é válido</translation>
+ </message>
+ <message>
+ <source>&lt;b&gt;The name &quot;%1&quot; can not be used.&lt;/b&gt;&lt;p&gt;Try using another name, with fewer characters or no punctuations marks.</source>
+ <translation>&lt;b&gt;O nome «%1» non pode ser usado.&lt;/b&gt;&lt;p&gt;Probe con outro nome, máis curto ou sen signos de puntuación.</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Nome</translation>
+ </message>
+ <message>
+ <source>Size</source>
+ <translation>Tamaño</translation>
+ </message>
+ <message>
+ <source>Kind</source>
+ <comment>Match OS X Finder</comment>
+ <translation>Tipo</translation>
+ </message>
+ <message>
+ <source>Type</source>
+ <comment>All other platforms</comment>
+ <translation>Tipo</translation>
+ </message>
+ <message>
+ <source>Date Modified</source>
+ <translation>Data de modificación</translation>
+ </message>
+ <message>
+ <source>My Computer</source>
+ <translation>O meu ordenador</translation>
+ </message>
+ <message>
+ <source>Computer</source>
+ <translation>Ordenador</translation>
+ </message>
+</context>
+<context>
+ <name>QDockWidget</name>
+ <message>
+ <source>Close</source>
+ <translation>Pechar</translation>
+ </message>
+ <message>
+ <source>Dock</source>
+ <translation>Acoplar</translation>
+ </message>
+ <message>
+ <source>Float</source>
+ <translation>Flutuante</translation>
+ </message>
+</context>
+<context>
+ <name>QErrorMessage</name>
+ <message>
+ <source>Debug Message:</source>
+ <translation>Mensaxe de depuración:</translation>
+ </message>
+ <message>
+ <source>Warning:</source>
+ <translation>Aviso:</translation>
+ </message>
+ <message>
+ <source>Fatal Error:</source>
+ <translation>Erro fatal:</translation>
+ </message>
+ <message>
+ <source>&amp;Show this message again</source>
+ <translation>&amp;Mostrar esta mensaxe de novo</translation>
+ </message>
+ <message>
+ <source>&amp;OK</source>
+ <translation>&amp;Aceptar</translation>
+ </message>
+</context>
+<context>
+ <name>QFile</name>
+ <message>
+ <source>Destination file exists</source>
+ <translation>O ficheiro de destino xa existe</translation>
+ </message>
+ <message>
+ <source>Will not rename sequential file using block copy</source>
+ <translation>Non se mudará o nome do ficheiro secuencial empregando a copia de bloques</translation>
+ </message>
+ <message>
+ <source>Cannot remove source file</source>
+ <translation>Non é posíbel eliminar o ficheiro de orixe</translation>
+ </message>
+ <message>
+ <source>Cannot open %1 for input</source>
+ <translation>Non é posíbel abrir %1 como entrada</translation>
+ </message>
+ <message>
+ <source>Cannot open for output</source>
+ <translation>Non foi posíbel abrir o ficheiro de saída</translation>
+ </message>
+ <message>
+ <source>Failure to write block</source>
+ <translation>Non foi posíbel escribir o bloque</translation>
+ </message>
+ <message>
+ <source>Cannot create %1 for output</source>
+ <translation>Non foi posíbel crear %1 para a saída</translation>
+ </message>
+</context>
+<context>
+ <name>QFontDatabase</name>
+ <message>
+ <source>Normal</source>
+ <translation>Normal</translation>
+ </message>
+ <message>
+ <source>Bold</source>
+ <translation>Negriña</translation>
+ </message>
+ <message>
+ <source>Demi Bold</source>
+ <translation>Demi negriña</translation>
+ </message>
+ <message>
+ <source>Black</source>
+ <translation>Escura</translation>
+ </message>
+ <message>
+ <source>Demi</source>
+ <translation>Demi</translation>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation>Clara</translation>
+ </message>
+ <message>
+ <source>Italic</source>
+ <translation>Cursiva</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>Oblicua</translation>
+ </message>
+ <message>
+ <source>Any</source>
+ <translation>Calquera</translation>
+ </message>
+ <message>
+ <source>Latin</source>
+ <translation>Latino</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation>Grego</translation>
+ </message>
+ <message>
+ <source>Cyrillic</source>
+ <translation>Cirílico</translation>
+ </message>
+ <message>
+ <source>Armenian</source>
+ <translation>Armenio</translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation>Hebreo</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation>Árabe</translation>
+ </message>
+ <message>
+ <source>Syriac</source>
+ <translation>Sirio</translation>
+ </message>
+ <message>
+ <source>Thaana</source>
+ <translation>Thaana</translation>
+ </message>
+ <message>
+ <source>Devanagari</source>
+ <translation>Devanagárico</translation>
+ </message>
+ <message>
+ <source>Bengali</source>
+ <translation>Bengalí</translation>
+ </message>
+ <message>
+ <source>Gurmukhi</source>
+ <translation>Gurmukhi</translation>
+ </message>
+ <message>
+ <source>Gujarati</source>
+ <translation>Guxaratí</translation>
+ </message>
+ <message>
+ <source>Oriya</source>
+ <translation>Orixa</translation>
+ </message>
+ <message>
+ <source>Tamil</source>
+ <translation>Tamil</translation>
+ </message>
+ <message>
+ <source>Telugu</source>
+ <translation>Telugu</translation>
+ </message>
+ <message>
+ <source>Kannada</source>
+ <translation>Kannada</translation>
+ </message>
+ <message>
+ <source>Malayalam</source>
+ <translation>Malayalam</translation>
+ </message>
+ <message>
+ <source>Sinhala</source>
+ <translation>Sinhala</translation>
+ </message>
+ <message>
+ <source>Thai</source>
+ <translation>Tailandés</translation>
+ </message>
+ <message>
+ <source>Lao</source>
+ <translation>Lao</translation>
+ </message>
+ <message>
+ <source>Tibetan</source>
+ <translation>Tibetano</translation>
+ </message>
+ <message>
+ <source>Myanmar</source>
+ <translation>Myanmar</translation>
+ </message>
+ <message>
+ <source>Georgian</source>
+ <translation>Xeorxiano</translation>
+ </message>
+ <message>
+ <source>Khmer</source>
+ <translation>Khmer</translation>
+ </message>
+ <message>
+ <source>Simplified Chinese</source>
+ <translation>Chinés simplificado</translation>
+ </message>
+ <message>
+ <source>Traditional Chinese</source>
+ <translation>Chinés tradicional</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation>Xaponés</translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation>Coreano</translation>
+ </message>
+ <message>
+ <source>Vietnamese</source>
+ <translation>Vietnamita</translation>
+ </message>
+ <message>
+ <source>Symbol</source>
+ <translation>Símbolo</translation>
+ </message>
+ <message>
+ <source>Ogham</source>
+ <translation>Ogham</translation>
+ </message>
+ <message>
+ <source>Runic</source>
+ <translation>Runas</translation>
+ </message>
+ <message>
+ <source>N&apos;Ko</source>
+ <translation>N&apos;Ko</translation>
+ </message>
+</context>
+<context>
+ <name>QFontDialog</name>
+ <message>
+ <source>Select Font</source>
+ <translation>Seleccionar o tipo de letra</translation>
+ </message>
+ <message>
+ <source>&amp;Font</source>
+ <translation>Tipo de &amp;letra</translation>
+ </message>
+ <message>
+ <source>Font st&amp;yle</source>
+ <translation>&amp;Estilo de letra</translation>
+ </message>
+ <message>
+ <source>&amp;Size</source>
+ <translation>&amp;Tamaño</translation>
+ </message>
+ <message>
+ <source>Effects</source>
+ <translation>Efectos</translation>
+ </message>
+ <message>
+ <source>Stri&amp;keout</source>
+ <translation>&amp;Riscada</translation>
+ </message>
+ <message>
+ <source>&amp;Underline</source>
+ <translation>&amp;Subraiada</translation>
+ </message>
+ <message>
+ <source>Sample</source>
+ <translation>Mostra</translation>
+ </message>
+ <message>
+ <source>Wr&amp;iting System</source>
+ <translation>Sistema de es&amp;crita</translation>
+ </message>
+</context>
+<context>
+ <name>QFtp</name>
+ <message>
+ <source>Not connected</source>
+ <translation>Non conectado</translation>
+ </message>
+ <message>
+ <source>Host %1 not found</source>
+ <translation>Non se atopou o servidor %1</translation>
+ </message>
+ <message>
+ <source>Connection refused to host %1</source>
+ <translation>Rexeitouse a conexión co servidor %1</translation>
+ </message>
+ <message>
+ <source>Connection timed out to host %1</source>
+ <translation>A conexión co servidor %1 esgotou o tempo límite</translation>
+ </message>
+ <message>
+ <source>Connected to host %1</source>
+ <translation>Conectado co servidor %1</translation>
+ </message>
+ <message>
+ <source>Connection refused for data connection</source>
+ <translation>Rexeitouse a conexión para conexión de datos</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Erro descoñecido</translation>
+ </message>
+ <message>
+ <source>Connecting to host failed:
+%1</source>
+ <translation>Fallou a conexión co servidor:
+%1</translation>
+ </message>
+ <message>
+ <source>Login failed:
+%1</source>
+ <translation>Fallou a autenticación:
+%1</translation>
+ </message>
+ <message>
+ <source>Listing directory failed:
+%1</source>
+ <translation>Fallou a listaxe do cartafol:
+%1</translation>
+ </message>
+ <message>
+ <source>Changing directory failed:
+%1</source>
+ <translation>Fallou o troco de cartafol:
+%1</translation>
+ </message>
+ <message>
+ <source>Downloading file failed:
+%1</source>
+ <translation>Fallou a obtención do ficheiro:
+%1</translation>
+ </message>
+ <message>
+ <source>Uploading file failed:
+%1</source>
+ <translation>Fallou o envío do ficheiros:
+%1</translation>
+ </message>
+ <message>
+ <source>Removing file failed:
+%1</source>
+ <translation>Fallou a eliminación do ficheiro:
+%1</translation>
+ </message>
+ <message>
+ <source>Creating directory failed:
+%1</source>
+ <translation>Fallou a creación do cartafol:
+%1</translation>
+ </message>
+ <message>
+ <source>Removing directory failed:
+%1</source>
+ <translation>Fallou a eliminación do cartafol:
+%1</translation>
+ </message>
+ <message>
+ <source>Connection closed</source>
+ <translation>A conexión pechouse</translation>
+ </message>
+ <message>
+ <source>Host %1 found</source>
+ <translation>Atopouse o servidor %1</translation>
+ </message>
+ <message>
+ <source>Connection to %1 closed</source>
+ <translation>Pechouse a conexión con %1</translation>
+ </message>
+ <message>
+ <source>Host found</source>
+ <translation>Atopouse un servidor</translation>
+ </message>
+ <message>
+ <source>Connected to host</source>
+ <translation>Conectado co servidor</translation>
+ </message>
+</context>
+<context>
+ <name>QHostInfo</name>
+ <message>
+ <source>No host name given</source>
+ <translation>Non se indicou o nome do servidor</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Erro descoñecido</translation>
+ </message>
+</context>
+<context>
+ <name>QHostInfoAgent</name>
+ <message>
+ <source>No host name given</source>
+ <translation>Non se indicou o nome do servidor</translation>
+ </message>
+ <message>
+ <source>Invalid hostname</source>
+ <translation>O nome do servidor non é válido</translation>
+ </message>
+ <message>
+ <source>Unknown address type</source>
+ <translation>Tipo de enderezo descoñecido</translation>
+ </message>
+ <message>
+ <source>Host not found</source>
+ <translation>Non se atopou o servidor</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Erro descoñecido</translation>
+ </message>
+</context>
+<context>
+ <name>QHttpSocketEngine</name>
+ <message>
+ <source>Did not receive HTTP response from proxy</source>
+ <translation>Non se recibiu a resposta HTTP do proxy</translation>
+ </message>
+ <message>
+ <source>Error parsing authentication request from proxy</source>
+ <translation>Aconteceu un erro ao procesar o pedido de autenticación do proxy</translation>
+ </message>
+ <message>
+ <source>Authentication required</source>
+ <translation>Requírese de autenticación</translation>
+ </message>
+ <message>
+ <source>Proxy denied connection</source>
+ <translation>O proxy negou a conexión</translation>
+ </message>
+ <message>
+ <source>Error communicating with HTTP proxy</source>
+ <translation>Aconteceu un erro ao comunicar co proxy HTTP</translation>
+ </message>
+ <message>
+ <source>Proxy server not found</source>
+ <translation>Non se atopou o servidor proxy</translation>
+ </message>
+ <message>
+ <source>Proxy connection refused</source>
+ <translation>Rexeitouse a conexión co proxy</translation>
+ </message>
+ <message>
+ <source>Proxy server connection timed out</source>
+ <translation>A conexión co servidor proxy esgotou o tempo-límite</translation>
+ </message>
+ <message>
+ <source>Proxy connection closed prematurely</source>
+ <translation>A conexión co proxy pechouse antes de tempo</translation>
+ </message>
+</context>
+<context>
+ <name>QIBaseDriver</name>
+ <message>
+ <source>Error opening database</source>
+ <translation>Aconteceu un erro ao abrir a base de datos</translation>
+ </message>
+ <message>
+ <source>Could not start transaction</source>
+ <translation>Non foi posíbel comezar a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to commit transaction</source>
+ <translation>Non foi posíbel entregar a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to rollback transaction</source>
+ <translation>Non foi posíbel anular a transacción</translation>
+ </message>
+</context>
+<context>
+ <name>QIBaseResult</name>
+ <message>
+ <source>Unable to create BLOB</source>
+ <translation>Non foi posíbel crear o BLOB</translation>
+ </message>
+ <message>
+ <source>Unable to write BLOB</source>
+ <translation>Non foi posíbel escribir o BLOB</translation>
+ </message>
+ <message>
+ <source>Unable to open BLOB</source>
+ <translation>Non foi posíbel abrir o BLOB</translation>
+ </message>
+ <message>
+ <source>Unable to read BLOB</source>
+ <translation>Non foi posíbel ler o BLOB</translation>
+ </message>
+ <message>
+ <source>Could not find array</source>
+ <translation>Non foi posíbel atopar o array</translation>
+ </message>
+ <message>
+ <source>Could not get array data</source>
+ <translation>Non foi posíbel obter o array de datos</translation>
+ </message>
+ <message>
+ <source>Could not get query info</source>
+ <translation>Non foi posíbel obter a información da consulta</translation>
+ </message>
+ <message>
+ <source>Could not start transaction</source>
+ <translation>Non foi posíbel comezar a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to commit transaction</source>
+ <translation>Non foi posíbel entregar a transacción</translation>
+ </message>
+ <message>
+ <source>Could not allocate statement</source>
+ <translation>Non foi posíbel asignar memoria á sentenza</translation>
+ </message>
+ <message>
+ <source>Could not prepare statement</source>
+ <translation>Non foi posíbel preparar a sentenza</translation>
+ </message>
+ <message>
+ <source>Could not describe input statement</source>
+ <translation>Non foi posíbel describir a sentenza de entrada</translation>
+ </message>
+ <message>
+ <source>Could not describe statement</source>
+ <translation>Non foi posíbel describir a sentenza</translation>
+ </message>
+ <message>
+ <source>Unable to close statement</source>
+ <translation>Non foi posíbel pechar a sentenza</translation>
+ </message>
+ <message>
+ <source>Unable to execute query</source>
+ <translation>Non foi posíbel executar a consulta</translation>
+ </message>
+ <message>
+ <source>Could not fetch next item</source>
+ <translation>Non foi posíbel acadar o seguinte elemento</translation>
+ </message>
+ <message>
+ <source>Could not get statement info</source>
+ <translation>Non foi posíbel obter información da sentenza</translation>
+ </message>
+</context>
+<context>
+ <name>QIODevice</name>
+ <message>
+ <source>Permission denied</source>
+ <translation>Permiso negado</translation>
+ </message>
+ <message>
+ <source>Too many open files</source>
+ <translation>Demasiados ficheiros abertos</translation>
+ </message>
+ <message>
+ <source>No such file or directory</source>
+ <translation>Non existe ese ficheiro nin cartafol</translation>
+ </message>
+ <message>
+ <source>No space left on device</source>
+ <translation>Non queda espazo no dispositivo</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Erro descoñecido</translation>
+ </message>
+</context>
+<context>
+ <name>QInputContext</name>
+ <message>
+ <source>XIM</source>
+ <translation>XIM</translation>
+ </message>
+ <message>
+ <source>FEP</source>
+ <translation>FEP</translation>
+ </message>
+ <message>
+ <source>XIM input method</source>
+ <translation>Método de entrada XIM</translation>
+ </message>
+ <message>
+ <source>Windows input method</source>
+ <translation>Método de entrada de Windows</translation>
+ </message>
+ <message>
+ <source>Mac OS X input method</source>
+ <translation>Método de entrada de Mac OS X</translation>
+ </message>
+ <message>
+ <source>S60 FEP input method</source>
+ <translation>Método de entrada FEP de S60</translation>
+ </message>
+</context>
+<context>
+ <name>QInputDialog</name>
+ <message>
+ <source>Enter a value:</source>
+ <translation>Introduza un valor:</translation>
+ </message>
+</context>
+<context>
+ <name>QLibrary</name>
+ <message>
+ <source>Could not mmap &apos;%1&apos;: %2</source>
+ <translation>Non foi posíbel mmap «%1»: %2</translation>
+ </message>
+ <message>
+ <source>Plugin verification data mismatch in &apos;%1&apos;</source>
+ <translation>Erro de concordancia na verificación dos datos da extensión en «%1»</translation>
+ </message>
+ <message>
+ <source>Could not unmap &apos;%1&apos;: %2</source>
+ <translation>Non foi posíbel unmap «%1»: %2</translation>
+ </message>
+ <message>
+ <source>The shared library was not found.</source>
+ <translation>Non se atopou a biblioteca compartida.</translation>
+ </message>
+ <message>
+ <source>The file &apos;%1&apos; is not a valid Qt plugin.</source>
+ <translation>O ficheiro «%1» non é unha extensión válida de Qt.</translation>
+ </message>
+ <message>
+ <source>The plugin &apos;%1&apos; uses incompatible Qt library. (%2.%3.%4) [%5]</source>
+ <translation>A extensión «%1» utiliza unha biblioteca Qt non compatíbel. (%2.%3.%4) [%5]</translation>
+ </message>
+ <message>
+ <source>The plugin &apos;%1&apos; uses incompatible Qt library. Expected build key &quot;%2&quot;, got &quot;%3&quot;</source>
+ <translation>A extensión «%1» utiliza unha biblioteca Qt non compatíbel. Agardábase a
+chave de compilación «%2», obtívose a «%3»</translation>
+ </message>
+ <message>
+ <source>The plugin &apos;%1&apos; uses incompatible Qt library. (Cannot mix debug and release libraries.)</source>
+ <translation>A extensión «%1» utiliza unha biblioteca Qt non compatíbel (Non é posíbel
+misturar as bibliotecas de depuración coas publicadas).</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Erro descoñecido</translation>
+ </message>
+ <message>
+ <source>Cannot load library %1: %2</source>
+ <translation>Non foi posíbel cargar a biblioteca %1: %2</translation>
+ </message>
+ <message>
+ <source>Cannot unload library %1: %2</source>
+ <translation>Non foi posíbel descargar a biblioteca %1: %2</translation>
+ </message>
+ <message>
+ <source>Cannot resolve symbol &quot;%1&quot; in %2: %3</source>
+ <translation>Non é posíbel resolver o símbolo «%1» en %2: %3</translation>
+ </message>
+</context>
+<context>
+ <name>QLineEdit</name>
+ <message>
+ <source>&amp;Undo</source>
+ <translation>&amp;Desfacer</translation>
+ </message>
+ <message>
+ <source>&amp;Redo</source>
+ <translation>&amp;Refacer</translation>
+ </message>
+ <message>
+ <source>Cu&amp;t</source>
+ <translation>Cor&amp;tar</translation>
+ </message>
+ <message>
+ <source>&amp;Copy</source>
+ <translation>&amp;Copiar</translation>
+ </message>
+ <message>
+ <source>&amp;Paste</source>
+ <translation>A&amp;pegar</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>Borrar</translation>
+ </message>
+ <message>
+ <source>Select All</source>
+ <translation>Escoller todo</translation>
+ </message>
+</context>
+<context>
+ <name>QLocalServer</name>
+ <message>
+ <source>%1: Name error</source>
+ <translation>%1: Erro de nome</translation>
+ </message>
+ <message>
+ <source>%1: Permission denied</source>
+ <translation>%1: Permiso negado</translation>
+ </message>
+ <message>
+ <source>%1: Address in use</source>
+ <translation>%1: O enderezo xa está a ser empregado</translation>
+ </message>
+ <message>
+ <source>%1: Unknown error %2</source>
+ <translation>%1: Erro descoñecido %2</translation>
+ </message>
+</context>
+<context>
+ <name>QLocalSocket</name>
+ <message>
+ <source>%1: Connection refused</source>
+ <translation>%1: Rexeitouse a conexión</translation>
+ </message>
+ <message>
+ <source>%1: Remote closed</source>
+ <translation>%1: Pechouse de xeito remoto</translation>
+ </message>
+ <message>
+ <source>%1: Invalid name</source>
+ <translation>%1: Nome non válido</translation>
+ </message>
+ <message>
+ <source>%1: Socket access error</source>
+ <translation>%1: Erro de acceso ao socket</translation>
+ </message>
+ <message>
+ <source>%1: Socket resource error</source>
+ <translation>%1: Erro do recurso do socket</translation>
+ </message>
+ <message>
+ <source>%1: Socket operation timed out</source>
+ <translation>%1: A operación do socket esgotou o tempo-límite</translation>
+ </message>
+ <message>
+ <source>%1: Datagram too large</source>
+ <translation>%1: Datagrama grande de máis</translation>
+ </message>
+ <message>
+ <source>%1: Connection error</source>
+ <translation>%1: Erro na conexión</translation>
+ </message>
+ <message>
+ <source>%1: The socket operation is not supported</source>
+ <translation>%1: A operación do socket non está soportada</translation>
+ </message>
+ <message>
+ <source>%1: Unknown error</source>
+ <translation>%1: Erro descoñecido</translation>
+ </message>
+ <message>
+ <source>%1: Unknown error %2</source>
+ <translation>%1: Erro descoñecido %2</translation>
+ </message>
+</context>
+<context>
+ <name>QMYSQLDriver</name>
+ <message>
+ <source>Unable to open database &apos;</source>
+ <translation>Non foi posíbel abrir a base de datos «</translation>
+ </message>
+ <message>
+ <source>Unable to connect</source>
+ <translation>Non foi posíbel conectar</translation>
+ </message>
+ <message>
+ <source>Unable to begin transaction</source>
+ <translation>Non foi posíbel comezar a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to commit transaction</source>
+ <translation>Non foi posíbel entregar a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to rollback transaction</source>
+ <translation>Non foi posíbel anular a transacción</translation>
+ </message>
+</context>
+<context>
+ <name>QMYSQLResult</name>
+ <message>
+ <source>Unable to fetch data</source>
+ <translation>Non foi posíbel acadar os datos</translation>
+ </message>
+ <message>
+ <source>Unable to execute query</source>
+ <translation>Non foi posíbel executar a consulta</translation>
+ </message>
+ <message>
+ <source>Unable to store result</source>
+ <translation>Non foi posíbel gardar os resultados</translation>
+ </message>
+ <message>
+ <source>Unable to execute next query</source>
+ <translation>Non foi posíbel executar a seguinte consulta</translation>
+ </message>
+ <message>
+ <source>Unable to store next result</source>
+ <translation>Non foi posíbel gardar o seguinte resultado</translation>
+ </message>
+ <message>
+ <source>Unable to prepare statement</source>
+ <translation>Non foi posíbel preparar a sentenza</translation>
+ </message>
+ <message>
+ <source>Unable to reset statement</source>
+ <translation>Non foi posíbel reiniciar a sentenza</translation>
+ </message>
+ <message>
+ <source>Unable to bind value</source>
+ <translation>Non foi posíbel asociar o valor</translation>
+ </message>
+ <message>
+ <source>Unable to execute statement</source>
+ <translation>Non foi posíbel executar a sentenza</translation>
+ </message>
+ <message>
+ <source>Unable to bind outvalues</source>
+ <translation>Non foi posíbel asociar os outvalues</translation>
+ </message>
+ <message>
+ <source>Unable to store statement results</source>
+ <translation>Non foi posíbel gardar os resultados da sentenza</translation>
+ </message>
+</context>
+<context>
+ <name>QMdiArea</name>
+ <message>
+ <source>(Untitled)</source>
+ <translation>(Sen título)</translation>
+ </message>
+</context>
+<context>
+ <name>QMdiSubWindow</name>
+ <message>
+ <source>- [%1]</source>
+ <translation>- [%1]</translation>
+ </message>
+ <message>
+ <source>%1 - [%2]</source>
+ <translation>%1 - [%2]</translation>
+ </message>
+ <message>
+ <source>Minimize</source>
+ <translation>Minimizar</translation>
+ </message>
+ <message>
+ <source>Maximize</source>
+ <translation>Maximizar</translation>
+ </message>
+ <message>
+ <source>Unshade</source>
+ <translation>Despregar</translation>
+ </message>
+ <message>
+ <source>Shade</source>
+ <translation>Pregar</translation>
+ </message>
+ <message>
+ <source>Restore Down</source>
+ <translation>Restaurar para abaixo</translation>
+ </message>
+ <message>
+ <source>Restore</source>
+ <translation>Restaurar</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>Pechar</translation>
+ </message>
+ <message>
+ <source>Help</source>
+ <translation>Axuda</translation>
+ </message>
+ <message>
+ <source>Menu</source>
+ <translation>Menú</translation>
+ </message>
+ <message>
+ <source>&amp;Restore</source>
+ <translation>&amp;Restaurar</translation>
+ </message>
+ <message>
+ <source>&amp;Move</source>
+ <translation>&amp;Mover</translation>
+ </message>
+ <message>
+ <source>&amp;Size</source>
+ <translation>&amp;Tamaño</translation>
+ </message>
+ <message>
+ <source>Mi&amp;nimize</source>
+ <translation>Mi&amp;nimizar</translation>
+ </message>
+ <message>
+ <source>Ma&amp;ximize</source>
+ <translation>Ma&amp;ximizar</translation>
+ </message>
+ <message>
+ <source>Stay on &amp;Top</source>
+ <translation>Manter &amp;enriba</translation>
+ </message>
+ <message>
+ <source>&amp;Close</source>
+ <translation>&amp;Pechar</translation>
+ </message>
+</context>
+<context>
+ <name>QMenu</name>
+ <message>
+ <source>Close</source>
+ <translation>Pechar</translation>
+ </message>
+ <message>
+ <source>Open</source>
+ <translation>Abrir</translation>
+ </message>
+ <message>
+ <source>Execute</source>
+ <translation>Executar</translation>
+ </message>
+</context>
+<context>
+ <name>QMenuBar</name>
+ <message>
+ <source>Actions</source>
+ <translation>Accións</translation>
+ </message>
+</context>
+<context>
+ <name>QMultiInputContext</name>
+ <message>
+ <source>Select IM</source>
+ <translation>Escolla o método de entrada</translation>
+ </message>
+</context>
+<context>
+ <name>QMultiInputContextPlugin</name>
+ <message>
+ <source>Multiple input method switcher</source>
+ <translation>Selector de múltiplos métodos de entrada</translation>
+ </message>
+ <message>
+ <source>Multiple input method switcher that uses the context menu of the text widgets</source>
+ <translation>Selector entre métodos de entrada que usa o menú contextual dos widgets de
+texto</translation>
+ </message>
+</context>
+<context>
+ <name>QNativeSocketEngine</name>
+ <message>
+ <source>Unable to initialize non-blocking socket</source>
+ <translation>Non foi posíbel inicializar o socket non bloqueante</translation>
+ </message>
+ <message>
+ <source>Unable to initialize broadcast socket</source>
+ <translation>Non foi posíbel inicializar o socket de broadcast</translation>
+ </message>
+ <message>
+ <source>Attempt to use IPv6 socket on a platform with no IPv6 support</source>
+ <translation>Tentouse usar soporte de socket IPv6 nunha plataforma en soporte de IPv6</translation>
+ </message>
+ <message>
+ <source>The remote host closed the connection</source>
+ <translation>O servidor remoto pechou a conexión</translation>
+ </message>
+ <message>
+ <source>Network operation timed out</source>
+ <translation>A operación de rede esgotou o tempo-límite</translation>
+ </message>
+ <message>
+ <source>Out of resources</source>
+ <translation>Esgotáronse os recursos</translation>
+ </message>
+ <message>
+ <source>Unsupported socket operation</source>
+ <translation>Operación de socket non soportada</translation>
+ </message>
+ <message>
+ <source>Protocol type not supported</source>
+ <translation>Tipo de protocolo non soportado</translation>
+ </message>
+ <message>
+ <source>Invalid socket descriptor</source>
+ <translation>Descritor de socket non válido</translation>
+ </message>
+ <message>
+ <source>Host unreachable</source>
+ <translation>Non foi posíbel acadar o servidor</translation>
+ </message>
+ <message>
+ <source>Network unreachable</source>
+ <translation>Non foi posíbel acadar a rede</translation>
+ </message>
+ <message>
+ <source>Permission denied</source>
+ <translation>Permiso negado</translation>
+ </message>
+ <message>
+ <source>Connection timed out</source>
+ <translation>A conexión esgotou o tempo-límite</translation>
+ </message>
+ <message>
+ <source>Connection refused</source>
+ <translation>A conexión foi rexeitada</translation>
+ </message>
+ <message>
+ <source>The bound address is already in use</source>
+ <translation>O enderezo de conexión xa está en uso</translation>
+ </message>
+ <message>
+ <source>The address is not available</source>
+ <translation>O enderezo non está dispoñíbel</translation>
+ </message>
+ <message>
+ <source>The address is protected</source>
+ <translation>O enderezo está protexido</translation>
+ </message>
+ <message>
+ <source>Datagram was too large to send</source>
+ <translation>O datagrama é grande de máis para envialo</translation>
+ </message>
+ <message>
+ <source>Unable to send a message</source>
+ <translation>Non foi posíbel enviar unha mensaxe</translation>
+ </message>
+ <message>
+ <source>Unable to receive a message</source>
+ <translation>Non foi posíbel recibir unha mensaxe</translation>
+ </message>
+ <message>
+ <source>Unable to write</source>
+ <translation>Non foi posíbel escribir</translation>
+ </message>
+ <message>
+ <source>Network error</source>
+ <translation>Erro de rede</translation>
+ </message>
+ <message>
+ <source>Another socket is already listening on the same port</source>
+ <translation>Xa hai outro socket a escoitar o mesmo porto</translation>
+ </message>
+ <message>
+ <source>Operation on non-socket</source>
+ <translation>Operación nun non socket</translation>
+ </message>
+ <message>
+ <source>The proxy type is invalid for this operation</source>
+ <translation>O tipo de proxy non é válido para esta operación</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Erro descoñecido</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkAccessCacheBackend</name>
+ <message>
+ <source>Error opening %1</source>
+ <translation>Aconteceu un erro ao abrir %1</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkAccessDataBackend</name>
+ <message>
+ <source>Operation not supported on %1</source>
+ <translation>Operación non soportada en %1</translation>
+ </message>
+ <message>
+ <source>Invalid URI: %1</source>
+ <translation>URI non válida: %1</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkAccessDebugPipeBackend</name>
+ <message>
+ <source>Write error writing to %1: %2</source>
+ <translation>Aconteceu un erro de escrita ao escribir en %1: %2</translation>
+ </message>
+ <message>
+ <source>Socket error on %1: %2</source>
+ <translation>Aconteceu un erro de socket en %1: %2</translation>
+ </message>
+ <message>
+ <source>Remote host closed the connection prematurely on %1</source>
+ <translation>O servidor remoto pechou prematuramente a conexión en %1</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkAccessFileBackend</name>
+ <message>
+ <source>Request for opening non-local file %1</source>
+ <translation>Pedido de abertura do ficheiro non local %1</translation>
+ </message>
+ <message>
+ <source>Cannot open %1: Path is a directory</source>
+ <translation>Non é posíbel abrir %1: A rota é un directorio</translation>
+ </message>
+ <message>
+ <source>Error opening %1: %2</source>
+ <translation>Aconteceu un erro ao abrir %1: %2</translation>
+ </message>
+ <message>
+ <source>Write error writing to %1: %2</source>
+ <translation>Aconteceu un erro de escrita ao escribir en %1: %2</translation>
+ </message>
+ <message>
+ <source>Read error reading from %1: %2</source>
+ <translation>Aconteceu un erro ao ler en %1: %2</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkAccessFtpBackend</name>
+ <message>
+ <source>No suitable proxy found</source>
+ <translation>Non se atopou ningún proxy axeitado</translation>
+ </message>
+ <message>
+ <source>Cannot open %1: is a directory</source>
+ <translation>Non é posíbel abrir %1: é un directorio</translation>
+ </message>
+ <message>
+ <source>Logging in to %1 failed: authentication required</source>
+ <translation>Fallou o acceso a %1: debe autenticarse</translation>
+ </message>
+ <message>
+ <source>Error while downloading %1: %2</source>
+ <translation>Aconteceu un erro ao obter %1: %2</translation>
+ </message>
+ <message>
+ <source>Error while uploading %1: %2</source>
+ <translation>Aconteceu un erro ao enviar %1: %2</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkAccessHttpBackend</name>
+ <message>
+ <source>No suitable proxy found</source>
+ <translation>Non se atopou ningún proxy axeitado</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkReply</name>
+ <message>
+ <source>Error downloading %1 - server replied: %2</source>
+ <translation>Aconteceu un erro ao obter %1, o servidor respondeu: %2</translation>
+ </message>
+ <message>
+ <source>Protocol &quot;%1&quot; is unknown</source>
+ <translation>Non se coñece o protocolo «%1»</translation>
+ </message>
+ <message>
+ <source>Network session error.</source>
+ <translation>Erro da sesión de rede.</translation>
+ </message>
+ <message>
+ <source>Temporary network failure.</source>
+ <translation>Fallo temporal da rede.</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkAccessManager</name>
+ <message>
+ <source>Network access is disabled.</source>
+ <translation>O acceso á rede está desactivado.</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkReplyImpl</name>
+ <message>
+ <source>Operation canceled</source>
+ <translation>Cancelouse a operación</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkSession</name>
+ <message>
+ <source>Invalid configuration.</source>
+ <translation>A configuración non é válida.</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkSessionPrivateImpl</name>
+ <message>
+ <source>Roaming error</source>
+ <translation>Erro da itinerancia</translation>
+ </message>
+ <message>
+ <source>Session aborted by user or system</source>
+ <translation>A sesión abortouse polo usuario ou polo sistema</translation>
+ </message>
+ <message>
+ <source>Unidentified Error</source>
+ <translation>Erro non identificado</translation>
+ </message>
+ <message>
+ <source>Unknown session error.</source>
+ <translation>Erro descoñecido da sesión.</translation>
+ </message>
+ <message>
+ <source>The session was aborted by the user or system.</source>
+ <translation>A sesión abortouse polo usuario ou polo sistema.</translation>
+ </message>
+ <message>
+ <source>The requested operation is not supported by the system.</source>
+ <translation>A operación pedida non está soportada polo sistema.</translation>
+ </message>
+ <message>
+ <source>The specified configuration cannot be used.</source>
+ <translation>A configuración especificada non se pode empregar.</translation>
+ </message>
+ <message>
+ <source>Roaming was aborted or is not possible.</source>
+ <translation>A itinerancia abortouse ou non é posíbel.</translation>
+ </message>
+</context>
+<context>
+ <name>QOCIDriver</name>
+ <message>
+ <source>Unable to initialize</source>
+ <comment>QOCIDriver</comment>
+ <translation>Non foi posíbel inicializar</translation>
+ </message>
+ <message>
+ <source>Unable to logon</source>
+ <translation>Non foi posíbel identificarse</translation>
+ </message>
+ <message>
+ <source>Unable to begin transaction</source>
+ <translation>Non foi posíbel comezar a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to commit transaction</source>
+ <translation>Non foi posíbel entregar a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to rollback transaction</source>
+ <translation>Non foi posíbel anular a transacción</translation>
+ </message>
+</context>
+<context>
+ <name>QOCIResult</name>
+ <message>
+ <source>Unable to bind column for batch execute</source>
+ <translation>Non foi posíbel asociar a columna para executar o lote</translation>
+ </message>
+ <message>
+ <source>Unable to execute batch statement</source>
+ <translation>Non foi posíbel executar a sentenza en lote</translation>
+ </message>
+ <message>
+ <source>Unable to goto next</source>
+ <translation>Non foi posíbel ir para o seguinte</translation>
+ </message>
+ <message>
+ <source>Unable to alloc statement</source>
+ <translation>Non foi posíbel reservar memoria para a sentenza</translation>
+ </message>
+ <message>
+ <source>Unable to prepare statement</source>
+ <translation>Non foi posíbel preparar a sentenza</translation>
+ </message>
+ <message>
+ <source>Unable to get statement type</source>
+ <translation>Non foi posíbel obter o tipo da sentenza</translation>
+ </message>
+ <message>
+ <source>Unable to bind value</source>
+ <translation>Non foi posíbel asociar o valor</translation>
+ </message>
+ <message>
+ <source>Unable to execute statement</source>
+ <translation>Non foi posíbel executar a sentenza</translation>
+ </message>
+</context>
+<context>
+ <name>QODBCDriver</name>
+ <message>
+ <source>Unable to connect</source>
+ <translation>Non foi posíbel conectar</translation>
+ </message>
+ <message>
+ <source>Unable to connect - Driver doesn&apos;t support all functionality required</source>
+ <translation>Non foi posíbel conectar xa que o controlador non soporta todas as funcionalidades requiridas</translation>
+ </message>
+ <message>
+ <source>Unable to disable autocommit</source>
+ <translation>Non foi posíbel desactivar a entrega automática</translation>
+ </message>
+ <message>
+ <source>Unable to commit transaction</source>
+ <translation>Non foi posíbel entregar a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to rollback transaction</source>
+ <translation>Non foi posíbel anular a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to enable autocommit</source>
+ <translation>Non foi posíbel activar a entrega automática</translation>
+ </message>
+</context>
+<context>
+ <name>QPPDOptionsModel</name>
+ <message>
+ <source>Name</source>
+ <translation>Nome</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>Valor</translation>
+ </message>
+</context>
+<context>
+ <name>QPrintDialog</name>
+ <message>
+ <source>&amp;Options &gt;&gt;</source>
+ <translation>&amp;Opcións &gt;&gt;</translation>
+ </message>
+ <message>
+ <source>&amp;Print</source>
+ <translation>&amp;Imprimir</translation>
+ </message>
+ <message>
+ <source>&amp;Options &lt;&lt;</source>
+ <translation>&amp;Opcións &lt;&lt;</translation>
+ </message>
+ <message>
+ <source>Print to File (PDF)</source>
+ <translation>Imprimir nun ficheiro (PDF)</translation>
+ </message>
+ <message>
+ <source>Print to File (Postscript)</source>
+ <translation>Imprimir nun ficheiro (Postscript)</translation>
+ </message>
+ <message>
+ <source>Local file</source>
+ <translation>Ficheiro local</translation>
+ </message>
+ <message>
+ <source>Write %1 file</source>
+ <translation>Escribir no ficheiro %1</translation>
+ </message>
+ <message>
+ <source>Print To File ...</source>
+ <translation>Imprimir nun ficheiro...</translation>
+ </message>
+ <message>
+ <source>%1 is a directory.
+Please choose a different file name.</source>
+ <translation>%1 é un cartafol.
+Escolla outro nome para o ficheiro.</translation>
+ </message>
+ <message>
+ <source>File %1 is not writable.
+Please choose a different file name.</source>
+ <translation>Non se pode escribir no ficheiro %1.
+Escolla outro nome de ficheiro.</translation>
+ </message>
+ <message>
+ <source>%1 already exists.
+Do you want to overwrite it?</source>
+ <translation>%1 xa existe.
+Desexa sobrescribilo?</translation>
+ </message>
+ <message>
+ <source>A0</source>
+ <translation>A0</translation>
+ </message>
+ <message>
+ <source>A1</source>
+ <translation>A1</translation>
+ </message>
+ <message>
+ <source>A2</source>
+ <translation>A2</translation>
+ </message>
+ <message>
+ <source>A3</source>
+ <translation>A3</translation>
+ </message>
+ <message>
+ <source>A4</source>
+ <translation>A4</translation>
+ </message>
+ <message>
+ <source>A5</source>
+ <translation>A5</translation>
+ </message>
+ <message>
+ <source>A6</source>
+ <translation>A6</translation>
+ </message>
+ <message>
+ <source>A7</source>
+ <translation>A7</translation>
+ </message>
+ <message>
+ <source>A8</source>
+ <translation>A8</translation>
+ </message>
+ <message>
+ <source>A9</source>
+ <translation>A9</translation>
+ </message>
+ <message>
+ <source>B0</source>
+ <translation>B0</translation>
+ </message>
+ <message>
+ <source>B1</source>
+ <translation>B1</translation>
+ </message>
+ <message>
+ <source>B2</source>
+ <translation>B2</translation>
+ </message>
+ <message>
+ <source>B3</source>
+ <translation>B3</translation>
+ </message>
+ <message>
+ <source>B4</source>
+ <translation>B4</translation>
+ </message>
+ <message>
+ <source>B5</source>
+ <translation>B5</translation>
+ </message>
+ <message>
+ <source>B6</source>
+ <translation>B6</translation>
+ </message>
+ <message>
+ <source>B7</source>
+ <translation>B7</translation>
+ </message>
+ <message>
+ <source>B8</source>
+ <translation>B8</translation>
+ </message>
+ <message>
+ <source>B9</source>
+ <translation>B9</translation>
+ </message>
+ <message>
+ <source>B10</source>
+ <translation>B10</translation>
+ </message>
+ <message>
+ <source>C5E</source>
+ <translation>C5E</translation>
+ </message>
+ <message>
+ <source>DLE</source>
+ <translation>DLE</translation>
+ </message>
+ <message>
+ <source>Executive</source>
+ <translation>Executive</translation>
+ </message>
+ <message>
+ <source>Folio</source>
+ <translation>Folio</translation>
+ </message>
+ <message>
+ <source>Ledger</source>
+ <translation>Ledger</translation>
+ </message>
+ <message>
+ <source>Legal</source>
+ <translation>Legal</translation>
+ </message>
+ <message>
+ <source>Letter</source>
+ <translation>Carta</translation>
+ </message>
+ <message>
+ <source>Tabloid</source>
+ <translation>Tabloid</translation>
+ </message>
+ <message>
+ <source>US Common #10 Envelope</source>
+ <translation>Sobre US Common núm. 10</translation>
+ </message>
+ <message>
+ <source>Custom</source>
+ <translation>Personalizado</translation>
+ </message>
+ <message>
+ <source>Print</source>
+ <translation>Imprimir</translation>
+ </message>
+ <message>
+ <source>File exists</source>
+ <translation>O ficheiro xa existe</translation>
+ </message>
+ <message>
+ <source>&lt;qt&gt;Do you want to overwrite it?&lt;/qt&gt;</source>
+ <translation>&lt;qt&gt;Desexa sobrescribilo?&lt;/qt&gt;</translation>
+ </message>
+ <message>
+ <source>A0 (841 x 1189 mm)</source>
+ <translation>A0 (841 x 1189 mm)</translation>
+ </message>
+ <message>
+ <source>A1 (594 x 841 mm)</source>
+ <translation>A1 (594 x 841 mm)</translation>
+ </message>
+ <message>
+ <source>A2 (420 x 594 mm)</source>
+ <translation>A2 (420 x 594 mm)</translation>
+ </message>
+ <message>
+ <source>A3 (297 x 420 mm)</source>
+ <translation>A3 (297 x 420 mm)</translation>
+ </message>
+ <message>
+ <source>A4 (210 x 297 mm, 8.26 x 11.7 inches)</source>
+ <translation>A4 (210 x 297 mm, 8,26 x 11,7 polgadas)</translation>
+ </message>
+ <message>
+ <source>A5 (148 x 210 mm)</source>
+ <translation>A5 (148 x 210 mm)</translation>
+ </message>
+ <message>
+ <source>A6 (105 x 148 mm)</source>
+ <translation>A6 (105 x 148 mm)</translation>
+ </message>
+ <message>
+ <source>A7 (74 x 105 mm)</source>
+ <translation>A7 (74 x 105 mm)</translation>
+ </message>
+ <message>
+ <source>A8 (52 x 74 mm)</source>
+ <translation>A8 (52 x 74 mm)</translation>
+ </message>
+ <message>
+ <source>A9 (37 x 52 mm)</source>
+ <translation>A9 (37 x 52 mm)</translation>
+ </message>
+ <message>
+ <source>B0 (1000 x 1414 mm)</source>
+ <translation>B0 (1000 x 1414 mm)</translation>
+ </message>
+ <message>
+ <source>B1 (707 x 1000 mm)</source>
+ <translation>B1 (707 x 1000 mm)</translation>
+ </message>
+ <message>
+ <source>B2 (500 x 707 mm)</source>
+ <translation>B2 (500 x 707 mm)</translation>
+ </message>
+ <message>
+ <source>B3 (353 x 500 mm)</source>
+ <translation>B3 (353 x 500 mm)</translation>
+ </message>
+ <message>
+ <source>B4 (250 x 353 mm)</source>
+ <translation>B4 (250 x 353 mm)</translation>
+ </message>
+ <message>
+ <source>B5 (176 x 250 mm, 6.93 x 9.84 inches)</source>
+ <translation>B5 (176 x 250 mm, 6,93 x 9,84 polgadas)</translation>
+ </message>
+ <message>
+ <source>B6 (125 x 176 mm)</source>
+ <translation>B6 (125 x 176 mm)</translation>
+ </message>
+ <message>
+ <source>B7 (88 x 125 mm)</source>
+ <translation>B7 (88 x 125 mm)</translation>
+ </message>
+ <message>
+ <source>B8 (62 x 88 mm)</source>
+ <translation>B8 (62 x 88 mm)</translation>
+ </message>
+ <message>
+ <source>B9 (44 x 62 mm)</source>
+ <translation>B9 (44 x 62 mm)</translation>
+ </message>
+ <message>
+ <source>B10 (31 x 44 mm)</source>
+ <translation>B10 (31 x 44 mm)</translation>
+ </message>
+ <message>
+ <source>C5E (163 x 229 mm)</source>
+ <translation>C5E (163 x 229 mm)</translation>
+ </message>
+ <message>
+ <source>DLE (110 x 220 mm)</source>
+ <translation>DLE (110 x 220 mm)</translation>
+ </message>
+ <message>
+ <source>Executive (7.5 x 10 inches, 191 x 254 mm)</source>
+ <translation>Executive (7,5 x 10 polgadas, 191 x 254 mm)</translation>
+ </message>
+ <message>
+ <source>Folio (210 x 330 mm)</source>
+ <translation>Folio (210 x 330 mm)</translation>
+ </message>
+ <message>
+ <source>Ledger (432 x 279 mm)</source>
+ <translation>Ledger (432 x 279 mm)</translation>
+ </message>
+ <message>
+ <source>Legal (8.5 x 14 inches, 216 x 356 mm)</source>
+ <translation>Legal (8,5 x 14 polgadas, 216 x 356 mm)</translation>
+ </message>
+ <message>
+ <source>Letter (8.5 x 11 inches, 216 x 279 mm)</source>
+ <translation>Carta (8,5 x 11 polgadas, 216 x 279 mm)</translation>
+ </message>
+ <message>
+ <source>Tabloid (279 x 432 mm)</source>
+ <translation>Tabloide (279 x 432 mm)</translation>
+ </message>
+ <message>
+ <source>US Common #10 Envelope (105 x 241 mm)</source>
+ <translation>Sobre US Common #10 (105 x 241 mm)</translation>
+ </message>
+ <message>
+ <source>Print all</source>
+ <translation>Imprimir todas</translation>
+ </message>
+ <message>
+ <source>Print selection</source>
+ <translation>Imprimir a selección</translation>
+ </message>
+ <message>
+ <source>Print range</source>
+ <translation>Intervalo de impresión</translation>
+ </message>
+ <message>
+ <source>Print current page</source>
+ <translation>Imprimir a páxina actual</translation>
+ </message>
+ <message>
+ <source>The &apos;From&apos; value cannot be greater than the &apos;To&apos; value.</source>
+ <translation>O valor «de» non pode ser maior do que o valor «até».</translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation>Aceptar</translation>
+ </message>
+ <message>
+ <source>locally connected</source>
+ <translation>conectado localmente</translation>
+ </message>
+ <message>
+ <source>Aliases: %1</source>
+ <translation>Alcumes: %1</translation>
+ </message>
+ <message>
+ <source>unknown</source>
+ <translation>descoñecido</translation>
+ </message>
+</context>
+<context>
+ <name>QPSQLDriver</name>
+ <message>
+ <source>Unable to connect</source>
+ <translation>Non foi posíbel conectar</translation>
+ </message>
+ <message>
+ <source>Could not begin transaction</source>
+ <translation>Non foi posíbel comezar a transacción</translation>
+ </message>
+ <message>
+ <source>Could not commit transaction</source>
+ <translation>Non foi posíbel entregar a transacción</translation>
+ </message>
+ <message>
+ <source>Could not rollback transaction</source>
+ <translation>Non foi posíbel anular a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to subscribe</source>
+ <translation>Non foi posíbel subscribirse</translation>
+ </message>
+ <message>
+ <source>Unable to unsubscribe</source>
+ <translation>Non foi posíbel anular a subscrición</translation>
+ </message>
+</context>
+<context>
+ <name>QPSQLResult</name>
+ <message>
+ <source>Unable to create query</source>
+ <translation>Non foi posíbel crear a consulta</translation>
+ </message>
+ <message>
+ <source>Unable to prepare statement</source>
+ <translation>Non foi posíbel preparar a sentenza</translation>
+ </message>
+</context>
+<context>
+ <name>QPageSetupWidget</name>
+ <message>
+ <source>Form</source>
+ <translation>Formulario</translation>
+ </message>
+ <message>
+ <source>Paper</source>
+ <translation>Papel</translation>
+ </message>
+ <message>
+ <source>Page size:</source>
+ <translation>Tamaño da páxina:</translation>
+ </message>
+ <message>
+ <source>Width:</source>
+ <translation>Largura:</translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation>Altura:</translation>
+ </message>
+ <message>
+ <source>Paper source:</source>
+ <translation>Fonte do papel:</translation>
+ </message>
+ <message>
+ <source>Orientation</source>
+ <translation>Orientación</translation>
+ </message>
+ <message>
+ <source>Portrait</source>
+ <translation>Retrato</translation>
+ </message>
+ <message>
+ <source>Landscape</source>
+ <translation>Apaisado</translation>
+ </message>
+ <message>
+ <source>Reverse landscape</source>
+ <translation>Apaisado invertido</translation>
+ </message>
+ <message>
+ <source>Reverse portrait</source>
+ <translation>Retrato invertido</translation>
+ </message>
+ <message>
+ <source>Margins</source>
+ <translation>Marxes</translation>
+ </message>
+ <message>
+ <source>top margin</source>
+ <translation>marxe superior</translation>
+ </message>
+ <message>
+ <source>left margin</source>
+ <translation>marxe esquerda</translation>
+ </message>
+ <message>
+ <source>right margin</source>
+ <translation>marxe dereita</translation>
+ </message>
+ <message>
+ <source>bottom margin</source>
+ <translation>marxe inferior</translation>
+ </message>
+ <message>
+ <source>Centimeters (cm)</source>
+ <translation>Centímetros (cm)</translation>
+ </message>
+ <message>
+ <source>Millimeters (mm)</source>
+ <translation>Milímetros (mm)</translation>
+ </message>
+ <message>
+ <source>Inches (in)</source>
+ <translation>Polgadas (pol)</translation>
+ </message>
+ <message>
+ <source>Points (pt)</source>
+ <translation>Puntos (pt)</translation>
+ </message>
+</context>
+<context>
+ <name>QPluginLoader</name>
+ <message>
+ <source>The plugin was not loaded.</source>
+ <translation>A extensión non se cargou.</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Erro descoñecido</translation>
+ </message>
+</context>
+<context>
+ <name>QPrintPreviewDialog</name>
+ <message>
+ <source>Page Setup</source>
+ <translation>Configuración da páxina</translation>
+ </message>
+ <message>
+ <source>%1%</source>
+ <translation>%1%</translation>
+ </message>
+ <message>
+ <source>Print Preview</source>
+ <translation>Vista previa do impreso</translation>
+ </message>
+ <message>
+ <source>Next page</source>
+ <translation>Seguinte páxina</translation>
+ </message>
+ <message>
+ <source>Previous page</source>
+ <translation>Páxina anterior</translation>
+ </message>
+ <message>
+ <source>First page</source>
+ <translation>Primeira páxina</translation>
+ </message>
+ <message>
+ <source>Last page</source>
+ <translation>Última páxina</translation>
+ </message>
+ <message>
+ <source>Fit width</source>
+ <translation>Axustar á largura</translation>
+ </message>
+ <message>
+ <source>Fit page</source>
+ <translation>Axustar á páxina</translation>
+ </message>
+ <message>
+ <source>Zoom in</source>
+ <translation>Ampliar</translation>
+ </message>
+ <message>
+ <source>Zoom out</source>
+ <translation>Reducir</translation>
+ </message>
+ <message>
+ <source>Portrait</source>
+ <translation>Retrato</translation>
+ </message>
+ <message>
+ <source>Landscape</source>
+ <translation>Apaisado</translation>
+ </message>
+ <message>
+ <source>Show single page</source>
+ <translation>Mostrar unha só páxina</translation>
+ </message>
+ <message>
+ <source>Show facing pages</source>
+ <translation>Mostrar as páxinas opostas</translation>
+ </message>
+ <message>
+ <source>Show overview of all pages</source>
+ <translation>Mostrar un resumo de todas as páxinas</translation>
+ </message>
+ <message>
+ <source>Print</source>
+ <translation>Imprimir</translation>
+ </message>
+ <message>
+ <source>Page setup</source>
+ <translation>Configuración da páxina</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>Pechar</translation>
+ </message>
+ <message>
+ <source>Export to PDF</source>
+ <translation>Exportar a PDF</translation>
+ </message>
+ <message>
+ <source>Export to PostScript</source>
+ <translation>Exportar a PostScript</translation>
+ </message>
+</context>
+<context>
+ <name>QPrintPropertiesWidget</name>
+ <message>
+ <source>Form</source>
+ <translation>Formulario</translation>
+ </message>
+ <message>
+ <source>Page</source>
+ <translation>Páxina</translation>
+ </message>
+ <message>
+ <source>Advanced</source>
+ <translation>Avanzado</translation>
+ </message>
+</context>
+<context>
+ <name>QPrintSettingsOutput</name>
+ <message>
+ <source>Form</source>
+ <translation>Formulario</translation>
+ </message>
+ <message>
+ <source>Copies</source>
+ <translation>Copias</translation>
+ </message>
+ <message>
+ <source>Print range</source>
+ <translation>Intervalo de impresión</translation>
+ </message>
+ <message>
+ <source>Print all</source>
+ <translation>Imprimir todas</translation>
+ </message>
+ <message>
+ <source>Pages from</source>
+ <translation>As páxinas da</translation>
+ </message>
+ <message>
+ <source>to</source>
+ <translation>até a</translation>
+ </message>
+ <message>
+ <source>Current Page</source>
+ <translation>Páxina actual</translation>
+ </message>
+ <message>
+ <source>Selection</source>
+ <translation>Selección</translation>
+ </message>
+ <message>
+ <source>Output Settings</source>
+ <translation>Configuración da saída</translation>
+ </message>
+ <message>
+ <source>Copies:</source>
+ <translation>Copias:</translation>
+ </message>
+ <message>
+ <source>Collate</source>
+ <translation>Xuntar</translation>
+ </message>
+ <message>
+ <source>Reverse</source>
+ <translation>Inverter</translation>
+ </message>
+ <message>
+ <source>Options</source>
+ <translation>Opcións</translation>
+ </message>
+ <message>
+ <source>Color Mode</source>
+ <translation>Modo de cor</translation>
+ </message>
+ <message>
+ <source>Color</source>
+ <translation>Cor</translation>
+ </message>
+ <message>
+ <source>Grayscale</source>
+ <translation>Escala de grises</translation>
+ </message>
+ <message>
+ <source>Duplex Printing</source>
+ <translation>Impresión polas dúas caras</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>non empregar</translation>
+ </message>
+ <message>
+ <source>Long side</source>
+ <translation>Lado longo</translation>
+ </message>
+ <message>
+ <source>Short side</source>
+ <translation>Lado curto</translation>
+ </message>
+</context>
+<context>
+ <name>QPrintWidget</name>
+ <message>
+ <source>Form</source>
+ <translation>Formulario</translation>
+ </message>
+ <message>
+ <source>Printer</source>
+ <translation>Impresora</translation>
+ </message>
+ <message>
+ <source>&amp;Name:</source>
+ <translation>&amp;Nome:</translation>
+ </message>
+ <message>
+ <source>P&amp;roperties</source>
+ <translation>P&amp;ropriedades</translation>
+ </message>
+ <message>
+ <source>Location:</source>
+ <translation>Localización:</translation>
+ </message>
+ <message>
+ <source>Preview</source>
+ <translation>Vista previa</translation>
+ </message>
+ <message>
+ <source>Type:</source>
+ <translation>Tipo:</translation>
+ </message>
+ <message>
+ <source>Output &amp;file:</source>
+ <translation>Ficheiro de &amp;saída:</translation>
+ </message>
+ <message>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+</context>
+<context>
+ <name>QProcess</name>
+ <message>
+ <source>Error reading from process</source>
+ <translation>Aconteceu un erro ao ler do proceso</translation>
+ </message>
+ <message>
+ <source>Error writing to process</source>
+ <translation>Aconteceu un erro ao escribir no proceso</translation>
+ </message>
+ <message>
+ <source>Process crashed</source>
+ <translation>O proceso pechouse inesperadamente</translation>
+ </message>
+ <message>
+ <source>No program defined</source>
+ <translation>Non definiu programa ningún</translation>
+ </message>
+ <message>
+ <source>Could not open input redirection for reading</source>
+ <translation>Non foi posíbel abrir a redirección da entrada para lectura</translation>
+ </message>
+ <message>
+ <source>Could not open output redirection for writing</source>
+ <translation>Non foi posíbel abrir a redirección da entrada para escribir</translation>
+ </message>
+ <message>
+ <source>Resource error (fork failure): %1</source>
+ <translation>Erro do recurso (fallou o fork): %1</translation>
+ </message>
+ <message>
+ <source>Process operation timed out</source>
+ <translation>A operación de procesamento esgotou o tempo-límite</translation>
+ </message>
+ <message>
+ <source>Process failed to start: %1</source>
+ <translation>Fallou a carga do proceso: %1</translation>
+ </message>
+</context>
+<context>
+ <name>QProgressDialog</name>
+ <message>
+ <source>Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+</context>
+<context>
+ <name>QRegExp</name>
+ <message>
+ <source>no error occurred</source>
+ <translation>non aconteceu ningún erro</translation>
+ </message>
+ <message>
+ <source>disabled feature used</source>
+ <translation>úsase unha funcionalidade desactivada</translation>
+ </message>
+ <message>
+ <source>bad char class syntax</source>
+ <translation>sintaxe incorrecta para a clase char</translation>
+ </message>
+ <message>
+ <source>bad lookahead syntax</source>
+ <translation>sintaxe incorrecta para a procura cara diante</translation>
+ </message>
+ <message>
+ <source>bad repetition syntax</source>
+ <translation>sintaxe incorrecta para a repetición</translation>
+ </message>
+ <message>
+ <source>invalid octal value</source>
+ <translation>valor octal non válido</translation>
+ </message>
+ <message>
+ <source>missing left delim</source>
+ <translation>falta o delimitador esquerdo</translation>
+ </message>
+ <message>
+ <source>unexpected end</source>
+ <translation>final inesperado</translation>
+ </message>
+ <message>
+ <source>met internal limit</source>
+ <translation>acadouse un límite interno</translation>
+ </message>
+ <message>
+ <source>invalid interval</source>
+ <translation>intervalo non válido</translation>
+ </message>
+ <message>
+ <source>invalid category</source>
+ <translation>categoría non válida</translation>
+ </message>
+</context>
+<context>
+ <name>QSQLite2Driver</name>
+ <message>
+ <source>Error opening database</source>
+ <translation>Aconteceu un erro ao abrir a base de datos</translation>
+ </message>
+ <message>
+ <source>Unable to begin transaction</source>
+ <translation>Non foi posíbel comezar a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to commit transaction</source>
+ <translation>Non foi posíbel entregar a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to rollback transaction</source>
+ <translation>Non foi posíbel anular a transacción</translation>
+ </message>
+</context>
+<context>
+ <name>QSQLite2Result</name>
+ <message>
+ <source>Unable to fetch results</source>
+ <translation>Non foi posíbel acadar os resultados</translation>
+ </message>
+ <message>
+ <source>Unable to execute statement</source>
+ <translation>Non foi posíbel executar a sentenza</translation>
+ </message>
+</context>
+<context>
+ <name>QSQLiteDriver</name>
+ <message>
+ <source>Error opening database</source>
+ <translation>Aconteceu un erro ao abrir a base de datos</translation>
+ </message>
+ <message>
+ <source>Error closing database</source>
+ <translation>Aconteceu un erro ao pechar a base de datos</translation>
+ </message>
+ <message>
+ <source>Unable to begin transaction</source>
+ <translation>Non foi posíbel comezar a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to commit transaction</source>
+ <translation>Non foi posíbel entregar a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to rollback transaction</source>
+ <translation>Non foi posíbel anular a transacción</translation>
+ </message>
+</context>
+<context>
+ <name>QSQLiteResult</name>
+ <message>
+ <source>Unable to fetch row</source>
+ <translation>Non foi posíbel acadar a fila</translation>
+ </message>
+ <message>
+ <source>No query</source>
+ <translation>Non hai consulta</translation>
+ </message>
+ <message>
+ <source>Unable to execute statement</source>
+ <translation>Non foi posíbel executar a sentenza</translation>
+ </message>
+ <message>
+ <source>Unable to reset statement</source>
+ <translation>Non foi posíbel reiniciar a sentenza</translation>
+ </message>
+ <message>
+ <source>Unable to bind parameters</source>
+ <translation>Non foi posíbel asociar os parámetros</translation>
+ </message>
+ <message>
+ <source>Parameter count mismatch</source>
+ <translation>O número de parámetros non coincide</translation>
+ </message>
+</context>
+<context>
+ <name>QScriptBreakpointsModel</name>
+ <message>
+ <source>ID</source>
+ <translation>ID</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>Lugar</translation>
+ </message>
+ <message>
+ <source>Condition</source>
+ <translation>Condición</translation>
+ </message>
+ <message>
+ <source>Ignore-count</source>
+ <translation>Ignorar a cantidade</translation>
+ </message>
+ <message>
+ <source>Single-shot</source>
+ <translation>Acción única</translation>
+ </message>
+ <message>
+ <source>Hit-count</source>
+ <translation>Cantidade de alcances</translation>
+ </message>
+</context>
+<context>
+ <name>QScriptBreakpointsWidget</name>
+ <message>
+ <source>New</source>
+ <translation>Novo</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>Borrar</translation>
+ </message>
+</context>
+<context>
+ <name>QScriptNewBreakpointWidget</name>
+ <message>
+ <source>Close</source>
+ <translation>Pechar</translation>
+ </message>
+</context>
+<context>
+ <name>QScriptDebugger</name>
+ <message>
+ <source>Go to Line</source>
+ <translation>Ir para a liña</translation>
+ </message>
+ <message>
+ <source>Line:</source>
+ <translation>Liña:</translation>
+ </message>
+ <message>
+ <source>Interrupt</source>
+ <translation>Interromper</translation>
+ </message>
+ <message>
+ <source>Shift+F5</source>
+ <translation>Maiús.+F5</translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation>Continuar</translation>
+ </message>
+ <message>
+ <source>F5</source>
+ <translation>F5</translation>
+ </message>
+ <message>
+ <source>Step Into</source>
+ <translation>Entrar</translation>
+ </message>
+ <message>
+ <source>F11</source>
+ <translation>F11</translation>
+ </message>
+ <message>
+ <source>Step Over</source>
+ <translation>Pasar por riba</translation>
+ </message>
+ <message>
+ <source>F10</source>
+ <translation>F10</translation>
+ </message>
+ <message>
+ <source>Step Out</source>
+ <translation>Saír</translation>
+ </message>
+ <message>
+ <source>Shift+F11</source>
+ <translation>Maiús.+F11</translation>
+ </message>
+ <message>
+ <source>Run to Cursor</source>
+ <translation>Executar até o cursor</translation>
+ </message>
+ <message>
+ <source>Ctrl+F10</source>
+ <translation>Ctrl+F10</translation>
+ </message>
+ <message>
+ <source>Run to New Script</source>
+ <translation>Executar até o novo script</translation>
+ </message>
+ <message>
+ <source>Toggle Breakpoint</source>
+ <translation>Conmutar o punto de parada</translation>
+ </message>
+ <message>
+ <source>F9</source>
+ <translation>F9</translation>
+ </message>
+ <message>
+ <source>Clear Debug Output</source>
+ <translation>Limpar a saída de depuración</translation>
+ </message>
+ <message>
+ <source>Clear Error Log</source>
+ <translation>Limpar a saída de erros</translation>
+ </message>
+ <message>
+ <source>Clear Console</source>
+ <translation>Limpar a consola</translation>
+ </message>
+ <message>
+ <source>&amp;Find in Script...</source>
+ <translation>Procurar no &amp;script...</translation>
+ </message>
+ <message>
+ <source>Ctrl+F</source>
+ <translation>Ctrl+F</translation>
+ </message>
+ <message>
+ <source>Find &amp;Next</source>
+ <translation>Procurar o &amp;seguinte</translation>
+ </message>
+ <message>
+ <source>F3</source>
+ <translation>F3</translation>
+ </message>
+ <message>
+ <source>Find &amp;Previous</source>
+ <translation>Procurar o &amp;anterior</translation>
+ </message>
+ <message>
+ <source>Shift+F3</source>
+ <translation>Maiúsc.+F3</translation>
+ </message>
+ <message>
+ <source>Ctrl+G</source>
+ <translation>Ctrl+G</translation>
+ </message>
+ <message>
+ <source>Debug</source>
+ <translation>Depurar</translation>
+ </message>
+</context>
+<context>
+ <name>QScriptDebuggerCodeFinderWidget</name>
+ <message>
+ <source>Close</source>
+ <translation>Pechar</translation>
+ </message>
+ <message>
+ <source>Previous</source>
+ <translation>Anterior</translation>
+ </message>
+ <message>
+ <source>Next</source>
+ <translation>Seguinte</translation>
+ </message>
+ <message>
+ <source>Case Sensitive</source>
+ <translation>Distinguir as maiúsculas</translation>
+ </message>
+ <message>
+ <source>Whole words</source>
+ <translation>Palabras completas</translation>
+ </message>
+ <message>
+ <source>&lt;img src=&quot;:/qt/scripttools/debugging/images/wrap.png&quot;&gt;&amp;nbsp;Search wrapped</source>
+ <translation>&lt;img src=&quot;:/qt/scripttools/debugging/images/wrap.png&quot;&gt;&amp;nbsp;A procura retornou</translation>
+ </message>
+</context>
+<context>
+ <name>QScriptDebuggerLocalsModel</name>
+ <message>
+ <source>Name</source>
+ <translation>Nome</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>Valor</translation>
+ </message>
+</context>
+<context>
+ <name>QScriptDebuggerStackModel</name>
+ <message>
+ <source>Level</source>
+ <translation>Nivel</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Nome</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>Lugar</translation>
+ </message>
+</context>
+<context>
+ <name>QScriptEdit</name>
+ <message>
+ <source>Toggle Breakpoint</source>
+ <translation>Conmutar o punto de parada</translation>
+ </message>
+ <message>
+ <source>Disable Breakpoint</source>
+ <translation>Desactivar o punto de parada</translation>
+ </message>
+ <message>
+ <source>Enable Breakpoint</source>
+ <translation>Activar o punto de parada</translation>
+ </message>
+ <message>
+ <source>Breakpoint Condition:</source>
+ <translation>Condición do punto de parada:</translation>
+ </message>
+</context>
+<context>
+ <name>QScriptEngineDebugger</name>
+ <message>
+ <source>Loaded Scripts</source>
+ <translation>Scripts cargados</translation>
+ </message>
+ <message>
+ <source>Breakpoints</source>
+ <translation>Puntos de parada</translation>
+ </message>
+ <message>
+ <source>Stack</source>
+ <translation>Pila</translation>
+ </message>
+ <message>
+ <source>Locals</source>
+ <translation>Locais</translation>
+ </message>
+ <message>
+ <source>Console</source>
+ <translation>Consola</translation>
+ </message>
+ <message>
+ <source>Debug Output</source>
+ <translation>Saída de depuración</translation>
+ </message>
+ <message>
+ <source>Error Log</source>
+ <translation>Rexisto de erros</translation>
+ </message>
+ <message>
+ <source>Search</source>
+ <translation>Procurar</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>Vista</translation>
+ </message>
+ <message>
+ <source>Qt Script Debugger</source>
+ <translation>Depurador de Qt Script</translation>
+ </message>
+</context>
+<context>
+ <name>QSharedMemory</name>
+ <message>
+ <source>%1: unable to set key on lock</source>
+ <translation>%1: non foi posíbel modificar a tecla por bloqueo</translation>
+ </message>
+ <message>
+ <source>%1: create size is less then 0</source>
+ <translation>%1: o tamaño a crear é menor que 0</translation>
+ </message>
+ <message>
+ <source>%1: unable to lock</source>
+ <translation>%1: non foi posíbel bloquear</translation>
+ </message>
+ <message>
+ <source>%1: unable to unlock</source>
+ <translation>%1: non foi posíbel desbloquear</translation>
+ </message>
+ <message>
+ <source>%1: already exists</source>
+ <translation>%1: xa existe</translation>
+ </message>
+ <message>
+ <source>%1: doesn&apos;t exists</source>
+ <translation>%1: non existe</translation>
+ </message>
+ <message>
+ <source>%1: invalid size</source>
+ <translation>%1: tamaño non válido</translation>
+ </message>
+ <message>
+ <source>%1: out of resources</source>
+ <translation>%1: esgotou os recursos</translation>
+ </message>
+ <message>
+ <source>%1: permission denied</source>
+ <translation>%1: negouse o permiso</translation>
+ </message>
+ <message>
+ <source>%1: unknown error %2</source>
+ <translation>%1: erro descoñecido %2</translation>
+ </message>
+ <message>
+ <source>%1: key error</source>
+ <translation>%1: erro de chave</translation>
+ </message>
+ <message>
+ <source>%1: unable to make key</source>
+ <translation>%1: non foi posíbel crear a chave</translation>
+ </message>
+ <message>
+ <source>%1: doesn&apos;t exist</source>
+ <translation>%1: non existe</translation>
+ </message>
+ <message>
+ <source>%1: key is empty</source>
+ <translation>%1: a chave está baleira</translation>
+ </message>
+ <message>
+ <source>%1: UNIX key file doesn&apos;t exist</source>
+ <translation>%1: non existe o ficheiro de chave de UNIX</translation>
+ </message>
+ <message>
+ <source>%1: ftok failed</source>
+ <translation>%1: fallou ftok</translation>
+ </message>
+ <message>
+ <source>%1: system-imposed size restrictions</source>
+ <translation>%1: restricións de tamaño impostas polo sistema</translation>
+ </message>
+ <message>
+ <source>%1: not attached</source>
+ <translation>%1: non adxuntado</translation>
+ </message>
+ <message>
+ <source>%1: size query failed</source>
+ <translation>%1: fallou o tamaño da consulta</translation>
+ </message>
+</context>
+<context>
+ <name>QShortcut</name>
+ <message>
+ <source>Space</source>
+ <extracomment>This and all following &quot;incomprehensible&quot; strings in QShortcut context are key names. Please use the localized names appearing on actual keyboards or whatever is commonly used.</extracomment>
+ <translation>Espazo</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation>Esc</translation>
+ </message>
+ <message>
+ <source>Tab</source>
+ <translation>Tab</translation>
+ </message>
+ <message>
+ <source>Backtab</source>
+ <translation>Tab atrás</translation>
+ </message>
+ <message>
+ <source>Backspace</source>
+ <translation>Borrar</translation>
+ </message>
+ <message>
+ <source>Return</source>
+ <translation>Intro</translation>
+ </message>
+ <message>
+ <source>Enter</source>
+ <translation>Intro</translation>
+ </message>
+ <message>
+ <source>Ins</source>
+ <translation>Ins</translation>
+ </message>
+ <message>
+ <source>Del</source>
+ <translation>Supr</translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation>Pausa</translation>
+ </message>
+ <message>
+ <source>Print</source>
+ <translation>Imprimir</translation>
+ </message>
+ <message>
+ <source>SysReq</source>
+ <translation>Pet.Sis</translation>
+ </message>
+ <message>
+ <source>Home</source>
+ <translation>Inicio</translation>
+ </message>
+ <message>
+ <source>End</source>
+ <translation>Fin</translation>
+ </message>
+ <message>
+ <source>Left</source>
+ <translation>Esquerda</translation>
+ </message>
+ <message>
+ <source>Up</source>
+ <translation>Subir</translation>
+ </message>
+ <message>
+ <source>Right</source>
+ <translation>Dereita</translation>
+ </message>
+ <message>
+ <source>Down</source>
+ <translation>Baixar</translation>
+ </message>
+ <message>
+ <source>PgUp</source>
+ <translation>RePáx</translation>
+ </message>
+ <message>
+ <source>PgDown</source>
+ <translation>AvPáx</translation>
+ </message>
+ <message>
+ <source>CapsLock</source>
+ <translation>Bloq Maiús</translation>
+ </message>
+ <message>
+ <source>NumLock</source>
+ <translation>Bloq. Num</translation>
+ </message>
+ <message>
+ <source>ScrollLock</source>
+ <translation>Bloq Despr</translation>
+ </message>
+ <message>
+ <source>Menu</source>
+ <translation>Menú</translation>
+ </message>
+ <message>
+ <source>Help</source>
+ <translation>Axuda</translation>
+ </message>
+ <message>
+ <source>Back</source>
+ <translation>Atrás</translation>
+ </message>
+ <message>
+ <source>Forward</source>
+ <translation>Adiante</translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation>Deter</translation>
+ </message>
+ <message>
+ <source>Refresh</source>
+ <translation>Anovar</translation>
+ </message>
+ <message>
+ <source>Volume Down</source>
+ <translation>Baixar o volume</translation>
+ </message>
+ <message>
+ <source>Volume Mute</source>
+ <translation>Silenciar</translation>
+ </message>
+ <message>
+ <source>Volume Up</source>
+ <translation>Subir o volume</translation>
+ </message>
+ <message>
+ <source>Bass Boost</source>
+ <translation>Potenciador de graves</translation>
+ </message>
+ <message>
+ <source>Bass Up</source>
+ <translation>Subir os graves</translation>
+ </message>
+ <message>
+ <source>Bass Down</source>
+ <translation>Baixar os graves</translation>
+ </message>
+ <message>
+ <source>Treble Up</source>
+ <translation>Treble Subir</translation>
+ </message>
+ <message>
+ <source>Treble Down</source>
+ <translation>Treble Baixar</translation>
+ </message>
+ <message>
+ <source>Media Play</source>
+ <translation>Multimedia Reproducir</translation>
+ </message>
+ <message>
+ <source>Media Stop</source>
+ <translation>Multimedia Parar</translation>
+ </message>
+ <message>
+ <source>Media Previous</source>
+ <translation>Multimedia Anterior</translation>
+ </message>
+ <message>
+ <source>Media Next</source>
+ <translation>Multimedia Seguinte</translation>
+ </message>
+ <message>
+ <source>Media Record</source>
+ <translation>Multimedia Gravar</translation>
+ </message>
+ <message>
+ <source>Media Pause</source>
+ <extracomment>Media player pause button</extracomment>
+ <translation>Multimedia Pausa</translation>
+ </message>
+ <message>
+ <source>Toggle Media Play/Pause</source>
+ <extracomment>Media player button to toggle between playing and paused</extracomment>
+ <translation>Multimedia Reproducir/Pausar</translation>
+ </message>
+ <message>
+ <source>Home Page</source>
+ <translation>Páxina de inicio</translation>
+ </message>
+ <message>
+ <source>Favorites</source>
+ <translation>Favoritos</translation>
+ </message>
+ <message>
+ <source>Search</source>
+ <translation>Procurar</translation>
+ </message>
+ <message>
+ <source>Standby</source>
+ <translation>Espera</translation>
+ </message>
+ <message>
+ <source>Open URL</source>
+ <translation>Abrir un URL</translation>
+ </message>
+ <message>
+ <source>Launch Mail</source>
+ <translation>Abrir o correo</translation>
+ </message>
+ <message>
+ <source>Launch Media</source>
+ <translation>Lanzar Multimedia</translation>
+ </message>
+ <message>
+ <source>Launch (0)</source>
+ <translation>Lanzar (0)</translation>
+ </message>
+ <message>
+ <source>Launch (1)</source>
+ <translation>Lanzar (1)</translation>
+ </message>
+ <message>
+ <source>Launch (2)</source>
+ <translation>Lanzar (2)</translation>
+ </message>
+ <message>
+ <source>Launch (3)</source>
+ <translation>Lanzar (3)</translation>
+ </message>
+ <message>
+ <source>Launch (4)</source>
+ <translation>Lanzar (4)</translation>
+ </message>
+ <message>
+ <source>Launch (5)</source>
+ <translation>Lanzar (5)</translation>
+ </message>
+ <message>
+ <source>Launch (6)</source>
+ <translation>Lanzar (6)</translation>
+ </message>
+ <message>
+ <source>Launch (7)</source>
+ <translation>Lanzar (7)</translation>
+ </message>
+ <message>
+ <source>Launch (8)</source>
+ <translation>Lanzar (8)</translation>
+ </message>
+ <message>
+ <source>Launch (9)</source>
+ <translation>Lanzar (9)</translation>
+ </message>
+ <message>
+ <source>Launch (A)</source>
+ <translation>Lanzar (A)</translation>
+ </message>
+ <message>
+ <source>Launch (B)</source>
+ <translation>Lanzar (B)</translation>
+ </message>
+ <message>
+ <source>Launch (C)</source>
+ <translation>Lanzar (C)</translation>
+ </message>
+ <message>
+ <source>Launch (D)</source>
+ <translation>Lanzar (D)</translation>
+ </message>
+ <message>
+ <source>Launch (E)</source>
+ <translation>Lanzar (E)</translation>
+ </message>
+ <message>
+ <source>Launch (F)</source>
+ <translation>Lanzar (F)</translation>
+ </message>
+ <message>
+ <source>Monitor Brightness Up</source>
+ <translation>Subir o brillo do monitor</translation>
+ </message>
+ <message>
+ <source>Monitor Brightness Down</source>
+ <translation>Baixar o brillo do monitor</translation>
+ </message>
+ <message>
+ <source>Keyboard Light On/Off</source>
+ <translation>Acender/Apagar a luz do teclado</translation>
+ </message>
+ <message>
+ <source>Keyboard Brightness Up</source>
+ <translation>Subir o brillo do teclado</translation>
+ </message>
+ <message>
+ <source>Keyboard Brightness Down</source>
+ <translation>Baixar o brillo do teclado</translation>
+ </message>
+ <message>
+ <source>Power Off</source>
+ <translation>Apagar</translation>
+ </message>
+ <message>
+ <source>Wake Up</source>
+ <translation>Espertar</translation>
+ </message>
+ <message>
+ <source>Eject</source>
+ <translation>Expulsar</translation>
+ </message>
+ <message>
+ <source>Screensaver</source>
+ <translation>Protector de pantalla</translation>
+ </message>
+ <message>
+ <source>WWW</source>
+ <translation>WWW</translation>
+ </message>
+ <message>
+ <source>Sleep</source>
+ <translation>Durmir</translation>
+ </message>
+ <message>
+ <source>LightBulb</source>
+ <translation>Punto de luz</translation>
+ </message>
+ <message>
+ <source>Shop</source>
+ <translation>Mercar</translation>
+ </message>
+ <message>
+ <source>History</source>
+ <translation>Historial</translation>
+ </message>
+ <message>
+ <source>Add Favorite</source>
+ <translation>Engadir aos favoritos</translation>
+ </message>
+ <message>
+ <source>Hot Links</source>
+ <translation>Ligazóns quentes</translation>
+ </message>
+ <message>
+ <source>Adjust Brightness</source>
+ <translation>Axustar o brillo</translation>
+ </message>
+ <message>
+ <source>Finance</source>
+ <translation>Finanzas</translation>
+ </message>
+ <message>
+ <source>Community</source>
+ <translation>Comunidade</translation>
+ </message>
+ <message>
+ <source>Audio Rewind</source>
+ <translation>Rebobinar o son</translation>
+ </message>
+ <message>
+ <source>Back Forward</source>
+ <translation>Voltar atrás</translation>
+ </message>
+ <message>
+ <source>Application Left</source>
+ <translation>Programa da esquerda</translation>
+ </message>
+ <message>
+ <source>Application Right</source>
+ <translation>Programa da dereita</translation>
+ </message>
+ <message>
+ <source>Book</source>
+ <translation>Libro</translation>
+ </message>
+ <message>
+ <source>CD</source>
+ <translation>CD</translation>
+ </message>
+ <message>
+ <source>Calculator</source>
+ <translation>Calculadora</translation>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Limpar</translation>
+ </message>
+ <message>
+ <source>Clear Grab</source>
+ <translation>Limpar o collido</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>Pechar</translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <translation>Copiar</translation>
+ </message>
+ <message>
+ <source>Cut</source>
+ <translation>Cortar</translation>
+ </message>
+ <message>
+ <source>Display</source>
+ <translation>Pantalla</translation>
+ </message>
+ <message>
+ <source>DOS</source>
+ <translation>DOS</translation>
+ </message>
+ <message>
+ <source>Documents</source>
+ <translation>Documentos</translation>
+ </message>
+ <message>
+ <source>Spreadsheet</source>
+ <translation>Folla de cálculo</translation>
+ </message>
+ <message>
+ <source>Browser</source>
+ <translation>Navegador</translation>
+ </message>
+ <message>
+ <source>Game</source>
+ <translation>Xogo</translation>
+ </message>
+ <message>
+ <source>Go</source>
+ <translation>Ir para</translation>
+ </message>
+ <message>
+ <source>iTouch</source>
+ <translation>iTouch</translation>
+ </message>
+ <message>
+ <source>Logoff</source>
+ <translation>Saír</translation>
+ </message>
+ <message>
+ <source>Market</source>
+ <translation>Tenda</translation>
+ </message>
+ <message>
+ <source>Meeting</source>
+ <translation>Reunión</translation>
+ </message>
+ <message>
+ <source>Keyboard Menu</source>
+ <translation>Menú do teclado</translation>
+ </message>
+ <message>
+ <source>Menu PB</source>
+ <translation>Menú PB</translation>
+ </message>
+ <message>
+ <source>My Sites</source>
+ <translation>Os meus sitios</translation>
+ </message>
+ <message>
+ <source>News</source>
+ <translation>Novas</translation>
+ </message>
+ <message>
+ <source>Home Office</source>
+ <translation>Casa oficina</translation>
+ </message>
+ <message>
+ <source>Option</source>
+ <translation>Opción</translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <translation>Apegar</translation>
+ </message>
+ <message>
+ <source>Phone</source>
+ <translation>Teléfono</translation>
+ </message>
+ <message>
+ <source>Reply</source>
+ <translation>Responder</translation>
+ </message>
+ <message>
+ <source>Reload</source>
+ <translation>Cargar de novo</translation>
+ </message>
+ <message>
+ <source>Rotate Windows</source>
+ <translation>Xirar as fiestras</translation>
+ </message>
+ <message>
+ <source>Rotation PB</source>
+ <translation>Xiro PB</translation>
+ </message>
+ <message>
+ <source>Rotation KB</source>
+ <translation>Xiro KB</translation>
+ </message>
+ <message>
+ <source>Save</source>
+ <translation>Gardar</translation>
+ </message>
+ <message>
+ <source>Send</source>
+ <translation>Enviar</translation>
+ </message>
+ <message>
+ <source>Spellchecker</source>
+ <translation>Corrector ortográfico</translation>
+ </message>
+ <message>
+ <source>Split Screen</source>
+ <translation>Dividir a pantalla</translation>
+ </message>
+ <message>
+ <source>Support</source>
+ <translation>Axuda</translation>
+ </message>
+ <message>
+ <source>Task Panel</source>
+ <translation>Panel de tarefas</translation>
+ </message>
+ <message>
+ <source>Terminal</source>
+ <translation>Terminal</translation>
+ </message>
+ <message>
+ <source>Tools</source>
+ <translation>Utensilios</translation>
+ </message>
+ <message>
+ <source>Travel</source>
+ <translation>Viaxes</translation>
+ </message>
+ <message>
+ <source>Video</source>
+ <translation>Vídeo</translation>
+ </message>
+ <message>
+ <source>Word Processor</source>
+ <translation>Procesador de textos</translation>
+ </message>
+ <message>
+ <source>XFer</source>
+ <translation>XFer</translation>
+ </message>
+ <message>
+ <source>Zoom In</source>
+ <translation>Ampliar</translation>
+ </message>
+ <message>
+ <source>Zoom Out</source>
+ <translation>Reducir</translation>
+ </message>
+ <message>
+ <source>Away</source>
+ <translation>Ausente</translation>
+ </message>
+ <message>
+ <source>Messenger</source>
+ <translation>Mensaxería</translation>
+ </message>
+ <message>
+ <source>WebCam</source>
+ <translation>Cámara web</translation>
+ </message>
+ <message>
+ <source>Mail Forward</source>
+ <translation>Reenvío de correo</translation>
+ </message>
+ <message>
+ <source>Pictures</source>
+ <translation>Imaxes</translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation>Música</translation>
+ </message>
+ <message>
+ <source>Battery</source>
+ <translation>Batería</translation>
+ </message>
+ <message>
+ <source>Bluetooth</source>
+ <translation>Bluetooth</translation>
+ </message>
+ <message>
+ <source>Wireless</source>
+ <translation>Sen fíos</translation>
+ </message>
+ <message>
+ <source>Ultra Wide Band</source>
+ <translation>Banda moi larga</translation>
+ </message>
+ <message>
+ <source>Audio Forward</source>
+ <translation>Avanzar o son</translation>
+ </message>
+ <message>
+ <source>Audio Repeat</source>
+ <translation>Repetir o son</translation>
+ </message>
+ <message>
+ <source>Audio Random Play</source>
+ <translation>Reprodución aleatoria de son</translation>
+ </message>
+ <message>
+ <source>Subtitle</source>
+ <translation>Subtítulo</translation>
+ </message>
+ <message>
+ <source>Audio Cycle Track</source>
+ <translation>Repetir as pistas de son</translation>
+ </message>
+ <message>
+ <source>Time</source>
+ <translation>Tempo</translation>
+ </message>
+ <message>
+ <source>Select</source>
+ <translation>Escoller</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>Vista</translation>
+ </message>
+ <message>
+ <source>Top Menu</source>
+ <translation>Menú na parte de riba</translation>
+ </message>
+ <message>
+ <source>Suspend</source>
+ <translation>Suspender</translation>
+ </message>
+ <message>
+ <source>Hibernate</source>
+ <translation>Hibernar</translation>
+ </message>
+ <message>
+ <source>Print Screen</source>
+ <translation>Impr Pant</translation>
+ </message>
+ <message>
+ <source>Page Up</source>
+ <translation>Páxina Arriba</translation>
+ </message>
+ <message>
+ <source>Page Down</source>
+ <translation>Página Abaixo</translation>
+ </message>
+ <message>
+ <source>Caps Lock</source>
+ <translation>Bloq Maius</translation>
+ </message>
+ <message>
+ <source>Num Lock</source>
+ <translation>Bloq Num</translation>
+ </message>
+ <message>
+ <source>Number Lock</source>
+ <translation>Bloqueo numérico</translation>
+ </message>
+ <message>
+ <source>Scroll Lock</source>
+ <translation>Bloqueo de desprazamento</translation>
+ </message>
+ <message>
+ <source>Insert</source>
+ <translation>Inserir</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>Borrar</translation>
+ </message>
+ <message>
+ <source>Escape</source>
+ <translation>Escape</translation>
+ </message>
+ <message>
+ <source>System Request</source>
+ <translation>Pedido ao sistema</translation>
+ </message>
+ <message>
+ <source>Yes</source>
+ <translation>Si</translation>
+ </message>
+ <message>
+ <source>No</source>
+ <translation>Non</translation>
+ </message>
+ <message>
+ <source>Context1</source>
+ <translation>Contexto1</translation>
+ </message>
+ <message>
+ <source>Context2</source>
+ <translation>Contexto2</translation>
+ </message>
+ <message>
+ <source>Context3</source>
+ <translation>Contexto3</translation>
+ </message>
+ <message>
+ <source>Context4</source>
+ <translation>Contexto4</translation>
+ </message>
+ <message>
+ <source>Call</source>
+ <extracomment>Button to start a call (note: a separate button is used to end the call)</extracomment>
+ <translation>Chamar</translation>
+ </message>
+ <message>
+ <source>Hangup</source>
+ <extracomment>Button to end a call (note: a separate button is used to start the call)</extracomment>
+ <translation>Colgar</translation>
+ </message>
+ <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>Comutar chamar/colgar</translation>
+ </message>
+ <message>
+ <source>Flip</source>
+ <translation>Inverter</translation>
+ </message>
+ <message>
+ <source>Voice Dial</source>
+ <extracomment>Button to trigger voice dialling</extracomment>
+ <translation>Chamar mediante voz</translation>
+ </message>
+ <message>
+ <source>Last Number Redial</source>
+ <extracomment>Button to redial the last number called</extracomment>
+ <translation>Rechamar</translation>
+ </message>
+ <message>
+ <source>Camera Shutter</source>
+ <extracomment>Button to trigger the camera shutter (take a picture)</extracomment>
+ <translation>Disparador da cámara</translation>
+ </message>
+ <message>
+ <source>Camera Focus</source>
+ <extracomment>Button to focus the camera</extracomment>
+ <translation>Focalizador da cámara</translation>
+ </message>
+ <message>
+ <source>Kanji</source>
+ <translation>Kanji</translation>
+ </message>
+ <message>
+ <source>Muhenkan</source>
+ <translation>Muhenkan</translation>
+ </message>
+ <message>
+ <source>Henkan</source>
+ <translation>Henkan</translation>
+ </message>
+ <message>
+ <source>Romaji</source>
+ <translation>Romaji</translation>
+ </message>
+ <message>
+ <source>Hiragana</source>
+ <translation>Hiragana</translation>
+ </message>
+ <message>
+ <source>Katakana</source>
+ <translation>Katakana</translation>
+ </message>
+ <message>
+ <source>Hiragana Katakana</source>
+ <translation>Hirgana Katakana</translation>
+ </message>
+ <message>
+ <source>Zenkaku</source>
+ <translation>Zenkaku</translation>
+ </message>
+ <message>
+ <source>Hankaku</source>
+ <translation>Hankaku</translation>
+ </message>
+ <message>
+ <source>Zenkaku Hankaku</source>
+ <translation>Zenkaku Hankaku</translation>
+ </message>
+ <message>
+ <source>Touroku</source>
+ <translation>Touroku</translation>
+ </message>
+ <message>
+ <source>Massyo</source>
+ <translation>Massyo</translation>
+ </message>
+ <message>
+ <source>Kana Lock</source>
+ <translation>Bloquear os Kana</translation>
+ </message>
+ <message>
+ <source>Kana Shift</source>
+ <translation>Cambiar a Kana</translation>
+ </message>
+ <message>
+ <source>Eisu Shift</source>
+ <translation>Cambiar a Eisu</translation>
+ </message>
+ <message>
+ <source>Eisu toggle</source>
+ <translation>Conmutar Eisu</translation>
+ </message>
+ <message>
+ <source>Code input</source>
+ <translation>Entrada de código</translation>
+ </message>
+ <message>
+ <source>Multiple Candidate</source>
+ <translation>Candidatos múltiplos</translation>
+ </message>
+ <message>
+ <source>Previous Candidate</source>
+ <translation>Candidato anterior</translation>
+ </message>
+ <message>
+ <source>Hangul</source>
+ <translation>Hangul</translation>
+ </message>
+ <message>
+ <source>Hangul Start</source>
+ <translation>Hangul inicio</translation>
+ </message>
+ <message>
+ <source>Hangul End</source>
+ <translation>Hangul fin</translation>
+ </message>
+ <message>
+ <source>Hangul Hanja</source>
+ <translation>Hangul Hanja</translation>
+ </message>
+ <message>
+ <source>Hangul Jamo</source>
+ <translation>Hangul Jamo</translation>
+ </message>
+ <message>
+ <source>Hangul Romaja</source>
+ <translation>Hangul Romaja</translation>
+ </message>
+ <message>
+ <source>Hangul Jeonja</source>
+ <translation>Hanjul Jeonja</translation>
+ </message>
+ <message>
+ <source>Hangul Banja</source>
+ <translation>Hangul Banja</translation>
+ </message>
+ <message>
+ <source>Hangul PreHanja</source>
+ <translation>Hangul PreHanja</translation>
+ </message>
+ <message>
+ <source>Hangul PostHanja</source>
+ <translation>Halgul PostHanja</translation>
+ </message>
+ <message>
+ <source>Hangul Special</source>
+ <translation>Hangul especial</translation>
+ </message>
+ <message>
+ <source>Ctrl</source>
+ <translation>Ctrl</translation>
+ </message>
+ <message>
+ <source>Shift</source>
+ <translation>Maiúsc</translation>
+ </message>
+ <message>
+ <source>Alt</source>
+ <translation>Alt</translation>
+ </message>
+ <message>
+ <source>Meta</source>
+ <translation>Meta</translation>
+ </message>
+ <message>
+ <source>+</source>
+ <translation>+</translation>
+ </message>
+ <message>
+ <source>F%1</source>
+ <translation>F%1</translation>
+ </message>
+</context>
+<context>
+ <name>QSoftKeyManager</name>
+ <message>
+ <source>Ok</source>
+ <translation>Aceptar</translation>
+ </message>
+ <message>
+ <source>Select</source>
+ <translation>Escoller</translation>
+ </message>
+ <message>
+ <source>Done</source>
+ <translation>Feito</translation>
+ </message>
+ <message>
+ <source>Options</source>
+ <translation>Opcións</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+ <message>
+ <source>Exit</source>
+ <translation>Saír</translation>
+ </message>
+</context>
+<context>
+ <name>QSql</name>
+ <message>
+ <source>Delete</source>
+ <translation>Borrar</translation>
+ </message>
+ <message>
+ <source>Delete this record?</source>
+ <translation>Desexa borrar este rexistro?</translation>
+ </message>
+ <message>
+ <source>Yes</source>
+ <translation>Si</translation>
+ </message>
+ <message>
+ <source>No</source>
+ <translation>Non</translation>
+ </message>
+ <message>
+ <source>Insert</source>
+ <translation>Inserir</translation>
+ </message>
+ <message>
+ <source>Update</source>
+ <translation>Actualizar</translation>
+ </message>
+ <message>
+ <source>Save edits?</source>
+ <translation>Desexa gardar as modificacións?</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+ <message>
+ <source>Confirm</source>
+ <translation>Confirmar</translation>
+ </message>
+ <message>
+ <source>Cancel your edits?</source>
+ <translation>Desexa cancelar as súas modificacións?</translation>
+ </message>
+</context>
+<context>
+ <name>QSslSocket</name>
+ <message>
+ <source>No error</source>
+ <translation>Sen erros</translation>
+ </message>
+ <message>
+ <source>The issuer certificate could not be found</source>
+ <translation>Non se atopou o certificado do expendedor</translation>
+ </message>
+ <message>
+ <source>The certificate signature could not be decrypted</source>
+ <translation>Non foi posíbel descifrar a sinatura do certificado</translation>
+ </message>
+ <message>
+ <source>The public key in the certificate could not be read</source>
+ <translation>Non foi posíbel ler a chave pública no certificado</translation>
+ </message>
+ <message>
+ <source>The signature of the certificate is invalid</source>
+ <translation>A sinatura do certificado non é válida</translation>
+ </message>
+ <message>
+ <source>The certificate is not yet valid</source>
+ <translation>O certificado aínda non é válido</translation>
+ </message>
+ <message>
+ <source>The certificate has expired</source>
+ <translation>O certificado caducou</translation>
+ </message>
+ <message>
+ <source>The certificate&apos;s notBefore field contains an invalid time</source>
+ <translation>O campo notBefore do certificado contén unha data non válida</translation>
+ </message>
+ <message>
+ <source>The certificate&apos;s notAfter field contains an invalid time</source>
+ <translation>O campo notAfter do certificado contén unha data non válida</translation>
+ </message>
+ <message>
+ <source>The certificate is self-signed, and untrusted</source>
+ <translation>O certificado está auto-asinado e non é fiábel</translation>
+ </message>
+ <message>
+ <source>The root certificate of the certificate chain is self-signed, and untrusted</source>
+ <translation>O certificado raíz da cadea de certificados está auto-asinado e non é fiábel</translation>
+ </message>
+ <message>
+ <source>The issuer certificate of a locally looked up certificate could not be found</source>
+ <translation>Non foi posíbel atopar o certificado emisor dun certificado que se procurou localmente</translation>
+ </message>
+ <message>
+ <source>No certificates could be verified</source>
+ <translation>Non foi posíbel verificar ningún certificado</translation>
+ </message>
+ <message>
+ <source>One of the CA certificates is invalid</source>
+ <translation>Un dos certificados da CA non é válido</translation>
+ </message>
+ <message>
+ <source>The basicConstraints path length parameter has been exceeded</source>
+ <translation>Superouse a lonxitude da rota do parámetro basicConstraints</translation>
+ </message>
+ <message>
+ <source>The supplied certificate is unsuitable for this purpose</source>
+ <translation>O certificado fornecido non é apropriada para este propósito</translation>
+ </message>
+ <message>
+ <source>The root CA certificate is not trusted for this purpose</source>
+ <translation>A autoridade de certificación raíz do certificado non é de confianza para este propósito</translation>
+ </message>
+ <message>
+ <source>The root CA certificate is marked to reject the specified purpose</source>
+ <translation>A autoridade de certificación raíz do certificado está instruída para rexeitar o propósito especificado</translation>
+ </message>
+ <message>
+ <source>The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate</source>
+ <translation>O certificado emisor do candidado actual rexeitouse porque o nome do asunto non coincide co do emisor do certificado actual</translation>
+ </message>
+ <message>
+ <source>The current candidate issuer certificate was rejected because its issuer name and serial number was present and did not match the authority key identifier of the current certificate</source>
+ <translation>O certificado emisor do candidado actual rexeitouse porque o nome do emisor e o número de serie están presentes pero non coinciden co identificador da autoridade da chave do certificado actual</translation>
+ </message>
+ <message>
+ <source>The peer did not present any certificate</source>
+ <translation>O parceiro non presentou certificado ningún</translation>
+ </message>
+ <message>
+ <source>The host name did not match any of the valid hosts for this certificate</source>
+ <translation>O nome do servidor non coincide con ningún dos válidos para este certificado</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Erro descoñecido</translation>
+ </message>
+ <message>
+ <source>Error creating SSL context (%1)</source>
+ <translation>Aconteceu un erro ao crear o contexto SSL (%1)</translation>
+ </message>
+ <message>
+ <source>Invalid or empty cipher list (%1)</source>
+ <translation>A lista de cifras ou non é válida ou está baleira (%1)</translation>
+ </message>
+ <message>
+ <source>Cannot provide a certificate with no key, %1</source>
+ <translation>Non é posíbel fornecer un certificado sen chave, %1</translation>
+ </message>
+ <message>
+ <source>Error loading local certificate, %1</source>
+ <translation>Aconteceu un erro ao cargar o certificado local, %1</translation>
+ </message>
+ <message>
+ <source>Error loading private key, %1</source>
+ <translation>Aconteceu un erro ao cargar a chave privada, %1</translation>
+ </message>
+ <message>
+ <source>Private key does not certify public key, %1</source>
+ <translation>A chave privada non certifica a chave pública, %1</translation>
+ </message>
+ <message>
+ <source>Error creating SSL session, %1</source>
+ <translation>Aconteceu un erro ao crear a sesión SSL, %1</translation>
+ </message>
+ <message>
+ <source>Error creating SSL session: %1</source>
+ <translation>Aconteceu un erro ao crear a sesión SSL: %1</translation>
+ </message>
+ <message>
+ <source>Unable to write data: %1</source>
+ <translation>Non foi posíbel escribir os datos: %1</translation>
+ </message>
+ <message>
+ <source>Unable to decrypt data: %1</source>
+ <translation>Non foi posíbel descifrar os datos: %1</translation>
+ </message>
+ <message>
+ <source>Error while reading: %1</source>
+ <translation>Aconteceu un erro ao ler: %1</translation>
+ </message>
+ <message>
+ <source>Error during SSL handshake: %1</source>
+ <translation>Aconteceu un erro durante a negociación SSL: %1</translation>
+ </message>
+</context>
+<context>
+ <name>QStateMachine</name>
+ <message>
+ <source>Missing initial state in compound state &apos;%1&apos;</source>
+ <translation>Falta o estado inicial no estado composto «%1»</translation>
+ </message>
+ <message>
+ <source>Missing default state in history state &apos;%1&apos;</source>
+ <translation>Falta o estado predeterminado no estado histórico «%1»</translation>
+ </message>
+ <message>
+ <source>No common ancestor for targets and source of transition from state &apos;%1&apos;</source>
+ <translation>Non hai antecesor común para o destino e orixe da transición desde o estado «%1»</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Erro descoñecido</translation>
+ </message>
+</context>
+<context>
+ <name>QTDSDriver</name>
+ <message>
+ <source>Unable to open connection</source>
+ <translation>Non foi posíbel abrir a conexión</translation>
+ </message>
+ <message>
+ <source>Unable to use database</source>
+ <translation>Non foi posíbel empregar a base de datos</translation>
+ </message>
+</context>
+<context>
+ <name>QTcpServer</name>
+ <message>
+ <source>Operation on socket is not supported</source>
+ <translation>A operación no socket non está soportada</translation>
+ </message>
+</context>
+<context>
+ <name>QTextControl</name>
+ <message>
+ <source>&amp;Undo</source>
+ <translation>&amp;Desfacer</translation>
+ </message>
+ <message>
+ <source>&amp;Redo</source>
+ <translation>&amp;Refacer</translation>
+ </message>
+ <message>
+ <source>Cu&amp;t</source>
+ <translation>Cor&amp;tar</translation>
+ </message>
+ <message>
+ <source>&amp;Copy</source>
+ <translation>&amp;Copiar</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Link Location</source>
+ <translation>Copiar o &amp;enderezo da ligazón</translation>
+ </message>
+ <message>
+ <source>&amp;Paste</source>
+ <translation>A&amp;pegar</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>Borrar</translation>
+ </message>
+ <message>
+ <source>Select All</source>
+ <translation>Escoller todo</translation>
+ </message>
+</context>
+<context>
+ <name>QUnicodeControlCharacterMenu</name>
+ <message>
+ <source>LRM Left-to-right mark</source>
+ <translation>LRM Marca de esquerda cara á dereita</translation>
+ </message>
+ <message>
+ <source>RLM Right-to-left mark</source>
+ <translation>RLM Marca de dereita cara á esquerda</translation>
+ </message>
+ <message>
+ <source>ZWJ Zero width joiner</source>
+ <translation>ZWJ Nexo de ancho nulo</translation>
+ </message>
+ <message>
+ <source>ZWNJ Zero width non-joiner</source>
+ <translation>ZWNJ Non-nexo de ancho nulo</translation>
+ </message>
+ <message>
+ <source>ZWSP Zero width space</source>
+ <translation>ZWSP Espazo de ancho nulo</translation>
+ </message>
+ <message>
+ <source>LRE Start of left-to-right embedding</source>
+ <translation>LRE Inicio de incrustación da esquerda cara á dereita</translation>
+ </message>
+ <message>
+ <source>RLE Start of right-to-left embedding</source>
+ <translation>RLE Inicio de incrustación da dereita cara á esquerda</translation>
+ </message>
+ <message>
+ <source>LRO Start of left-to-right override</source>
+ <translation>LRO Inicio de excepción de esquerda cara á dereita</translation>
+ </message>
+ <message>
+ <source>RLO Start of right-to-left override</source>
+ <translation>RLO Inicio de excepción de dereita cara á esquerda</translation>
+ </message>
+ <message>
+ <source>PDF Pop directional formatting</source>
+ <translation>PDF Sacar a formatación direccional</translation>
+ </message>
+ <message>
+ <source>Insert Unicode control character</source>
+ <translation>Inserir un carácter de control Unicode</translation>
+ </message>
+</context>
+<context>
+ <name>QUdpSocket</name>
+ <message>
+ <source>This platform does not support IPv6</source>
+ <translation>Esta plataforma non admite IPv6</translation>
+ </message>
+</context>
+<context>
+ <name>QUndoGroup</name>
+ <message>
+ <source>Undo</source>
+ <translation>Desfacer</translation>
+ </message>
+ <message>
+ <source>Redo</source>
+ <translation>Facer de novo</translation>
+ </message>
+</context>
+<context>
+ <name>QUndoModel</name>
+ <message>
+ <source>&lt;empty&gt;</source>
+ <translation>&lt;baleiro&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>QUndoStack</name>
+ <message>
+ <source>Undo</source>
+ <translation>Desfacer</translation>
+ </message>
+ <message>
+ <source>Redo</source>
+ <translation>Facer de novo</translation>
+ </message>
+</context>
+<context>
+ <name>QWebFrame</name>
+ <message>
+ <source>Request cancelled</source>
+ <translation>Pedido cancelado</translation>
+ </message>
+ <message>
+ <source>Request blocked</source>
+ <translation>Pedido bloqueado</translation>
+ </message>
+ <message>
+ <source>Cannot show URL</source>
+ <translation>Non se pode mostrar o URL</translation>
+ </message>
+ <message>
+ <source>Frame load interrupted by policy change</source>
+ <translation>Interrompeuse a carga do marco por mor do troco de político</translation>
+ </message>
+ <message>
+ <source>Cannot show mimetype</source>
+ <translation>Non se pode mostrar o tipo mime</translation>
+ </message>
+ <message>
+ <source>File does not exist</source>
+ <translation>O ficheiro non existe</translation>
+ </message>
+</context>
+<context>
+ <name>QWebPage</name>
+ <message>
+ <source>Redirection limit reached</source>
+ <translation>Acadouse o límite de redireccións</translation>
+ </message>
+ <message>
+ <source>Bad HTTP request</source>
+ <translation>Pedido HTTP incorrecto</translation>
+ </message>
+ <message numerus="yes">
+ <source>%n file(s)</source>
+ <comment>number of chosen file</comment>
+ <translation>
+ <numerusform>%n ficheiro</numerusform>
+ <numerusform>%n ficheiros</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>Submit</source>
+ <comment>default label for Submit buttons in forms on web pages</comment>
+ <translation>Enviar</translation>
+ </message>
+ <message>
+ <source>Submit</source>
+ <comment>Submit (input element) alt text for &lt;input&gt; elements with no alt, title, or value</comment>
+ <translation>Enviar</translation>
+ </message>
+ <message>
+ <source>Reset</source>
+ <comment>default label for Reset buttons in forms on web pages</comment>
+ <translation>Reiniciar</translation>
+ </message>
+ <message>
+ <source>This is a searchable index. Enter search keywords: </source>
+ <comment>text that appears at the start of nearly-obsolete web pages in the form of a &apos;searchable index&apos;</comment>
+ <translation>Este é un índice con capacidade de procura. Introduza as palabras chave da procura: </translation>
+ </message>
+ <message>
+ <source>Choose File</source>
+ <comment>title for file button used in HTML forms</comment>
+ <translation>Escoller un ficheiro</translation>
+ </message>
+ <message>
+ <source>No file selected</source>
+ <comment>text to display in file button used in HTML forms when no file is selected</comment>
+ <translation>Non escolleu ningún ficheiro</translation>
+ </message>
+ <message>
+ <source>Open in New Window</source>
+ <comment>Open in New Window context menu item</comment>
+ <translation>Abrir nunha fiestra nova</translation>
+ </message>
+ <message>
+ <source>Save Link...</source>
+ <comment>Download Linked File context menu item</comment>
+ <translation>Gardar o ligado...</translation>
+ </message>
+ <message>
+ <source>Copy Link</source>
+ <comment>Copy Link context menu item</comment>
+ <translation>Copiar a ligazón</translation>
+ </message>
+ <message>
+ <source>Open Image</source>
+ <comment>Open Image in New Window context menu item</comment>
+ <translation>Abrir a imaxe</translation>
+ </message>
+ <message>
+ <source>Save Image</source>
+ <comment>Download Image context menu item</comment>
+ <translation>Gardar a imaxe</translation>
+ </message>
+ <message>
+ <source>Copy Image</source>
+ <comment>Copy Link context menu item</comment>
+ <translation>Copiar a imaxe</translation>
+ </message>
+ <message>
+ <source>Open Frame</source>
+ <comment>Open Frame in New Window context menu item</comment>
+ <translation>Abrir o marco</translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <comment>Copy context menu item</comment>
+ <translation>Copiar</translation>
+ </message>
+ <message>
+ <source>Go Back</source>
+ <comment>Back context menu item</comment>
+ <translation>Atrás</translation>
+ </message>
+ <message>
+ <source>Go Forward</source>
+ <comment>Forward context menu item</comment>
+ <translation>Adiante</translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <comment>Stop context menu item</comment>
+ <translation>Deter</translation>
+ </message>
+ <message>
+ <source>Reload</source>
+ <comment>Reload context menu item</comment>
+ <translation>Cargar de novo</translation>
+ </message>
+ <message>
+ <source>Cut</source>
+ <comment>Cut context menu item</comment>
+ <translation>Cortar</translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <comment>Paste context menu item</comment>
+ <translation>Apegar</translation>
+ </message>
+ <message>
+ <source>No Guesses Found</source>
+ <comment>No Guesses Found context menu item</comment>
+ <translation>Non se acharon conxecturas</translation>
+ </message>
+ <message>
+ <source>Ignore</source>
+ <comment>Ignore Spelling context menu item</comment>
+ <translation>Ignorar</translation>
+ </message>
+ <message>
+ <source>Add To Dictionary</source>
+ <comment>Learn Spelling context menu item</comment>
+ <translation>Engadir ao dicionario</translation>
+ </message>
+ <message>
+ <source>Search The Web</source>
+ <comment>Search The Web context menu item</comment>
+ <translation>Procurar na web</translation>
+ </message>
+ <message>
+ <source>Look Up In Dictionary</source>
+ <comment>Look Up in Dictionary context menu item</comment>
+ <translation>Procurar no dicionario</translation>
+ </message>
+ <message>
+ <source>Open Link</source>
+ <comment>Open Link context menu item</comment>
+ <translation>Abrir a ligazón</translation>
+ </message>
+ <message>
+ <source>Ignore</source>
+ <comment>Ignore Grammar context menu item</comment>
+ <translation>Ignorar</translation>
+ </message>
+ <message>
+ <source>Spelling</source>
+ <comment>Spelling and Grammar context sub-menu item</comment>
+ <translation>Ortografía</translation>
+ </message>
+ <message>
+ <source>Show Spelling and Grammar</source>
+ <comment>menu item title</comment>
+ <translation>Mostrar a ortografía e a gramática</translation>
+ </message>
+ <message>
+ <source>Hide Spelling and Grammar</source>
+ <comment>menu item title</comment>
+ <translation>Acochar a ortografía e a gramática</translation>
+ </message>
+ <message>
+ <source>Check Spelling</source>
+ <comment>Check spelling context menu item</comment>
+ <translation>Verificar a ortografía</translation>
+ </message>
+ <message>
+ <source>Check Spelling While Typing</source>
+ <comment>Check spelling while typing context menu item</comment>
+ <translation>Verificar a ortografía mentres se escribe</translation>
+ </message>
+ <message>
+ <source>Check Grammar With Spelling</source>
+ <comment>Check grammar with spelling context menu item</comment>
+ <translation>Verificar a gramática mentres se escribe</translation>
+ </message>
+ <message>
+ <source>Fonts</source>
+ <comment>Font context sub-menu item</comment>
+ <translation>Tipos de letra</translation>
+ </message>
+ <message>
+ <source>Bold</source>
+ <comment>Bold context menu item</comment>
+ <translation>Negriña</translation>
+ </message>
+ <message>
+ <source>Italic</source>
+ <comment>Italic context menu item</comment>
+ <translation>Cursiva</translation>
+ </message>
+ <message>
+ <source>Underline</source>
+ <comment>Underline context menu item</comment>
+ <translation>Subliñado</translation>
+ </message>
+ <message>
+ <source>Outline</source>
+ <comment>Outline context menu item</comment>
+ <translation>Contorno</translation>
+ </message>
+ <message>
+ <source>Direction</source>
+ <comment>Writing direction context sub-menu item</comment>
+ <translation>Dirección</translation>
+ </message>
+ <message>
+ <source>Text Direction</source>
+ <comment>Text direction context sub-menu item</comment>
+ <translation>Dirección do texto</translation>
+ </message>
+ <message>
+ <source>Default</source>
+ <comment>Default writing direction context menu item</comment>
+ <translation>Predeterminada</translation>
+ </message>
+ <message>
+ <source>Left to Right</source>
+ <comment>Left to Right context menu item</comment>
+ <translation>Da esquerda á dereita</translation>
+ </message>
+ <message>
+ <source>Right to Left</source>
+ <comment>Right to Left context menu item</comment>
+ <translation>Da dereita á esquerda</translation>
+ </message>
+ <message>
+ <source>Inspect</source>
+ <comment>Inspect Element context menu item</comment>
+ <translation>Inspeccionar</translation>
+ </message>
+ <message>
+ <source>No recent searches</source>
+ <comment>Label for only item in menu that appears when clicking on the search field image, when no searches have been performed</comment>
+ <translation>Non se procurou nada</translation>
+ </message>
+ <message>
+ <source>Recent searches</source>
+ <comment>label for first item in the menu that appears when clicking on the search field image, used as embedded menu title</comment>
+ <translation>Procuras recentes</translation>
+ </message>
+ <message>
+ <source>Clear recent searches</source>
+ <comment>menu item in Recent Searches menu that empties menu&apos;s contents</comment>
+ <translation>Limpar as procuras recentes</translation>
+ </message>
+ <message>
+ <source>Missing Plug-in</source>
+ <comment>Label text to be used when a plug-in is missing</comment>
+ <translation>Falta a extensión</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown filesize FTP directory listing item</comment>
+ <translation>Descoñecido</translation>
+ </message>
+ <message>
+ <source>%1 (%2x%3 pixels)</source>
+ <comment>Title string for images</comment>
+ <translation>%1 (%2x%3 píxeles)</translation>
+ </message>
+ <message>
+ <source>Loading...</source>
+ <comment>Media controller status message when the media is loading</comment>
+ <translation>Estase a cargar...</translation>
+ </message>
+ <message>
+ <source>Live Broadcast</source>
+ <comment>Media controller status message when watching a live broadcast</comment>
+ <translation>Retransmisión ao vivo</translation>
+ </message>
+ <message>
+ <source>Audio Element</source>
+ <comment>Media controller element</comment>
+ <translation>Elemento de son</translation>
+ </message>
+ <message>
+ <source>Video Element</source>
+ <comment>Media controller element</comment>
+ <translation>Elemento de video</translation>
+ </message>
+ <message>
+ <source>Mute Button</source>
+ <comment>Media controller element</comment>
+ <translation>Botón de silenciar</translation>
+ </message>
+ <message>
+ <source>Unmute Button</source>
+ <comment>Media controller element</comment>
+ <translation>Botón de quitar o silencio</translation>
+ </message>
+ <message>
+ <source>Play Button</source>
+ <comment>Media controller element</comment>
+ <translation>Botón de reproducir</translation>
+ </message>
+ <message>
+ <source>Pause Button</source>
+ <comment>Media controller element</comment>
+ <translation>Botón de pausar</translation>
+ </message>
+ <message>
+ <source>Slider</source>
+ <comment>Media controller element</comment>
+ <translation>Barra deslizante</translation>
+ </message>
+ <message>
+ <source>Slider Thumb</source>
+ <comment>Media controller element</comment>
+ <translation>Barra deslizante con miniaturas</translation>
+ </message>
+ <message>
+ <source>Rewind Button</source>
+ <comment>Media controller element</comment>
+ <translation>Botón de rebobinar</translation>
+ </message>
+ <message>
+ <source>Return to Real-time Button</source>
+ <comment>Media controller element</comment>
+ <translation>Botón de voltar ao tempo-real</translation>
+ </message>
+ <message>
+ <source>Elapsed Time</source>
+ <comment>Media controller element</comment>
+ <translation>Tempo transcorrido</translation>
+ </message>
+ <message>
+ <source>Remaining Time</source>
+ <comment>Media controller element</comment>
+ <translation>Tempo a faltar</translation>
+ </message>
+ <message>
+ <source>Status Display</source>
+ <comment>Media controller element</comment>
+ <translation>Visor do estado</translation>
+ </message>
+ <message>
+ <source>Fullscreen Button</source>
+ <comment>Media controller element</comment>
+ <translation>Botón de pantalla completa</translation>
+ </message>
+ <message>
+ <source>Seek Forward Button</source>
+ <comment>Media controller element</comment>
+ <translation>Botón de procura cara diante</translation>
+ </message>
+ <message>
+ <source>Seek Back Button</source>
+ <comment>Media controller element</comment>
+ <translation>Botón de procura cara atrás</translation>
+ </message>
+ <message>
+ <source>Audio element playback controls and status display</source>
+ <comment>Media controller element</comment>
+ <translation>Visor dos controles da reprodución do elemento de son e do estado</translation>
+ </message>
+ <message>
+ <source>Video element playback controls and status display</source>
+ <comment>Media controller element</comment>
+ <translation>Visor dos controles da reprodución do elemento de imaxe e do estado</translation>
+ </message>
+ <message>
+ <source>Mute audio tracks</source>
+ <comment>Media controller element</comment>
+ <translation>Silenciar as pistas de son</translation>
+ </message>
+ <message>
+ <source>Unmute audio tracks</source>
+ <comment>Media controller element</comment>
+ <translation>Desilenciar as pistas de son</translation>
+ </message>
+ <message>
+ <source>Begin playback</source>
+ <comment>Media controller element</comment>
+ <translation>Comeza a reprodución</translation>
+ </message>
+ <message>
+ <source>Pause playback</source>
+ <comment>Media controller element</comment>
+ <translation>Pór a reprodución en pausa</translation>
+ </message>
+ <message>
+ <source>Movie time scrubber</source>
+ <comment>Media controller element</comment>
+ <translation>Cursor do filme</translation>
+ </message>
+ <message>
+ <source>Movie time scrubber thumb</source>
+ <comment>Media controller element</comment>
+ <translation>Minuatura do cursor de posición do filme</translation>
+ </message>
+ <message>
+ <source>Rewind movie</source>
+ <comment>Media controller element</comment>
+ <translation>Rebobinar o filme</translation>
+ </message>
+ <message>
+ <source>Return streaming movie to real-time</source>
+ <comment>Media controller element</comment>
+ <translation>Voltar a tempo-real o filme en retransmisión</translation>
+ </message>
+ <message>
+ <source>Current movie time</source>
+ <comment>Media controller element</comment>
+ <translation>Momento actual do filme</translation>
+ </message>
+ <message>
+ <source>Remaining movie time</source>
+ <comment>Media controller element</comment>
+ <translation>Tempo a faltar do filme</translation>
+ </message>
+ <message>
+ <source>Current movie status</source>
+ <comment>Media controller element</comment>
+ <translation>Estado actual do filme</translation>
+ </message>
+ <message>
+ <source>Play movie in full-screen mode</source>
+ <comment>Media controller element</comment>
+ <translation>Reproducir o filme no modo a pantalla completa</translation>
+ </message>
+ <message>
+ <source>Seek quickly back</source>
+ <comment>Media controller element</comment>
+ <translation>Procurar cara atrás rapidamente</translation>
+ </message>
+ <message>
+ <source>Seek quickly forward</source>
+ <comment>Media controller element</comment>
+ <translation>Procurar cara diante rapidamente</translation>
+ </message>
+ <message>
+ <source>Indefinite time</source>
+ <comment>Media time description</comment>
+ <translation>Duración indefinida</translation>
+ </message>
+ <message>
+ <source>%1 days %2 hours %3 minutes %4 seconds</source>
+ <comment>Media time description</comment>
+ <translation>%1 días %2 horas %3 minutos %4 segundos</translation>
+ </message>
+ <message>
+ <source>%1 hours %2 minutes %3 seconds</source>
+ <comment>Media time description</comment>
+ <translation>%1 horas %2 minutos %3 segundos</translation>
+ </message>
+ <message>
+ <source>%1 minutes %2 seconds</source>
+ <comment>Media time description</comment>
+ <translation>%1 minutos %2 segundos</translation>
+ </message>
+ <message>
+ <source>%1 seconds</source>
+ <comment>Media time description</comment>
+ <translation>%1 segundos</translation>
+ </message>
+ <message>
+ <source>Scroll here</source>
+ <translation>Desprazar cara aquí</translation>
+ </message>
+ <message>
+ <source>Left edge</source>
+ <translation>Borde esquerdo</translation>
+ </message>
+ <message>
+ <source>Top</source>
+ <translation>Cume</translation>
+ </message>
+ <message>
+ <source>Right edge</source>
+ <translation>Borde dereito</translation>
+ </message>
+ <message>
+ <source>Bottom</source>
+ <translation>Fondo</translation>
+ </message>
+ <message>
+ <source>Page left</source>
+ <translation>Páxina á esquerda</translation>
+ </message>
+ <message>
+ <source>Page up</source>
+ <translation>Páxina en riba</translation>
+ </message>
+ <message>
+ <source>Page right</source>
+ <translation>Páxina á dereita</translation>
+ </message>
+ <message>
+ <source>Page down</source>
+ <translation>Páxina en baixo</translation>
+ </message>
+ <message>
+ <source>Scroll left</source>
+ <translation>Desprazar cara á esquerda</translation>
+ </message>
+ <message>
+ <source>Scroll up</source>
+ <translation>Desprazar cara arriba</translation>
+ </message>
+ <message>
+ <source>Scroll right</source>
+ <translation>Desprazar cara á dereita</translation>
+ </message>
+ <message>
+ <source>Scroll down</source>
+ <translation>Desprazar cara abaixo</translation>
+ </message>
+ <message>
+ <source>JavaScript Alert - %1</source>
+ <translation>Alerta de JavaScript: %1</translation>
+ </message>
+ <message>
+ <source>JavaScript Confirm - %1</source>
+ <translation>Confirmación de JavaScript: %1</translation>
+ </message>
+ <message>
+ <source>JavaScript Prompt - %1</source>
+ <translation>Pregunta de JavaScript: %1</translation>
+ </message>
+ <message>
+ <source>JavaScript Problem - %1</source>
+ <translation>Problema de JavaScript: %1</translation>
+ </message>
+ <message>
+ <source>The script on this page appears to have a problem. Do you want to stop the script?</source>
+ <translation>Parece que o script nesta páxina ten problemas. Desexa detelo?</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the next character</source>
+ <translation>Mover o cursor ao seguinte carácter</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the previous character</source>
+ <translation>Mover o cursor ao anterior carácter</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the next word</source>
+ <translation>Mover o cursor á seguinte palabra</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the previous word</source>
+ <translation>Mover o cursor á palabra anterior</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the next line</source>
+ <translation>Mover o cursor á seguinte liña</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the previous line</source>
+ <translation>Mover o cursor á liña anterior</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the start of the line</source>
+ <translation>Mover o cursor ao comezo da liña</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the end of the line</source>
+ <translation>Mover o cursor ao final da liña</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the start of the block</source>
+ <translation>Mover o cursor ao comezo do bloque</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the end of the block</source>
+ <translation>Mover o cursor ao final do bloque</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the start of the document</source>
+ <translation>Mover o cursor ao comezo do documento</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the end of the document</source>
+ <translation>Mover o cursor ao final do documento</translation>
+ </message>
+ <message>
+ <source>Select all</source>
+ <translation>Escoller todo</translation>
+ </message>
+ <message>
+ <source>Select to the next character</source>
+ <translation>Escoller até o seguinte carácter</translation>
+ </message>
+ <message>
+ <source>Select to the previous character</source>
+ <translation>Escoller até o anterior carácter</translation>
+ </message>
+ <message>
+ <source>Select to the next word</source>
+ <translation>Escoller até a seguinte palabra</translation>
+ </message>
+ <message>
+ <source>Select to the previous word</source>
+ <translation>Escoller até a anterior palabra</translation>
+ </message>
+ <message>
+ <source>Select to the next line</source>
+ <translation>Escoller até a seguinte liña</translation>
+ </message>
+ <message>
+ <source>Select to the previous line</source>
+ <translation>Escoller até a liña anterior</translation>
+ </message>
+ <message>
+ <source>Select to the start of the line</source>
+ <translation>Escoller até o comezo da liña</translation>
+ </message>
+ <message>
+ <source>Select to the end of the line</source>
+ <translation>Escoller até o final da liña</translation>
+ </message>
+ <message>
+ <source>Select to the start of the block</source>
+ <translation>Escoller até o comezo do bloque</translation>
+ </message>
+ <message>
+ <source>Select to the end of the block</source>
+ <translation>Escoller até o final do bloque</translation>
+ </message>
+ <message>
+ <source>Select to the start of the document</source>
+ <translation>Escoller até o comezo do documento</translation>
+ </message>
+ <message>
+ <source>Select to the end of the document</source>
+ <translation>Escoller até o final do documento</translation>
+ </message>
+ <message>
+ <source>Delete to the start of the word</source>
+ <translation>Escoller até o comezo da palabra</translation>
+ </message>
+ <message>
+ <source>Delete to the end of the word</source>
+ <translation>Borrar até o final da palabra</translation>
+ </message>
+ <message>
+ <source>Insert a new paragraph</source>
+ <translation>Inserir un parágrafo novo</translation>
+ </message>
+ <message>
+ <source>Insert a new line</source>
+ <translation>Inserir unha liña nova</translation>
+ </message>
+ <message>
+ <source>Paste and Match Style</source>
+ <translation>Estilo de apegar e casar</translation>
+ </message>
+ <message>
+ <source>Remove formatting</source>
+ <translation>Eliminar o formatado</translation>
+ </message>
+ <message>
+ <source>Strikethrough</source>
+ <translation>Riscada</translation>
+ </message>
+ <message>
+ <source>Subscript</source>
+ <translation>Subíndice</translation>
+ </message>
+ <message>
+ <source>Superscript</source>
+ <translation>Superíndice</translation>
+ </message>
+ <message>
+ <source>Insert Bulleted List</source>
+ <translation>Inserir unha lista con viñetas</translation>
+ </message>
+ <message>
+ <source>Insert Numbered List</source>
+ <translation>Inserir unha lista numerada</translation>
+ </message>
+ <message>
+ <source>Indent</source>
+ <translation>Sangrar</translation>
+ </message>
+ <message>
+ <source>Outdent</source>
+ <translation>Quitar sangría</translation>
+ </message>
+ <message>
+ <source>Center</source>
+ <translation>Centro</translation>
+ </message>
+ <message>
+ <source>Justify</source>
+ <translation>Xustificado</translation>
+ </message>
+ <message>
+ <source>Align Left</source>
+ <translation>Aliñar á esquerda</translation>
+ </message>
+ <message>
+ <source>Align Right</source>
+ <translation>Aliñar á dereita</translation>
+ </message>
+ <message>
+ <source>Web Inspector - %2</source>
+ <translation>Inspector de webs: %2</translation>
+ </message>
+</context>
+<context>
+ <name>QWhatsThisAction</name>
+ <message>
+ <source>What&apos;s This?</source>
+ <translation>Que é isto?</translation>
+ </message>
+</context>
+<context>
+ <name>QWidget</name>
+ <message>
+ <source>*</source>
+ <translation>*</translation>
+ </message>
+</context>
+<context>
+ <name>QWizard</name>
+ <message>
+ <source>Go Back</source>
+ <translation>Atrás</translation>
+ </message>
+ <message>
+ <source>&lt; &amp;Back</source>
+ <translation>&lt; &amp;Anterior</translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation>Continuar</translation>
+ </message>
+ <message>
+ <source>&amp;Next</source>
+ <translation>&amp;Seguinte</translation>
+ </message>
+ <message>
+ <source>&amp;Next &gt;</source>
+ <translation>&amp;Seguinte &gt;</translation>
+ </message>
+ <message>
+ <source>Commit</source>
+ <translation>Entregar</translation>
+ </message>
+ <message>
+ <source>Done</source>
+ <translation>Feito</translation>
+ </message>
+ <message>
+ <source>&amp;Finish</source>
+ <translation>&amp;Finalizar</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+ <message>
+ <source>Help</source>
+ <translation>Axuda</translation>
+ </message>
+ <message>
+ <source>&amp;Help</source>
+ <translation>&amp;Axuda</translation>
+ </message>
+</context>
+<context>
+ <name>QWorkspace</name>
+ <message>
+ <source>Close</source>
+ <translation>Pechar</translation>
+ </message>
+ <message>
+ <source>Minimize</source>
+ <translation>Minimizar</translation>
+ </message>
+ <message>
+ <source>Restore Down</source>
+ <translation>Restaurar para abaixo</translation>
+ </message>
+ <message>
+ <source>&amp;Restore</source>
+ <translation>&amp;Restaurar</translation>
+ </message>
+ <message>
+ <source>&amp;Move</source>
+ <translation>&amp;Mover</translation>
+ </message>
+ <message>
+ <source>&amp;Size</source>
+ <translation>&amp;Tamaño</translation>
+ </message>
+ <message>
+ <source>Mi&amp;nimize</source>
+ <translation>Mi&amp;nimizar</translation>
+ </message>
+ <message>
+ <source>Ma&amp;ximize</source>
+ <translation>Ma&amp;ximizar</translation>
+ </message>
+ <message>
+ <source>&amp;Close</source>
+ <translation>&amp;Pechar</translation>
+ </message>
+ <message>
+ <source>Stay on &amp;Top</source>
+ <translation>Manter &amp;enriba</translation>
+ </message>
+ <message>
+ <source>Sh&amp;ade</source>
+ <translation>&amp;Repregar</translation>
+ </message>
+ <message>
+ <source>%1 - [%2]</source>
+ <translation>%1 - [%2]</translation>
+ </message>
+ <message>
+ <source>&amp;Unshade</source>
+ <translation>&amp;Despregar</translation>
+ </message>
+</context>
+<context>
+ <name>QXml</name>
+ <message>
+ <source>no error occurred</source>
+ <translation>non aconteceu ningún erro</translation>
+ </message>
+ <message>
+ <source>error triggered by consumer</source>
+ <translation>erro lanzado polo consumidor</translation>
+ </message>
+ <message>
+ <source>unexpected end of file</source>
+ <translation>fin inesperada do ficheiro</translation>
+ </message>
+ <message>
+ <source>more than one document type definition</source>
+ <translation>máis dunha definición do tipo de documento</translation>
+ </message>
+ <message>
+ <source>error occurred while parsing element</source>
+ <translation>aconteceu un erro ao interpretar o elemento</translation>
+ </message>
+ <message>
+ <source>tag mismatch</source>
+ <translation>desemparellamento de etiqueta</translation>
+ </message>
+ <message>
+ <source>error occurred while parsing content</source>
+ <translation>aconteceu un erro ao interpretar o contido</translation>
+ </message>
+ <message>
+ <source>unexpected character</source>
+ <translation>carácter inesperado</translation>
+ </message>
+ <message>
+ <source>invalid name for processing instruction</source>
+ <translation>nome non válido para procesar a instrución</translation>
+ </message>
+ <message>
+ <source>version expected while reading the XML declaration</source>
+ <translation>agardábase unha versión ao ler a declaración XML</translation>
+ </message>
+ <message>
+ <source>wrong value for standalone declaration</source>
+ <translation>valor incorrecto da declaración senlleira</translation>
+ </message>
+ <message>
+ <source>encoding declaration or standalone declaration expected while reading the XML declaration</source>
+ <translation>agardábase unha declaración de codificación ou unha declaración autónoma ao ler a declaración XML</translation>
+ </message>
+ <message>
+ <source>standalone declaration expected while reading the XML declaration</source>
+ <translation>agardábase unha declaración autónoma ao ler a declaración XML</translation>
+ </message>
+ <message>
+ <source>error occurred while parsing document type definition</source>
+ <translation>aconteceu un erro mentres se interpretaba a definición do tipo de documento</translation>
+ </message>
+ <message>
+ <source>letter is expected</source>
+ <translation>agárdase unha letra</translation>
+ </message>
+ <message>
+ <source>error occurred while parsing comment</source>
+ <translation>aconteceu erro mentres se interpretaba o comentario</translation>
+ </message>
+ <message>
+ <source>error occurred while parsing reference</source>
+ <translation>aconteceu un erro mentres se interpretaba a referencia</translation>
+ </message>
+ <message>
+ <source>internal general entity reference not allowed in DTD</source>
+ <translation>non se permiten referencias á entidade xeral interna no DTD</translation>
+ </message>
+ <message>
+ <source>external parsed general entity reference not allowed in attribute value</source>
+ <translation>non se permiten referencias a unha entidade xeral externa procesada no valor do atributo</translation>
+ </message>
+ <message>
+ <source>external parsed general entity reference not allowed in DTD</source>
+ <translation>non se permiten referencias a unha entidade xeral externa procesada no DTD</translation>
+ </message>
+ <message>
+ <source>unparsed entity reference in wrong context</source>
+ <translation>aparece un referencia a unha entidade non procesada no contexto errado</translation>
+ </message>
+ <message>
+ <source>recursive entities</source>
+ <translation>entidades recursivas</translation>
+ </message>
+ <message>
+ <source>error in the text declaration of an external entity</source>
+ <translation>erro na declaración de texto dunha entidade externa</translation>
+ </message>
+</context>
+<context>
+ <name>QXmlPatternistCLI</name>
+ <message>
+ <source>Warning in %1, at line %2, column %3: %4</source>
+ <translation>Aviso en %1, na liña %2 e columna %3: %4</translation>
+ </message>
+ <message>
+ <source>Warning in %1: %2</source>
+ <translation>Aviso en %1: %2</translation>
+ </message>
+ <message>
+ <source>Unknown location</source>
+ <translation>Lugar descoñecido</translation>
+ </message>
+ <message>
+ <source>Error %1 in %2, at line %3, column %4: %5</source>
+ <translation>Erro %1 en %2, na liña %3 e columna %4: %5</translation>
+ </message>
+ <message>
+ <source>Error %1 in %2: %3</source>
+ <translation>Aconteceu %1 en %2: %3</translation>
+ </message>
+</context>
+<context>
+ <name>QXmlStream</name>
+ <message>
+ <source>Extra content at end of document.</source>
+ <translation>Contido adicional na fin do documento.</translation>
+ </message>
+ <message>
+ <source>Invalid entity value.</source>
+ <translation>O valor da entidade non é válido.</translation>
+ </message>
+ <message>
+ <source>Invalid XML character.</source>
+ <translation>O carácter XML non é válido.</translation>
+ </message>
+ <message>
+ <source>Sequence &apos;]]&gt;&apos; not allowed in content.</source>
+ <translation>Non se permite a secuencia «]]&gt;» no contido.</translation>
+ </message>
+ <message>
+ <source>Encountered incorrectly encoded content.</source>
+ <translation>Atopouse contido codificado incorrectamente.</translation>
+ </message>
+ <message>
+ <source>Namespace prefix &apos;%1&apos; not declared</source>
+ <translation>Prefixo de espazo de nomes «%1» non declarado</translation>
+ </message>
+ <message>
+ <source>Illegal namespace declaration.</source>
+ <translation>Declaración ilegal de espazo de nomes.</translation>
+ </message>
+ <message>
+ <source>Attribute redefined.</source>
+ <translation>Atributo definido de novo.</translation>
+ </message>
+ <message>
+ <source>Unexpected character &apos;%1&apos; in public id literal.</source>
+ <translation>Carácter «%1» inesperado no texto público de identidade.</translation>
+ </message>
+ <message>
+ <source>Invalid XML version string.</source>
+ <translation>Cadea de versión do XML non válida.</translation>
+ </message>
+ <message>
+ <source>Unsupported XML version.</source>
+ <translation>Versión de XML non soportada.</translation>
+ </message>
+ <message>
+ <source>The standalone pseudo attribute must appear after the encoding.</source>
+ <translation>O pseudo atributo de autonomía debe aparecer após a codificación.</translation>
+ </message>
+ <message>
+ <source>%1 is an invalid encoding name.</source>
+ <translation>%1 non é un nome de codificación válido.</translation>
+ </message>
+ <message>
+ <source>Encoding %1 is unsupported</source>
+ <translation>A codificación %1 non está soportada</translation>
+ </message>
+ <message>
+ <source>Standalone accepts only yes or no.</source>
+ <translation>O atributo de autonomía só acepta «yes» ou «no».</translation>
+ </message>
+ <message>
+ <source>Invalid attribute in XML declaration.</source>
+ <translation>Atributo non válido na declaración XML.</translation>
+ </message>
+ <message>
+ <source>Premature end of document.</source>
+ <translation>Fin prematuro do documento.</translation>
+ </message>
+ <message>
+ <source>Invalid document.</source>
+ <translation>Documento non válido.</translation>
+ </message>
+ <message>
+ <source>Expected </source>
+ <translation>Agardábase</translation>
+ </message>
+ <message>
+ <source>, but got &apos;</source>
+ <translation>, pero obtívose «</translation>
+ </message>
+ <message>
+ <source>Unexpected &apos;</source>
+ <translation>Non se agardaba « </translation>
+ </message>
+ <message>
+ <source>Expected character data.</source>
+ <translation>Agardábanse datos de carácter.</translation>
+ </message>
+ <message>
+ <source>Recursive entity detected.</source>
+ <translation>Detectouse unha entidade recursiva.</translation>
+ </message>
+ <message>
+ <source>Start tag expected.</source>
+ <translation>Agardábase unha etiquera de inicio.</translation>
+ </message>
+ <message>
+ <source>NDATA in parameter entity declaration.</source>
+ <translation>NDATA na declaración da entidade parámetro.</translation>
+ </message>
+ <message>
+ <source>XML declaration not at start of document.</source>
+ <translation>Declaración XML non no inicio do documento.</translation>
+ </message>
+ <message>
+ <source>%1 is an invalid processing instruction name.</source>
+ <translation>%1 é un nome non válido de intrucción de procesamento.</translation>
+ </message>
+ <message>
+ <source>Invalid processing instruction name.</source>
+ <translation>Nome non válido de instrución de procesamento.</translation>
+ </message>
+ <message>
+ <source>%1 is an invalid PUBLIC identifier.</source>
+ <translation>%1 é un identificador PUBLICO non válido.</translation>
+ </message>
+ <message>
+ <source>Invalid XML name.</source>
+ <translation>Nome XML non válido.</translation>
+ </message>
+ <message>
+ <source>Opening and ending tag mismatch.</source>
+ <translation>As etiquetas de apertura e peche está desemparelladas.</translation>
+ </message>
+ <message>
+ <source>Entity &apos;%1&apos; not declared.</source>
+ <translation>A entidade «%1» non está declarada.</translation>
+ </message>
+ <message>
+ <source>Reference to unparsed entity &apos;%1&apos;.</source>
+ <translation>Referencia a unha entidade «%1» non procesada.</translation>
+ </message>
+ <message>
+ <source>Reference to external entity &apos;%1&apos; in attribute value.</source>
+ <translation>Referencia a unha entidade externa «%1» no valor do atributo.</translation>
+ </message>
+ <message>
+ <source>Invalid character reference.</source>
+ <translation>Referencia a un caracter non válido.</translation>
+ </message>
+</context>
+<context>
+ <name>QtXmlPatterns</name>
+ <message>
+ <source>%1 is an unsupported encoding.</source>
+ <translation>A codificación %1 non está soportada.</translation>
+ </message>
+ <message>
+ <source>%1 contains octets which are disallowed in the requested encoding %2.</source>
+ <translation>%1 contén octetos que non están permitidos na codificación pedida, %2.</translation>
+ </message>
+ <message>
+ <source>The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character.</source>
+ <translation>O código %1, que aparece en %2 coa codificación %3 non é un carácter XML válido.</translation>
+ </message>
+ <message>
+ <source>Network timeout.</source>
+ <translation>A rede esgotou o tempo-límite.</translation>
+ </message>
+ <message>
+ <source>Element %1 can&apos;t be serialized because it appears outside the document element.</source>
+ <translation>O elemento %1 non pode ser serializado porque aparece fora do elemento documento.</translation>
+ </message>
+ <message>
+ <source>Attribute %1 can&apos;t be serialized because it appears at the top level.</source>
+ <translation>O atributo %1 non pode ser serializado porque aparece no nivel máximo.</translation>
+ </message>
+ <message>
+ <source>Year %1 is invalid because it begins with %2.</source>
+ <translation>O ano %1 non é válido porque comeza con %2.</translation>
+ </message>
+ <message>
+ <source>Day %1 is outside the range %2..%3.</source>
+ <translation>O día %1 está fora do rango %2..%3.</translation>
+ </message>
+ <message>
+ <source>Month %1 is outside the range %2..%3.</source>
+ <translation>O mes %1 está fora do rango %2..%3.</translation>
+ </message>
+ <message>
+ <source>Overflow: Can&apos;t represent date %1.</source>
+ <translation>Desbordamento: Non é posíbel representar a data %1.</translation>
+ </message>
+ <message>
+ <source>Day %1 is invalid for month %2.</source>
+ <translation>O día %1 non é válido para o mes %2.</translation>
+ </message>
+ <message>
+ <source>Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; </source>
+ <translation>A hora 24:%1:%2.%3 non é válida. A hora é 24, pero os minutos, segundos e milisegundos non son todos 0; </translation>
+ </message>
+ <message>
+ <source>Time %1:%2:%3.%4 is invalid.</source>
+ <translation>A hora %1:%2:%3.%4 non é válida.</translation>
+ </message>
+ <message>
+ <source>Overflow: Date can&apos;t be represented.</source>
+ <translation>Desbordamento: Non se pode representar a data.</translation>
+ </message>
+ <message>
+ <source>At least one component must be present.</source>
+ <translation>Debe estar presente polo menos unha compoñente.</translation>
+ </message>
+ <message>
+ <source>At least one time component must appear after the %1-delimiter.</source>
+ <translation>Debe aparecer cando menos unha compoñente de tempo tras o delimitador %1.</translation>
+ </message>
+ <message>
+ <source>%1 is not a valid value of type %2.</source>
+ <translation>%1 non é un valor válido do tipo %2.</translation>
+ </message>
+ <message>
+ <source>When casting to %1 from %2, the source value cannot be %3.</source>
+ <translation>Cando se converte de %1 para %2 o valor de orixe non pode ser %3.</translation>
+ </message>
+ <message>
+ <source>Integer division (%1) by zero (%2) is undefined.</source>
+ <translation>A división de enteiros (%1) por cero (%2) non está definida.</translation>
+ </message>
+ <message>
+ <source>Division (%1) by zero (%2) is undefined.</source>
+ <translation>A división (%1) por cero (%2) non está definida.</translation>
+ </message>
+ <message>
+ <source>Modulus division (%1) by zero (%2) is undefined.</source>
+ <translation>A división modular (%1) por cero (%2) non está definida.</translation>
+ </message>
+ <message>
+ <source>Dividing a value of type %1 by %2 (not-a-number) is not allowed.</source>
+ <translation>Non se permite dividir un valor do tipo %1 por %2 (non número).</translation>
+ </message>
+ <message>
+ <source>Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed.</source>
+ <translation>Non se permite dividir un valor do tipo %1 por %2 nin por %3 (máis ou menos cero).</translation>
+ </message>
+ <message>
+ <source>Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed.</source>
+ <translation>Non se permite multiplicar un valor do tipo %1 por %2 nin por %3 (máis ou menos infinito).</translation>
+ </message>
+ <message>
+ <source>A value of type %1 cannot have an Effective Boolean Value.</source>
+ <translation>Un valor do tipo %1 non pode ter un Valor Booleano Efectivo.</translation>
+ </message>
+ <message>
+ <source>Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values.</source>
+ <translation>Non pode calcularse o Valor Booleano Efectivo dunha secuencia que contén dous ou máis valores atómicos.</translation>
+ </message>
+ <message>
+ <source>Value %1 of type %2 exceeds maximum (%3).</source>
+ <translation>O valor %1 do tipo %2 supera o máximo (%3).</translation>
+ </message>
+ <message>
+ <source>Value %1 of type %2 is below minimum (%3).</source>
+ <translation>O valor %1 do tipo %2 é menor que o mínimo (%3).</translation>
+ </message>
+ <message>
+ <source>A value of type %1 must contain an even number of digits. The value %2 does not.</source>
+ <translation>Un valor do tipo %1 debe conter un número par de díxitos. O valor %2 non o ten.</translation>
+ </message>
+ <message>
+ <source>%1 is not valid as a value of type %2.</source>
+ <translation>%1 non é valido como valor do tipo %2.</translation>
+ </message>
+ <message>
+ <source>Ambiguous rule match.</source>
+ <translation>Coincidencia de regra ambigua.</translation>
+ </message>
+ <message>
+ <source>Operator %1 cannot be used on type %2.</source>
+ <translation>O operador %1 non pode ser usado co tipo %2.</translation>
+ </message>
+ <message>
+ <source>Operator %1 cannot be used on atomic values of type %2 and %3.</source>
+ <translation>O operador %1 non pode ser usado en valores atómicos dos tipos %2 nin %3.</translation>
+ </message>
+ <message>
+ <source>The namespace URI in the name for a computed attribute cannot be %1.</source>
+ <translation>A URI dun espazo de nomes no nome dun atributo calculado non pode ser %1.</translation>
+ </message>
+ <message>
+ <source>The name for a computed attribute cannot have the namespace URI %1 with the local name %2.</source>
+ <translation>O nome dun atributo calculado non pode ter a URI %1 de espazo de nomes co nome local %2.</translation>
+ </message>
+ <message>
+ <source>Type error in cast, expected %1, received %2.</source>
+ <translation>Aconteceu un erro de tipo na conversión, agardábase %1, recibiuse %2.</translation>
+ </message>
+ <message>
+ <source>When casting to %1 or types derived from it, the source value must be of the same type, or it must be a string literal. Type %2 is not allowed.</source>
+ <translation>Cando se convertía a %1 ou a un tipo derivado deste, o valor de orixe debe ser do mesmo tipo, ou debe ser unha cadea de texto. Non se permite o tipo %2.</translation>
+ </message>
+ <message>
+ <source>A comment cannot contain %1</source>
+ <translation>Un comentario non pode conter %1</translation>
+ </message>
+ <message>
+ <source>A comment cannot end with a %1.</source>
+ <translation>Un comentario non pode rematar cun %1.</translation>
+ </message>
+ <message>
+ <source>In a namespace constructor, the value for a namespace cannot be an empty string.</source>
+ <translation>O valor do espazo de nomes nun construtor de espazos de nome non pode ser unha cadea en branco.</translation>
+ </message>
+ <message>
+ <source>The prefix must be a valid %1, which %2 is not.</source>
+ <translation>O prefixo debe ser un %1 válido por valor, e %2 non o é.</translation>
+ </message>
+ <message>
+ <source>The prefix %1 cannot be bound.</source>
+ <translation>Non foi posíbel vincular o prefixo %1.</translation>
+ </message>
+ <message>
+ <source>Only the prefix %1 can be bound to %2 and vice versa.</source>
+ <translation>O prefixo %1 só pode estar vinculado a %2 e viceversa.</translation>
+ </message>
+ <message>
+ <source>An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place.</source>
+ <translation>Un nodo atributo non pode ser un fillo dun nodo documento. Polo tanto, o atributo %1 está fora de sitio.</translation>
+ </message>
+ <message>
+ <source>A library module cannot be evaluated directly. It must be imported from a main module.</source>
+ <translation>Non pode avaliarse directamente un módulo de biblioteca. Debe ser importada desde un módulo principal.</translation>
+ </message>
+ <message>
+ <source>No template by name %1 exists.</source>
+ <translation>Non hai ningún modelo chamado %1.</translation>
+ </message>
+ <message>
+ <source>A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type.</source>
+ <translation>Os valores do tipo %1 non poden ser predicados. Un predicado debe ter ou tipo numérico ou Valor Booleano Efectivo.</translation>
+ </message>
+ <message>
+ <source>A positional predicate must evaluate to a single numeric value.</source>
+ <translation>Un predicado posicional debe avaliarse a un único valor numérico.</translation>
+ </message>
+ <message>
+ <source>The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, %2 is invalid.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two.</source>
+ <translation>O último paso nunha rota debe conter ou nodos ou valores atómicos. Non pode ser unha mistura dos dous.</translation>
+ </message>
+ <message>
+ <source>The data of a processing instruction cannot contain the string %1</source>
+ <translation>Os datos dunha instrución de procesamento non poden conter a cadea %1</translation>
+ </message>
+ <message>
+ <source>No namespace binding exists for the prefix %1</source>
+ <translation>Non existe ningunha asociación cun espazo de nomes para o prefixo %1</translation>
+ </message>
+ <message>
+ <source>No namespace binding exists for the prefix %1 in %2</source>
+ <translation>Non existe ningunha asociación cun espazo de nomes para o prefixo %1 en %2</translation>
+ </message>
+ <message>
+ <source>%1 is an invalid %2</source>
+ <translation>%1 non é un %2 válido</translation>
+ </message>
+ <message>
+ <source>The parameter %1 is passed, but no corresponding %2 exists.</source>
+ <translation>Pasouse o parámetro %1, pero non existe o %2 correspondente.</translation>
+ </message>
+ <message>
+ <source>The parameter %1 is required, but no corresponding %2 is supplied.</source>
+ <translation>Requírese o parámetro %1, pero non se forneceu o %2 que lle corresponde.</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 takes at most %n argument(s). %2 is therefore invalid.</source>
+ <translation>
+ <numerusform>%1 leva como moito %n argumento, polo que %2 non é válido.</numerusform>
+ <numerusform>%1 leva como moito %n argumentos, polo que %2 non é válido.</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 requires at least %n argument(s). %2 is therefore invalid.</source>
+ <translation>
+ <numerusform>%1 require polo menos %n argumento, polo que %2 non é valido.</numerusform>
+ <numerusform>%1 require polo menos %n argumentos, polo que %2 non é válido.</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration.</source>
+ <translation>O primeiro argumento de %1 non pode ser do tipo %2. Debe ser un tipo numérico, xs:yearMonthDuration ou xs:dayTimeDuration.</translation>
+ </message>
+ <message>
+ <source>The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5.</source>
+ <translation>O primeiro argumento de %1 non pode ser do tipo %2. Debe ser de tipo %3, %4 ou %5.</translation>
+ </message>
+ <message>
+ <source>The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5.</source>
+ <translation>O segundo argumento de %1 non pode ser do tipo %2. Debe ser de tipo %3, %4 ou %5.</translation>
+ </message>
+ <message>
+ <source>%1 is not a valid XML 1.0 character.</source>
+ <translation>%1 non é un carácter válido de 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>
+ <translation>O nodo raíz do segundo argumento da función %1 debe ser un nodo documento. %2 non é un nodo documento.</translation>
+ </message>
+ <message>
+ <source>If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same.</source>
+ <translation>Se ambos os dous valores teñen desprazamentos de zona, deben ter o mesmo. %1 e %2 non son iguais.</translation>
+ </message>
+ <message>
+ <source>%1 was called.</source>
+ <translation>Chamouse a %1.</translation>
+ </message>
+ <message>
+ <source>%1 must be followed by %2 or %3, not at the end of the replacement string.</source>
+ <translation type="unfinished">%1 debe estar seguido por %2 ou %3, non na fin da cadea substituta.</translation>
+ </message>
+ <message>
+ <source>In the replacement string, %1 must be followed by at least one digit when not escaped.</source>
+ <translation type="unfinished">Na cadea substituta, %1 debe ir seguido de cando menos un díxito cando non
+estea escapada.</translation>
+ </message>
+ <message>
+ <source>In the replacement string, %1 can only be used to escape itself or %2, not %3</source>
+ <translation type="unfinished">Na cadea substituta, %1 só pode ser usado para escaparse a si mesmo ou %2,
+non %3.</translation>
+ </message>
+ <message>
+ <source>%1 matches newline characters</source>
+ <translation type="unfinished">%1 casa con caracteres de nova liña</translation>
+ </message>
+ <message>
+ <source>%1 and %2 match the start and end of a line.</source>
+ <translation type="unfinished">%1 e %2 casan con comezo e fin de liña</translation>
+ </message>
+ <message>
+ <source>Matches are case insensitive</source>
+ <translation type="unfinished">As concordancias non son sensíbeis á capitalización</translation>
+ </message>
+ <message>
+ <source>Whitespace characters are removed, except when they appear in character classes</source>
+ <translation type="unfinished">Os espazos en branco son eliminados, excepto se aparecen en clases de
+caracteres</translation>
+ </message>
+ <message>
+ <source>%1 is an invalid regular expression pattern: %2</source>
+ <translation type="unfinished">%1 é un padrón non válido de expresión regular: %2</translation>
+ </message>
+ <message>
+ <source>%1 is an invalid flag for regular expressions. Valid flags are:</source>
+ <translation type="unfinished">%1 é unha bandeira non válida de expresión regular. As valedoiras son:</translation>
+ </message>
+ <message>
+ <source>If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified.</source>
+ <translation type="unfinished">Se o primeiro argumento é a secuencia baleira ou unha cadea de lonxitude
+cero (sen espazo de nomes), non se pode especificar un prefixo.
+Especificouse o prefixo %1.</translation>
+ </message>
+ <message>
+ <source>It will not be possible to retrieve %1.</source>
+ <translation type="unfinished">Non será posíbel acadar %1.</translation>
+ </message>
+ <message>
+ <source>The default collection is undefined</source>
+ <translation type="unfinished">Non se definiu a colección predeterminada.</translation>
+ </message>
+ <message>
+ <source>%1 cannot be retrieved</source>
+ <translation type="unfinished">Non é posíbel acadar %1</translation>
+ </message>
+ <message>
+ <source>The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization).</source>
+ <translation type="unfinished">A forma de normalización %1 non está soportada. As formas soportadas son %2,
+%3, %4, %5 e ningunha, i.e. a cadea en branco (sen normalización).</translation>
+ </message>
+ <message>
+ <source>A zone offset must be in the range %1..%2 inclusive. %3 is out of range.</source>
+ <translation type="unfinished">O desprazamento de zona debe estar no intervalo %1..%2 inclusive. %3 está
+fora de intervalo.</translation>
+ </message>
+ <message>
+ <source>%1 is not a whole number of minutes.</source>
+ <translation type="unfinished">%1 non é un número absoluto de minutos.</translation>
+ </message>
+ <message>
+ <source>The URI cannot have a fragment</source>
+ <translation type="unfinished">A URI non pode ter un anaco</translation>
+ </message>
+ <message>
+ <source>Required cardinality is %1; got cardinality %2.</source>
+ <translation type="unfinished">A cardinalidade requirida é %1; obtívose a cardinalidade %2.</translation>
+ </message>
+ <message>
+ <source>The item %1 did not match the required type %2.</source>
+ <translation type="unfinished">O ítem %1 non é do tipo requirido %2.</translation>
+ </message>
+ <message>
+ <source>The variable %1 is unused</source>
+ <translation type="unfinished">A variábel %1 non é usada</translation>
+ </message>
+ <message>
+ <source>W3C XML Schema identity constraint selector</source>
+ <translation type="unfinished">Selector de restrición de identidade do esquema XML do W3C</translation>
+ </message>
+ <message>
+ <source>W3C XML Schema identity constraint field</source>
+ <translation type="unfinished">Campo de restrición de identidade do esquema XML do W3C</translation>
+ </message>
+ <message>
+ <source>A construct was encountered which is disallowed in the current language(%1).</source>
+ <translation type="unfinished">Atopouse unha construción que non está permitida na linguaxe actual (%1).</translation>
+ </message>
+ <message>
+ <source>%1 is an unknown schema type.</source>
+ <translation type="unfinished">%1 é un tipo de esquema descoñecido.</translation>
+ </message>
+ <message>
+ <source>A template with name %1 has already been declared.</source>
+ <translation type="unfinished">Xa se declarou un modelo co nome %1.</translation>
+ </message>
+ <message>
+ <source>%1 is not a valid numeric literal.</source>
+ <translation type="unfinished">%1 non é un texto numérico válido.</translation>
+ </message>
+ <message>
+ <source>Only one %1 declaration can occur in the query prolog.</source>
+ <translation type="unfinished">Só pode haber unha declaración de %1 no prólogo da procura.</translation>
+ </message>
+ <message>
+ <source>The initialization of variable %1 depends on itself</source>
+ <translation type="unfinished">A inicialización da variábel %1 depende de si mesma</translation>
+ </message>
+ <message>
+ <source>No variable with name %1 exists</source>
+ <translation type="unfinished">Non hai ningunha variábel chamada %1</translation>
+ </message>
+ <message>
+ <source>Version %1 is not supported. The supported XQuery version is 1.0.</source>
+ <translation type="unfinished">Non está soportada a versión %1. A versión soportada de XQuery é a 1.0.</translation>
+ </message>
+ <message>
+ <source>The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2.</source>
+ <translation type="unfinished">A codificación %1 non é válida. Só debe conter caracteres Latinos, non pode
+conter espazos, e debe casar coa expresión regular %2.</translation>
+ </message>
+ <message>
+ <source>No function with signature %1 is available</source>
+ <translation type="unfinished">Non está dispoñíbel ningunha función coa sinatura %1</translation>
+ </message>
+ <message>
+ <source>A default namespace declaration must occur before function, variable, and option declarations.</source>
+ <translation type="unfinished">Debe haber unha declaración dun espazo de nomes predeterminado antes das
+declaracións de funcións, variábeis e opcións.</translation>
+ </message>
+ <message>
+ <source>Namespace declarations must occur before function, variable, and option declarations.</source>
+ <translation type="unfinished">Debe haber declaracións dun espazo de nomes antes das declaracións de
+funcións, variábeis e opcións.</translation>
+ </message>
+ <message>
+ <source>Module imports must occur before function, variable, and option declarations.</source>
+ <translation type="unfinished">As importacións de módulos deben estar antes das declaracións de funcións,
+variábeis e opcións.</translation>
+ </message>
+ <message>
+ <source>The keyword %1 cannot occur with any other mode name.</source>
+ <translation type="unfinished">A palabra-chave %1 só pode aparecer con calquera outro nome de modo.</translation>
+ </message>
+ <message>
+ <source>The value of attribute %1 must be of type %2, which %3 isn&apos;t.</source>
+ <translation type="unfinished">O valor do atributo %1 debe ser do tipo %2 e %3 non o é.</translation>
+ </message>
+ <message>
+ <source>It is not possible to redeclare prefix %1.</source>
+ <translation type="unfinished">Non é posíbel declarar de novo o prefixo %1.</translation>
+ </message>
+ <message>
+ <source>The prefix %1 cannot be bound. By default, it is already bound to the namespace %2.</source>
+ <translation type="unfinished">Non foi posíbel atopar o prefixo %1. Por omisión, xa está vinculado co
+espazo de nomes %2.</translation>
+ </message>
+ <message>
+ <source>Prefix %1 is already declared in the prolog.</source>
+ <translation type="unfinished">O prefixo %1 xa está declarado no prólogo.</translation>
+ </message>
+ <message>
+ <source>The name of an option must have a prefix. There is no default namespace for options.</source>
+ <translation type="unfinished">O nome dunha opción debe ter un prefixo. Non hai un espazo de nomes
+predeterminado para as opcións.</translation>
+ </message>
+ <message>
+ <source>The Schema Import feature is not supported, and therefore %1 declarations cannot occur.</source>
+ <translation type="unfinished">A funcionalidade de Importación de Esquema non está soportada, polo tanto
+non pode haber declaracións %1.</translation>
+ </message>
+ <message>
+ <source>The target namespace of a %1 cannot be empty.</source>
+ <translation type="unfinished">O espazo de nomes de destino dun %1 non pode estar en branco.</translation>
+ </message>
+ <message>
+ <source>The module import feature is not supported</source>
+ <translation type="unfinished">A funcionalidade de importación de módulos non está soportada</translation>
+ </message>
+ <message>
+ <source>A variable with name %1 has already been declared.</source>
+ <translation type="unfinished">Xa foi declarada unha variábel co nome %1.</translation>
+ </message>
+ <message>
+ <source>No value is available for the external variable with name %1.</source>
+ <translation type="unfinished">Non se dispón de ningún valor para a variábel externa chamada %1.</translation>
+ </message>
+ <message>
+ <source>A stylesheet function must have a prefixed name.</source>
+ <translation type="unfinished">As funcións de folla de estilo deben ter un nome con prefixo.</translation>
+ </message>
+ <message>
+ <source>The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this)</source>
+ <translation type="unfinished">O espazo de nomes das funcións definidas polo usuario non pode estar en
+branco (probe co prefixo predefinido %1, que está para casos como este)</translation>
+ </message>
+ <message>
+ <source>The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases.</source>
+ <translation type="unfinished">O espazo de nomes %1 está reservado; polo tanto as funcións definidas polo
+usuario non poden usalo. Ténteo co prefixo predefinido %2, que está para
+casos como este.</translation>
+ </message>
+ <message>
+ <source>The namespace of a user defined function in a library module must be equivalent to the module namespace. In other words, it should be %1 instead of %2</source>
+ <translation type="unfinished">O espazo de nomes dunha función definida polo usuario nun módulo de
+biblioteca debe ser equivalente ao espazo de nomes do módulo. Con outras
+verbas: debe ser %1 no canto de %2</translation>
+ </message>
+ <message>
+ <source>A function already exists with the signature %1.</source>
+ <translation type="unfinished">Xa existe unha función coa sinatura %1.</translation>
+ </message>
+ <message>
+ <source>No external functions are supported. All supported functions can be used directly, without first declaring them as external</source>
+ <translation type="unfinished">Non se soportan as funcións externas. Todas as funcións soportadas poden ser
+usadas directamente, non fai falla declaralas como externas</translation>
+ </message>
+ <message>
+ <source>An argument with name %1 has already been declared. Every argument name must be unique.</source>
+ <translation type="unfinished">Xa foi declarado un argumento co nome %1. O nome de cada argumento debe ser
+único.</translation>
+ </message>
+ <message>
+ <source>When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal.</source>
+ <translation type="unfinished">Cando se emprega unha función %1 para procurar nun patrón, o argumento debe
+ser unha referencia variábel ou unha cadea literal.</translation>
+ </message>
+ <message>
+ <source>In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching.</source>
+ <translation type="unfinished">Nun patrón XSL-T, o primeiro argumento da función %1 cando sexa empregada
+para facer procuras debe ser unha cadea de texto.</translation>
+ </message>
+ <message>
+ <source>In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching.</source>
+ <translation type="unfinished">Nun patrón XSL-T, o primeiro argumento da función %1 cando sexa empregada
+para facer procuras debe ser unha cadea de texto ou unha referencia variábel.</translation>
+ </message>
+ <message>
+ <source>In an XSL-T pattern, function %1 cannot have a third argument.</source>
+ <translation type="unfinished">Nun patrón XSL-T, a función %1 non pode ter un terceiro argumento.</translation>
+ </message>
+ <message>
+ <source>In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching.</source>
+ <translation type="unfinished">Nun patrón XSL-T, só pode empregar para procuras as funcións %1 e %2, non a %
+3.</translation>
+ </message>
+ <message>
+ <source>In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can.</source>
+ <translation type="unfinished">Nun patrón XSL-T non pode empregarse o eixo %1, só os %2 e %3.</translation>
+ </message>
+ <message>
+ <source>%1 is an invalid template mode name.</source>
+ <translation type="unfinished">%1 non é un nome de modo válido do modelo.</translation>
+ </message>
+ <message>
+ <source>The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide.</source>
+ <translation type="unfinished">O nome dunha variábel asociada a unha expresión for debe ser diferente da
+variábel posicional. Por isto, as dúas variábeis chamadas %1 chocan.</translation>
+ </message>
+ <message>
+ <source>The Schema Validation Feature is not supported. Hence, %1-expressions may not be used.</source>
+ <translation type="unfinished">Non está soportada a funcionalidade de Validación do Esquema. Polo tanto, as
+expresións %1 non poden ser usadas.</translation>
+ </message>
+ <message>
+ <source>None of the pragma expressions are supported. Therefore, a fallback expression must be present</source>
+ <translation type="unfinished">Non está soportada ningunha das expresións pragma. Polo tanto, debe haber
+presente unha expresión de reserva</translation>
+ </message>
+ <message>
+ <source>Each name of a template parameter must be unique; %1 is duplicated.</source>
+ <translation type="unfinished">Os nomes dos parámetros do modelo deben ser únicos, %1 está duplicado.</translation>
+ </message>
+ <message>
+ <source>The %1-axis is unsupported in XQuery</source>
+ <translation type="unfinished">Non está soportado o eixo %1 en XQuery</translation>
+ </message>
+ <message>
+ <source>No function with name %1 is available.</source>
+ <translation type="unfinished">Non hai ningunha función chamada %1.</translation>
+ </message>
+ <message>
+ <source>The namespace URI cannot be the empty string when binding to a prefix, %1.</source>
+ <translation type="unfinished">A URI do espazo de nomes non pode ser unha cadea valeira cando se estexa a
+asociar cun prefixo, %1.</translation>
+ </message>
+ <message>
+ <source>%1 is an invalid namespace URI.</source>
+ <translation type="unfinished">%1 non é unha URI válida de espazo de nomes.</translation>
+ </message>
+ <message>
+ <source>It is not possible to bind to the prefix %1</source>
+ <translation type="unfinished">Non é posíbel asociar co prefixo %1</translation>
+ </message>
+ <message>
+ <source>Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared).</source>
+ <translation type="unfinished">O espazo de nomes %1 só pode estar vinculado a %2 (e está, en calquera caso,
+predeclarado).</translation>
+ </message>
+ <message>
+ <source>Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared).</source>
+ <translation type="unfinished">O prefixo %1 só pode estar vinculado a %2 (e está, en calquera caso,
+predeclarado).</translation>
+ </message>
+ <message>
+ <source>Two namespace declaration attributes have the same name: %1.</source>
+ <translation type="unfinished">Dous atributos na declaración dun espazo de nomes teñen o mesmo nome: %1.</translation>
+ </message>
+ <message>
+ <source>The namespace URI must be a constant and cannot use enclosed expressions.</source>
+ <translation type="unfinished">A URI do espazo de nomes debe ser constante e non pode conter expresións.</translation>
+ </message>
+ <message>
+ <source>An attribute with name %1 has already appeared on this element.</source>
+ <translation type="unfinished">Xa apareceu un atributo co nome %1 neste elemento.</translation>
+ </message>
+ <message>
+ <source>A direct element constructor is not well-formed. %1 is ended with %2.</source>
+ <translation type="unfinished">Hai un construtor directo dun elemento que non está ben formado. %1 remata
+con %2.</translation>
+ </message>
+ <message>
+ <source>The name %1 does not refer to any schema type.</source>
+ <translation type="unfinished">O nome %1 non se refire a ningún tipo de esquema.</translation>
+ </message>
+ <message>
+ <source>%1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works.</source>
+ <translation type="unfinished">%1 é un tipo complexo. Non é posíbel converter a tipos complexos. Porén, si
+que pode converter a tipos atómicos como %2.</translation>
+ </message>
+ <message>
+ <source>%1 is not an atomic type. Casting is only possible to atomic types.</source>
+ <translation type="unfinished">%1 non é un tipo atómico. Só é posíbel converter a tipos atómicos.</translation>
+ </message>
+ <message>
+ <source>%1 is not a valid name for a processing-instruction.</source>
+ <translation type="unfinished">%1 non é un nome válido para unha instrución de procesamento.</translation>
+ </message>
+ <message>
+ <source>%1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported.</source>
+ <translation type="unfinished">%1 non está nas declaracións de atributos ao alcance. Lembre que non está
+soportada a funcionalidade de importación de esquemas.</translation>
+ </message>
+ <message>
+ <source>The name of an extension expression must be in a namespace.</source>
+ <translation type="unfinished">O nome dunha expresión de extensión debe estar nun espazo de nomes.</translation>
+ </message>
+ <message>
+ <source>Element %1 is not allowed at this location.</source>
+ <translation type="unfinished">Neste lugar non se permite o elemento %1.</translation>
+ </message>
+ <message>
+ <source>Text nodes are not allowed at this location.</source>
+ <translation type="unfinished">Neste lugar non se permiten nodos de texto.</translation>
+ </message>
+ <message>
+ <source>Parse error: %1</source>
+ <translation type="unfinished">Erro de procesamento: %1</translation>
+ </message>
+ <message>
+ <source>The value of the XSL-T version attribute must be a value of type %1, which %2 isn&apos;t.</source>
+ <translation type="unfinished">O valor do atributo da versión de XSL-T debe ser un valor do tipo %1, e %2
+non o é.</translation>
+ </message>
+ <message>
+ <source>Running an XSL-T 1.0 stylesheet with a 2.0 processor.</source>
+ <translation type="unfinished">A executar unha folla de estilos XSL-T 1.0 cun procesador 2.0.</translation>
+ </message>
+ <message>
+ <source>Unknown XSL-T attribute %1.</source>
+ <translation type="unfinished">Non se coñece o atributo XSL-T %1.</translation>
+ </message>
+ <message>
+ <source>Attribute %1 and %2 are mutually exclusive.</source>
+ <translation type="unfinished">Os atributos %1 e %2 exclúense mutuamente.</translation>
+ </message>
+ <message>
+ <source>In a simplified stylesheet module, attribute %1 must be present.</source>
+ <translation type="unfinished">Nun módulo de folla de estilos simplificada debe estar presente o atributo %
+1.</translation>
+ </message>
+ <message>
+ <source>If element %1 has no attribute %2, it cannot have attribute %3 or %4.</source>
+ <translation type="unfinished">Se o elemento %1 non ten o atributo %2 non pode ter os atributos %3 nin %4.</translation>
+ </message>
+ <message>
+ <source>Element %1 must have at least one of the attributes %2 or %3.</source>
+ <translation type="unfinished">O elemento %1 debe ter polo menos un dos atributos %2 ou %3.</translation>
+ </message>
+ <message>
+ <source>At least one mode must be specified in the %1-attribute on element %2.</source>
+ <translation type="unfinished">Debe especificarse polo menos un modo no atributo %1 do elemento %2.</translation>
+ </message>
+ <message>
+ <source>Element %1 must come last.</source>
+ <translation type="unfinished">O elemento %1 debe ir o último.</translation>
+ </message>
+ <message>
+ <source>At least one %1-element must occur before %2.</source>
+ <translation type="unfinished">Debe estar presente polo menos un elemento %1 antes de %2.</translation>
+ </message>
+ <message>
+ <source>Only one %1-element can appear.</source>
+ <translation type="unfinished">Só pode aparecer un elemento %1.</translation>
+ </message>
+ <message>
+ <source>At least one %1-element must occur inside %2.</source>
+ <translation type="unfinished">Debe estar presente polo menos un elemento %1 dentro de %2.</translation>
+ </message>
+ <message>
+ <source>When attribute %1 is present on %2, a sequence constructor cannot be used.</source>
+ <translation type="unfinished">Non se pode empregar un construtor de secuencia cando o atributo %1 está
+presente en %2.</translation>
+ </message>
+ <message>
+ <source>Element %1 must have either a %2-attribute or a sequence constructor.</source>
+ <translation type="unfinished">O elemento %1 debe ter ou un atributo %2 ou un construtor de secuencia.</translation>
+ </message>
+ <message>
+ <source>When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor.</source>
+ <translation type="unfinished">Non se pode subministrar un valor predeterminado mediante un atributo %1 nin
+un construtor de secuencia cando se require un parámetro.</translation>
+ </message>
+ <message>
+ <source>Element %1 cannot have children.</source>
+ <translation type="unfinished">O elemento %1 non pode ter fillos.</translation>
+ </message>
+ <message>
+ <source>Element %1 cannot have a sequence constructor.</source>
+ <translation type="unfinished">O elemento %1 non pode ter un construtor de secuencia.</translation>
+ </message>
+ <message>
+ <source>The attribute %1 cannot appear on %2, when it is a child of %3.</source>
+ <translation type="unfinished">O atributo %1 non pode aparecer en %2 cando é filla de %3.</translation>
+ </message>
+ <message>
+ <source>A parameter in a function cannot be declared to be a tunnel.</source>
+ <translation type="unfinished">Non se pode declarar como túnel un parámetro nunha función.</translation>
+ </message>
+ <message>
+ <source>This processor is not Schema-aware and therefore %1 cannot be used.</source>
+ <translation type="unfinished">Este procesador non é coñecedor do Schema e polo tanto %1 non pode
+empregarse.</translation>
+ </message>
+ <message>
+ <source>Top level stylesheet elements must be in a non-null namespace, which %1 isn&apos;t.</source>
+ <translation type="unfinished">Os elementos da folla de estilo de máximo nivel debe estar nun espazo de
+nomes non nulo, e %1 non o é.</translation>
+ </message>
+ <message>
+ <source>The value for attribute %1 on element %2 must either be %3 or %4, not %5.</source>
+ <translation type="unfinished">O valor do atributo %1 no elemento %2 debe ser %3 ou %4, non %5.</translation>
+ </message>
+ <message>
+ <source>Attribute %1 cannot have the value %2.</source>
+ <translation type="unfinished">O atributo %1 non pode ter o valor %2.</translation>
+ </message>
+ <message>
+ <source>The attribute %1 can only appear on the first %2 element.</source>
+ <translation type="unfinished">O atributo %1 só pode aparecer no primeiro elemento %2.</translation>
+ </message>
+ <message>
+ <source>At least one %1 element must appear as child of %2.</source>
+ <translation type="unfinished">Debe aparecer cando menos un elemento %1 como fillo de %2.</translation>
+ </message>
+ <message>
+ <source>Empty particle cannot be derived from non-empty particle.</source>
+ <translation type="unfinished">Unha partícula baleira non pode derivarse dunha non baleira.</translation>
+ </message>
+ <message>
+ <source>Derived particle is missing element %1.</source>
+ <translation type="unfinished">Na partícula derivada falta o elemento %1.</translation>
+ </message>
+ <message>
+ <source>Derived element %1 is missing value constraint as defined in base particle.</source>
+ <translation type="unfinished">No elemento derivado %1 falta a restrición aos valores definida na partícula
+de base.</translation>
+ </message>
+ <message>
+ <source>Derived element %1 has weaker value constraint than base particle.</source>
+ <translation type="unfinished">O elemento derivado %1 ten unha restrición aos valores máis feble do que a
+da súa partícula de base.</translation>
+ </message>
+ <message>
+ <source>Fixed value constraint of element %1 differs from value constraint in base particle.</source>
+ <translation type="unfinished">A restrición de valor fixo do elemento %1 é diferente da de valor da
+partícula base.</translation>
+ </message>
+ <message>
+ <source>Derived element %1 cannot be nillable as base element is not nillable.</source>
+ <translation type="unfinished">O elemento derivado %1 non se pode anular porque o elemento de base non se
+pode anular.</translation>
+ </message>
+ <message>
+ <source>Block constraints of derived element %1 must not be more weaker than in the base element.</source>
+ <translation type="unfinished">O bloque de restricións do elemento derivado %1 non pode ser máis feble do
+que son as do elemento de base.</translation>
+ </message>
+ <message>
+ <source>Simple type of derived element %1 cannot be validly derived from base element.</source>
+ <translation type="unfinished">O tipo simple do elemento derivado %1 non se pode derivar con validez a
+partir do elemento de base.</translation>
+ </message>
+ <message>
+ <source>Complex type of derived element %1 cannot be validly derived from base element.</source>
+ <translation type="unfinished">O tipo complexo do elemento derivado %1 non se pode derivar con validez a
+partir do elemento de base.</translation>
+ </message>
+ <message>
+ <source>Element %1 is missing in derived particle.</source>
+ <translation type="unfinished">Falta o elemento %1 na partícula derivada.</translation>
+ </message>
+ <message>
+ <source>Element %1 does not match namespace constraint of wildcard in base particle.</source>
+ <translation type="unfinished">O elemento %1 non casa coa restrición do espazo de nomes de comodín na
+partícula de base.</translation>
+ </message>
+ <message>
+ <source>Wildcard in derived particle is not a valid subset of wildcard in base particle.</source>
+ <translation type="unfinished">O comodín da partícula derivada non é un subconxunto válido do da partícula
+de base.</translation>
+ </message>
+ <message>
+ <source>processContent of wildcard in derived particle is weaker than wildcard in base particle.</source>
+ <translation type="unfinished">O processContent do comodín na partícula derivada é máis feble que o do
+comodín na partícula de base.</translation>
+ </message>
+ <message>
+ <source>Derived particle allows content that is not allowed in the base particle.</source>
+ <translation type="unfinished">A partícula derivada permite contido non permitido na partícula de base.</translation>
+ </message>
+ <message>
+ <source>%1 has inheritance loop in its base type %2.</source>
+ <translation type="unfinished">%1 ten un bucle de herdanza no seu tipo base %2.</translation>
+ </message>
+ <message>
+ <source>Circular inheritance of base type %1.</source>
+ <translation type="unfinished">Herdanza circular do tipo de base %1.</translation>
+ </message>
+ <message>
+ <source>Circular inheritance of union %1.</source>
+ <translation type="unfinished">Herdanza circular da unión %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">Non se permite que %1 derive de %2 debido a unha restrición xa que o este
+defíneo como final.</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">Non se permite que %1 derive de %2 por extensión debido a unha restrición xa
+que o este defíneo como final.</translation>
+ </message>
+ <message>
+ <source>Base type of simple type %1 cannot be complex type %2.</source>
+ <translation type="unfinished">O tipo base do tipo simple %1 non pode ser do tipo complexo %2.</translation>
+ </message>
+ <message>
+ <source>Simple type %1 cannot have direct base type %2.</source>
+ <translation type="unfinished">O tipo simple %1 non pode ter unha base directa do tipo %2.</translation>
+ </message>
+ <message>
+ <source>Simple type %1 is not allowed to have base type %2.</source>
+ <translation type="unfinished">Ao tipo simple %1 non se lle permite ter unha base do tipo %2.</translation>
+ </message>
+ <message>
+ <source>Simple type %1 can only have simple atomic type as base type.</source>
+ <translation type="unfinished">O tipo simple %1 só pode ter un tipo atómico simple como tipo de base.</translation>
+ </message>
+ <message>
+ <source>Simple type %1 cannot derive from %2 as the latter defines restriction as final.</source>
+ <translation type="unfinished">O tipo simple %1 non pode derivar do %2 xa que este define a restrición como
+final.</translation>
+ </message>
+ <message>
+ <source>Variety of item type of %1 must be either atomic or union.</source>
+ <translation type="unfinished">A variedade do tipo de elemento de %1 debe ser ou ou atómico ou unión.</translation>
+ </message>
+ <message>
+ <source>Variety of member types of %1 must be atomic.</source>
+ <translation type="unfinished">A variedade dos tipos membro de %1 debe sen atómica.</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">Non se permite que %1 derive de %2 por lista xa que esta defínea como final.</translation>
+ </message>
+ <message>
+ <source>Simple type %1 is only allowed to have %2 facet.</source>
+ <translation type="unfinished">Só se permite que o tipo simple %1 teña a faceta %2.</translation>
+ </message>
+ <message>
+ <source>Base type of simple type %1 must have variety of type list.</source>
+ <translation type="unfinished">O tipo base do tipo simple %1 debe ser variedade do tipo lista.</translation>
+ </message>
+ <message>
+ <source>Base type of simple type %1 has defined derivation by restriction as final.</source>
+ <translation type="unfinished">O tipo base do tipo simple %1 definiu a derivación por restrición como final.</translation>
+ </message>
+ <message>
+ <source>Item type of base type does not match item type of %1.</source>
+ <translation type="unfinished">O tipo de elemento do tipo de base non casa co tipo de elemento de %1.</translation>
+ </message>
+ <message>
+ <source>Simple type %1 contains not allowed facet type %2.</source>
+ <translation type="unfinished">O tipo simple %1 contén unha faceta non permitida do tipo %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">Non se permite que %1 derive de %2 por unión xa que este defínea como final.</translation>
+ </message>
+ <message>
+ <source>%1 is not allowed to have any facets.</source>
+ <translation type="unfinished">%1 non pode ter ningunha faceta.</translation>
+ </message>
+ <message>
+ <source>Base type %1 of simple type %2 must have variety of union.</source>
+ <translation type="unfinished">O tipo de base %1 do tipo simple %2 debe ser unha variedade de unión.</translation>
+ </message>
+ <message>
+ <source>Base type %1 of simple type %2 is not allowed to have restriction in %3 attribute.</source>
+ <translation type="unfinished">Non se permite que o tipo base %1 do tipo simple %2 teña restrición no
+atributo %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">O tipo membro %1 non se pode derivar do tipo membro %2 do tipo base %4 de %3.</translation>
+ </message>
+ <message>
+ <source>Derivation method of %1 must be extension because the base type %2 is a simple type.</source>
+ <translation type="unfinished">O método de derivación de %1 debe ser por extensión porque o tipo base %2 é
+un tipo simple.</translation>
+ </message>
+ <message>
+ <source>Complex type %1 has duplicated element %2 in its content model.</source>
+ <translation type="unfinished">O tipo complexo %1 contén por duplicado o elemento %2 no seu modelo de
+contido.</translation>
+ </message>
+ <message>
+ <source>Complex type %1 has non-deterministic content.</source>
+ <translation type="unfinished">O tipo complexo %1 ten contido non determinista.</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">Os atributos do tipo complexo %1 non son unha extensión válida dos atributos
+do tipo base %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">O modelo de contido do tipo complexo %1 non é unha extensión válida do
+modelo de contido de %2.</translation>
+ </message>
+ <message>
+ <source>Complex type %1 must have simple content.</source>
+ <translation type="unfinished">O tipo complexo %1 debe ter contido simple.</translation>
+ </message>
+ <message>
+ <source>Complex type %1 must have the same simple type as its base class %2.</source>
+ <translation type="unfinished">O tipo complexo %1 debe ter o mesmo tipo simple que a súa clase de base %2.</translation>
+ </message>
+ <message>
+ <source>Complex type %1 cannot be derived from base type %2%3.</source>
+ <translation type="unfinished">O tipo complexo %1 non pode derivarse do tipo de base %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">Os atributos do tipo complexo %1 non son unha restrición válida baseada nos
+atributos do tipo base %2: %3.</translation>
+ </message>
+ <message>
+ <source>Complex type %1 with simple content cannot be derived from complex base type %2.</source>
+ <translation type="unfinished">O tipo complexo %1 con contido simple non se pode derivar do tipo de base
+complexo %2.</translation>
+ </message>
+ <message>
+ <source>Item type of simple type %1 cannot be a complex type.</source>
+ <translation type="unfinished">O tipo de elemento do tipo simple %1 non pode ser un tipo complexo.</translation>
+ </message>
+ <message>
+ <source>Member type of simple type %1 cannot be a complex type.</source>
+ <translation type="unfinished">O tipo membro do tipo simple %1 non pode ser un tipo complexo.</translation>
+ </message>
+ <message>
+ <source>%1 is not allowed to have a member type with the same name as itself.</source>
+ <translation type="unfinished">Non se permite que %1 teña un tipo membro co mesmo nome ca el.</translation>
+ </message>
+ <message>
+ <source>%1 facet collides with %2 facet.</source>
+ <translation type="unfinished">A faceta %1 entra en conflito doa %2.</translation>
+ </message>
+ <message>
+ <source>%1 facet must have the same value as %2 facet of base type.</source>
+ <translation type="unfinished">A faceta %1 debe ter o mesmo valor que a %2 do tipo de base.</translation>
+ </message>
+ <message>
+ <source>%1 facet must be equal or greater than %2 facet of base type.</source>
+ <translation type="unfinished">A faceta %1 debe ser maior ou igual que a %2 do tipo de base.</translation>
+ </message>
+ <message>
+ <source>%1 facet must be less than or equal to %2 facet of base type.</source>
+ <translation type="unfinished">A faceta %1 debe ser menor que ou igual que a %2 do tipo de base.</translation>
+ </message>
+ <message>
+ <source>%1 facet contains invalid regular expression</source>
+ <translation type="unfinished">A faceta %1 contén unha expresión regular non válida</translation>
+ </message>
+ <message>
+ <source>Unknown notation %1 used in %2 facet.</source>
+ <translation type="unfinished">Empregouse a notación non válida %1 na faceta %2.</translation>
+ </message>
+ <message>
+ <source>%1 facet contains invalid value %2: %3.</source>
+ <translation type="unfinished">A faceta %1 contén o valor non válido %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">A faceta %1 non pode ser %2 nin %3 se a faceta %4 do tipo de base é %5.</translation>
+ </message>
+ <message>
+ <source>%1 facet cannot be %2 if %3 facet of base type is %4.</source>
+ <translation type="unfinished">A faceta %1 non pode ser %2 se a faceta %3 do tipo de base é %4.</translation>
+ </message>
+ <message>
+ <source>%1 facet must be less than or equal to %2 facet.</source>
+ <translation type="unfinished">A faceta %1 debe ser menor que ou igual que a %2.</translation>
+ </message>
+ <message>
+ <source>%1 facet must be less than %2 facet of base type.</source>
+ <translation type="unfinished">A faceta %1 debe ser menor que a faceta %2 do tipo de base.</translation>
+ </message>
+ <message>
+ <source>%1 facet and %2 facet cannot appear together.</source>
+ <translation type="unfinished">As facetas %1 e %2 non poden aparecer xuntas.</translation>
+ </message>
+ <message>
+ <source>%1 facet must be greater than %2 facet of base type.</source>
+ <translation type="unfinished">A faceta %1 debe ser maior que a faceta %2 do tipo de base.</translation>
+ </message>
+ <message>
+ <source>%1 facet must be less than %2 facet.</source>
+ <translation type="unfinished">A faceta %1 debe ser menor que a %2.</translation>
+ </message>
+ <message>
+ <source>%1 facet must be greater than or equal to %2 facet of base type.</source>
+ <translation type="unfinished">A faceta %1 deber ser maior ou igual que a faceta %2 do tipo de base.</translation>
+ </message>
+ <message>
+ <source>Simple type contains not allowed facet %1.</source>
+ <translation type="unfinished">O tipo simple contén a faceta non permitida %1.</translation>
+ </message>
+ <message>
+ <source>%1, %2, %3, %4, %5 and %6 facets are not allowed when derived by list.</source>
+ <translation type="unfinished">As facetas %1, %2, %3, %4, %5 e %6 non están permitidas cando se deriva por
+lista.</translation>
+ </message>
+ <message>
+ <source>Only %1 and %2 facets are allowed when derived by union.</source>
+ <translation type="unfinished">Só se permiten as facetas %1 e %2 cando se deriva por unión.</translation>
+ </message>
+ <message>
+ <source>%1 contains %2 facet with invalid data: %3.</source>
+ <translation type="unfinished">%1 contén a faceta %2 con datos non válidos: %3.</translation>
+ </message>
+ <message>
+ <source>Attribute group %1 contains attribute %2 twice.</source>
+ <translation type="unfinished">O grupo de atributos %1 contén o atributo %2 dúas veces.</translation>
+ </message>
+ <message>
+ <source>Attribute group %1 contains two different attributes that both have types derived from %2.</source>
+ <translation type="unfinished">O grupo de atributos %1 contén dous atributos diferentes con tipos derivados
+de %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">O grupo de atributos %1 contén o atributo %2, que ten restrición de valores
+pero un tipo que herda de %3.</translation>
+ </message>
+ <message>
+ <source>Complex type %1 contains attribute %2 twice.</source>
+ <translation type="unfinished">O tipo complexo %1 contén o atributo %2 dúas veces.</translation>
+ </message>
+ <message>
+ <source>Complex type %1 contains two different attributes that both have types derived from %2.</source>
+ <translation type="unfinished">O tipo complexo %1 contén dous atributos diferentes con tipos derivados de %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">O tipo complexo %1 contén o atributo %2, que ten restrición de valores pero
+un tipo que herda de %3.</translation>
+ </message>
+ <message>
+ <source>Element %1 is not allowed to have a value constraint if its base type is complex.</source>
+ <translation type="unfinished">O elemento %1 non se lle permite ter unha restrición de valores se o seu tipo
+de base
+é complexo.</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">O elemento %1 non se lle permite ter unha restrición de valores se o seu tipo
+deriva de %2.</translation>
+ </message>
+ <message>
+ <source>Value constraint of element %1 is not of elements type: %2.</source>
+ <translation type="unfinished">A restrición aos valores do elemento %1 non é do tipo elementos: %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">Non se permite que o elemento %1 teña afiliación a grupo de substitución xa
+que
+non é un elemento global.</translation>
+ </message>
+ <message>
+ <source>Type of element %1 cannot be derived from type of substitution group affiliation.</source>
+ <translation type="unfinished">O tipo do elemento %1 non pode derivarse do tipo de afiliación ao grupo de
+substitución.</translation>
+ </message>
+ <message>
+ <source>Value constraint of attribute %1 is not of attributes type: %2.</source>
+ <translation type="unfinished">A restrición aos valores do atributo %1 non é ao tipo do atributo: %2.</translation>
+ </message>
+ <message>
+ <source>Attribute %1 has value constraint but has type derived from %2.</source>
+ <translation type="unfinished">O atributo %1 ten restrición de valores pero ten tipo derivado de %2.</translation>
+ </message>
+ <message>
+ <source>%1 attribute in derived complex type must be %2 like in base type.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attribute %1 in derived complex type must have %2 value constraint like in base type.</source>
+ <translation type="unfinished">O atributo %1 do tipo complexo derivado debe ter unha restrición de valores
+%2
+como no tipo de base.</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>
+ </message>
+ <message>
+ <source>Attribute %1 in derived complex type must have %2 value constraint.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>processContent of base wildcard must be weaker than derived wildcard.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 exists twice with different types.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Particle contains non-deterministic wildcards.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Base attribute %1 is required but derived attribute is not.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Type of derived attribute %1 cannot be validly derived from type of base attribute.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Value constraint of derived attribute %1 does not match value constraint of base attribute.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Derived attribute %1 does not exist in the base definition.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Derived attribute %1 does not match the wildcard in the base definition.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Base attribute %1 is required but missing in derived definition.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Derived definition contains an %1 element that does not exists in the base definition</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Derived wildcard is not a subset of the base wildcard.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 of derived wildcard is not a valid restriction of %2 of base wildcard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attribute %1 from base type is missing in derived type.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Type of derived attribute %1 differs from type of base attribute.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Base definition contains an %1 element that is missing in the derived definition</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Can not process unknown element %1, expected elements are: %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 is not allowed in this scope, possible elements are: %2.</source>
+ <translation type="unfinished">Non se permite o elemento %1 neste ámbito, os elementos posíbeis son: %2.</translation>
+ </message>
+ <message>
+ <source>Child element is missing in that scope, possible child elements are: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Document is not a XML schema.</source>
+ <translation type="unfinished"></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>
+ </message>
+ <message>
+ <source>%1 attribute of %2 element contains invalid content: {%3}.</source>
+ <translation type="unfinished"></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>
+ </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>
+ </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>
+ </message>
+ <message>
+ <source>%1 element without %2 attribute is not allowed inside schema without target namespace.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 element is not allowed inside %2 element if %3 attribute is present.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 element has neither %2 attribute nor %3 child element.</source>
+ <translation type="unfinished">O elemento %1 non ten nin o atributo %2 nin o elemento fillo %3.</translation>
+ </message>
+ <message>
+ <source>%1 element with %2 child element must not have a %3 attribute.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 attribute of %2 element must be %3 or %4.</source>
+ <translation type="unfinished">O atributo %1 do elemento %2 debe ser %3 ou %4.</translation>
+ </message>
+ <message>
+ <source>%1 attribute of %2 element must have a value of %3.</source>
+ <translation type="unfinished">O atributo %1 do elemento %2 debe ter un valor de %3.</translation>
+ </message>
+ <message>
+ <source>%1 attribute of %2 element must have a value of %3 or %4.</source>
+ <translation type="unfinished">O atributo %1 do elemento %2 debe ter un valor de %3 ou %4.</translation>
+ </message>
+ <message>
+ <source>%1 element must not have %2 and %3 attribute together.</source>
+ <translation type="unfinished">O elemento %1 non debe ter á vez os atributos %2 e %3.</translation>
+ </message>
+ <message>
+ <source>Content of %1 attribute of %2 element must not be from namespace %3.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 attribute of %2 element must not be %3.</source>
+ <translation type="unfinished">O atributo %1 do elemento %2 non debe ser %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>
+ </message>
+ <message>
+ <source>Specifying use=&apos;prohibited&apos; inside an attribute group has no effect.</source>
+ <translation type="unfinished">Indicar use=&apos;prohibited&apos; dentro dun grupo de atributos non ten efecto.</translation>
+ </message>
+ <message>
+ <source>%1 element must have either %2 or %3 attribute.</source>
+ <translation type="unfinished">O elemento %1 debe ter o do atributo %2 ou o %3.</translation>
+ </message>
+ <message>
+ <source>%1 element must have either %2 attribute or %3 or %4 as child element.</source>
+ <translation type="unfinished">O elemento %1 debe ter ou o atributo %2 ou un elemento fillo %3 ou %4.</translation>
+ </message>
+ <message>
+ <source>%1 element requires either %2 or %3 attribute.</source>
+ <translation type="unfinished">O elemento %1 require o atributo %2 ou o %3.</translation>
+ </message>
+ <message>
+ <source>Text or entity references not allowed inside %1 element</source>
+ <translation type="unfinished">Non se permite referencias nin texto nin a entidades dentro dun elemento %1</translation>
+ </message>
+ <message>
+ <source>%1 attribute of %2 element must contain %3, %4 or a list of URIs.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 element is not allowed in this context.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 attribute of %2 element has larger value than %3 attribute.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Prefix of qualified name %1 is not defined.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 attribute of %2 element must either contain %3 or the other values.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Component with ID %1 has been defined previously.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 already defined.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attribute %1 already defined.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Type %1 already defined.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attribute group %1 already defined.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element group %1 already defined.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Notation %1 already defined.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Identity constraint %1 already defined.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Duplicated facets in simple type %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 references unknown %2 or %3 element %4.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 references identity constraint %2 that is no %3 or %4 element.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has a different number of fields from the identity constraint %2 that it references.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Base type %1 of %2 element cannot be resolved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Item type %1 of %2 element cannot be resolved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Member type %1 of %2 element cannot be resolved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Type %1 of %2 element cannot be resolved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Base type %1 of complex type cannot be resolved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 cannot have complex base type that has a %2.</source>
+ <translation type="unfinished"></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>
+ </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>
+ </message>
+ <message>
+ <source>Type of %1 element must be a simple type, %2 is not.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Substitution group %1 of %2 element cannot be resolved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Substitution group %1 has circular definition.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Duplicated element names %1 in %2 element.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reference %1 of %2 element cannot be resolved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Circular group reference for %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 element is not allowed in this scope</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 element cannot have %2 attribute with value other than %3.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 element cannot have %2 attribute with value other than %3 or %4.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 or %2 attribute of reference %3 does not match with the attribute declaration %4.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attribute group %1 has circular reference.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 attribute in %2 must have %3 use like in base type %4.</source>
+ <translation type="unfinished"></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>
+ </message>
+ <message>
+ <source>%1 has attribute wildcard but its base type %2 has not.</source>
+ <translation type="unfinished"></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>
+ </message>
+ <message>
+ <source>Enumeration facet contains invalid content: {%1} is not a value of type %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Namespace prefix of qualified name %1 is not defined.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 element %2 is not a valid restriction of the %3 element it redefines: %4.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 is not valid according to %2.</source>
+ <translation type="unfinished">%1 non é válido segundo %2.</translation>
+ </message>
+ <message>
+ <source>String content does not match the length facet.</source>
+ <translation type="unfinished">O contido da cadea non coincide coa faceta «length».</translation>
+ </message>
+ <message>
+ <source>String content does not match the minLength facet.</source>
+ <translation type="unfinished">O contido da cadea non coincide coa faceta «minLength».</translation>
+ </message>
+ <message>
+ <source>String content does not match the maxLength facet.</source>
+ <translation type="unfinished">O contido da cadea non coincide coa faceta «maxLength».</translation>
+ </message>
+ <message>
+ <source>String content does not match pattern facet.</source>
+ <translation type="unfinished">O contido da cadea non coincide coa faceta «pattern».</translation>
+ </message>
+ <message>
+ <source>String content is not listed in the enumeration facet.</source>
+ <translation type="unfinished">O contido da cadea non está enumerado na enumeración de facetas.</translation>
+ </message>
+ <message>
+ <source>Signed integer content does not match the maxInclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Signed integer content does not match the maxExclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Signed integer content does not match the minInclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Signed integer content does not match the minExclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Signed integer content is not listed in the enumeration facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Signed integer content does not match pattern facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Signed integer content does not match in the totalDigits facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unsigned integer content does not match the maxInclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unsigned integer content does not match the maxExclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unsigned integer content does not match the minInclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unsigned integer content does not match the minExclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unsigned integer content is not listed in the enumeration facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unsigned integer content does not match pattern facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unsigned integer content does not match in the totalDigits facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Double content does not match the maxInclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Double content does not match the maxExclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Double content does not match the minInclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Double content does not match the minExclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Double content is not listed in the enumeration facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Double content does not match pattern facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decimal content does not match in the fractionDigits facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decimal content does not match in the totalDigits facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Date time content does not match the maxInclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Date time content does not match the maxExclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Date time content does not match the minInclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Date time content does not match the minExclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Date time content is not listed in the enumeration facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Date time content does not match pattern facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Duration content does not match the maxInclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Duration content does not match the maxExclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Duration content does not match the minInclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Duration content does not match the minExclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Duration content is not listed in the enumeration facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Duration content does not match pattern facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Boolean content does not match pattern facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Binary content does not match the length facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Binary content does not match the minLength facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Binary content does not match the maxLength facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Binary content is not listed in the enumeration facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Invalid QName content: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>QName content is not listed in the enumeration facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>QName content does not match pattern facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Notation content is not listed in the enumeration facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>List content does not match length facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>List content does not match minLength facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>List content does not match maxLength facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>List content is not listed in the enumeration facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>List content does not match pattern facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Union content is not listed in the enumeration facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Union content does not match pattern facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Data of type %1 are not allowed to be empty.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 is missing child element.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>There is one IDREF value with no corresponding ID: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loaded schema file is invalid.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 contains invalid data.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>xsi:schemaLocation namespace %1 has already appeared earlier in the instance document.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>xsi:noNamespaceSchemaLocation cannot appear after the first no-namespace element or attribute.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No schema defined for validation.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No definition for element %1 available.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specified type %1 is not known to the schema.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 is not defined in this scope.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Declaration for element %1 does not exist.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 contains invalid content.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 is declared as abstract.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 is not nillable.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attribute %1 contains invalid data: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element contains content although it is nillable.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fixed value constraint not allowed if element is nillable.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specified type %1 is not validly substitutable with element type %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Complex type %1 is not allowed to be abstract.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 contains not allowed attributes.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 contains not allowed child element.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Content of element %1 does not match its type definition: %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Content of element %1 does not match defined value constraint.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 contains not allowed child content.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 contains not allowed text content.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 cannot contain other elements, as it has a fixed content.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 is missing required attribute %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attribute %1 does not match the attribute wildcard.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Declaration for attribute %1 does not exist.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 contains two attributes of type %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attribute %1 contains invalid content.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 contains unknown attribute %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Content of attribute %1 does not match its type definition: %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Content of attribute %1 does not match defined value constraint.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Non-unique value found for constraint %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Key constraint %1 contains absent fields.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Key constraint %1 contains references nillable element %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No referenced value found for key reference %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>More than one value found for field %1.</source>
+ <translation type="unfinished">Atopouse máis dun valor para o campo %1.</translation>
+ </message>
+ <message>
+ <source>Field %1 has no simple type.</source>
+ <translation type="unfinished">O campo %1 non ten un tipo simple.</translation>
+ </message>
+ <message>
+ <source>ID value &apos;%1&apos; is not unique.</source>
+ <translation type="unfinished">O valor do ID «%1» non é único.</translation>
+ </message>
+ <message>
+ <source>&apos;%1&apos; attribute contains invalid QName content: %2.</source>
+ <translation type="unfinished">O atributo «%1» contén contido non válido para un QName: %2.</translation>
+ </message>
+ <message>
+ <source>empty</source>
+ <translation type="unfinished">baleiro</translation>
+ </message>
+ <message>
+ <source>zero or one</source>
+ <translation type="unfinished">cero ou un</translation>
+ </message>
+ <message>
+ <source>exactly one</source>
+ <translation type="unfinished">exactamente un</translation>
+ </message>
+ <message>
+ <source>one or more</source>
+ <translation type="unfinished">un ou máis</translation>
+ </message>
+ <message>
+ <source>zero or more</source>
+ <translation type="unfinished">cero ou máis</translation>
+ </message>
+ <message>
+ <source>Required type is %1, but %2 was found.</source>
+ <translation type="unfinished">O tipo requirido é %1, pero atopouse %2.</translation>
+ </message>
+ <message>
+ <source>Promoting %1 to %2 may cause loss of precision.</source>
+ <translation type="unfinished">Converter de %1 a %2 pode causar perda de precisión.</translation>
+ </message>
+ <message>
+ <source>The focus is undefined.</source>
+ <translation type="unfinished">O foco non está definido.</translation>
+ </message>
+ <message>
+ <source>It&apos;s not possible to add attributes after any other kind of node.</source>
+ <translation type="unfinished">Non é posíbel engadir atributos tras calquera outro tipo de nodo.</translation>
+ </message>
+ <message>
+ <source>An attribute by name %1 has already been created.</source>
+ <translation type="unfinished">Xa se creou un atributo co nome %1.</translation>
+ </message>
+ <message>
+ <source>Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/translations/qt_help_de.ts b/translations/qt_help_de.ts
index 1f0cf3214b..ceee5a76ca 100644
--- a/translations/qt_help_de.ts
+++ b/translations/qt_help_de.ts
@@ -28,7 +28,7 @@
<name>QHelp</name>
<message>
<source>Untitled</source>
- <translation type="unfinished"></translation>
+ <translation>Ohne Titel</translation>
</message>
</context>
<context>
diff --git a/translations/qt_help_sl.ts b/translations/qt_help_sl.ts
index 7d76e58a23..db9ab3c231 100644
--- a/translations/qt_help_sl.ts
+++ b/translations/qt_help_sl.ts
@@ -177,7 +177,7 @@
</message>
<message>
<source>The referenced file %1 must be inside or within a subdirectory of (%2). Skipping it.</source>
- <translation>Sklicana datoteka %1 se mora nahajti v mapi (%1) ali njeni podmapi. Preskakujem jo.</translation>
+ <translation>Sklicana datoteka %1 se mora nahajti v mapi (%2) ali njeni podmapi. Preskakujem jo.</translation>
</message>
<message>
<source>The file %1 does not exist! Skipping it.</source>
diff --git a/translations/qt_sl.ts b/translations/qt_sl.ts
index 6bc552bafe..fb16feec1d 100644
--- a/translations/qt_sl.ts
+++ b/translations/qt_sl.ts
@@ -382,13 +382,13 @@ da je nameščen paket libgstreamer-plugins-base.</translation>
<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>VF razmerje zamrtja (%)</translation>
</message>
<message>
<source>Decay time (ms)</source>
<extracomment>DecayTime: Time over which reverberation is diminished.
</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Čas zamrtja (ms)</translation>
</message>
<message>
<source>Density (%)</source>
@@ -1519,11 +1519,11 @@ v
</message>
<message>
<source>Empty signal assignment</source>
- <translation type="unfinished">Prazna prireditev signalu</translation>
+ <translation>Prazna prireditev signalu</translation>
</message>
<message>
<source>Empty property assignment</source>
- <translation type="unfinished">Prazna prireditev lastnosti</translation>
+ <translation>Prazna prireditev lastnosti</translation>
</message>
<message>
<source>Attached properties cannot be used here</source>
@@ -1717,19 +1717,19 @@ v
<name>QDeclarativeCompositeTypeManager</name>
<message>
<source>Resource %1 unavailable</source>
- <translation>Vir %1 ni na voljo</translation>
+ <translation type="obsolete">Vir %1 ni na voljo</translation>
</message>
<message>
<source>Namespace %1 cannot be used as a type</source>
- <translation>Imenskega prostora %1 ni moč uporabiti kot vrste</translation>
+ <translation type="obsolete">Imenskega prostora %1 ni moč uporabiti kot vrste</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>Vrsta %1 ni na voljo</translation>
+ <translation type="obsolete">Vrsta %1 ni na voljo</translation>
</message>
</context>
<context>
@@ -1771,7 +1771,7 @@ v
</message>
<message>
<source>transaction: missing callback</source>
- <translation type="unfinished">transaction: manjka povratni klic</translation>
+ <translation>transaction: manjka povratni klic</translation>
</message>
<message>
<source>SQL: database version mismatch</source>
@@ -2113,6 +2113,25 @@ v
</message>
</context>
<context>
+ <name>QDeclarativeTypeData</name>
+ <message>
+ <source>Script %1 unavailable</source>
+ <translation>Skript %1 ni na voljo</translation>
+ </message>
+ <message>
+ <source>Type %1 unavailable</source>
+ <translation>Vrsta %1 ni na voljo</translation>
+ </message>
+ <message>
+ <source>Namespace %1 cannot be used as a type</source>
+ <translation>Imenskega prostora %1 ni moč uporabiti kot vrste</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>
@@ -2685,7 +2704,7 @@ Ali jo kljub temu želite izbrisati?</translation>
<name>QFontDatabase</name>
<message>
<source>Normal</source>
- <translation>Normalno</translation>
+ <translation>Običajno</translation>
</message>
<message>
<source>Bold</source>
@@ -2697,7 +2716,7 @@ Ali jo kljub temu želite izbrisati?</translation>
</message>
<message>
<source>Black</source>
- <translation type="unfinished"></translation>
+ <translation>Krepko</translation>
</message>
<message>
<source>Demi</source>
@@ -2924,7 +2943,7 @@ Ali jo kljub temu želite izbrisati?</translation>
<message>
<source>Connecting to host failed:
%1</source>
- <translation>Povezovanje z gostiteljem %1 ni uspelo:
+ <translation>Povezovanje z gostiteljem ni uspelo:
%1</translation>
</message>
<message>
@@ -3331,7 +3350,7 @@ Ali jo kljub temu želite izbrisati?</translation>
<name>QLibrary</name>
<message>
<source>Could not mmap &apos;%1&apos;: %2</source>
- <translation>Ni bilo moč izvesti funkcije mmap za »%1«: %2</translation>
+ <translation type="obsolete">Ni bilo moč izvesti funkcije mmap za »%1«: %2</translation>
</message>
<message>
<source>Plugin verification data mismatch in &apos;%1&apos;</source>
@@ -3339,7 +3358,7 @@ Ali jo kljub temu želite izbrisati?</translation>
</message>
<message>
<source>Could not unmap &apos;%1&apos;: %2</source>
- <translation>Ni bilo moč izvesti funkcije unmap za »%1«: %2</translation>
+ <translation type="obsolete">Ni bilo moč izvesti funkcije unmap za »%1«: %2</translation>
</message>
<message>
<source>The plugin &apos;%1&apos; uses incompatible Qt library. (%2.%3.%4) [%5]</source>
@@ -4618,15 +4637,15 @@ Izberite drugo ime datoteke.</translation>
</message>
<message>
<source>First page</source>
- <translation>&amp;Prva stran</translation>
+ <translation>Prva stran</translation>
</message>
<message>
<source>Last page</source>
- <translation>&amp;Zadnja stran</translation>
+ <translation>Zadnja stran</translation>
</message>
<message>
<source>Fit width</source>
- <translation>Prilagodi &amp;širini</translation>
+ <translation>Prilagodi širini</translation>
</message>
<message>
<source>Fit page</source>
@@ -6469,7 +6488,7 @@ Izberite drugo ime datoteke.</translation>
</message>
<message>
<source>Save edits?</source>
- <translation>&amp;Shranmi urejan?.</translation>
+ <translation>Ali shranim urejanja?.</translation>
</message>
<message>
<source>Cancel</source>
@@ -9770,428 +9789,4 @@ Izberite drugo ime datoteke.</translation>
<translation>Lastnost »%1« vsebuje neveljavno vsebino QName: %2.</translation>
</message>
</context>
-<context>
- <name></name>
- <message>
- <source>Remaining move time</source>
- <comment>QWebPage~|Media controller element</comment>
- <translation type="obsolete">Preostali čas filma</translation>
- </message>
- <message>
- <source>attribute group %1 contains attribute %2 twice</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">skupina lastnosti %1 dvakrat vsebuje lastnost %2</translation>
- </message>
- <message>
- <source>complex type %1 contains attribute %2 twice</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">kompleksna vrsta %1 dvakrat vsebuje lastnost %2</translation>
- </message>
- <message>
- <source>element %1 exists twice with different types</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 obstaja dvakrat, z različnima vrstama</translation>
- </message>
- <message>
- <source>can not process unknown element %1, expected elements are: %2</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">ni moč obdelati neznanega elementa %1, pričakovani elementi so: %2</translation>
- </message>
- <message>
- <source>element %1 is not allowed in this scope, possible elements are: %2</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 v tem obsegu ni dovoljen, možni elementi so: %2</translation>
- </message>
- <message>
- <source>child element is missing in that scope, possible child elements are: %1</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">v tem obsegu manjka podelement, možni podelementi so: %1</translation>
- </message>
- <message>
- <source>document is not a XML schema</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">dokument ni shema XML</translation>
- </message>
- <message>
- <source>%1 attribute of %2 element contains invalid content: {%3} is not a value of type %4</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">lastnost %1 elementa %2 vsebuje neveljavno vsebino: {%3} ni vrednost vrste %4</translation>
- </message>
- <message>
- <source>%1 attribute of %2 element contains invalid content: {%3}</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">lastnost %1 elementa %2 vsebuje neveljavno vsebino: {%3}</translation>
- </message>
- <message>
- <source>%1 element is not allowed inside %2 element if %3 attribute is present</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 znotraj elementa %2 ni dovoljen, če je prisotna lastnost %3</translation>
- </message>
- <message>
- <source>%1 element has neither %2 attribute nor %3 child element</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 nima niti lastnosti %2 niti podelementa %3</translation>
- </message>
- <message>
- <source>%1 element with %2 child element must not have a %3 attribute</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 s podelementom %2 ne sme imeti lastnosti %3</translation>
- </message>
- <message>
- <source>%1 attribute of %2 element must be %3 or %4</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">lastnost %1 elementa %2 mora biti %3 ali %4</translation>
- </message>
- <message>
- <source>%1 attribute of %2 element must have a value of %3</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">lastnost %1 elementa %2 mora imeti vrednost %3</translation>
- </message>
- <message>
- <source>%1 attribute of %2 element must have a value of %3 or %4</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">lastnost %1 elementa %2 mora imeti vrednost %3 ali %4</translation>
- </message>
- <message>
- <source>%1 element must not have %2 and %3 attribute together</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 hkrati ne sme imeti lastnosti %2 in %3</translation>
- </message>
- <message>
- <source>content of %1 attribute of %2 element must not be from namespace %3</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">vsebina lastnosti %1 elementa %2 ne sme biti iz imenskega prostora %3</translation>
- </message>
- <message>
- <source>%1 attribute of %2 element must not be %3</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">lastnost %1 elementa %2 ne sme biti %3</translation>
- </message>
- <message>
- <source>%1 element must have either %2 or %3 attribute</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 mora imeti lastnost %2 ali %3</translation>
- </message>
- <message>
- <source>%1 element requires either %2 or %3 attribute</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 potrebuje vsaj lastnost %2 ali %3</translation>
- </message>
- <message>
- <source>%1 element is not allowed in this context</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 v tem kontekstu ni dovoljen</translation>
- </message>
- <message>
- <source>component with id %1 has been defined previously</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">komponenta z ID-jem %1 je že bila definirana</translation>
- </message>
- <message>
- <source>element %1 already defined</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 je že definiran</translation>
- </message>
- <message>
- <source>attribute %1 already defined</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">lastnost %1 je že definirana</translation>
- </message>
- <message>
- <source>type %1 already defined</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">vrsta %1 je že definirana</translation>
- </message>
- <message>
- <source>attribute group %1 already defined</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">skupina lastnosti %1 je že definirana</translation>
- </message>
- <message>
- <source>element group %1 already defined</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">skupina elementov %1 je že definirana</translation>
- </message>
- <message>
- <source>notation %1 already defined</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">zapis %1 je že definiran</translation>
- </message>
- <message>
- <source>type of %1 element must be a simple type, %2 is not</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">vrsta elementa %1 mora biti preprosta, %2 to ni</translation>
- </message>
- <message>
- <source>duplicated element names %1 in %2 element</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">podvojeni imeni elementov %1 v elementu %2</translation>
- </message>
- <message>
- <source>%1 is not valid according to %2</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">%1 glede na %2 ni veljaven</translation>
- </message>
- <message>
- <source>invalid QName content: %1</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">neveljavna vsebina QName: %1</translation>
- </message>
- <message>
- <source>data of type %1 are not allowed to be empty</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">podatki vrste %1 ne smejo biti prazni</translation>
- </message>
- <message>
- <source>element %1 is missing child element</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">elementu %1 manjka podelement</translation>
- </message>
- <message>
- <source>%1 contains invalid data</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">%1 vsebuje neveljavne podatke</translation>
- </message>
- <message>
- <source>no definition for element %1 available</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">definicija za element %1 ni na voljo</translation>
- </message>
- <message>
- <source>element %1 is not defined in this scope</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 v tem obsegu ni definiran</translation>
- </message>
- <message>
- <source>declaration for element %1 does not exist</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">deklaracija elementa %1 ne obstaja</translation>
- </message>
- <message>
- <source>element %1 contains invalid content</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 vsebuje neveljavno vsebino</translation>
- </message>
- <message>
- <source>element %1 is declared as abstract</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 je deklariran kot abstrakten</translation>
- </message>
- <message>
- <source>complex type %1 is not allowed to be abstract</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">kompleksna vrsta %1 ne sme biti abstraktna</translation>
- </message>
- <message>
- <source>element %1 contains not allowed attributes</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 vsebuje nedovoljene lastnosti</translation>
- </message>
- <message>
- <source>element %1 contains not allowed child element</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 vsebuje nedovoljen podelement</translation>
- </message>
- <message>
- <source>content of element %1 does not match its type definition: %2</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">vsebina elementa %1 ne ustreza zanj določeni vrsti: %2</translation>
- </message>
- <message>
- <source>element %1 contains not allowed child content</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 vsebuje nedovoljeno vsebino v podelementih</translation>
- </message>
- <message>
- <source>element %1 contains not allowed text content</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 vsebuje nedovoljeno besedilno vsebino</translation>
- </message>
- <message>
- <source>element %1 can not contain other elements, as it has a fixed content</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 ne more vsebovati drugih elementov, ker ima fiksno vsebino</translation>
- </message>
- <message>
- <source>element %1 is missing required attribute %2</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">elementu %1 manjka obvezna lastnost %2</translation>
- </message>
- <message>
- <source>declaration for attribute %1 does not exist</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">deklaracija lastnosti %1 ne obstaja</translation>
- </message>
- <message>
- <source>element %1 contains two attributes of type %2</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 vsebuje dve lastnosti vrste %2</translation>
- </message>
- <message>
- <source>attribute %1 contains invalid content</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">lastnost %1 vsebuje neveljavno vsebino</translation>
- </message>
- <message>
- <source>element %1 contains unknown attribute %2</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 vsebuje neznano lastnost %2</translation>
- </message>
- <message>
- <source>more than one value found for field %1</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">za polje %1 je bila najdena več kot ena vrednost</translation>
- </message>
- <message>
- <source>field %1 has no simple type</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">polje %1 nima preproste vrste</translation>
- </message>
- <message>
- <source>ID value &apos;%1&apos; is not unique</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">Vrednost ID »%1« ni edinstvena</translation>
- </message>
- <message>
- <source>&apos;%1&apos; attribute contains invalid QName content: %2</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">Lastnost »%1« vsebuje neveljavno vsebino QName: %2</translation>
- </message>
- <message>
- <source>Cannot start playback.
-
-Check your Gstreamer installation and make sure you
-have libgstreamer-plugins-base installed.</source>
- <comment>Phonon::Gstreamer::MediaObject|</comment>
- <translation type="obsolete">Ni moč začeti predvajanja.
-
-Preverite namestitev GStreamerja in se prepričajte,
-da je nameščen paket libgstreamer-plugins-base.</translation>
- </message>
- <message>
- <source>Frequency band, %1 Hz</source>
- <comment>Phonon::MMF::AudioEqualizer|</comment>
- <translation type="obsolete">Frekvenčni pas, %1 Hz</translation>
- </message>
- <message>
- <source>audio equalizer</source>
- <comment>Phonon::MMF::EffectFactory|</comment>
- <translation type="obsolete">izenačevalnik zvoka</translation>
- </message>
- <message>
- <source>Bass boost</source>
- <comment>Phonon::MMF::EffectFactory|</comment>
- <translation type="obsolete">Ojačanje basov</translation>
- </message>
- <message>
- <source>Distance Attenuation</source>
- <comment>Phonon::MMF::EffectFactory|</comment>
- <translation type="obsolete">Utišanje zaradi razdalje</translation>
- </message>
- <message>
- <source>Environmental Reverb</source>
- <comment>Phonon::MMF::EffectFactory|</comment>
- <translation type="obsolete">Okoljsko odmevanje</translation>
- </message>
- <message>
- <source>Loudness</source>
- <comment>Phonon::MMF::EffectFactory|</comment>
- <translation type="obsolete">Glasnost</translation>
- </message>
- <message>
- <source>Source Orientation</source>
- <comment>Phonon::MMF::EffectFactory|</comment>
- <translation type="obsolete">Usmerjenost vira</translation>
- </message>
- <message>
- <source>Stereo Widening</source>
- <comment>Phonon::MMF::EffectFactory|</comment>
- <translation type="obsolete">Razširitev sterea</translation>
- </message>
- <message>
- <source>Invalid hostname</source>
- <comment>QObject|</comment>
- <translation type="obsolete">Neveljavno ime gostitelja</translation>
- </message>
- <message>
- <source>Operation not supported on %1</source>
- <comment>QObject|</comment>
- <translation type="obsolete">Dejanje na %1 ni podprto</translation>
- </message>
- <message>
- <source>Invalid URI: %1</source>
- <comment>QObject|</comment>
- <translation type="obsolete">Neveljaven URI: %1</translation>
- </message>
- <message>
- <source>Socket error on %1: %2</source>
- <comment>QObject|</comment>
- <translation type="obsolete">Napaka vtičnice na %1: %2</translation>
- </message>
- <message>
- <source>Remote host closed the connection prematurely on %1</source>
- <comment>QObject|</comment>
- <translation type="obsolete">Oddaljen gostitelj je predčasno prekinil povezavo na %1</translation>
- </message>
- <message>
- <source>No host name given</source>
- <comment>QObject|</comment>
- <translation type="obsolete">Podano ni bilo nobeno ime gostitelja</translation>
- </message>
- <message>
- <source>Private key does not certificate public key, %1</source>
- <comment>QSslSocket|</comment>
- <translation type="obsolete">Zasebni ključ ne potrjuje javnega ključa, %1</translation>
- </message>
- <message>
- <source>No variable by name %1 exists</source>
- <comment>QtXmlPatterns|</comment>
- <translation type="obsolete">Spremenljivka z imenom %1 ne obstaja</translation>
- </message>
- <message>
- <source>No value is available for the external variable by name %1.</source>
- <comment>QtXmlPatterns|</comment>
- <translation type="obsolete">Za zunanjo spremenljivko z imenom %1 ni na voljo nobene vrednosti.</translation>
- </message>
- <message>
- <source>A template by name %1 has already been declared.</source>
- <comment>QtXmlPatterns|</comment>
- <translation type="obsolete">Predloga z imenom %1 je že bila deklarirana.</translation>
- </message>
- <message>
- <source>The value of attribute %1 must of type %2, which %3 isn&apos;t.</source>
- <comment>QtXmlPatterns|</comment>
- <translation type="obsolete">Vrednost lastnosti %1 mora biti vrste %2, %3 pa to ni.</translation>
- </message>
- <message>
- <source>A variable by name %1 has already been declared.</source>
- <comment>QtXmlPatterns|</comment>
- <translation type="obsolete">Spremenljivka z imenom %1 je že bila deklarirana.</translation>
- </message>
- <message>
- <source>An argument by name %1 has already been declared. Every argument name must be unique.</source>
- <comment>QtXmlPatterns|</comment>
- <translation type="obsolete">Argument z imenom %1 je že bil deklariran. Vsako ime argumenta mora biti edinstveno.</translation>
- </message>
- <message>
- <source>No function by name %1 is available.</source>
- <comment>QtXmlPatterns|</comment>
- <translation type="obsolete">Na voljo ni nobene funkcije z imenom %1.</translation>
- </message>
- <message>
- <source>An attribute by name %1 has already appeared on this element.</source>
- <comment>QtXmlPatterns|</comment>
- <translation type="obsolete">Atribut z imenom %1 se je v tem elementu že pojavil.</translation>
- </message>
- <message>
- <source>Component with id %1 has been defined previously.</source>
- <comment>QtXmlPatterns|</comment>
- <translation type="obsolete">Komponenta z ID-jem %1 je že bila definirana.</translation>
- </message>
- <message>
- <source>Element %1 can not contain other elements, as it has a fixed content.</source>
- <comment>QtXmlPatterns|</comment>
- <translation type="obsolete">Element %1 ne more vsebovati drugih elementov, ker ima fiksno vsebino.</translation>
- </message>
-</context>
</TS>
diff --git a/util/unicode/main.cpp b/util/unicode/main.cpp
index f2ebe7c886..cfe5956ace 100644
--- a/util/unicode/main.cpp
+++ b/util/unicode/main.cpp
@@ -403,7 +403,7 @@ struct PropertyFlags {
// from DerivedAge.txt
QChar::UnicodeVersion age : 4;
int digitValue;
- uint line_break_class : 6;
+ LineBreakClass line_break_class;
int mirrorDiff : 16;
@@ -429,7 +429,7 @@ static int appendToSpecialCaseMap(const QList<int> &map)
QList<int> utf16map;
for (int i = 0; i < map.size(); ++i) {
int val = map.at(i);
- if (val > 0xffff) {
+ if (val >= 0x10000) {
utf16map << QChar::highSurrogate(val);
utf16map << QChar::lowSurrogate(val);
} else {
@@ -505,7 +505,7 @@ struct UnicodeData {
// from BidiMirroring.txt
int mirroredChar;
- // CompositionExclusions.txt
+ // DerivedNormalizationProps.txt
bool excludedComposition;
// computed position of unicode property set
@@ -726,8 +726,8 @@ static void readUnicodeData()
data.p.category = categoryMap.value(properties[UD_Category], QChar::NoCategory);
if (data.p.category == QChar::NoCategory)
qFatal("unassigned char category: %s", properties[UD_Category].constData());
- data.p.combiningClass = properties[UD_CombiningClass].toInt();
+ data.p.combiningClass = properties[UD_CombiningClass].toInt();
if (!combiningClassUsage.contains(data.p.combiningClass))
combiningClassUsage[data.p.combiningClass] = 1;
else
@@ -738,27 +738,29 @@ static void readUnicodeData()
if (!properties[UD_UpperCase].isEmpty()) {
int upperCase = properties[UD_UpperCase].toInt(&ok, 16);
Q_ASSERT(ok);
- if (qAbs(upperCase - codepoint) >= (1<<14))
+ int diff = upperCase - codepoint;
+ if (qAbs(diff) >= (1<<14))
qWarning() << "upperCaseDiff exceeded (" << hex << codepoint << "->" << upperCase << ")";
- data.p.upperCaseDiff = upperCase - codepoint;
- maxUpperCaseDiff = qMax(maxUpperCaseDiff, qAbs(data.p.upperCaseDiff));
- if (codepoint > 0xffff) {
- // if the condition below doesn't hold anymore we need to modify our case folding code
- //qDebug() << codepoint << QChar::highSurrogate(codepoint) << QChar::highSurrogate(foldMap.at(0));
+ data.p.upperCaseDiff = diff;
+ maxUpperCaseDiff = qMax(maxUpperCaseDiff, qAbs(diff));
+ if (codepoint >= 0x10000 || upperCase >= 0x10000) {
+ // if the conditions below doesn't hold anymore we need to modify our upper casing code
Q_ASSERT(QChar::highSurrogate(codepoint) == QChar::highSurrogate(upperCase));
+ Q_ASSERT(QChar::lowSurrogate(codepoint) + diff == QChar::lowSurrogate(upperCase));
}
}
if (!properties[UD_LowerCase].isEmpty()) {
int lowerCase = properties[UD_LowerCase].toInt(&ok, 16);
Q_ASSERT(ok);
- if (qAbs(lowerCase - codepoint) >= (1<<14))
+ int diff = lowerCase - codepoint;
+ if (qAbs(diff) >= (1<<14))
qWarning() << "lowerCaseDiff exceeded (" << hex << codepoint << "->" << lowerCase << ")";
- data.p.lowerCaseDiff = lowerCase - codepoint;
- maxLowerCaseDiff = qMax(maxLowerCaseDiff, qAbs(data.p.lowerCaseDiff));
- if (codepoint > 0xffff) {
- // if the condition below doesn't hold anymore we need to modify our case folding code
- //qDebug() << codepoint << QChar::highSurrogate(codepoint) << QChar::highSurrogate(foldMap.at(0));
+ data.p.lowerCaseDiff = diff;
+ maxLowerCaseDiff = qMax(maxLowerCaseDiff, qAbs(diff));
+ if (codepoint >= 0x10000 || lowerCase >= 0x10000) {
+ // if the conditions below doesn't hold anymore we need to modify our lower casing code
Q_ASSERT(QChar::highSurrogate(codepoint) == QChar::highSurrogate(lowerCase));
+ Q_ASSERT(QChar::lowSurrogate(codepoint) + diff == QChar::lowSurrogate(lowerCase));
}
}
// we want toTitleCase to map to ToUpper in case we don't have any titlecase.
@@ -767,14 +769,15 @@ static void readUnicodeData()
if (!properties[UD_TitleCase].isEmpty()) {
int titleCase = properties[UD_TitleCase].toInt(&ok, 16);
Q_ASSERT(ok);
- if (qAbs(titleCase - codepoint) >= (1<<14))
+ int diff = titleCase - codepoint;
+ if (qAbs(diff) >= (1<<14))
qWarning() << "titleCaseDiff exceeded (" << hex << codepoint << "->" << titleCase << ")";
- data.p.titleCaseDiff = titleCase - codepoint;
- maxTitleCaseDiff = qMax(maxTitleCaseDiff, qAbs(data.p.titleCaseDiff));
- if (codepoint > 0xffff) {
- // if the condition below doesn't hold anymore we need to modify our case folding code
- //qDebug() << codepoint << QChar::highSurrogate(codepoint) << QChar::highSurrogate(foldMap.at(0));
+ data.p.titleCaseDiff = diff;
+ maxTitleCaseDiff = qMax(maxTitleCaseDiff, qAbs(diff));
+ if (codepoint >= 0x10000 || titleCase >= 0x10000) {
+ // if the conditions below doesn't hold anymore we need to modify our title casing code
Q_ASSERT(QChar::highSurrogate(codepoint) == QChar::highSurrogate(titleCase));
+ Q_ASSERT(QChar::lowSurrogate(codepoint) + diff == QChar::lowSurrogate(titleCase));
}
}
@@ -1003,16 +1006,16 @@ static void readDerivedNormalizationProps()
&& d.decomposition.size() > 1) {
Q_ASSERT(d.decomposition.size() == 2);
- uint part1 = d.decomposition.at(0);
- uint part2 = d.decomposition.at(1);
+ int part1 = d.decomposition.at(0);
+ int part2 = d.decomposition.at(1);
// all non-starters are listed in DerivedNormalizationProps.txt
// and already excluded from composition
Q_ASSERT(unicodeData.value(part1, UnicodeData(part1)).p.combiningClass == 0);
++numLigatures;
- highestLigature = qMax(highestLigature, (int)part1);
- Ligature l = {(ushort)part1, (ushort)part2, codepoint};
+ highestLigature = qMax(highestLigature, part1);
+ Ligature l = {(ushort)part1, (ushort)part2, (ushort)codepoint};
ligatureHashes[part2].append(l);
}
}
@@ -1109,6 +1112,7 @@ static void computeUniqueProperties()
static void readLineBreak()
{
+ qDebug() << "Reading LineBreak.txt";
QFile f("data/LineBreak.txt");
if (!f.exists())
qFatal("Couldn't find LineBreak.txt");
@@ -1145,7 +1149,7 @@ static void readLineBreak()
Q_ASSERT(ok);
}
- LineBreakClass lb = line_break_map.value(l[1].trimmed(), LineBreak_Unassigned);
+ LineBreakClass lb = line_break_map.value(l[1], LineBreak_Unassigned);
if (lb == LineBreak_Unassigned)
qFatal("unassigned line break class: %s", l[1].constData());
@@ -1190,7 +1194,10 @@ static void readSpecialCasing()
bool ok;
int codepoint = l[0].trimmed().toInt(&ok, 16);
Q_ASSERT(ok);
- Q_ASSERT(codepoint <= 0xffff);
+
+ // if the condition below doesn't hold anymore we need to modify our
+ // lower/upper/title casing code and case folding code
+ Q_ASSERT(codepoint < 0x10000);
// qDebug() << "codepoint" << hex << codepoint;
// qDebug() << line;
@@ -1290,16 +1297,18 @@ static void readCaseFolding()
UnicodeData ud = unicodeData.value(codepoint, UnicodeData(codepoint));
if (foldMap.size() == 1) {
- if (qAbs(foldMap.at(0) - codepoint) >= (1<<14))
- qWarning() << "caseFoldDiff exceeded (" << hex << codepoint << "->" << foldMap.at(0) << ")";
- ud.p.caseFoldDiff = foldMap.at(0) - codepoint;
- maxCaseFoldDiff = qMax(maxCaseFoldDiff, qAbs(ud.p.caseFoldDiff));
- if (codepoint > 0xffff) {
- // if the condition below doesn't hold anymore we need to modify our case folding code
- //qDebug() << codepoint << QChar::highSurrogate(codepoint) << QChar::highSurrogate(foldMap.at(0));
- Q_ASSERT(QChar::highSurrogate(codepoint) == QChar::highSurrogate(foldMap.at(0)));
+ int caseFolded = foldMap.at(0);
+ int diff = caseFolded - codepoint;
+ if (qAbs(diff) >= (1<<14))
+ qWarning() << "caseFoldDiff exceeded (" << hex << codepoint << "->" << caseFolded << ")";
+ ud.p.caseFoldDiff = diff;
+ maxCaseFoldDiff = qMax(maxCaseFoldDiff, qAbs(diff));
+ if (codepoint >= 0x10000 || caseFolded >= 0x10000) {
+ // if the conditions below doesn't hold anymore we need to modify our case folding code
+ Q_ASSERT(QChar::highSurrogate(codepoint) == QChar::highSurrogate(caseFolded));
+ Q_ASSERT(QChar::lowSurrogate(codepoint) + diff == QChar::lowSurrogate(caseFolded));
}
- if (foldMap.at(0) != codepoint + ud.p.lowerCaseDiff)
+ if (caseFolded != codepoint + ud.p.lowerCaseDiff)
qDebug() << hex << codepoint;
} else {
qFatal("we currently don't support full case foldings");
@@ -1329,13 +1338,15 @@ static void readGraphemeBreak()
int comment = line.indexOf('#');
if (comment >= 0)
line = line.left(comment);
+ line.replace(" ", "");
if (line.isEmpty())
continue;
QList<QByteArray> l = line.split(';');
+ Q_ASSERT(l.size() == 2);
- QByteArray codes = l[0].trimmed();
+ QByteArray codes = l[0];
codes.replace("..", ".");
QList<QByteArray> cl = codes.split('.');
@@ -1348,7 +1359,7 @@ static void readGraphemeBreak()
Q_ASSERT(ok);
}
- GraphemeBreak brk = grapheme_break_map.value(l[1].trimmed(), GraphemeBreak_Unassigned);
+ GraphemeBreak brk = grapheme_break_map.value(l[1], GraphemeBreak_Unassigned);
if (brk == GraphemeBreak_Unassigned)
qFatal("unassigned grapheme break class: %s", l[1].constData());
@@ -1378,13 +1389,15 @@ static void readWordBreak()
int comment = line.indexOf('#');
if (comment >= 0)
line = line.left(comment);
+ line.replace(" ", "");
if (line.isEmpty())
continue;
QList<QByteArray> l = line.split(';');
+ Q_ASSERT(l.size() == 2);
- QByteArray codes = l[0].trimmed();
+ QByteArray codes = l[0];
codes.replace("..", ".");
QList<QByteArray> cl = codes.split('.');
@@ -1397,7 +1410,7 @@ static void readWordBreak()
Q_ASSERT(ok);
}
- WordBreak brk = word_break_map.value(l[1].trimmed(), WordBreak_Unassigned);
+ WordBreak brk = word_break_map.value(l[1], WordBreak_Unassigned);
if (brk == WordBreak_Unassigned)
qFatal("unassigned word break class: %s", l[1].constData());
@@ -1427,13 +1440,15 @@ static void readSentenceBreak()
int comment = line.indexOf('#');
if (comment >= 0)
line = line.left(comment);
+ line.replace(" ", "");
if (line.isEmpty())
continue;
QList<QByteArray> l = line.split(';');
+ Q_ASSERT(l.size() == 2);
- QByteArray codes = l[0].trimmed();
+ QByteArray codes = l[0];
codes.replace("..", ".");
QList<QByteArray> cl = codes.split('.');
@@ -1446,7 +1461,7 @@ static void readSentenceBreak()
Q_ASSERT(ok);
}
- SentenceBreak brk = sentence_break_map.value(l[1].trimmed(), SentenceBreak_Unassigned);
+ SentenceBreak brk = sentence_break_map.value(l[1], SentenceBreak_Unassigned);
if (brk == SentenceBreak_Unassigned)
qFatal("unassigned sentence break class: %s", l[1].constData());
@@ -1624,17 +1639,22 @@ static void readBlocks()
QByteArray blockName = line.mid(semicolon + 1);
int blockIndex = blockNames.indexOf(blockName);
- if (blockIndex < 0) {
+ if (blockIndex == -1) {
+ blockIndex = blockNames.size();
blockNames.append(blockName);
- blockIndex = blockNames.indexOf(blockName);
- Q_ASSERT(blockIndex >= 0);
}
- int dotdot = codePoints.indexOf("..");
- Q_ASSERT(dotdot >= 0);
- bool unused;
- int first = codePoints.left(dotdot).toInt(&unused, 16);
- int last = codePoints.mid(dotdot + 2).toInt(&unused, 16);
+ codePoints.replace("..", ".");
+ QList<QByteArray> cl = codePoints.split('.');
+
+ bool ok;
+ int first = cl[0].toInt(&ok, 16);
+ Q_ASSERT(ok);
+ int last = first;
+ if (cl.size() == 2) {
+ last = cl[1].toInt(&ok, 16);
+ Q_ASSERT(ok);
+ }
BlockInfo blockInfo = { blockIndex, first, last };
blockInfoList.append(blockInfo);
@@ -1670,7 +1690,6 @@ static void readScripts()
if (!f.exists())
qFatal("Couldn't find %s", files[i]);
-
f.open(QFile::ReadOnly);
while (!f.atEnd()) {
@@ -1693,28 +1712,25 @@ static void readScripts()
QByteArray scriptName = line.mid(semicolon + 1);
int scriptIndex = scriptNames.indexOf(scriptName);
- if (scriptIndex < 0) {
+ if (scriptIndex == -1) {
+ scriptIndex = scriptNames.size();
scriptNames.append(scriptName);
- scriptIndex = scriptNames.indexOf(scriptName);
- Q_ASSERT(scriptIndex >= 0);
}
- int dotdot = codePoints.indexOf("..");
- bool unused;
- int first = -1, last = -1;
- if (dotdot >= 0) {
- first = codePoints.left(dotdot).toInt(&unused, 16);
- last = codePoints.mid(dotdot + 2).toInt(&unused, 16);
- } else {
- first = codePoints.toInt(&unused, 16);
- }
+ codePoints.replace("..", ".");
+ QList<QByteArray> cl = codePoints.split('.');
- if (last != -1) {
- for (int i = first; i <= last; ++i)
- scriptAssignment[i] = scriptIndex;
- } else {
- scriptAssignment[first] = scriptIndex;
+ bool ok;
+ int first = cl[0].toInt(&ok, 16);
+ Q_ASSERT(ok);
+ int last = first;
+ if (cl.size() == 2) {
+ last = cl[1].toInt(&ok, 16);
+ Q_ASSERT(ok);
}
+
+ for (int i = first; i <= last; ++i)
+ scriptAssignment[i] = scriptIndex;
}
}
}
@@ -1849,21 +1865,18 @@ QByteArray createScriptTableDeclaration()
declaration += ", /* U+";
declaration += QByteArray::number(block, 16).rightJustified(4, '0');
declaration += '-';
- declaration +=
- QByteArray::number(block + unicodeBlockSize - 1, 16).rightJustified(4, '0');
+ declaration += QByteArray::number(block + unicodeBlockSize - 1, 16).rightJustified(4, '0');
declaration += " */\n";
} else {
const int value = extraBlockList.size() + scriptSentinel;
- const int offset =
- ((value - scriptSentinel) * unicodeBlockSize) + unicodeBlockCount;
+ const int offset = ((value - scriptSentinel) * unicodeBlockSize) + unicodeBlockCount;
declaration += " ";
declaration += QByteArray::number(value);
declaration += ", /* U+";
declaration += QByteArray::number(block, 16).rightJustified(4, '0');
declaration += '-';
- declaration +=
- QByteArray::number(block + unicodeBlockSize - 1, 16).rightJustified(4, '0');
+ declaration += QByteArray::number(block + unicodeBlockSize - 1, 16).rightJustified(4, '0');
declaration += " at offset ";
declaration += QByteArray::number(offset);
declaration += " */\n";
@@ -1880,16 +1893,14 @@ QByteArray createScriptTableDeclaration()
for (int i = 0; i < extraBlockList.size(); ++i) {
const int value = i + scriptSentinel;
- const int offset =
- ((value - scriptSentinel) * unicodeBlockSize) + unicodeBlockCount;
+ const int offset = ((value - scriptSentinel) * unicodeBlockSize) + unicodeBlockCount;
const ExtraBlock &extraBlock = extraBlockList.at(i);
const int block = extraBlock.block;
declaration += "\n\n /* U+";
declaration += QByteArray::number(block, 16).rightJustified(4, '0');
declaration += '-';
- declaration +=
- QByteArray::number(block + unicodeBlockSize - 1, 16).rightJustified(4, '0');
+ declaration += QByteArray::number(block + unicodeBlockSize - 1, 16).rightJustified(4, '0');
declaration += " at offset ";
declaration += QByteArray::number(offset);
declaration += " */\n ";
@@ -1905,9 +1916,24 @@ QByteArray createScriptTableDeclaration()
else
declaration += ' ';
}
+ if (declaration.endsWith(' '))
+ declaration.chop(1);
}
declaration += "\n};\n\n} // namespace QUnicodeTables\n\n";
+ declaration +=
+ "Q_CORE_EXPORT int QT_FASTCALL QUnicodeTables::script(uint ucs4)\n"
+ "{\n"
+ " if (ucs4 > 0xffff)\n"
+ " return Common;\n"
+ " int script = uc_scripts[ucs4 >> 7];\n"
+ " if (script < ScriptSentinel)\n"
+ " return script;\n"
+ " script = (((script - ScriptSentinel) * UnicodeBlockSize) + UnicodeBlockCount);\n"
+ " script = uc_scripts[script + (ucs4 & 0x7f)];\n"
+ " return script;\n"
+ "}\n\n";
+
qDebug("createScriptTableDeclaration: table size is %d bytes",
unicodeBlockCount + (extraBlockList.size() * unicodeBlockSize));
@@ -2168,6 +2194,11 @@ static QByteArray createPropertyInfo()
" return uc_properties + index;\n"
"}\n\n";
+ out += "Q_CORE_EXPORT QUnicodeTables::LineBreakClass QT_FASTCALL QUnicodeTables::lineBreakClass(uint ucs4)\n"
+ "{\n"
+ " return (QUnicodeTables::LineBreakClass)qGetProp(ucs4)->line_break_class;\n"
+ "}\n\n";
+
out += "static const ushort specialCaseMap[] = {\n ";
for (int i = 0; i < specialCaseMap.size(); ++i) {
out += QByteArray(" 0x") + QByteArray::number(specialCaseMap.at(i), 16);
@@ -2204,7 +2235,7 @@ static QByteArray createCompositionInfo()
const int SMP_BLOCKSIZE = 256;
const int SMP_SHIFT = 8;
- if(SMP_END <= highestComposedCharacter)
+ if (SMP_END <= highestComposedCharacter)
qFatal("end of table smaller than highest composed character at %x", highestComposedCharacter);
QList<DecompositionBlock> blocks;
@@ -2417,15 +2448,15 @@ static QByteArray createLigatureInfo()
int uc = block*BMP_BLOCKSIZE + i;
QList<Ligature> l = ligatureHashes.value(uc);
if (!l.isEmpty()) {
- b.decompositionPositions.append(tableIndex);
qSort(l);
ligatures.append(l.size());
- for (int i = 0; i < l.size(); ++i) {
- Q_ASSERT(l.at(i).u2 == uc);
- ligatures.append(l.at(i).u1);
- ligatures.append(l.at(i).ligature);
+ for (int j = 0; j < l.size(); ++j) {
+ Q_ASSERT(l.at(j).u2 == uc);
+ ligatures.append(l.at(j).u1);
+ ligatures.append(l.at(j).ligature);
}
+ b.decompositionPositions.append(tableIndex);
tableIndex += 2*l.size() + 1;
} else {
b.decompositionPositions.append(0xffff);
@@ -2450,12 +2481,11 @@ static QByteArray createLigatureInfo()
qDebug(" %d unique blocks in BMP.", blocks.size());
qDebug(" block data uses: %d bytes", bmp_block_data);
qDebug(" trie data uses : %d bytes", bmp_trie);
- qDebug(" ligature data uses : %d bytes", ligatures.size()*2);
- qDebug(" memory usage: %d bytes", bmp_mem + ligatures.size() * 2);
+ qDebug("\n ligature data uses : %d bytes", ligatures.size()*2);
+ qDebug(" memory usage: %d bytes", bmp_mem + ligatures.size() * 2);
QByteArray out;
-
out += "static const unsigned short uc_ligature_trie[] = {\n";
// first write the map
@@ -2531,6 +2561,7 @@ QByteArray createCasingInfo()
return out;
}
+
int main(int, char **)
{
initAgeMap();
@@ -2650,14 +2681,14 @@ int main(int, char **)
f.write("\n");
f.write(scriptEnumDeclaration);
f.write("\n");
- f.write(lineBreakClass);
- f.write("\n");
f.write(grapheme_break_string);
f.write("\n");
f.write(word_break_string);
f.write("\n");
f.write(sentence_break_string);
f.write("\n");
+ f.write(lineBreakClass);
+ f.write("\n");
f.write(methods);
f.write("} // namespace QUnicodeTables\n\n"
"QT_END_NAMESPACE\n\n"