summaryrefslogtreecommitdiffstats
path: root/src/libs
Commit message (Collapse)AuthorAgeFilesLines
* Fix replaced component uninstall4.3Katja Marttila2022-03-223-30/+47
| | | | | | | | | | Replaced component was uninstalled when installing other components although no update or install was requested to the component. Fixes also a bug when some components were uninstalled unvisible from user. Task-number: QTIFW-2577 Change-Id: I6a7e9ce4a56991dfbdea53eb376d782dfb5d050a Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* Show 'components to be removed' message in updater viewKatja Marttila2022-03-181-10/+7
| | | | | | | | | | | Components might be uninstalled also in updater view, for example if the component is replaced with another components. This was not shown to the user. Task-number: QTIFW-2576 Change-Id: I143324eeb4830d15a718005992b3cb35d0f6696d Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io> Reviewed-by: Iikka Eklund <iikka.eklund@qt.io>
* Do not uninstall needed virtual dependenciesKatja Marttila2022-03-184-7/+50
| | | | | | | | | | | | | | | Virtual dependencies are uninstalled if all dependencies to the component is removed. Virtual dependencies were calculated using recent components in repository, which is wrong as the dependencies may have changed in the repository, causing the dependencies to be uninstalled although those are still needed. Fixed so that the uninstallable virtual components are calculated from repository components if the component is going to be updated, otherwise the dependeny is calculated from the local installed packages. Task-number: QTIFW-2573 Change-Id: If9cc59fa7f453d502ec1883f27273ef604128a6e Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* Revert "Simplify QInstaller::generateTemporaryFileName()"Arttu Tarkiainen2022-03-151-11/+21
| | | | | | | | | | | | | This reverts commit 270c5dfd9b6c86bec8eaf34d0a2c3d3b945ed5e5. Reason for revert: This caused a regression when an absolute path pointing to a directory non-writable by current user was used. QTemporaryFile uses its own file engine so we need to use QFile instead to forward the calls to the elevated privilege installer process with the Qt Installer Framework's RemoteFileEngine. Task-number: QTIFW-2575 Change-Id: I47f5bea06f9e1689ee322d972b405d8127967a98 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* Fix 'Execute' operation arguments with Linux separators4.3.0Katja Marttila2022-02-221-8/+5
| | | | | | | | | | | This bug was caused by the previous change which allowed the Windows separators to be saved to dat file without converting to normalized separators Task-number: QTIFW-2501 Change-Id: Iaeb70da0eaaa5c677c72178fcb8b336bc50a6842 Reviewed-by: Iikka Eklund <iikka.eklund@qt.io> Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* CLI: Fix missing warnings when trying to install invalid componentsArttu Tarkiainen2022-02-211-0/+2
| | | | | | | | | | | If there was at least one valid component argument, the installer would silently ignore any invalid component arguments. Instead print the appropriate "cannot install" reason for such components but still don't block installation for others. Change-Id: I7325d151385744ac46fcb5fa04c0eaf6acade3f3 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* Fix extracting entries with file paths that contain unicode charactersArttu Tarkiainen2022-02-171-32/+236
| | | | | | | | | | | | Libarchive stores most paths internally in a multistring that can contain a combination of a wide character string, multibyte string in current locale or unicode string encoded as UTF-8. Try to retrieve and set a variant of the string with the correct encoding when converting libarchive strings to/from Qt string classes. Task-number: QTIFW-2506 Change-Id: I7e7c1e3c5709b669df68b2f3918789ad4ebe4f13 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* Use of separators in Execute operationKatja Marttila2022-02-033-12/+43
| | | | | | | | | | | | | Execute -operation might be strict with the path separators. If wrong separators are used the Execute -operation might fail. Fixed so that Execute -operations paths are saved to dat file without converting to normalized separators. As the target dir is saved as @RELOCATABLE_PATH@ also for Execute -operation, check from the next available separator which separator should be used for operation. Task-number: QTIFW-2501 Change-Id: Ia9969bbe3177a6b2daab21c026df88d4e2ec2bb0 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* Libarchive: include errno code description in error stringsArttu Tarkiainen2022-02-022-20/+37
| | | | | | | | | Sometimes the textual error message returned by archive_error_string() does not reveal enough useful information, add also the error code from archive_errno(). Change-Id: Icc62168bc862484bfa1efc70dd8ca2e341b3394f Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* Gain admin rights when user is missing privilege to create symlinksArttu Tarkiainen2022-01-317-7/+155
| | | | | | | | | | | | | | | On Windows, the non-admin users cannot create symbolic links by default. Extracting archives containing symlinks would fail if the installer was no started as administrator. Catch the case and auto-elevate installer to extract such archives. Do not elevate installer if the current user has the privilege for symlink creation, or if the Developer mode is enabled, allowing unprivileged creation of symlinks. Task-number: QTIFW-2428 Change-Id: I0b6b1079daabb9727055dce8a9475c203d7e92b0 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* Doc: Update toNativeSeparators/fromNativeSeparators docKatja Marttila2022-01-311-0/+10
| | | | | | | | | | Add information that the predefined variables are not resolved when calling this function. Task-number: QTIFW-2488 Change-Id: Ic6da8323c74c216f09dd54610ee9095d0a32c27c Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io> Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* Remove extra linebreak from ConsumeOutput operationKatja Marttila2022-01-311-1/+1
| | | | | | | | | ConsumeOutput may be run to fetch a file path. Extra line break in the end will cause problems. Change-Id: I61133a66fb3d3a6961e9f79c11f783b5d103f046 Reviewed-by: Iikka Eklund <iikka.eklund@qt.io> Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* Do not check file existence in ConsumeOutput operationKatja Marttila2022-01-311-20/+8
| | | | | | | | | | | ConsumeOutput operation executable might be a system executable. Checking with QFileInfo if the file exists or is an executable does not work then as QFileInfo expects the given path to be full. QProcess might still find the executable although QFileInfo does not. Task-number: QTIFW-2499 Change-Id: I355f24c0c97947f8247667f54f203189b3830ead Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* Update license headerKatja Marttila2022-01-2414-25/+25
| | | | | | | Use https instead of http in www.qt.io/licensing Change-Id: I0a2e97afcda03d50fd823be8e11426c2399a3b8f Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* Make 'override' specifier usage consistentArttu Tarkiainen2022-01-2148-353/+355
| | | | | | | | | Add where missing. Replace occurrences of Q_DECL_OVERRIDE macro, building IFW requires a C++11 compatible compiler so the language specifier is preferred. Change-Id: Idb75e2813d26b9da85e03891f0ae9537c6524c56 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* Update libarchive sources to 3.5.2 releaseArttu Tarkiainen2022-01-2132-677/+1412
| | | | | | | | | Upstream details: https://github.com/libarchive/libarchive/releases/tag/v3.5.2 Change-Id: I92bc5911bde854c30d0b6515c49b5d512210401f Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* MT: Fix setting incorrect TargetDir value when started as rootArttu Tarkiainen2022-01-201-1/+1
| | | | | | | | | | | | | | | Maintenance tool was using the vendor configured default target directory for system wide installations instead of the actual application path. In addition to possibly several other things breaking as the variable is used extensively by the framework, this would make the installation appear corrupted as the local package hub file could not be read from the incorrect location. Task-number: QTIFW-2486 Change-Id: I31676e57d83409022e6908e64fac636b12d8262d Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* RemoteObject: Fix warning on calling QLocalSocket::waitForDisconnected()Arttu Tarkiainen2022-01-201-3/+6
| | | | | Change-Id: I1d5fdfedaee35c530b383951e6fc69b75bd67d64 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* Replace unnecessary includes with forward declarationsArttu Tarkiainen2022-01-2011-24/+37
| | | | | Change-Id: I4e5d627ae1832f6db63decfe1df4309bee938972 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* Enable 'Enter' to click Next -button in macOSKatja Marttila2022-01-201-0/+5
| | | | | | | | | | | | | Removing QWizard::NoDefaultButton will enable enter clicking in macos. This will also keep the Spacebar -key press to accept the Next -button. Adding also Qt::StrongFocus to Next -button, otherwise for example the radio buttons in Introduction -page will get the Spacebar -key press, even when those are set invisible, causing the installer to be converted to package manager. Task-number: QTIFW-2409 Change-Id: I2ad0e98b5be635c2f9e53ec1b6262bd37be22cae Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* Fix hard restart of maintenance toolArttu Tarkiainen2022-01-201-9/+16
| | | | | | | | | | This was only working when a component containing maintenance tool replacement was updated. For other 'Essential' and 'ForcedUpdate' components nothing happened after clicking the restart button. Task-number: QTIFW-2381 Change-Id: Ie59315b1d7e123af7169dff267ee2e1a4cf6b470 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* Make Updater -view checkbox selection fasterKatja Marttila2022-01-193-13/+12
| | | | | | | | | | If there are lot of components installed, querying core from component caused unnecessary performance hit. Also replaced the foreach keyword with the preferred C++ range-based loop Task-number: QTIFW-1021 Change-Id: I961439ba14f26fee21f201769a71319b4b98d14b Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* MT: Disable package manager when forced updates are foundArttu Tarkiainen2022-01-182-0/+17
| | | | | | Task-number: QTIFW-2437 Change-Id: I3c0293550456f36e37e98e97042bf6bfae6ce96d Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* Add "about application" menu and dialog on macOSArttu Tarkiainen2022-01-182-3/+17
| | | | | | | | | Also enable linking qtimageformats as a static plugin on macOS, it is required to read the .icns file to be shown on the dialog. Task-number: QTIFW-2453 Change-Id: Ib776635167a4c90ffa20a91ecc447d2d73f5aeb9 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* CLI: Add <TreeName> value to 'list' and 'search' command outputsArttu Tarkiainen2022-01-171-58/+79
| | | | | | | | | | | | | Print both 'TreeName' element and 'moveChildren' attribute value with detailed verbosity mode. Also use QXmlStreamWriter to write the output documents with deterministic attribute order, QDomElement stores the attributes internally in a QMultiHash map, which is randomized. Task-number: QTIFW-2452 Change-Id: I8eec64d39394f4092f8505ec99869165c82d11da Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* Fix visibility of warnings when failing to read product imageArttu Tarkiainen2022-01-171-2/+2
| | | | | | | | | These were printed with a logging category that is disabled by default. Task-number: QTIFW-2426 Change-Id: I7e7fd650e32f27e80cd5603c5385d3ff2197be7b Reviewed-by: Iikka Eklund <iikka.eklund@qt.io> Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* Use Next as default buttonKatja Marttila2022-01-141-6/+2
| | | | | | | | | Next should be the default selection when use presses Enter. Sometimes the focus was in Settings button. Task-number: QTIFW-1046 Change-Id: Idae996bd5a0c511b9d2595a22b7ea0114f34ade1 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* Merge remote-tracking branch 'origin/4.0'Arttu Tarkiainen2022-01-132-2/+2
|\ | | | | | | Change-Id: Ifb02b022312859c2c946ec0debcd77dc90a0ced2
| * Don't call toLower() when using the lang for finding the license fileAndy Shaw2021-01-141-1/+1
| | | | | | | | | | | | | | | | | | By calling toLower() it will go against what the expected format is for a language such as zh-CN and as a result not find the license file which is matching this language. Change-Id: Ibdf7d57d3d2761db7b68edcabf5599b9404f3b7e Reviewed-by: Katja Marttila <katja.marttila@qt.io>
| * Open the top treeview item after pressing 'Filter'Katja Marttila2020-12-211-0/+1
| | | | | | | | | | | | | | | | | | | | Topmost treeview item should be open by default, but this was not the case after categories were fetched. Task-number: QTIFW-2058 Change-Id: If64126623bd7b783524b8bd16771ede574be3b97 Reviewed-by: Iikka Eklund <iikka.eklund@qt.io> Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* | ArchiveFactory: register handlers for .qbsp file extensionArttu Tarkiainen2022-01-113-7/+12
| | | | | | | | | | | | | | | | | | | | | | QBSP archives were missing a handler which caused UnzipArchiveTask to fail when fetching metadata. Also fix the resulted segfault in UnzipArchiveTask::doTask() when ArchiveFactory::create() returns nullptr for unknown file extension - it now handles the exception properly. Task-number: QTIFW-2475 Change-Id: I72624763a06d6e7495daebd69970a5f22a4fd6d3 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Fix segfaults when failing to fetch compressed repositoriesArttu Tarkiainen2022-01-114-8/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The ComponentModel object was not always reset in case we already got to the point of clearing the source data (deleted components owned by PackageManagerCore from previous fetch) and failed after that, leaving the model with dangling pointers to the deleted component objects. If we were already on ComponentSelectionPage, this would cause segmentation faults when the component tree view using the model would be shown again after fetch. Task-number: QTIFW-2441 Change-Id: Ie779de5ca0a3c4ae895ea507e6be4a2f7343501e Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Fix Replace -element beviourKatja Marttila2022-01-111-12/+14
| | | | | | | | | | | | | | | | | | Replacable component was not correctly removed in install and update. Also added new tests for Replace element. Task-number: QTIFW-2454 Change-Id: Idce7fd1ef0ac2025ca5ca0952ab837e14516ac2b Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* | Do not replace conflicting remote packages silently with localsArttu Tarkiainen2022-01-061-5/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | On (tree)name conflicts with other than the same component in local and remote packages - instead of silently replacing the remote package with local, do one of the following: - Remote package A may have declared the same tree name as installed local package B. Catch the case and re-register package A as an unstable component with the original name, if possible. - Remote package A may have declared a tree name that conflicts with local package B's name. Do not register component A. Change-Id: I16ac583ea10bf203d8b8d0b19e6890f03cf0067a Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Add support for moving child components with <TreeName>Arttu Tarkiainen2022-01-0611-46/+159
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add new optional "moveChildren" attribute to <TreeName> element. Children of components declaring "moveChildren=true" attribute are calculated a value for an automatic tree name element. Multiple components in a single tree branch can declare a tree name, the order which the relocation happens is from leaf components to root components. Components may be moved under another tree name target. Components may be moved to an existing identifier part that does not have a component, for example in the following repository structure: rootA.childA rootB rootB.childB the "rootB" component can legally declare a "rootA" tree name. The tree names of components become static after installed. If a repository declares a new tree name for a component that is installed, it is only applied after updating in maintenance tool. Child components, which have an automatic tree name, are moved if the parent component is updated with a new tree name, however. Task-number: QTIFW-2380 Change-Id: I9c44a114d3c1248b7e2dd4f0b5cda0739af102f3 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Fix replacing components with <TreeName> elementArttu Tarkiainen2022-01-062-4/+13
| | | | | | | | | | | | | | | | | | | | | | The QHash dictionary used to store component objects before building the component tree may include keys that are either original names or overridden tree names of components. Only the former were handled when removing replaced components from the QHash. Task-number: QTIFW-2455 Change-Id: I340aa61c724da0da62d7e5a875a38b6ecc0eceb5 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Do not block installation when there are conflicting component namesArttu Tarkiainen2022-01-065-43/+149
| | | | | | | | | | | | | | | | | | | | | | | | - Components with conflicting original identifiers are not registered. - Components with conflicting tree names are registered with the original name, if installer is configured to allow unstable components. Otherwise they are not registered. - Unaffected components can be installed as usual. Task-number: QTIFW-2444 Change-Id: Ic1eaf3878f974185bc68202930134e5199dc0398 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Replace obsoleted functionsKatja Marttila2022-01-058-57/+57
| | | | | | | | | | | | | | | | qSort is obsoleted and std::sort should be used instead. Also QHash insertMulti is obsoleted and QMultiHash should be used instead. Change-Id: Ie4a44355d25d44943a4eeefc2842b4af3e126101 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* | Fix wrong title text after succesfull updateKatja Marttila2021-12-311-1/+2
| | | | | | | | | | | | Task-number: QTIFW-2439 Change-Id: Ie8f7a35d73d847e8864b1f1f2dc5fb7bc8ed9092 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* | Remove unused "ComponentPrivate::m_unstable" variableArttu Tarkiainen2021-12-312-2/+0
| | | | | | | | | | | | | | | | | | We store the unstable state in a QHash dictionary that holds the misc variables for components. Change-Id: Icc88032f4bf07176e684a37d896d676838b448f8 Reviewed-by: Iikka Eklund <iikka.eklund@qt.io> Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Allow case insensitive CLI search and listKatja Marttila2021-12-291-2/+4
| | | | | | | | | | | | | | | | | | It is hard to match the case so lets make users life a bit easier by allowing the case insensitivity. Task-number: QTIFW-2451 Change-Id: Ia9f307f4a3a2f9dbb027c294bd797263c21b5bd8 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* | Fix documentation warningsKatja Marttila2021-12-235-5/+14
| | | | | | | | | | | | Task-number: QTIFW-2408 Change-Id: I6aed46dc12e184d021c2a80d465fda11a5f6870f Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
* | Fix deprecation warnings from building with Qt 5.15.2Arttu Tarkiainen2021-12-2119-39/+49
| | | | | | | | | | | | | | | | Also update build version requirements. Task-number: QTIFW-2388 Change-Id: Iae1949548dda7a3b8d448228e27060efb5abd8eb Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Fix selecting target directory when elevated server process is activeArttu Tarkiainen2021-12-203-5/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There is a disparency in the return value of QFileInfo::isFile() on Windows whether QFileInfo uses QFileSystemEngine directly (for local files, returns false) or with another file engine (QFSFileEngine in this case, returns true), when the file does not exist on disk. Installer registers its own file engine handler that handles file engine creation. It creates custom RemoteFileEngine instances suitable for writing into more restrictive locations when the connection to the elevated installer server process is active. When calling RemoteFileEngine::fileFlags() with TypesMask parameter, the returned combination of enum values includes FileFlag::FileType when the given file does not exist, this can be reproduced with both the active remote server connection that forwards the file engine calls to the server process, and when the composed QFSFileEngine object is used directly without the remote connection. Fix by adding a check if the given target directory path exists, if it doesn't we can assume it is a directory to be created by the installer. Also rename function to better match what it does. Task-number: QTIFW-2383 Change-Id: I906b0676802d9d94e70abeb2dea1f71866cbbec8 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Fix size issues with page list widget when building with Qt 5.15.2Arttu Tarkiainen2021-12-131-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | Prefer elided text to horizontal scrolling. Fix invalid size hint for side widget items, otherwise the item delegate will compute the size hint based on the item data. We want to include custom height to not make the list cramped. Task-number: QTIFW-2388 Change-Id: I490a12c04f921b8c9a01c3ac72c6bcd4d951f6d3 Reviewed-by: Iikka Eklund <iikka.eklund@qt.io> Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Libarchive: enable support for uncompressed tar archivesArttu Tarkiainen2021-12-092-9/+6
| | | | | | | | | | | | | | Task-number: QTIFW-2404 Change-Id: I4c62d283d54a1f180f9c3525da0728a1c75ef50e Reviewed-by: Iikka Eklund <iikka.eklund@qt.io> Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Enable handling 7z archives with libarchiveArttu Tarkiainen2021-12-096-19/+33
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Make libarchive the default handler for 7z archives if the IFW tools were built with the 'libarchive' configuration feature. The LZMA SDK library is still built and can be used instead if the config feature is omitted. Also modify tests. Task-number: QTIFW-2375 Change-Id: I1091d5fa140cbd783cddecc595f35c6562639b07 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Libarchive: fix handling of glob pattern arguments when creating archiveArttu Tarkiainen2021-12-031-1/+21
| | | | | | | | | | | | | | | | | | Arguments with wildcards were not working if archivegen was called from somewhere else than shell, like from within a Python script. Task-number: QTIFW-2423 Change-Id: Icf6d6c3c45ad9050a03c1a3dd7c4d9f10d1f3be6 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Fix "Empty filename passed to function" warning on target directory pageArttu Tarkiainen2021-12-031-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When verifying the selected target directory for forbidden directories (user home and root), we incorrectly checked if the directory was empty regardless of if the path of the QDir object was empty. No need to check this as installing into either of these should be prevented - the folder may be populated after initial installation and installer would then nuke it on uninstallation. Also fix related warning about deprecated '=' operator. Task-number: QTIFW-2424 Change-Id: If4835dcc719e09e0a51a13149ae05d75c0e2b359 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Fix blocking UI when waiting start of the authorization fallback processArttu Tarkiainen2021-11-261-5/+14
| | | | | | | | | | | | | | | | | | | | Instead of constantly checking (busy waiting) if the server was started, perform the task in a local event loop. Task-number: QTIFW-2374 Change-Id: I7ddf63014c0cf0a187085339a5394186b0245a63 Reviewed-by: Iikka Eklund <iikka.eklund@qt.io> Reviewed-by: Katja Marttila <katja.marttila@qt.io>