summaryrefslogtreecommitdiffstats
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* Phase 2 of removing QDesktopWidgetVolker Hilsheimer2020-06-0845-403/+208
| | | | | | | | | | | | | | | | | | | | | | | | | | Remove QDestopWidget public header, simplify the implementation that maintains a Qt::Desktop type QWidget for each QScreen, and turn QWidget's initial target screen into a QScreen pointer. QApplication::desktop() now takes an optional QScreen pointer, and returns a QWidget pointer, so that applications and widgets can get access to the root widget for a specific screen without having to resort to private APIs. QDesktopWidgetPrivate implementations to look up a screen for an index, widget, or point are now all inline functions that thinly wrap QGuiApplication::screens/screenAt calls. We should consider adding those as convenience APIs to QScreen instead. Note that QWidget::screen is assumed to return a valid pointer; there is code that handles the case that it returns nullptr (but also code that trusts that it never is nullptr), so this needs to be defined, verified with tests, and asserted. We can then simplify the code further. Change-Id: Ifc89be65a0dce265b6729feaf54121c35137cb94 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* Replace calls to deprecated QEvent accessor functionsShawn Rutledge2020-06-0857-397/+397
| | | | | | | Many of these were generated by clazy using the new qevent-accessors check. Change-Id: Ie17af17f50fdc9f47d7859d267c14568cc350fd0 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Prepare to harmonize pointer event accessor namesShawn Rutledge2020-06-082-115/+249
| | | | | | | | | | | | | | | | | | | | | | | ...by deprecating everything that doesn't conform to the naming scheme, and providing replacements. Continues what was started with QWheelEvent in 7d29807296cb7ccc7f3459e106d74f93a321c493. However QMouseEvent::pos() is left un-deprecated because it's so widely used. Also quit returning QPointF by const-ref from accessors. It's plenty small enough to return by value; we were never consistent about it anyway; and it's good to avoid some problems with returning a reference to a temporary in case the value is calculated in the accessor. [ChangeLog][QtGui][QPointerEvent] Mouse, touch and tablet events now have a standard set of QPointF accessors: position(), scenePosition() and globalPosition(). Existing accessors that return integer QPoints, and those with non-standard names, have been deprecated. You can use the clazy qevent-accessors check to update your code accordingly. Task-number: QTBUG-20885 Task-number: QTBUG-84775 Change-Id: I8e6f587da76d6d0bca6e965ce8ebc7e67b868011 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* QNetworkInterface (Unix): port two local tracker (QSet/QLVA) to ↵Marc Mutz2020-06-081-10/+9
| | | | | | | | | | | QDuplicateTracker Apart from a more fitting, minimal, API, QDuplicateTracker also transparently uses C++17 pmr::monotonic_buffer_resource to avoid, or at least reduce, memory allocations. Change-Id: I025504c7d22fb7a8c943e3968e4613d45c08d0b3 Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
* QResource: Use some qUtf16Printable() instead of toLocal8Bit().data()hjk2020-06-081-6/+6
| | | | | Change-Id: Ia255052ea33e7d7fccb0627accd20315bbe5d393 Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
* Remove deprecated text-related enumsEskil Abrahamsen Blomfeldt2020-06-0810-139/+20
| | | | | | | | Fixes: QTBUG-82367 Change-Id: Iff2645759657f8e350754e90e791dbd583017671 Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Check for valid Navigator.permissions before useMorten Johan Sørvig2020-06-081-3/+4
| | | | | | | | | | | | | Safari on iOS now supports the Navigator.clipboard API, but not the Navigator.permissions API. Looks like we have not encountered this combination Before. Add undefined check for permissions as well. Fixes: QTBUG-84658 Pick-to: 5.15 Change-Id: I99ab08fd34bbb29a82661e24bf400c927f3604f6 Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
* Fix deprecation warning, use char16_t instead of quint16/ushortVolker Hilsheimer2020-06-081-2/+2
| | | | | | Change-Id: I4021abb901260c3e27cefd81b3acd5ac198941c8 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
* Make the QFontCache size configurableMartin Jansa2020-06-081-2/+4
| | | | | | | | | | It can be configured using the QFONTCACHE_MIN_COST define when configuring Qt. Change-Id: I41fb781099c4c0f03c378f10c8db4ea06ef4e9ff Task-number: QTBUG-83127 Reviewed-by: Risto Avila <risto.avila@qt.io> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
* Implement first/last/from and slice() for string-like classesLars Knoll2020-06-086-3/+173
| | | | | | | | | | | | These methods are scheduled as a replacement for left/right/mid() in Qt 6 with a consistent, narrow contract that does not allow out of bounds indices, and therefore does permit faster implementations. Change-Id: Iabf22e8d4f3fef3c5e69a17f103e6cddebe420b1 Reviewed-by: Alex Blasche <alexander.blasche@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
* QSsl: port a local QStringList to QDuplicateTrackerMarc Mutz2020-06-082-4/+19
| | | | | | | | | | | | Apart from a more fitting, minimal, API, QDuplicateTracker also transparently uses C++17 pmr::monotonic_buffer_resource to avoid, or at least reduce, memory allocations. The code is the first user of the collected data, so make that available by adding QDuplicateTracker::appendTo(Container&) methods. Change-Id: Ibd8810c0070db7e6b3ead6d6a569facdab88b646 Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
* Use static function instead of lambda to workaround a MSVC compiler bugFabian Kosmale2020-06-081-58/+70
| | | | | | | | | | | | The seemingly useless template parameters are needed to avoid a (distinct) bug in MSVC 2019 < 16.6, and should be removed once we have a newer version in the CI. Task-number: QTBUG-82945 Fixes: QTBUG-83600 Change-Id: I5b22a2259aa16ae90eca7d4f3bd2e4fa1116a73b Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Add the 'accessiblebridge' as a plugintype of gui moduleJeongBong Seo2020-06-083-3/+6
| | | | | | | | | This patch makes the 'accesiblebridge' plugin configurable. Change-Id: I99f01fcd434be25bbbe5460bbc8cc1d76aa744b9 Task-number: QTBUG-83126 Pick-to: 5.15 Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
* Fix build without features.menubarTasuku Suzuki2020-06-082-1/+9
| | | | | Change-Id: If7ad6f4c50936d2abf8b88859cb3a8a6189df152 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* QWindowsFontDatabase: replace a QPair with a dedicated structMarc Mutz2020-06-073-5/+20
| | | | | | | | | | | | | Pairs are easy to use, but they have no semantics attached: Two QPair<QString, QString> compare equal, e.g., even though one is used as a FontAndStyle and the other as, say, a type/subtype. It also carries no information for the reader of the code. So, write a minimal struct with equality and qHash() instead. Change-Id: I9514c9b7d6c2cc6a4831f9ca83ca2ee466d91553 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
* ItemModels: remove deprecated functionsChristian Ehrlicher2020-06-077-139/+2
| | | | | Change-Id: Id3430493a62b11977f64e146f7668ca30935b959 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Doc: add missing PatternSyntax documentation to QSslCertificateSamuel Gaist2020-06-071-0/+18
| | | | | | | | | | | This patch adds the missing documentation for the new QSslCertificate PatternSyntax enum which replaces the one from QRegExp. Fixes: QTBUG-84464 Pick-to: 5.15 Change-Id: Icf092f42ad4dff9207ca51dfd8b4fb8ed6443ff2 Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
* QAbstractItemModel: remove deprecated setRoleNames()Christian Ehrlicher2020-06-0710-60/+39
| | | | | | | Remove setRoleNames() and all its now unneeded helper functions. Change-Id: I0a83751aace35700655d4cc7c79278325994cbdd Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Remove winrtOliver Wolff2020-06-06233-21971/+322
| | | | | | | | | Macros and the await helper function from qfunctions_winrt(_p).h are needed in other Qt modules which use UWP APIs on desktop windows. Task-number: QTBUG-84434 Change-Id: Ice09c11436ad151c17bdccd2c7defadd08c13925 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* Remove unused argument from methodLars Knoll2020-06-061-31/+31
| | | | | | Task-number: QTBUG-84635 Change-Id: I9a1789e0481977e9fa26a915ff3bc776d0a37e75 Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
* Remove unused function pointers in QVariant::HandlerLars Knoll2020-06-064-37/+2
| | | | | | Task-number: QTBUG-84635 Change-Id: Icfbd1aae26b0453426d93e0af64d84d6403b8e3b Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
* QDir: port from QStringRef/split() to QStringView/tokenize()Marc Mutz2020-06-061-12/+28
| | | | | | | | | | | | Port away from random-access of the returned sequences. That's neither necessary nor does it make the code more readable than the alternative single-pass implementation used here. As a drive-by, make applying NRVO more likely by re-using the `result` variable for all returns after its declaration. Change-Id: I2c3bbaefa6b6f08ebf0b90fb7be62e3c6243f19d Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
* QVariant: use std::addressof instead of operator&Giuseppe D'Angelo2020-06-061-1/+3
| | | | | Change-Id: If7172e9e0e213d99f0c54b387dde8f9e163109d0 Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
* QVariant: move and swap in the move assignment operatorGiuseppe D'Angelo2020-06-061-1/+1
| | | | | | | And not pure swap. As per policy, QVariant must leave the rhs empty. Change-Id: I2d5e0f584c4d4fffd05a0a5bfae27ddcb72430e9 Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
* QString/View: add tokenize() member functionsMarc Mutz2020-06-063-1/+74
| | | | | | | | | [ChangeLog][QtCore][QString, QStringView, QLatin1String] Added tokenize(). Change-Id: I5fbeab0ac1809ff2974e565129b61a6bdfb398bc Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Fix build without features.cborstreamwriterTasuku Suzuki2020-06-068-0/+16
| | | | | Change-Id: I970d21d7ac97a602a5f374f6c89cd4bfdcd847b8 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* cmake: quote paths to prevent issues when no install prefix is setJean-Michaël Celerier2020-06-051-1/+1
| | | | | Change-Id: Ifa7f1ef70c4893e10cb4ce9a54d8a0806d19be93 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Remove QThreadPool::cancel()Allan Sandfeld Jensen2020-06-053-24/+0
| | | | | | | Deprecated in 5.9 Change-Id: Ib6e2a5da1e7ee2664fb6fa496bdc880fab870901 Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
* Fix check for malformed input when decoding translationsVolker Hilsheimer2020-06-051-1/+1
| | | | | | | | | | | | | | | | Any integer modulo 1 can never be anything else but 0, so the statement could never be true. The intention is to abort in case of an odd number of bytes, as this would indicate malformed input that can't be decoded into a QString. Note that QTranslator will then silently continue to search for valid translations, and not print any error message at runtime, or otherwise inform the user or developer that an input message file contains malformed content. Change-Id: I957b337ee035f3aca013e0859f8ee70553d9a97b Coverity-Id: 11014 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
* Clean up docs of qbytearray.cpp's C-string functionsEdward Welbourne2020-06-051-20/+12
| | | | | | | | | | | | | | | Details of MSVC version became irrelevant some time ago; the code now just tests for MSVC. In any case, the reader doesn't need to know how the function is implemented, as long as it does what it claims to do. We do not, in fact, use a random number source when generating the return value for comparisons involving only one nullptr; we quite consistently treat the nullptr as less than the other string. Make explicit that this is true even if the other is empty. Change-Id: Ifd9b00fdf8e814fcf933a05821201670fecfd646 Reviewed-by: Andrei Golubev <andrei.golubev@qt.io> Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* Include qstringtokenizer.h from qstring.hMarc Mutz2020-06-051-0/+1
| | | | | | | | It's a bit annoying that you have to include <QStringTokenizer> to use the tokenize() methods. The separation is a historic artefact, just fix it. Change-Id: Ied4cc0c8dd2bb6735bf29fbb26fdbf47d07db264 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* QFactoryLoader: port a local QStringList to QDuplicateTrackerMarc Mutz2020-06-051-3/+3
| | | | | | | | | Apart from a more fitting, minimal, API, QDuplicateTracker also transparently uses C++17 pmr::monotonic_buffer_resource to avoid, or at least reduce, memory allocations. Change-Id: I0a0d1e31fd35d483e0036045847a3759b593c71c Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
* macOS: Respect window type when determining main window statusTor Arne Vestbø2020-06-051-4/+2
| | | | | | | Fixes: QTBUG-84405 Pick-to: 5.15 5.12 Change-Id: I3fc6b15b07a81e7e7e417a5767c2853083c13516 Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
* QProcess/Win: Fix build in debug modeAlex Trotsenko2020-06-052-3/+4
| | | | | | | | | | Suppress a compile warning: io\qprocess_win.cpp: 623:101: error: format '%d' expects argument of ... Pick-to: 5.15 Change-Id: I9ea94ddfc21afea5d1a78e264507a36435cce063 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
* Clean out string/character mentions from QByteArray docsEdward Welbourne2020-06-051-290/+276
| | | | | | | | | | | | | | | | | | | | | | In some places QByteArray does interpret bytes as characters and a sequence of them as a text string; everywhere else, however, it now refers to them as bytes. Add a section to the class doc explaining how char* pointers are interpreted; the handling of '\0'-termination is surely familiar to most readers, but making it explicit provides contrast for the explanation of there being no such special treatment of '\0' bytes when a stard address and length are given. Also mention in the class doc that interaction with QString is done via UTF-8 encoding and can be avoided by defining a macro. Shorten, in light of that, the description of that encoding where it appears in affected methods. In the process, clean up lots of phrasings. Change-Id: Ic97dce4a20752e277eeab35a06737322b2074692 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Fix references to section in QByteArray class doc after title changeEdward Welbourne2020-06-051-10/+6
| | | | | | | | | This amends commit 9dd8e655cdd26eeaae30645b7fe013d9a696547f to fix the various references to section {8-bit Character Conversions}, which is now renamed {Character Case}. Change-Id: I1f777ab359c616a1b12f05a12b1cd7397f3ccb18 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Prune two un-needed #include files from qbytearray.cppEdward Welbourne2020-06-051-2/+0
| | | | | | | | The QByteArray code doesn't use QLocale or QString. Change-Id: I60966ecad35fdaaef9930ba2746bf732fa9f3cd7 Reviewed-by: Andrei Golubev <andrei.golubev@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Create QLocale's default store if missing when setDefault() is calledEdward Welbourne2020-06-051-2/+10
| | | | | | | | | | | | | | | | | | | A check to prevent crash-on-exit if QLocale::setDefault() was called after the default store was torn down had the side-effect of causing setDefault() to not record data if it was called before the first access to the default store caused it to come into being. Change the check to test that the default store has been destroyed and, if not, create it if it doesn't exist yet. This refines commit 4d6572aac0eb1f75f3c810ce8e92635b956d29fc (as modified by commit 11c5c078c7743050a115a4dcc31f52caaa378e35). Fixes: QTBUG-83016 Fixes: QTBUG-83415 Pick-to: 5.15 Change-Id: Icbce9bd9c75d0258d403e2f90957561b5a18bdf3 Reviewed-by: Andrei Golubev <andrei.golubev@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Reuse the non blocking implementation for blocking oneJarek Kobus2020-06-052-183/+193
| | | | | | | | | | | | | | | | | Replace the implementation of blockingMappedReduced(): after calling non-blocking version of mappedReduced() we are getting the future object, so we may call in sequence result(), which will block and return the result when the all tasks are done. The same is done with blockigMapped(), which calls blockingMappedReduced() with a custom reduce function. Looks like with this pattern we can reuse the non-blocking version for implementing blocking version of mapped / filtered methods. Task-number: QTBUG-83918 Change-Id: I7f240cfbd04834d551ff79d717b72194a26996d7 Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
* Port QSettings from QStringRef to QStringViewLars Knoll2020-06-053-10/+10
| | | | | | Task-number: QTBUG-84319 Change-Id: If2b5d8eb78ab5ca78d365f137d9680b1f0646c6b Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Add possibility to set QNX Screen pipeline valueTeemu Holappa2020-06-051-0/+15
| | | | | | | | The pipeline value is set by window property _q_platform_qnxPipeline. Task-number: QSR-263 Change-Id: I13536936b2335a97a6eeb5a94c4e0f552308d15e Reviewed-by: Samuli Piippo <samuli.piippo@qt.io>
* Fix build without features.shortcutTasuku Suzuki2020-06-052-0/+4
| | | | | Change-Id: I5b0d3b169c7adb3ee340df7b593f84167f1ccc0c Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* macOS: Clean up headersTor Arne Vestbø2020-06-0562-148/+231
| | | | | | | | | | | | | | The headers are now C++ clean and can be used outside of Objective-C code. All includes of Objective-C frameworks have been moved to the implementation files. Header guards have been added in the few places they were missing. All includes are now done via #include, instead of sometimes using the #import variant. Change-Id: Ibb0a9c0bcfefbda4347737212e40e300a3184982 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Fix build without features.completerTasuku Suzuki2020-06-051-0/+2
| | | | | Change-Id: Icaed1963d6306e36653d01ad9d05b68cb50717e5 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Update the qt_attribution.json for SQLiteAndy Shaw2020-06-041-2/+2
| | | | | | | | | This got forgotten when SQLite was upgraded to v3.32.1, so this amends e10e989ce83027f2f620bb6948be4948f3c91e76 Change-Id: I75799b6c55bc39c4cc050b5eb18a99d9f197410c Pick-to: 5.15 5.12.9 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Enforce two's complement integersGiuseppe D'Angelo2020-06-041-0/+4
| | | | | | | | | | | C++20 will make this true for everyone, but as far as Qt goes, this has to apply to all platforms even before that. Just add another couple of checks to the list. Change-Id: I0251ce431d4584380cfd3fc3e4b36f1dbdbf9df2 Pick-to: 5.15 Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Deprecate the pause-related APIs of QFuture* classesSona Kurazyan2020-06-049-96/+378
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Deprecated the pause-related APIs of QFuture* classes and added alternatives having "suspend" in the name instead. With 2f15927f01ceef0aca490746302a5ea57ea9441c new isSuspended()/suspended() APIs have been added to QFuture* classes for checking if pause/suspension is still in progress or it already took effect. To keep the naming more consistent, renamed: - setPaused() -> setSuspended() - pause() -> suspend() - togglePaused() -> toggleSuspended() - QFutureWatcher::paused() -> QFutureWatcher::suspending() Note that QFuture*::isPaused() now corresponds to (isSuspending() || isSuspended()). [ChangeLog][Deprecation Notice] Deprecated pause-related APIs of QFuture and QFutureWatcher. Added alternatives having "suspend" in the name instead. Change-Id: Ibeb75017a118401d64d18b72fb95d78e28c4661c Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io> Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io> Reviewed-by: Andrei Golubev <andrei.golubev@qt.io> Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
* Fix to crash in QWindow::event when delete this called on closeEventMiika Pernu2020-06-041-2/+6
| | | | | | | | | | | | | Starting from Qt 5.11 QWindow::event is called after QDialog::closeEvent which would cause a crash if "delete this" was called on closeEvent. The commit that changed this was e0b5ff4ad583befbecbcbe462998e3ed80899531. Added a check before QWindow::event call utilizing QPointer to prevent the function call in case object is destroyed by a user in close event handler. Change-Id: I64a4a0f3271714e55bf7e806177f0d8b39b67fa3 Fixes: QTBUG-84222 Pick-to: 5.15 5.12 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* QLabel: create the text control when getting polished, if necessaryVolker Hilsheimer2020-06-041-0/+3
| | | | | | | | | | | | This amends 7bee4e9cb3750be4573e1872f52023081b014500, and makes sure that the text control is created even if the attributes that define whether it's needed are changed after a call to setText or setTextInteractionFlags, where it is otherwise created. Task-number: QTBUG-84080 Pick-to: 5.15 Change-Id: I3be27f35bc83944948027345535d1202a7b97163 Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
* Remove the deprecated QDirModelVolker Hilsheimer2020-06-0413-1628/+12
| | | | | | | | | QFileSystemModel is the documented replacement. It uses threads to populate the model, which QDirModel doesn't. Change-Id: I7818ecd8f849eb566ac176612f382e17a0471c47 Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>