aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Add changes file for Qt 5.13.2v5.13.25.13.2Antti Kokko2019-10-151-0/+25
| | | | | Change-Id: Ia035cc871e42646a8053d42ec0af2902a9a56acd Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Bump versionFrederik Gladhorn2019-10-141-1/+1
| | | | Change-Id: Ie16762649a006dea1420c0df60ed80137491d4a9
* Imagine: fix crash when switching between 9-patch and regular imageMitch Curtis2019-10-025-2/+69
| | | | | | | | | | | | | | | | | | | | | Consider the following changes in source: normal.png => press.9.png => normal.png => focus.png If the last two events happen quickly, pixmapChange() can be called twice with no call to updatePaintNode() inbetween. On the first call, resetNode will be true (because ninePatch is not null since it is still in the process of going from a 9-patch image to a regular image), and on the second call, resetNode would be false if we didn't have this check. This results in the oldNode never being deleted, and QQuickImage tries to static_cast a QQuickNinePatchImage to a QSGInternalImageNode. Only change resetNode when it's false; i.e. when no reset is pending. updatePaintNode() will take care of setting it to false if it's true. Change-Id: I614c172c3e24fda2506f081f8fcdb6acd1c65fb8 Fixes: QTBUG-78790 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* Doc: Rename section called StackViewNico Vertriest2019-10-011-1/+1
| | | | | | | | - a section title in a tutorial shouldn't be the name of a QML type only Task-number: QTBUG-78799 Change-Id: I661b639eb96926be2b92899fdbe241890d4ed6f4 Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* Fix a crash on exit when using ToolTip in a specific item hierarchyMitch Curtis2019-09-303-1/+137
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | QQuickPopup connects its parent item's (MouseArea, in this case) windowChanged() signal to QQuickPopupPrivate::setWindow(). It does this so that: 1) QQuickOverlay can keep track of all of the popups that it manages. 2) Fonts, palettes and locales can be resolved. 3) If the QQuickPopup component has completed loading and the popup is visible with a valid window, start the enter transition. The problem arises only when using a very specific item hierarchy: Window { width: 640 height: 480 visible: true Item { anchors.fill: parent Item { anchors.fill: parent ColorOverlay { source: parent anchors.fill: parent } MouseArea { anchors.fill: parent hoverEnabled: true ToolTip.visible: containsMouse ToolTip.text: "ToolTip text" } } } } When the window is closed and hence begins to be destroyed, the following events occur: - QQuickWindow's destructor is called. - The window's root item (QQuickRootItem) begins destruction. - QQuickOverlay is destroyed. - QQuickWindow's destructor is done, so the QWindow and then QObject destructors are called. - The QQuickItem destructor for the outer Item is called. - The child items of the outer Item have setParentItem(nullptr) called on them, one of which being the inner Item. - The inner Item's setParentItem() function calls derefWindow(), which in turn calls derefWindow() on its children. One of those children is MouseArea. - Since the MouseArea's window is deref'd, it emits the windowChanged() signal. MouseArea is the parentItem of the popup, so its windowChanged() signal causes QQuickPopupPrivate::setWindow() to be called. - setWindow() tries to remove the popup from the old overlay, which has already been destroyed. One approach I tried involved using QQuickOverlay::itemChange() to remove all of the popups (via setWindow(nullptr), to ensure that their window pointer is nullified), since that was called much earlier than the windowChanged() signal is emitted. However, this still resulted in a heap-use-after-free in the same place when running the newly added setOverlayParentToNull() test. I also tried removing the popups in QQuickOverlay's destructor, but this resulted in another heap-use-after-free (when accessing a popup in the destructor) in tst_QQuickPopup::Universal::visible(). The remaining options were: store the window in a QPointer or return early in overlay() if the wasDeleted member of the window was true. Using QPointer seems like it would catch more issues than a single check in overlay(), so I went with that. Fixes: QTBUG-73243 Change-Id: Ieb5ce26dd76d45771d28297031ec43e27d958b5b Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* QQuickToolTip: fix setTimeout() behavior when tool tip is visibleKonstantin Ritt2019-09-272-1/+11
| | | | | | | by applying the passed timeout value prior to re-starting the timer Change-Id: I27953dbb4781b5cb0c2039d56faa56f3c000206f Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Tumbler: fix displacement calculation when wrap is falseMitch Curtis2019-09-242-6/+38
| | | | | | | | | | | | Use the position of the item and the currentItem in the calculation in order to get reliable results. This fixes the displacement being off by a small margin, which increased as the delegate height became smaller. Fixes: QTBUG-66799 Change-Id: Ieca5033fb4c0ed62f5965a21fcab7aa558bd40e6 Reviewed-by: Andy Shaw <andy.shaw@qt.io> Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Doc: clarify autoRepeat/pressAndHold() behaviorMitch Curtis2019-09-241-0/+4
| | | | | Change-Id: Ia0dea6060be7ffd1c4a16348f166e7cde7ef2df2 Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* TextArea: prevent changing size of background recursivelyKonstantin Ritt2019-09-192-7/+82
| | | | | | | | | | | | | | | | | | | | | | | | | | | When the x/y position of background depends on the height/width of background and these values are not constant, the if statement in the method resizeBackground() will always pass. And since `resizingBackground` guard wasn't checked, any geometry change will always call resizeBackground() and then call themself recursively (via the change listener), that means the height/width of background will always be reset, no matter what value you set. Another part of the issue was in determining the extra bits too late: in case the background gets parented by the flickable, the new child caused the flickable to re-calculate its metrics and thus resize the background *prior* to remembering if it has w/h set. As a side effect, this fix also brings the possibility to reset previously set w/h to get the default background sizing behavior. Inspired by da06da57002b64cf4bcde0ca708b3275a5f919ae [ChangeLog][QtQuick][QQuickTextArea] prevent changing size of background recursively in construction Fixes: QTBUG-76369 Change-Id: Ide51ec1ebab63605ae3bfcc10a76a28be960ef36 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Revert "QQuickTextArea: prevent changing size of background recursively"Konstantin Ritt2019-09-192-42/+3
| | | | | | | | | This reverts commit da06da57002b64cf4bcde0ca708b3275a5f919ae. Reason for revert: the change removes symptoms leaving a cause unfixed Change-Id: I0a91409230c521da73ed53e2a00a4ccd8dca7335 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* TextArea: correctly resize background when there is no flickableKonstantin Ritt2019-09-131-1/+6
| | | | | Change-Id: Idaf385d12ca9388c0bb0b3f8a47c8e75c620b7eb Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Blacklist tst_focus::policy on OpenSUSE 15.0Mitch Curtis2019-09-131-0/+3
| | | | | | Task-number: QTBUG-78261 Change-Id: I5373ffbb21f70f4fc9f18a7574165f383f55d899 Reviewed-by: Tony Sarajärvi <tony.sarajarvi@qt.io>
* QQuickOverlay: micro optimization for disabled multitouch supportKonstantin Ritt2019-09-131-6/+14
| | | | | | | | avoid checking every press event to be one of touch events type when touch events are not delivered at all Change-Id: I1ed91fa124608d8a006cf2f5256ad68294dd465f Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Fix timer events handlingKonstantin Ritt2019-09-122-1/+7
| | | | | | | | if the timer event's timerId isn't recognized, make sure control passes to the base class Change-Id: If5988dbf4ccda6a9887805961b439f93640f71ea Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* DialogButtonBox: fix standard buttons not being translatedMitch Curtis2019-09-116-1/+247
| | | | | | | | | | | | | When calling QQmlEngine::retranslate() after component completion, buttons in a DialogButtonBox were not being retranslated. For now the only way to be notified of language change events is by installing an event filter on the application, but in the future we can use the solution to QTBUG-78141 instead. Change-Id: Ibc435c3829945489adcbaa8a813013fe735a9c38 Fixes: QTBUG-75085 Reviewed-by: Andy Shaw <andy.shaw@qt.io>
* QQuickIcon: prevent detach-ing when there is nothing to changeKonstantin Ritt2019-09-102-1/+14
| | | | | | | saves a bunch of pointless detach attempts on each deep-copy Change-Id: Ibb1ae99bd54b2d35f9c9aa9e541fb03891ad94ec Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* QQuickIcon: properly resolve implicit values - take 2Konstantin Ritt2019-09-101-6/+6
| | | | | | | | | | | This is a follow up of 382531ab5e2270833d3805c57c00ebcf6b24d635, and amends 1241c80eca725c9ac46a0b94d6bdec11a5d00302 . when the property has not been set explicitly, the resolved mask must not contain a respective bit set either Change-Id: I45a334b51fce09ead8e30fe3326a94f35b0f4f56 Reviewed-by: Liang Qi <liang.qi@qt.io>
* Merge "Merge remote-tracking branch 'origin/5.12' into 5.13"Qt Forward Merge Bot2019-09-083-6/+40
|\
| * Merge remote-tracking branch 'origin/5.12' into 5.13Qt Forward Merge Bot2019-09-083-6/+40
| |\ |/ / | | | | Change-Id: Ifa88045268cdaa1adc0b1e206d5e20a3721d3837
| * Merge "Merge remote-tracking branch 'origin/5.12.5' into 5.12"Qt Forward Merge Bot2019-09-071-0/+28
| |\
| | * Merge remote-tracking branch 'origin/5.12.5' into 5.12Qt Forward Merge Bot2019-09-071-0/+28
| | |\ | |/ / | | | | | | Change-Id: I9f62c952a3a059601c1486806c0fb4189ffc368d
| | * Add changes file for Qt 5.12.5v5.12.55.12.5Antti Kokko2019-08-261-0/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + 335314146dece4fa86c661a4094a2f73e5e81a43 Doc: Fix documentation warnings for Qt Quick Controls 2 + 761df2ced0081905b4238c66783bb276f504cf3d Accessibility: Switch should have checkbox as role + 2ea51ddea2b903d8115648a89d56b1e4b551e660 Accessibility: Remove redundant checkbox role code + 48f587be28e8b46e93703d7a4393b915b224495f Doc: Add specs about focus property + 188773bd1383883cd7247b6ded0d0b1a41689155 Doc: correct name of property in snippet + bb88d84475f7c4bb69528da5096f4d2c91667a3c Add a test for having a ShaderEffect as a delegate + 3574033d526c0a78236148354e1f48d7b9aafe10 Bump version + ce7c431fb23157fa5125d1102a594de045818a72 Fix crash in QQuickContainerPrivate::removeItem + 1d06eb3f8215b67c5061ee3a076df405724ff7ee Fix Flaky tests + da06da57002b64cf4bcde0ca708b3275a5f919ae QQuickTextArea: prevent changing size of background recursively Change-Id: I139ae9181197f900aab385bd0a93c6902d3b22f1 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
| * | QQuickIcon: properly resolve implicit valuesKonstantin Ritt2019-09-062-6/+12
| | | | | | | | | | | | | | | | | | | | | | | | when the property has not been set explicitly, the resolved mask must not contain a respective bit set either Change-Id: Iab0bd600b5bf458e26ed4601d4d2f608021f1518 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* | | Merge "Merge remote-tracking branch 'origin/5.13.1' into 5.13"Qt Forward Merge Bot2019-09-061-0/+31
|\ \ \
| * \ \ Merge remote-tracking branch 'origin/5.13.1' into 5.13Qt Forward Merge Bot2019-09-061-0/+31
| |\ \ \ |/ / / / | | | | | | | | Change-Id: Ifc5dd206734f3d6a64d106fa38e14139f52274b7
| * | | Add changes file for Qt 5.13.1v5.13.15.13.1Antti Kokko2019-08-121-0/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + 335314146dece4fa86c661a4094a2f73e5e81a43 Doc: Fix documentation warnings for Qt Quick Controls 2 + 7d001497ddcda501c55aac35b4c7a60980d9c6b5 Fix flaky tst_qquickmenu test + 9310d5fb5285ae5eb4b94c01606791319b775b85 Container: Keep currentIndex at 0 when removing item 0 if possible + 7431b0549a9bb69f5f4a036fc931683dd4e20d2c tst_accessibility: Simplify role verification + c49bb5bda32477a878b6b82b99f853cef1340890 CursorDelegate: stop cursor timer when interval is set to 0 + 1427b243cb69768e7ce2e6ea3ad75619deac104b Don't unnecessarily transform keysequences into strings + 4259e99c1990dc88632b85d945e9093cca47a831 doc - use the correct attributions file + e23d4b68f3f3b1467f032e4ce3501dab0feb5fee Material: account for accent color in flat highlighted button's ripple + 33e590ea30931306e055fe4a6ae38da8b3fe3d0c Bump version + 783bfd2182f667817213faf3f54a285057bd2456 Add changes file for Qt 5.12.4 + 761df2ced0081905b4238c66783bb276f504cf3d Accessibility: Switch should have checkbox as role + 2ea51ddea2b903d8115648a89d56b1e4b551e660 Accessibility: Remove redundant checkbox role code + 48f587be28e8b46e93703d7a4393b915b224495f Doc: Add specs about focus property + 188773bd1383883cd7247b6ded0d0b1a41689155 Doc: correct name of property in snippet + bb88d84475f7c4bb69528da5096f4d2c91667a3c Add a test for having a ShaderEffect as a delegate + 7ded94bf0eb2b78f37bb9f84a0cc36e4ec520023 SplitView: fix preferredHeight not being restored in restoreState() + b00d649f109b080b7068c4a7a2a7731d7fb51ea1 Simplify test a bit and make it less error-prone (adding type-safety) + 463a55d9593d6b03e09db440008e8b9320a28bc5 Binary compatibility file against Qt5.13.0 for QtQuickControls2 + 13bdd61c6597586f62558ca337c193ce03db26cc Bump version + 3574033d526c0a78236148354e1f48d7b9aafe10 Bump version + ce7c431fb23157fa5125d1102a594de045818a72 Fix crash in QQuickContainerPrivate::removeItem + 4f5da1ed1dc1d294c1c79b9f6124cedeaa45c4b6 Doc: Replace example file lists with links to code.qt.io + 83813e43405109478769010acf2caf85a4229501 QQuickComboBox: emit countChanged signal when model is updated + 1d06eb3f8215b67c5061ee3a076df405724ff7ee Fix Flaky tests Change-Id: I856bfc432911684bc0057d1b196fc456ce8f4819 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io> Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* | | | tst_dial: fix copy-paste mistakeMitch Curtis2019-09-061-9/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Slider was incorrectly used in a03b6fec6. Change-Id: Ib76172f9ea0dca3b776a74df2329bd63c72f8517 Reviewed-by: Liang Qi <liang.qi@qt.io>
* | | | Merge "Merge remote-tracking branch 'origin/5.12' into 5.13"Qt Forward Merge Bot2019-09-067-39/+93
|\ \ \ \
| * \ \ \ Merge remote-tracking branch 'origin/5.12' into 5.13Qt Forward Merge Bot2019-09-067-39/+93
| |\ \ \ \ |/ / / / / | | | _ / | | | / Change-Id: I859406dc779e59ee5d8e2980e04f8be28b1a69aa
| * | | ComboBox: document the behavior surrounding the accepted() signalMitch Curtis2019-09-062-18/+62
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Change-Id: I65be8e54ded284d2f80b5a1f301b75223bd81bb3 Fixes: QTBUG-75338 Reviewed-by: Henning Gründl <henning.gruendl@qt.io> Reviewed-by: Mitch Curtis <mitch.curtis@qt.io> Reviewed-by: Paul Wicking <paul.wicking@qt.io>
| * | | Fix flakiness in tst_qquickdrawer testsMitch Curtis2019-09-062-3/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Although it's not ideal to add arbitrary delays to tests, it does reflect a more realistic testing environment, and more importantly, seems to fix the flakiness on OpenSUSE. (cherry picked from commit 97fc102cd079f32cc1a4f00a764ceea981699fc0) Fixes: QTBUG-77946 Change-Id: I2998611759106386091d7375b31e56523c95371f Reviewed-by: Mitch Curtis <mitch.curtis@qt.io> Reviewed-by: Liang Qi <liang.qi@qt.io>
| * | | Modernize Gallery example by using Action where suitableKonstantin Ritt2019-09-051-17/+24
| | | | | | | | | | | | | | | | | | | | Change-Id: I45c693941e88074eb63f9e6a498c85c1dfa93e9a Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
| * | | QQuickPopup: fix compiler warningKonstantin Ritt2019-09-051-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > warning: unannotated fall-through between switch labels > note: insert 'break;' to avoid fall-through Change-Id: Ia70fb6b666f874a245a113d61a6cb3e8e7aa2712 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
| * | | Minor typo fixKonstantin Ritt2019-09-051-1/+1
| | | | | | | | | | | | | | | | | | | | Change-Id: I335e59f09c48a8b52c7f690cedba95952c5adfa3 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* | | | Merge "Merge remote-tracking branch 'origin/5.12' into 5.13"Qt Forward Merge Bot2019-08-311-1/+1
|\ \ \ \
| * \ \ \ Merge remote-tracking branch 'origin/5.12' into 5.13Qt Forward Merge Bot2019-08-311-1/+1
| |\ \ \ \ |/ / / / / | | _ / / | | / / Change-Id: Ia89d3600269126768ede2305dcf60d968f772fb7
| * | | Doc: Rename section title for 'TabBar'Topi Reinio2019-08-261-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Having a section title identical to a QML type name caused links intended to go to the QML reference to link to this page instead. Fixes: QTBUG-77840 Change-Id: I06219a67fd384c51be6080ef7ef8579b6a405d0d Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* | | | Doc: Fix the qhp project nameVenugopal Shivashankar2019-08-261-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1abdfe5d5 renamed the doc module without the version no. 2 in the name, but a bug was left behind. The qhp.project name was still called QtQuickControls2, while all the qhp settings in the qdocconf were using QtQuickControls. Task-number: QTBUG-77815 Change-Id: I1e8d10212798a1f4dfedcd7888f846e149851d23 Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* | | | Merge "Merge remote-tracking branch 'origin/5.12' into 5.13"Qt Forward Merge Bot2019-08-241-1/+1
|\ \ \ \
| * \ \ \ Merge remote-tracking branch 'origin/5.12' into 5.13Qt Forward Merge Bot2019-08-241-1/+1
| |\ \ \ \ |/ / / / / | | _ / / | | / / Change-Id: Ib3ebf5d1ec84a9db722e7634d77bf424c37c52ce
| * | | examples: type userto -> userAlbert Astals Cid2019-08-221-1/+1
| | |/ | |/| | | | | | | | | | Change-Id: I99d9ea22fd51aa4e9da469b630b319ba71215558 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* | | Doc: Replace the "Qt Quick Controls 2" instancesVenugopal Shivashankar2019-08-2259-229/+233
| | | | | | | | | | | | | | | | | | | | | | | | | | | Now that Controls 1 is deprecated, it's ideal to use "Qt Quick Controls" instead of "Qt Quick Controls 2". Task-number: QTBUG-70333 Change-Id: Ie745db4b61071ddb5e06150d4e739cda74c59f41 Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* | | TextEditor: Add modified handlingFriedemann Kleint2019-08-213-2/+39
| |/ |/| | | | | | | | | | | | | | | | | Add a modified property to the document and add handling in onClosing(). Connect the actions to call close() instead of Qt.quit() for it to become active. Change-Id: I0fec75629db64e91508ed8ba45d4fb60be146b1b Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* | Merge "Merge remote-tracking branch 'origin/5.12' into 5.13"Qt Forward Merge Bot2019-07-302-3/+42
|\ \
| * \ Merge remote-tracking branch 'origin/5.12' into 5.13Qt Forward Merge Bot2019-07-302-3/+42
| |\ \ |/ / / | | _ | | Change-Id: Ib1c507845cae7f354fe5a5fb9d71ee6963949bd0
| * QQuickTextArea: prevent changing size of background recursivelyWang Chuan2019-07-242-3/+42
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When the x/y position of background depends on the height/width of background and these values are not constant, the if statement in the method resizeBackground() will always pass. And since a change listener is set before calling setHeight()/setWidth() in background, these two method will always call resizeBackground() and then call themself recursively, that means the height/width of background will always be reset, no matter what value you set. [ChangeLog][QtQuick][QQuickTextArea] defer adding change listener and prevent changing size of background recursively in construction Fixes: QTBUG-76369 Change-Id: I2ec37cad7f35cb1c756276326fe69e860c6b8de5 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* | Merge "Merge remote-tracking branch 'origin/5.12' into 5.13"Qt Forward Merge Bot2019-07-232-23/+23
|\ \
| * \ Merge remote-tracking branch 'origin/5.12' into 5.13Qt Forward Merge Bot2019-07-232-23/+23
| |\ \ |/ / / | | _ | | Change-Id: I8c038d287f066f2935ba0bceef5dd078704fd276
| * Fix Flaky testsDimitrios Apostolou2019-07-222-23/+23
| | | | | | | | | | | | | | | | | | | | | | | | These tests where failing sometimes in our CI, because centerOnScreen() was invoked which asks the window manager to move the window, but does not wait for the event's completion. The solution is to do all that *before* the initial qWaitForWindowActive(). Fixes: QTBUG-73128 Change-Id: I06c1f85d5ff9657dccab50f29084f7624cd7e194 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* | QQuickComboBox: emit countChanged signal when model is updatedWang Chuan2019-07-113-0/+97
| | | | | | | | | | | | | | | | | | [ChangeLog][QtQuick][QQuickComboBox] countChanged signal now will be emitted when a new model is set to the ComboBox Fixes: QTBUG-75972 Change-Id: Ic26718453ba06ba284ac5903fc6f55ddf3523331 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>