summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Merge remote-tracking branch 'origin/5.13' into 5.14Liang Qi2019-09-1252-418/+699
|\ | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/qml/jsruntime/qv4engine.cpp src/quick/handlers/qquicktaphandler.cpp src/quick/items/qquicktableview.cpp Done-With: Richard Moe Gustavsen <richard.gustavsen@qt.io> Done-With: Ulf Hermann <ulf.hermann@qt.io> Done-With: Shawn Rutledge <shawn.rutledge@qt.io> Change-Id: If9558a33f01693ce96420c094e0b57dfff0626cd
| * Merge "Merge remote-tracking branch 'origin/5.13.1' into 5.13"Qt Forward Merge Bot2019-09-051-0/+107
| |\
| | * Merge remote-tracking branch 'origin/5.13.1' into 5.13Qt Forward Merge Bot2019-09-051-0/+107
| | |\ | |/ / | | | | | | Change-Id: I6f7088bc8d6f49003f1f3b7922d0d7ffb92f435d
| | * Add changes file for Qt 5.13.1v5.13.15.13.1Antti Kokko2019-08-081-0/+107
| | | | | | | | | | | | | | | | | | Change-Id: I1edcf6d4b755ae433498e4db9791dad487f4f5c1 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io> Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
| * | lancelot graphics test: prepare for new host info mechanismEirik Aavitsland2019-09-042-76/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The old hacky way of the test running a "hostinfo.sh" script is about to be removed, see https://codereview.qt-project.org/c/qt/qtbase/+/272694 Insted add the value of QT_QUICK_BACKEND (the only not-automatically-gathered important piece of host information) programmatically. As a driveby, update it from the obsolete name "QMLSCENE_DEVICE". Change-Id: If95a4ccc89ec1c32bf03743071261dfa1b8f5b4d Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
| * | Fix QQuickTextEdit triple click detectionJan Arve Sæther2019-08-292-6/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It should use the events own timestamps instead of a QTimer. It should give a more accurate measurement of tripleclicks, in addition to that qtestlib synthesized events (with timestamps) are respected. Task-number: QTBUG-77389 Change-Id: I4f553ec17b53a00b55519bb8082f1373aa9d130d Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
| * | Doc: Fix documentation warnings for qtdeclarativeTopi Reinio2019-08-2926-268/+336
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | After recent changes to QDoc, it now correctly warns about missing documentation for QML method parameters - fix all of these and also do some minor language editing. Remove duplicated entries for - \qmlmodule Qt.labs.qmlmodels - \group qtjavascript as they were causing issues. Change-Id: I55cd670cc8a0cc6427cdb7945dbd7c28ea94f796 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
| * | QQuickTableView: always relayout after a rebuildRichard Moe Gustavsen2019-08-283-9/+117
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The current logic was based on the idea that if both rowHeight-, and columnWidthProveders were set, we didn't have to relayout the items at the end of a rebuild. Because in that case, the row and column sizes would already be correct after the initial load. This assumption turns out to be false, because the providers are allowed to return -1 to signal that the size of a row or column should use default values (meaning, calculated by TableView). And for those cases, we need to do a relayout at the end of a rebuild. Fixes: QTBUG-77074 Change-Id: I0e0f2fdca1cfa9e98f2a0a2b227c3715c16a70f9 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
| * | Make mouseSelection test more stableJan Arve Sæther2019-08-281-9/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | QTestLib assumes that the double click interval is below 500ms. Therefore it adds a 500ms delay after all synthesized single- and doubleclick releases to prevent unintentional synthesizing of double click events. This has two unfortunate side-effects: 1. If the double click interval is smaller than 500 ms, it is not possible to synthesize a triple click. (Triple clicks are used for selecting paragraphs in text). This is why the workaround in the block (if clicks ==2) was needed. 2. If the double click interval is bigger than 500ms we might still accidentally trigger a double click event with two successive single click events, so it doesn't even work reliably for that case (!). Therefore, the hardcoded 500ms in QTestLib should probably be revisited. Anyway, to fix this test we therefore have to cancel the 500ms delta QTestLib adds in order to properly synthesize the triple click by adjusting the internal QTest::lastMouseTimestamp. Task-number: QTBUG-77389 Change-Id: Ic738f51b294270ddf99b6d91d256f6ec4b34d039 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
| * | Merge "Merge remote-tracking branch 'origin/5.12' into 5.13"Qt Forward Merge Bot2019-08-2811-29/+102
| |\ \
| | * \ Merge remote-tracking branch 'origin/5.12' into 5.13Qt Forward Merge Bot2019-08-2811-29/+102
| | |\ \ | |/ / / | | | | | | | | Change-Id: I0ae0a162e133cffd8fb1a2c6b70826e50f06facd
| | * | Fix build with -no-feature-quick-spriteJohan Klokkhammer Helsing2019-08-271-0/+2
| | | | | | | | | | | | | | | | | | | | Change-Id: I1599dde865a7c5454a52b45b2cc877a8c43fb10d Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
| | * | Add missing HoverHandler docsShawn Rutledge2019-08-261-3/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It was intended to inherit most of the docs from SinglePointHandler; but the hovered property is unique. Task-number: QTBUG-68072 Change-Id: I4b49569c9966b9252a61e40e8b07ef98f34849a4 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
| | * | Fix loading of ES modules when using CONFIG += qtquickcompilerSimon Hausmann2019-08-265-1/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Added the missing lookup for cached .mjs files in ExecutionEngine::compileModule. This allows using .mjs files in WorkerScript {} elements in conjunction with the Qt Quick Compiler and also fixes the use when using QJSEngine::importModule. [ChangeLog][QtQml] Fix loading of EcmaScript modules when using the Qt Quick Compiler. Fixes: QTBUG-77761 Change-Id: I58130b0468f4920b2f6c49b98a2f51d5ae3a0491 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io> Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
| | * | Remove HACKING fileEskil Abrahamsen Blomfeldt2019-08-231-23/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This file ends up in release packages and contains some outdated documentation about where to put different types of examples, which should probably not be documented by random files in the source repository. Change-Id: If35ee6cd2b4084fc5763a0cab39b9ff3e44fa133 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
| | * | Document that QQmlPropertyMap's meta object is not threadsafeVolker Hilsheimer2019-08-211-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It is generated and modified at runtime, so applications have to synchronize access explicitly. Fixes: QTBUG-70915 Change-Id: Ie6f29eef8532e2fa4ebf8dad1678cd2acbacf659 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
| | * | doc: Clarify that the delegate populate transition doesn't always runShawn Rutledge2019-08-122-2/+45
| | | | | | | | | | | | | | | | | | | | | | | | Fixes: QTBUG-42798 Change-Id: If10f06450f1e50893e5ba103e7c8c2d83667a651 Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
| * | | Doc: minor language issue in image elements documentationNico Vertriest2019-08-271-2/+2
| | | | | | | | | | | | | | | | | | | | Change-Id: I5f3774ec4650dcc7eb316b4a15740e4a67504365 Reviewed-by: Paul Wicking <paul.wicking@qt.io>
| * | | Doc: Replace the "Qt Quick Controls 2" instancesVenugopal Shivashankar2019-08-224-13/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is one of the several commits, replacing the "Qt Quick Controls 2" instances with "Qt Quick Controls". Change-Id: I2e1f1e53bd7756331320f5447dbdabef36dfcb66 Reviewed-by: Paul Wicking <paul.wicking@qt.io>
| * | | nothread: enable shapesLorn Potter2019-08-221-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | These seem to work fine on nothread build, so enable them. Change-Id: Ib2c7f6e462ca04d82b729bc29c846017f7bf131a Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
| * | | Fix flakiness in QQuickTextEdit::mouseSelectionJan Arve Sæther2019-08-211-2/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Avoid that the last click from the previous test data and the first click in the current test data happens so close in time that they are interpreted as a double click. Task-number: QTBUG-77389 Change-Id: Ia2d159452dcdb58cacccf7101cc3360175b39594 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* | | | Fix gcc warnings in vulkanunderqml exampleLaszlo Agocs2019-09-111-4/+4
| | | | | | | | | | | | | | | | | | | | Change-Id: Iea81662f39d2a128cea0e83a766395e0fb1e9896 Reviewed-by: Christian Strømme <christian.stromme@qt.io>
* | | | Request correct alpha composition on the rhi code pathLaszlo Agocs2019-09-113-2/+26
| | | | | | | | | | | | | | | | | | | | | | | | Task-number: QTBUG-78089 Change-Id: I22f8bb5ec0af33397df14e064a0306bd4c5a5ef5 Reviewed-by: Christian Strømme <christian.stromme@qt.io>
* | | | QQuickFolderListModel: make sure properties' values can be updateWang Chuan2019-09-112-0/+46
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There are some properties in FolderListModel neglect to update their values, although the new values are passed to the thread which does the real work [ChangeLog][QtQuick][QQuickFolderListModel] update the values of some properties when setting new values to them Fixes: QTBUG-77965 Change-Id: I77db3388cee569479459deaa2e19546a77da6178 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | | | Drop expendable rhi data when in release(Cached)ResourcesLaszlo Agocs2019-09-111-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Now that a suitable function is introduced in QRhi, call it. Change-Id: I6328a4be90418015384b472655c9b8ad34a07e12 Reviewed-by: Christian Strømme <christian.stromme@qt.io>
* | | | QQuickWidget: state that we want premul alpha based blendingLaszlo Agocs2019-09-112-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | Task-number: QTBUG-77471 Change-Id: I819c4e0cf751a12726a170f2c48f63f003c549a1 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* | | | Use constructor-style casts in qmlobject_(dis)connectShawn Rutledge2019-09-101-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The old-style casts generate warnings wherever these macros are used. Change-Id: I5427c6f476728bcf4b2b91196c10187d2aaf5a44 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | | | Optimize enum setupUlf Hermann2019-09-103-42/+49
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If we have already set up the enums from a property cache or a metaobject, respectively, we can see that from the flags. Retrieving the composite property cache is expensive and we can skip it in that case. Task-number: QTBUG-77237 Change-Id: I63f5e1ca0fc166ec927754bdf5d166b2ce8ff0f6 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | | | Prefer JS stack frames over QML contexts when resolving translationsUlf Hermann2019-09-105-23/+64
| | | | | | | | | | | | | | | | | | | | | | | | Fixes: QTBUG-77751 Change-Id: Ic5e07dc4e251c5fbf149b0a4f015bac5187dd6a1 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | | | Also check the non-file-imported type on QQmlMetaType::typeForUrlMichael Brasser2019-09-0910-4/+131
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There is no reason why we wouldn't want to find those. Failure to do so leads to duplicate creation of singleton objects. Fixes: QTBUG-76514 Change-Id: If2fdfbd933229518136ae0d19474bbaebfbb8cff Reviewed-by: Ulf Hermann <ulf.hermann@qt.io> Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Michael Brasser <michael.brasser@live.com>
* | | | Don't manually resolve C++ base type for attached propertiesUlf Hermann2019-09-092-23/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The attachedPropertiesType() method itself is better at that. Change-Id: Ife46b78c697e60e33a973194b8a2244edb2fb872 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io> Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* | | | Refer to recently added examples into the scenegraph docsLaszlo Agocs2019-09-081-0/+13
| | | | | | | | | | | | | | | | | | | | Change-Id: Ib87fde45e5ebfed596c5d0146d6987e5390bac64 Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* | | | Clarify docs and comments regarding under and overlaysLaszlo Agocs2019-09-083-3/+17
| | | | | | | | | | | | | | | | | | | | Change-Id: I8973798996b6c775f425819af1d6a09f1773a9dc Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* | | | Add metaltextureimport exampleLaszlo Agocs2019-09-0812-4/+882
| | | | | | | | | | | | | | | | | | | | Change-Id: I499c21083faf6096a0dc3b8ee5682dd5cbcd3ce7 Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* | | | rendernode example: Prevent gui-render thread data raceLaszlo Agocs2019-09-089-81/+114
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | By taking things like the item width and height in updatePaintNode() (while gui is locked). Change-Id: I840c6c858a0478eb6ceb09653fd1e033cb54372d Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* | | | Make vulkanunderqml work and update docsLaszlo Agocs2019-09-084-7/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | What we are doing for now is setting ExternalContentsInPass always. This way vulkanunderqml works as expected. For applications that do not integrate external rendering this means that there is now an additional secondary command buffer per render pass, but we can live with this for now. Later (Qt 6) there should be a way to declare this (that the application will want to issue native rendering stuff) up front in QQuickWindow or somewhere. Change-Id: I736741f9b0eee2f8295b046bacdce862e6a546f5 Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* | | | Add vulkanunderqml exampleLaszlo Agocs2019-09-0814-9/+952
| | | | | | | | | | | | | | | | | | | | Change-Id: I61e8b50f560d1f4c68731fb19eb13071992040c9 Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* | | | Expose renderpass from QSGRendererInterfaceLaszlo Agocs2019-09-085-4/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Important for Vulkan and (upcoming) examples like vulkanunderqml. Change-Id: I5b6c978f38175eca76efe059aa83bb7158724752 Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* | | | Implement lookups for enumsSimon Hausmann2019-09-063-0/+67
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Task-number: QTBUG-77237 Change-Id: Ibe8fe8044b96d9d4b7a1a31b432daa886edbd799 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | | | QQmlTypeLoader: Do some more sanity checks on file and path namesUlf Hermann2019-09-052-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Apparently we can end up with null bytes in those names, and those really should not be valid. Change-Id: I5b84dbc412342dbfb23befd5417a8bd394d4fb4f Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | | | Implement lookups for qml type wrappersSimon Hausmann2019-09-053-3/+33
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Task-number: QTBUG-77237 Change-Id: I661dc7a23946520c8ad298c39796cb8d0561d80c Reviewed-by: Ulf Hermann <ulf.hermann@qt.io> Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | | | Drop default parameter for qmlRegisterAnonymousTypeUlf Hermann2019-09-052-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | People already feel compelled to misuse it. Change-Id: I7da0745f9cc3b6081f3237213e57c3cd084bfe4d Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | | | Use quiet NaNs instead of signalling onesEdward Welbourne2019-09-042-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I see no good reason why the NaN returned when reading "nan" as a double should be a signalling one; a quiet one should be just fine. [ChangeLog][ES][] The NaN obtained by Math.pow(+/-1, +/-infinity) and (+/-1)**(+/-infinity) is now quiet rather than signalling. Change-Id: I6b5ea469c17c028328c803f54f2a6d4422a80033 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* | | | Make QQmlValueTypeFactory::valueType() and isValueType() consistentUlf Hermann2019-09-049-52/+105
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If isValueType() returns true, we should really return a non-null value from valueType(). Otherwise the assumption that QQmlValueTypeWrapper::valueType is never null breaks. In particular, the unknown type and various primitive types are _not_ value types. We special case the, probably common, UnknownType and check the actual return value of valueType() for anything else. In order to avoid looking up the metaobject each time we request a type that is not a value type, we keep an invalid value type as marker for "not checked yet" and replace that with nullptr once we determine that the type in question is indeed not a value type. Fixes: QTBUG-76866 Change-Id: I797f4cdd4db48ffc1b8fa2d919afc8022f67fa94 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | | | QQmlType: Remove dead codeUlf Hermann2019-09-042-18/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | QQmlType::superType() is a private method that isn't called from anywhere. Change-Id: I5aa291b44c0cb72f8cf46ef765d4742496482477 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | | | PathMultiline: handle directly-bound QVector<QPolygonF>Shawn Rutledge2019-09-033-7/+144
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The autotest in 811b15bd161d12e5c85e093f9f492a0c4fa278d6 only tested what happens if the vector of polygons is passed via a QVariant to the PathMultiline paths property. But the intention (as documented) was to literally support an object with Q_PROPERTY(QVector<QPolygonF> paths ...) and binding that paths property to PathMultiline.paths. In that case it appears in QQuickPathMultiline::setPaths() as a QVariant<QJSValue>, canConvert<QVector<QPolygonF>>() returns false, then canConvert<QVariantList>() returns true. Nevertheless each variant in the QVariantList is a QPolygonF, as expected. So we need another check to detect this case. Also added a test specifically for that. Fixes: QTBUG-77929 Change-Id: I84d0a45326d5f007b8ba3cc9bb1fbccf0345d812 Reviewed-by: Paolo Angelelli <paolo.angelelli@qt.io>
* | | | Allow semicolon after property declarationFabian Kosmale2019-09-033-7/+33
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Most of the rules already had Semicolon at the end, however it was missing for UiScriptStatement, list properties and UiObjectInitializer. This change fixes the regression from 5.11.3 to 5.12.0, and keeps the behavior consistent. Fixes: QTBUG-77954 Change-Id: I45ef35fab399e3f971444b96d4a9ec6a99e29e09 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | | | PathMultiline: allow lists/vectors of polygons or point lists/vectorsShawn Rutledge2019-09-025-35/+253
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If a C++ model object can make a vector of vectors of points available directly, and it is bound to a PathMultiline's paths property to provide the view layer, it's a waste of time to convert it to a QVariantList of QVariantLists and back again. Changing the type of the property to QVariant instead of QVariantList enables an extensible set of supported types: all those that make sense. Fixes: QTBUG-77929 Change-Id: If749c2171173e7b9933fc9ecdf6d2741dc1c7500 Reviewed-by: Paolo Angelelli <paolo.angelelli@qt.io>
* | | | Enable PathPolyline to take a QPolygonF or QVector<QPointF> pathShawn Rutledge2019-09-025-18/+182
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If a C++ model object can make a vector of points available directly, and it is bound to a PathPolyline's path to provide the view layer, it's a waste of time to convert it to a QVariantList and back again. Changing the type of the property to QVariant instead of QVariantList enables an extensible set of supported types. Task-number: QTBUG-77929 Change-Id: I2453b59e047ec3310070e943f6934c9ddcd1ffaa Reviewed-by: Paolo Angelelli <paolo.angelelli@qt.io>
* | | | Visit lists iteratively when parsing QMLUlf Hermann2019-09-021-35/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Change-Id: I243d12b75a07ac04560b444c326bff77d0dc642c Fixes: QTBUG-74087 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>