summaryrefslogtreecommitdiffstats
path: root/src/corelib
Commit message (Collapse)AuthorAgeFilesLines
* QLinkedList/QSet: add {const_,}reverse_iterator, {c,}r{begin,end}()Marc Mutz2015-10-134-12/+192
| | | | | | | | | | | | | | | | | | | | | | Now all Qt sequential containers consistently provide reverse iterators. The associative ones, by way of not returning std::pair from op*, can't just use std::reverse_iterator. They would miss .key() and .value() methods. So that has to wait for 5.7. The reverse versions of the new key_iterators can also just use std::reverse_iterator, but I'm afraid that after bikeshedding over keyRBegin() vs. rKeyBegin() vs. reverseKeyBegin() vs. rkbegin() vs. krbegin() (<-- of course, what else?), it would anyway be too late for 5.6, so defer, too. [ChangeLog][QtCore][QLinkedList/QSet] Added rbegin(), crbegin(), rend(), crend(), and reverse_iterator and const_reverse_iterator typedefs. Task-number: QTBUG-25919 Change-Id: I58316fffade469e9a42c61d7aa1455ae3443fd94 Reviewed-by: Sérgio Martins <sergio.martins@kdab.com> Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
* Libraries: Fix single-character string literals.Friedemann Kleint2015-10-137-18/+18
| | | | | | | Use character literals where applicable. Change-Id: I8e198774c2247c1cc1d852a41b59b301199b7878 Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
* Examples/Doc snippets: Fix single-character string literals.Friedemann Kleint2015-10-136-15/+15
| | | | | | | Use character literals where applicable. Change-Id: I79fa5018f05735201ae35ee94ba0d356fcad1056 Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
* Fixed a QTimer::singleShot() crash when a functor callback is usedJuha Turunen2015-10-121-7/+2
| | | | | | | | | | | | | | | | | | | If QTimer::singleShot() is used with a functor callback and a context object with different thread affinity than the caller, a crash can occur. If the context object's thread is scheduled before connecting to QCoreApplication::aboutToQuit(), the timer has a change to fire and QSingleShotTimer::timerEvent() will delete the QSingleShotTimer object making the this pointer used in the connection invalid. This can occur relatively often if an interval of 0 is used. Making the moveToThread() call the last thing in the constructor ensures that the constructor gets to run to completion before the timer has a chance to fire. Task-number: QTBUG-48700 Change-Id: Iab73d02933635821b8d1ca1ff3d53e92eca85834 Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
* QtCore: use QStringBuilder in more placesMarc Mutz2015-10-122-20/+7
| | | | | Change-Id: I1a2016039c6cfa35505b987b6d4627bf806500ba Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
* QtCore: use QStringRef in more placesMarc Mutz2015-10-127-15/+16
| | | | | | | | Apart from removing some unwanted allocations, also reduces text size by ~800B on Linux AMD64 GCC 4.9 release builds. Change-Id: Ibcd1d8264f54f2b165b69bee8aa50ff7f4ad3a10 Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
* QtCore: don't convert single characters to QString for QTextCodec::fromUnicode()Marc Mutz2015-10-112-3/+5
| | | | | | | | | Use the fromUnicode(QChar *, int size) overload instead. Saves 0.5KiB text size on Linux GCC 4.9 AMD64 release builds. Change-Id: I1a1081e09bff4c2116288b8c2616e1bb7ee2bb42 Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
* QtCore: Don't compare QChars to literal 0sMarc Mutz2015-10-112-2/+2
| | | | | | | | | | This is prone to ambiguities, even though we currently don't run into them. Use QChar::isNull() instead. Change-Id: I71843878b3f4f8a5deae2ef57a6f6628461be216 Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
* QtCore/qmake: drop some unneeded QChar -> QString conversionsMarc Mutz2015-10-111-1/+1
| | | | | Change-Id: Id2fb5089b0ec51073efb846b59ecc63942cfb60d Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
* QMetaProperty::write should reset the property if an empty QVariant is givenOlivier Goffart2015-10-092-3/+15
| | | | | | | | | | [ChangeLog][QtCore][QMetaProperty] write() now resets the property if an empty QVariant is given, or set a default constructed object if the property is not resettable Change-Id: I9f9b57114e740f03ec4db6f223c1e8280a3d5209 Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@theqtcompany.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
* Fix crash in QMetaProperty::write for custom types and conversionOlivier Goffart2015-10-091-2/+2
| | | | | | | | | | | | | | | | if t >= QMetaType::User, we would not return false nor call convert. We would then pass a pointer to whatever is in the QVariant to the qt_metacall that is expecting a pointer to an object of a different type. Since we have custom converters, we can call QVarent::convert even for custom types anyway. [ChangeLog][QtCore] Fixed crash when setting a QVariant of a different type to a property of a custom type. Attempt to do a conversion instead. Task-number: QTBUG-40644 Change-Id: Ib6fbd7e7ddcf25c5ee247ea04177e079f6d7de35 Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@theqtcompany.com>
* Fix \sinceLars Knoll2015-10-081-2/+2
| | | | | | | This API only appeared in 5.6. Change-Id: I3ddda44f7c55c94c7f22f76f83a45094209d8c39 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Add \since 5.6 to method docs and document the changed signalLars Knoll2015-10-081-0/+13
| | | | | | Change-Id: I9a727a2a01927693e8182eb5518ee4d8f6e5be23 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
* Make container move semantics consistentMarc Mutz2015-10-078-20/+22
| | | | | | | | | | | | | | | Make all containers (excepting QVarLengthArray) - nothrow default-constructible - nothrow move-constructible - nothrow move-assignable - nothrow swappable [ChangeLog][QtCore] All containers (with the exception of QVarLengthArray, but including QSharedPointer) are now nothrow_default_constructible, nothrow_move_constructible, nothrow_move_assignable, and nothrow-swappable. Change-Id: I12138d262f9f7f600f0e1218137da208c12e7c0a Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* QMulti(Map|Hash): add move ctor from Q(Map|Hash)Marc Mutz2015-10-072-0/+6
| | | | | | | There was a copy ctor, a move ctor was missing. Change-Id: If09a4d4c74682169759eff43b298f6c77702c169 Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
* doc: fix a typo in QVersionNumber docsMarc Mutz2015-10-071-1/+1
| | | | | | Change-Id: I6ba901efe0822ed1d5ae8359f8b7aefe730f2d06 Reviewed-by: Keith Gardner <kreios4004@gmail.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Add static assert checking QT_POINTER_SIZE.Friedemann Kleint2015-10-071-1/+3
| | | | | | | | | | QT_POINTER_SIZE is determined by the configure test ptrsize, which has been observed to fail due to unrelated build issues. Add a check to verify the correct size. Task-number: QTBUG-48525 Change-Id: I4fcb9761b54370b39c0d3e1e0a6d0aa3c0223f40 Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
* QUtf8Codec: Remove dead codeThiago Macieira2015-10-061-2/+0
| | | | | | | | | | The maximum value for charsNeeded is 4, so if bytesAvailable is less than charsNeeded - 1, the it's at most 2. It can't be larger than 2. Found by Coverity, CID 11000. Change-Id: I42e7ef1a481840699a8dffff1407ef9221a4fd80 Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
* Add missing "We mean it" comments to private headers.Friedemann Kleint2015-10-051-0/+11
| | | | | Change-Id: If81a5e1db0fe93377e7cc54a78b01c50b44abe57 Reviewed-by: Liang Qi <liang.qi@theqtcompany.com>
* Remove extra semicolon in declaration of QMacAutoReleasePoolTor Arne Vestbø2015-10-021-1/+1
| | | | | Change-Id: Ie7f92fae5f80fc2a8b4dae58f6688ea47dbcb95b Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
* Merge "Merge remote-tracking branch 'origin/5.5' into 5.6" into refs/staging/5.6Liang Qi2015-10-0237-175/+279
|\
| * Merge remote-tracking branch 'origin/5.5' into 5.6Liang Qi2015-10-0237-175/+279
| |\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: qmake/doc/src/qmake-manual.qdoc src/corelib/tools/qstring.h src/gui/image/qimagereader.cpp src/network/access/qnetworkaccessmanager.cpp src/tools/qdoc/doc/examples/examples.qdoc src/widgets/accessible/qaccessiblewidgetfactory_p.h src/widgets/doc/qtwidgets.qdocconf Change-Id: I8fae62283aebefe24e5ca4b4abd97386560c0fcb
| | * clean up QWindowsPipeWriter I/O error handlingJoerg Bornemann2015-09-291-7/+8
| | | | | | | | | | | | | | | | | | | | | Exit early, and add warning messages for (unlikely) error cases. Change-Id: I7130b2e298f3a644a9d0e96a3a1860350e11adff Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
| | * QWindowsPipeWriter: clean up OVERLAPPED resource handlingJoerg Bornemann2015-09-291-8/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | Use RAII to ensure that every code path cleans up the event handle, and re-initialize the whole OVERLAPPED object, not just the two offset members. Change-Id: If7e68ec6e61b7bb04df0d06734c04589f6822c4a Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
| | * Fix comparisons between QByteArray and QString.Christian Kandeler2015-09-281-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | QByteArray::operator< and friends had their logic reversed. Task-number: QTBUG-48350 Change-Id: I625209cc922b47e78dfb8de9fe100411f285a628 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
| | * Ensure there's no sign-extension here.Thiago Macieira2015-09-281-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Both e_shentsize and e_shtrndx are ELF half-words, which means C integers of rank less than int (they're quint16). That means this multiplcation was done actually as int, due to integer promotion from unsigned short. So preempt the integer promotion and force them to full- word integers (unsigned int). While the bit-pattern result of the multiplication is the same, the addition with e_shoff (a qelfoff_t = quintptr) wouldn't: the promotion from 32-bit int to 64-bit would first execute a sign-extension. Now, this shouldn't happen on regular ELF files, but it cause QLibrary to crash if a specially-crafted (or simply corrupt) plugin is found. Found by Coverity, CID 22642 Change-Id: I42e7ef1a481840699a8dffff1407e9f1282eeecf Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
| | * QDateTime: Ensure a valid timezone when using the "offset constructor".Christian Kandeler2015-09-231-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | The timeZone() function used to assert when called on such an object (or, for a release build, return an invalid time zone). Change-Id: I6ae8316b2ad76f1f868e2498f7ce8aa3fcabf4a6 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
| | * Free the QFreeList object allocated memory on exitjian liang2015-09-221-4/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This memory allocation was introduced in 314c83c0c2f91532654f869b7dc6af1b7e8538da. With a compiler without thread safe statics support mutex.cpp use a function named freelist() to create the global QFreeList object. it will be created when the first time it was accessed, but will never be released. This patch use Q_DESTRUCTOR_FUNCTION to delete this object. Task-number: QTBUG-48359 Change-Id: I4e4716930930aa98630101a1f96de6a7672af9cb Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
| | * Fix two data races in QThread/QThreadDataDavid Faure2015-09-227-14/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * theMainThread is written by the main thread and read by QThreadData::~QThreadData() (any managed thread) * QThreadData::thread is written by QThread::~QThread (in the parent thread) and read+written by QThreadData::~QThreadData (in the managed thread). This can happen because QThreadData is refcounted so the managed thread (which derefs it) races with the parent thread (which sets it to 0). Change-Id: I72de793716391a0937254cda6b4328fcad5060c7 Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
| | * fix error messageJoerg Bornemann2015-09-221-1/+1
| | | | | | | | | | | | | | | | | | | | | The error message mentioned a wrong function name. Change-Id: Ia2258744fd9268af6b00f54e74d40476ded3b0d2 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
| | * Fix compilation with QT_NO_[DEBUG|WARNING]_OUTPUTKai Koehne2015-09-211-0/+6
| | | | | | | | | | | | | | | Change-Id: I4b92ac6b917c9979449b4834764497003d6de087 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
| | * Fix regression with QStandardPaths::standardLocations on WindowsJoni Poikelin2015-09-171-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Commit f3bc9f5c5cee9dac8a7815c2861a9945b5341390 broke standardLocations by replacing them with same paths as writeable locations would return. Task-number: QTBUG-46279 Change-Id: I43150e3af13320a707c7882dd0f0cdcb2c6e8a70 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com> Reviewed-by: David Faure <david.faure@kdab.com>
| | * Fixed compilation errors in qatomic_ia64.hÉmeric MASCHINO2015-09-121-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | QBasicAtomicOps<size>::testAndSetRelaxed(T &, T, T) and QBasicAtomicOps<size>::testAndSetOrdered(T &, T, T) bodies don't match any prototypes in qatomic_ia64.h: the optional parameter T *currentValue is missing. Task-number: QTBUG-48197 Change-Id: I0112c429b161b4a0ddb6e8a0400a436282ffb1c7 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
| | * Fix the spurious socket notifications under WindowsAlex Trotsenko2015-09-103-79/+80
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | To handle network events, QEventDispatcherWin32 uses I/O model based on notifications through the window message queue. Having successfully posted notification of a particular event to an application window, no further messages for that network event will be posted to the application window until the application makes the function call that implicitly re-enables notification of that network event. With these semantics, an application need not read all available data in response to an FD_READ message: a single recv in response to each FD_READ message is appropriate. If an application issues multiple recv calls in response to a single FD_READ, it can receive multiple FD_READ messages (including spurious). To solve this issue, this patch always disables the notifier after getting a notification, and re-enables it only when the message queue is empty. Task-number: QTBUG-46552 Change-Id: I05df67032911cd1f5927fa7912f7864bfbf8711e Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
| | * QMimeDatabase: warn instead of asserting on bad magic.David Faure2015-09-044-45/+68
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | An invalid mime magic definition could lead to an assert. Replaced with a qWarning. Move all checking to the QMimeMagicRule constructor, and do keep invalid rules since they are need to parse child rules. Unit test added, with QTest::ignoreMessage when using the XML backend (there's no warning from update-mime-database when using the cache). Also make it easier to add more shared mime info files for tests. Task-number: QTBUG-44319 Done-with: Eike Ziller <eike.ziller@theqtcompany.com> Change-Id: Ie39a160a106b650cdcee88778fa7eff9e932a988 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
| | * QMimeType: add KDAB copyright to the code I contributed a lot to.David Faure2015-09-047-0/+7
| | | | | | | | | | | | | | | Change-Id: I794259f28c7adbaad3cfb40f92a0ad2dc512e5b4 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
| | * Doc: Corrected link issues in qtbaseNico Vertriest2015-09-042-3/+4
| | | | | | | | | | | | | | | | | | Task-number: QTBUG-43810 Change-Id: I0a019becc53b222cb6a7df1fafdccd57aca5b598 Reviewed-by: Martin Smith <martin.smith@digia.com>
| | * Doc: Added enums in qnamespace.qdocNico Vertriest2015-09-041-0/+11
| | | | | | | | | | | | | | | | | | | | | Task-number: QTBUG-43810 Change-Id: Ib756382833fabecaae2526a413d046646f3e443e Reviewed-by: Topi Reiniö <topi.reinio@digia.com> Reviewed-by: Martin Smith <martin.smith@digia.com>
| | * Doc: Added link to Declarative State Machine FrameworkNico Vertriest2015-09-042-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | Added link in C++ documentation Task-number: QTBUG-46285 Change-Id: I0f330829f7df713d4f5292b2a300c5c9d3732bda Reviewed-by: Venugopal Shivashankar <venugopal.shivashankar@digia.com>
| | * Add QLockFilePrivate::processNameByPid implementation for GNU/kFreeBSDDmitry Shachnev2015-08-271-0/+24
| | | | | | | | | | | | | | | | | | | | | | | | GLIBC does not provide kinfo_getproc, so we need to call sysctl manually. Change-Id: I3bf22959ff74b3b6c34b5360738e52086a3ff1b4 Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
| | * QString perf improvement : removal of useless testJulien Blanc2015-08-261-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | Removed a test in QStringAlgorithms trimmed_helper. That test is not needed because both null / empty QStrings are already handled by the previous test, other cases are handled just fine by the general case. Change-Id: I26db1142a656a7d06dfdd6b3b8f8a3ee6ca22302 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* | | Doc: replace \target with \keyword if at start of pageNico Vertriest2015-10-024-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A \target whose purpose is to link to the top of a page (and not to a section within a page) works better as a \keyword, because \target generates a new html anchor which, in this case, is not tied to any title element on the page. A \keyword links to the page itself, as expected. Task-number: QTBUG-48482 Change-Id: I957551edd0eb7e665358d04b37dab41e2686b851 Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
* | | Doc: Update obsolete URLs to external documentationTopi Reinio2015-10-022-2/+2
| | | | | | | | | | | | | | | | | | | | | Change-Id: I199de83971701c14e903e712fcdcd29aaff95c6d Task-number: QTBUG-48420 Reviewed-by: Venugopal Shivashankar <venugopal.shivashankar@digia.com> Reviewed-by: Liang Qi <liang.qi@theqtcompany.com>
* | | Doc: Use correct image in Qt::BusyCursor documentationTopi Reinio2015-10-021-1/+1
|/ / | | | | | | | | | | Change-Id: I54e832808a37d46f5520c57ceb2a270685ed3f94 Task-number: QTBUG-48445 Reviewed-by: Martin Smith <martin.smith@digia.com>
* | Fix build without PCH after commit 3ae2387f375798a983b6d052723f10fc88b63da0Simon Hausmann2015-10-021-0/+4
| | | | | | | | | | | | | | Include errno.h for errno and EEXIST. Change-Id: Id28d5a08097319eb84b1fe9ef20c9be6ebe575fa Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
* | Revert "Add support for same-file intrinsics with Clang 3.7"Thiago Macieira2015-10-011-3/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit 39c2b8c5c12dfb8560fa04ce346a129adb223e29. The feature is not working: $ clang -c -o /dev/null -msse2 -include tmmintrin.h -xc /dev/null In file included from <built-in>:316: In file included from <command line>:1: /home/thiago/clang3.7/bin/../lib/clang/3.7.0/include/tmmintrin.h:28:2: error: "SSSE3 instruction set not enabled" For reference: $ icpc -c -o /dev/null -msse2 -include tmmintrin.h -xc /dev/null; echo $? 0 $ gcc -c -o /dev/null -msse2 -include tmmintrin.h -xc /dev/null; echo $? 0 Change-Id: I42e7ef1a481840699a8dffff140844cb8872ed6e Reviewed-by: Sérgio Martins <sergio.martins@kdab.com>
* | QLocale: remove (harmless) dead codeThiago Macieira2015-10-011-6/+6
| | | | | | | | | | | | | | | | | | | | On line 92 and on line 146, len == 2 or len == 3, so uc1 and uc2 cannot be 0, ever. Found by Coverity, CID 11013 and CID 11012. Change-Id: I42e7ef1a481840699a8dffff1407edefd3e7aa4f Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
* | Purge extraneous execute permissions.Edward Welbourne2015-09-301-0/+0
| | | | | | | | | | | | | | | | | | Source files should not be executable. Change-Id: If9b9eaa6c8c7348ca6f48fa9253f3540e95aca37 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com> Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@theqtcompany.com>
* | Moved a comment to where it belongs.Edward Welbourne2015-09-301-9/+8
| | | | | | | | | | | | | | | | There was another function between the comment and the one it documented. Change-Id: I4e96979261738b1ef264984da0d6a8245f2fb643 Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@theqtcompany.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
* | Initialize QFutureWatcherBasePrivate::finished and testEdward Welbourne2015-09-301-3/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | It's accessed by QFutureWatcherBase::isFinished(), potentially before anything has set it. It gets to be initially true until setFuture() has given it us unfinished future and set it false. Add a regression test for matching state in future and watcher. Task-number: QTBUG-12358 Change-Id: Iae7bdaa434ab80f518afe4d7d55df99c391991a4 Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@theqtcompany.com>