aboutsummaryrefslogtreecommitdiffstats
path: root/tests
Commit message (Collapse)AuthorAgeFilesLines
* MenuBar: ensure the correct delegates are used when created via ComponentMitch Curtis2018-10-022-0/+106
| | | | | | | | | | | | | Don't add items until we're complete, as the delegate could change in the meantime. Instead, add them to contentData and create them when we're complete. A similar fix was already done for Menu in d5cb26bc. Task-number: QTBUG-67559 Change-Id: Idb43b7a69fcf1c1ad6396c73a3c090b92e460ab8 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* Attempt to stabilise Popup::test_shortcut auto testMitch Curtis2018-09-121-0/+3
| | | | | | | | | Ensure that the window is active before trying to activate keyboard shortcuts. Task-number: QTBUG-70413 Change-Id: Ibac1526efd9c53f1f2aa3401da3855ce26d35d6a Reviewed-by: Liang Qi <liang.qi@qt.io>
* Menu: ensure the correct delegates are used when created via ComponentMitch Curtis2018-09-057-0/+278
| | | | | | | | | | Don't add items until we're complete, as the delegate could change in the meantime. Instead, add them to contentData and create them when we're complete. Task-number: QTBUG-67559 Change-Id: I5f42129f49de861ff5f15d0069daeda0b4e5017c Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
* QQuickIconImage: prevent color from being applied twiceMitch Curtis2018-07-302-1/+99
| | | | | | | | | | | | | | | | | | | | | QQuickIconImage::componentComplete() calls QQuickIconImagePrivate::updateIcon(), which loads the icon's image via QQuickImageBase::load(). That eventually calls QQuickImageBase::requestFinished(), which calls QQuickIconImage::pixmapChange(). That then calls QQuickIconImagePrivate::updateFillMode(), which can in turn cause QQuickIconImage::pixmapChange() to be called again, causing recursion. This recursion resulted in icon.color being applied twice. We already have a recursion check in place in QQuickIconImagePrivate::updateFillMode(), so we can reuse that in QQuickIconImage::pixmapChange() to know whether or not we should apply the color to the image. Task-number: QTBUG-69506 Change-Id: I5cd9edaa524c7ceb9c41c53a9efefcc4c647e246 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* Fix qrc paths in QT_QUICK_CONTROLS_STYLE_PATHMitch Curtis2018-07-164-0/+123
| | | | | | | | | Parse the environment variable manually when the platform's list separator is ':', to avoid issues with qrc paths (which start with ':') not working. Task-number: QTBUG-68219 Change-Id: Ic71d49da5a72a37bc1d2e7b19fbf1de71b3917f3 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* tst_tumbler: replace loop with tryVerify()Mitch Curtis2018-07-031-7/+1
| | | | | | | 'cause it's better. Change-Id: I00a538013a10a7ff3b551b9f550427f898610dbb Reviewed-by: Liang Qi <liang.qi@qt.io>
* Menu: fix items not being scrollable when using WindowMitch Curtis2018-06-253-0/+174
| | | | | | | | | | Use Window.window instead of ApplicationWindow.window, as the former will always result in a window regardless of which type of window is in use. Task-number: QTBUG-68858 Change-Id: I3bdb60350d92b13621b0f4db9085bf067b6ff6e2 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* Fix Tumbler not respecting currentIndex changes in onModelChangedMitch Curtis2018-06-131-0/+66
| | | | | | | | | | | | | | | | | | | | | | | | | The use case in the referenced bug report looks something like this: Tumbler { model: 4 // ... onModelChanged: { currentIndex = model - 2; } } The problem was that setting currentIndex in onModelChanged would cause the wrap to change to true, which in turn caused the internal view to change to PathView. This would cause the currentIndex to be set to 0 on successive model changes (i.e ++model). By keeping track of whether or not the user set the currentIndex during a model change, we can ignore changes in the internal view's currentIndex and restore the user's currentIndex afterwards. Task-number: QTBUG-68737 Change-Id: I25738f36cf58a331d1b8e50b5029b4aa1dd27db5 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* Add binary compatibility file for 5.11 for QtQuickControls2Milla Pohjanheimo2018-06-051-0/+10993
| | | | | | | File for bic test added. Change-Id: I99ec3defd695bc7e10cc753a3ee1e0fec56403dd Reviewed-by: J-P Nurmi <jpnurmi@gmail.com>
* ComboBox: don't block the escape/back key (with fixed test)J-P Nurmi2018-04-251-0/+80
| | | | | | | | | | | | | | Accept Key_Escape or Key_Back only if it actually close the popup. If the popup is not visible, the key is not handled, and the event should therefore propagate (and potentially close the app on Android). Note: def92f7 had a broken test (didn't take the popup exit transition into account) and thus, blocked the CI and got rejected in 110b718. Task-number: QTBUG-67684 Change-Id: I46b4731b3006721f3737cf909fbd97331ac6d8ed Reviewed-by: Liang Qi <liang.qi@qt.io> Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Revert "ComboBox: don't block the escape/back key"Liang Qi2018-04-251-71/+0
| | | | | | | | | | This change got integrated by sick COIN. This reverts commit def92f7b657ee9247beffffcb0cadd1eca8be3c6. Task-number: QTBUG-67930 Change-Id: I541579d7112ba386b227b7892d4e0aa8e2bd4edf Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
* ComboBox: don't block the escape/back keyJ-P Nurmi2018-04-231-0/+71
| | | | | | | | | | Accept Key_Escape or Key_Back only if it actually close the popup. If the popup is not visible, the key is not handled, and the event should therefore propagate (and potentially close the app on Android). Change-Id: Ibdb0cab8e0ac47005c5112f7ca4882288f1f5a17 Task-number: QTBUG-67684 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* ComboBox: reset when hiddenJ-P Nurmi2018-04-231-0/+6
| | | | | | | | Close the popup and reset the pressed state. Same as in focusOutEvent(). Task-number: QTBUG-67684 Change-Id: I51143175b0f90f3edd116723481faed6ac6e7988 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Popup::test_shortcut(): use "A" instead of "Tab" for shortcutMitch Curtis2018-04-181-3/+3
| | | | | | | | | | The recently merged stabilization patch showed that the shortcut isn't delivered, and the logs show some focus stuff going on before it fails. If the flakiness is related to focus handling as a result of the tab press, we can try a different key. Change-Id: I6094f11de9d938fd18ad5af8b39b0a1489443638 Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
* Page: fix implicitWidth bindingsJ-P Nurmi2018-04-171-2/+5
| | | | | | | | Don't add paddings to header and footer width when choosing the max. Padding affects content, not headers and footers. Change-Id: I92381762f97eab384b18510522bf788abecd8338 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Stabilize Popup::test_shortcut()Mitch Curtis2018-04-091-0/+8
| | | | | | | | Try to pinpoint the cause of recent flakiness by ensuring that the shortcut is activated. Change-Id: I8bf81dedfd28b0fe66403147228a8452cc3bea2a Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
* QQuickLabel: fix background resizingJ-P Nurmi2018-04-091-0/+24
| | | | | | | | setBackground() must resize the item if component construction is already complete. Change-Id: I76cada5b37257473a9c0146ee1f6de8de6c10218 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* TextArea: fix background parentJ-P Nurmi2018-04-051-0/+3
| | | | | | | | | | | | | | QQuickTextAreaPrivate::attachFlickable() reparents the background from Flickable::contentItem to the Flickable itself. This avoids that the background scrolls together with the content. However, when deferred execution was enabled, attachFlickable() ended up being called before the background had been executed. If the TextArea has already been attached to a Flickable when the background gets exeuted, set the appropriate parent in setBackground(). Task-number: QTBUG-67334 Change-Id: I0847fca5861fdddeac7d47d47316b74bb31500cb Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* tst_customization: only track objectNames we're interested inMitch Curtis2018-03-231-1/+3
| | | | | Change-Id: I496a6a60383c0332ec52e9349892c8923ed42c76 Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
* Combo|SpinBox: fix wheel event propagationJ-P Nurmi2018-03-232-4/+30
| | | | | | | | | | | Sync the behavior with Qt Widgets. Don't propagate wheel events when reaching the end. The behavior was not nice, that a ScrollView underneath started suddenly moving whilst these input controls had input focus. Task-number: QTBUG-66044 Change-Id: I1b9c7f005652041cd82c77d4a1ca1a01d7d536e9 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Fix Shortcuts in Popups with window context not being activatedMitch Curtis2018-03-221-1/+37
| | | | | | | | | | | | | | | | | | | | | | | | Before this patch, this code wouldn't work: Popup { id: popup Shortcut { sequence: "Tab" onActivated: popup.visible = !popup.visible } } Even though Popup is aware of its Window, the Shortcut object is parented to Popup::contentItem, which does not have a Window associated with it while the Popup is hidden. The fix is to check if the item has a window in QQuickShortcutContext::matcher(), so that that check fails and the QQuickPopup itself is used to access the window. Change-Id: Ia1c5d75ad6b82fb4c8b7664b6d418d84428b1ddf Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
* Fix crash with StackView::initialItemSimon Hausmann2018-03-211-0/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | The following binding initialView: Qt.createComponent("blah.qml") works with QQC1 but crashes with QQC2 as soon as the garbage collector kicks in. In QQC1 StackView was implemented in a .qml file and the property was declared as property var initialItem For such declared properties the QML engine takes care of ensuring that the reference assigned is a strong reference towards the GC and it also tracks the life-time of the QObject in case it's explicitly deleted by somebody else. In QQC2 the property continues to be documented as "var" property, however it is implemented in C++ as QVariant property. The QVariant is not known to the GC at all and it also doesn't do life-cycle tracking. The C++ equivalent to "var" in QML is QJSValue, which is a strong reference and also ends up using a QPointer internally when holding a QObject. Task-number: QTBUG-67118 Change-Id: I43e473c7bf2c40f9843e9d50fe4fd805b54fd256 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Fix doubly connected signals in SignalSequenceSpySimon Hausmann2018-03-121-3/+8
| | | | | | | | | | | | | | | | | | | | We call __setup() from two different onFooChanged signal handlers. If we access the second property from within that method, we may end up being the first one to read that property and consequently require an initialization of the binding to that property first, which will write the value (before returning) and trigger the signal handler, recursively calling __setup() and thus calling connect() twice for each signal the spy wants to connect to. This used to be fine as we ended up with a _third_ evaluation that called __setup() and thus cleared the connections first, but after commit f514451cc2e3610e160b5dc8ccd1e390730ecc67 in declarative we avoid unnecessary binding evaluations if possible and therefore uncovered this bug. Task-number: QTBUG-66995 Change-Id: I83ef9c80978a88c1490174d3cdb21b149733a78f Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
* ComboBox: fix key search in the popupJ-P Nurmi2018-03-121-0/+54
| | | | | | | | | | | | | | | | ComboBox does not change its current index, but highlighted index, when navigating in the popup. If the popup is accepted, the currently highlighted index is applied as the new current index. However, if the popup is rejected, the old current index is kept intact. This is why there is a separation between current and highlighted index. The newly added key search functionality (added together with ComboBox::editable) was missing a check whether the popup is visible. It was unconditionally changing the current index, which lead to a wrong behavior when the popup was open. Task-number: QTBUG-61348 Change-Id: Ic0295db609495ccefbccb7c425a817926786014e Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Sliders and Dials: keep mouse grab on pressJ-P Nurmi2018-03-121-3/+7
| | | | | | | | | | | Since Qt 5.9, Sliders and Dials react immediately on mouse press. Thus, the old logic to keep mouse grab if the drag threshold was exceeded no longer makes sense with mouse. Don't allow e.g. Drawer to steal mouse press if a Slider or Dial is already being dragged. Task-number: QTBUG-66637 Change-Id: I76f7ab59180c1f3fb66db8412d7cccfbd373aee3 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* QQuickDrawer: fix draggingv5.11.0-beta2J-P Nurmi2018-03-092-0/+129
| | | | | | | | | | Make sure to respect keepMouse|TouchGrab. This fixes dragging a horizontal Slider inside a Drawer on the left or right edge, for example. Task-number: QTBUG-66637 Change-Id: Ie3688744741378694f96abc608dad2630ecd1fb0 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* QQuickPlatformMenu: fix submenu titles not being visibleMitch Curtis2018-03-071-0/+19
| | | | | | | | | As with other properties in QQuickPlatformMenu, ensure that we set the relevant property on the internal QQuickPlatformMenuItem. Task-number: QTBUG-66876 Change-Id: Ie37d874426200014ea3bb4045bc6b566422221de Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
* Fix QQuickTheme::font() and palette()J-P Nurmi2018-03-011-0/+36
| | | | | | | | | | | | | | | | Respect fonts and palettes from :/qtquickcontrols2.conf, but don't blatantly override the platform fonts and palettes with null values if the fonts and palettes are not set in :/qtquickcontrols2.conf. Even though fonts and palettes have technically same problem, testing the system palette is hard with 5.11 since QQuickDefaultTheme is a platform proxy theme and provides a custom system palette. It should be possible to have tst_palette::systemPalette() in dev, though, where we have removed the inheritance between QQuickTheme and QPlatformTheme. Task-number: QTBUG-66430 Change-Id: I6dfe678ccdc7e3990320c120612cfcc68723264d Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* DialogButtonBox: workaround implicit size calculation with one buttonv5.11.0-beta1J-P Nurmi2018-02-221-0/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | When there's only one button in the dialog button box, the Default and Universal styles resize the button to cover half of the button box. This works in typical scenarios when the dialog button box is assigned as a footer of a dialog, and thus, gets resized together with the dialog. However, if the dialog button box is placed into a layout, or otherwise not given an explicit size, the implicit size calculation loops until it reaches zero. 1) button box gets the implicit size of the content (one button) 2) button box resizes the button to cover half of the box width 3) button box re-calculates its implicit size => step 1 Avoid the problem by providing a reasonable hard-coded implicit size for this special case. Notice that this is just a temporary workaround to avoid the problem. This can be fixed properly in dev by providing separate contentWidth and contentHeight properties that cleanly propagate the content size to QML. Task-number: QTBUG-59719 Change-Id: I552e0824ae6bff26b570c699252a3e4f09bd3397 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Fix tst_swipedelegate::test_eventsToLeftAndRight()J-P Nurmi2018-02-201-2/+2
| | | | | | | | | | | | | The test fails with the Fusion style and a static build on Linux. Even if either "dx" or "dy" is defined as 0, TestCase::mouseDrag() drags _at least_ the distance of QStyleHints::startDragDistance() in _both_ directions. Therefore, if we start the drag from the vertical center of the control, a horizontal drag may end below the control and then SwipeDelegate considers the swipe canceled. Change-Id: Ib735ebeb2184d095dfaf0a4c3bdff0bead4bdbd6 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* tst_switchdelegate: fix test_mouse/test_touch failuresJ-P Nurmi2018-02-201-6/+6
| | | | | | | | | Same as a1eaa30b for tst_switch. Use the correct coordinates for the middle of the switch. Otherwise this test fails in static builds. Task-number: QTBUG-62241 Change-Id: Ic99babac5c41f5130931790d8cd984fac72cb785 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* QQuickStyle: fix and test QT_QUICK_CONTROLS_CONFJ-P Nurmi2018-02-208-1/+49
| | | | | | | | Reset QT_QUICK_CONTROLS_CONF when appropriate, and add some tests too since the environment variable is now public and documented. Change-Id: I09fba950de7c34f22c4cf802ea5c0a337c84f0bd Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Reset QQuickStyle when the QtQuick.Controls 2 plugin is unloadedJ-P Nurmi2018-02-201-9/+27
| | | | | | | | | Cleanup global static data in QQuickStyle when the controls plugin is unloaded (qmlClearTypeRegistrations()). This ensures that the style is resolved as appropriate when the controls plugin is reloaded. Change-Id: Icebb835e057e6063e4fc0ca035c6836560bc7c14 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* testbench: remove hovered states as the property is read-onlyv5.11.0-alpha1Mitch Curtis2018-02-142-12/+1
| | | | | Change-Id: Iebc19620b34d9a8a7cc954c9486b739eed1de4a4 Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
* testbench: set checked on ButtonMitch Curtis2018-02-141-0/+1
| | | | | Change-Id: Ic63b9c17318b357f4f34a5c49ff3d27bb438856c Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
* QQuickStackView: transfer focus to the current itemJ-P Nurmi2018-02-131-10/+21
| | | | | | Task-number: QTBUG-51321 Change-Id: I169491d3e04f3ce015f5a999935f45ec02b1b5ae Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Merge tst_drawer.qml to tst_QQuickDrawerJ-P Nurmi2018-02-132-118/+37
| | | | | Change-Id: I837f6991f5a3b66e3ded9e1408656013a0803d8f Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* tst_QQuickPopup: run with all stylesJ-P Nurmi2018-02-121-37/+51
| | | | | Change-Id: I0f48ef8bbf0cb7567796dc67f1030d274f684d67 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* tst_QQuickDrawer: run with all stylesJ-P Nurmi2018-02-121-1/+2
| | | | | Change-Id: I3cbd5aa20f48051ab80cf7e83661f17010129450 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Merge remote-tracking branch 'origin/5.10' into 5.11Liang Qi2018-02-123-15/+299
|\ | | | | | | Change-Id: I2934d3f51fea9626fd2d2512786eb297d9f7fe6c
| * Merge remote-tracking branch 'origin/5.9' into 5.105.10Liang Qi2018-02-092-0/+93
| |\ | | | | | | | | | | | | | | | | | | Conflicts: .qmake.conf Change-Id: Ia407f277cccfdd96242ebfdbe294d699e26e6b1d
| | * QQuickControl: respect wheel focus policy for focus scopesJ-P Nurmi2018-02-071-0/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | [ChangeLog][Controls][Control] Fixed focus scope controls to respect wheel focus policy. Task-number: QTBUG-66133 Change-Id: If963feba4b6e59b87ca54af5f6606805093eb0cc Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
| | * Popup: fix restoring focus for popups that did not request focusJ-P Nurmi2018-02-061-0/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When a popup closes, if it has active focus, it should restore focus back to where it was regardless of whether the popup originally requested focus. Even if a popup does not request focus on open, it may gain focus programmatically or when a control with click-focus is clicked, for example. Task-number: QTBUG-66113 Change-Id: I9a7c467abe781bbef390d74898d13b9a30b2695b Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
| | * QQuickControl: respect click focus policy for focus scopesJ-P Nurmi2018-02-051-0/+72
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If a focus scope explicitly requests click focus, make it gain active focus by clearing the sub-focus child. Pane { focusPolicy: Qt.ClickFocus TextField { } } [ChangeLog][Controls][Control] Fixed focus scope controls, such as Frame, GroupBox, Page, and Pane, to respect click focus policy by clearing a potential sub-focus child. This makes it possible to close the virtual keyboard by clicking the background of a Pane that has Qt.ClickFocus set as its focusPolicy, for example. Task-number: QTBUG-66133 Change-Id: I582f3c66aa6f11e229d89c4f610fae3c6259104d Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
| * | Make AbstractButton's icon properties win over Action's when both are setMitch Curtis2018-02-051-15/+206
| | | | | | | | | | | | | | | | | | Task-number: QTBUG-65193 Change-Id: Idff23dcc35f3c3fe41406678613b022098149318 Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
* | | Merge remote-tracking branch 'origin/5.10' into 5.11J-P Nurmi2018-01-316-0/+63
|\| | | | | | | | | | | Change-Id: I7c0333dbf959124f6cf5be7837a305b65c08d290
| * | Merge remote-tracking branch 'origin/5.9' into 5.10J-P Nurmi2018-01-312-0/+22
| |\| | | | | | | | | | Change-Id: I697f98d5214f487c915032d744ec593da05368a8
| | * QQuickComboBox: fix popup's deferred executionJ-P Nurmi2018-01-241-0/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Unlike other delegates, such as background and contentItem, popup is not unconditionally executed upon component completion. For performance reasons, its execution is delayed until the popup is needed, that is, the popup is accessed or shown. When the popup is accessed, we use the current completion status via isComponentComplete() to determine whether its execution must be completed immediately, or if we can wait until componentComplete(). However, if the popup was accessed while the combobox itself was being completed (used in ComboBox's bindings), the popup was never completed because isComponentComplete() was still returning false even though the popup was actually being indirectly accessed from componentComplete(). A simple execution order change, to complete the combobox itself before the popup, fixes the problem. Task-number: QTBUG-65962 Change-Id: I4764eb7e273e7f6fa1dab1a65a02b87722ee7cba Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
| | * Control: fix background size regression caused by deferred executionJ-P Nurmi2018-01-221-0/+8
| | | | | | | | | | | | | | | | | | Task-number: QTBUG-65880 Change-Id: Ic4f9fb087f4a78bd4c6257828011240186b6b22e Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
| * | tst_qquickiconlabel: skip colorChanges() that grabToImage() on offscreen ↵Liang Qi2018-01-251-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | platforms The LinuxQEMUarm64GCC and LinuxQEMUarmv7GCC CI platform fails because they use QT_QPA_PLATFORM=offscreen, and grabToImage() doesn't work on offscreen platforms. Task-number: QTBUG-63185 Change-Id: Ifac43dfa26182e3b518397fa070bb4d4a62114e0 Reviewed-by: Sami Nurmenniemi <sami.nurmenniemi@qt.io> Reviewed-by: Liang Qi <liang.qi@qt.io>