summaryrefslogtreecommitdiffstats
path: root/src/core/web_contents_adapter.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Merge remote-tracking branch 'origin/5.9' into 5.10Liang Qi2017-11-151-0/+6
|\ | | | | | | | | | | | | | | | | Conflicts: src/3rdparty tests/auto/quick/qmltests/qmltests.pro tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp Change-Id: I2a1e3a83e29a1d6709f3e98fda3f7b4ab7ab297e
| * Do not stop findText on navigation if no finding in progressPeter Varga2017-11-071-0/+6
| | | | | | | | | | | | | | | | | | Avoid unnecessary unselect calls to prevent to lose active focus on an input field during background load. Task-number: QTBUG-64082 Change-Id: I13e8e2a96254360a78329d6ea2b6858da86a2b5a Reviewed-by: Viktor Engelmann <viktor.engelmann@qt.io>
* | Stop preserving aborted navigation entriesJüri Valdmann2017-11-141-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Consider the scenario 1. user enters url "http://localhost:8000/" A new navigation entry is created and committed in the NavigationController. 2. user enters url "http://localhost:8000/download.bin" A new navigation entry is created and a download is triggered, but the pending navigation entry in the NavigationController is neither committed nor discarded (since our WebContentsDelegate's ShouldPreserveAbortedURLs() returns true). 3. user enters url "http://localhost:8000/download.bin" At this point the NavigationController will have "http://localhost:8000/" as the committed navigation entry and "http://localhost:8000/download.bin" as the pending entry. NavigateToPendingEntry will see that the user is trying to navigate again to the same URL as the last pending entry and will therefore identify this new navigation as a reload. However Blink interprets 'reload' to mean reloading the last committed entry, i.e. "http://localhost:8000/", and so we end up trying to download "http://localhost:8000/" instead of "http://localhost:8000/download.bin" as the user might have expected. The patch removes the ShouldPreserveAbortedURLs override and relies on the default implementation which always returns false. As a result the pending navigation entry in step 2 above is discarded once the download has been triggered and the unexpected behavior in step 3 is no longer triggered. Removing the override resurrects QTBUG-48995 where, for example, calling QWebEnginePage::setUrl triggers first a urlChanged signal for the *old* URL. The patch adds url and title properties to WebContentsDelegateQt so that property change signals are triggered only if the properties have actually changed. A consequence of this fix is that the first urlChanged signal is delivered directly from the setUrl/load method and not asynchronously once the loading starts (this is also how Chrome's URL bar is updated). Task-number: QTBUG-63388 Change-Id: Icfa300b165e5e56f1fbc8978a00a237c263df183 Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
* | Adaptations to 61-basedAllan Sandfeld Jensen2017-10-251-1/+20
| | | | | | | | | | Change-Id: I5cb198445f283c6cea8187a1a2883896df0ee918 Reviewed-by: Michal Klocek <michal.klocek@qt.io>
* | Stabilize navigation after render process terminationv5.10.0-beta1Peter Varga2017-10-041-1/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | When renderProcessTerminated signal is emitted the invalid view of the corresponding RenderWidgetHost is not destructed yet. Having this invalid view during navigation leads to a crash. The proper way to navigate on renderProcessTerminated is to schedule the navigation with QTimer::singleShot(). Otherwise, warn the user and ignore navigation to avoid crash. Task-number: QTBUG-58478 Change-Id: I54ff62f5d306c8cb1fa17e29f349d1e02c4c8cec Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* | Merge remote-tracking branch 'origin/5.9' into 5.10Allan Sandfeld Jensen2017-09-291-1/+1
|\| | | | | | | Change-Id: I7094e85a7770303a2ae30baccbc484c04f33600e
| * Add LICENSE.ChromiumKai Koehne2017-09-201-1/+1
| | | | | | | | | | | | | | | | | | The mentioned LICENSE file is not available; add it under the name LICENSE.Chromium. Task-number: QTBUG-60006 Change-Id: Ib2b3cb64467046c7ba1f53b0bbe14c3ec5a5291d Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* | Fix selectedText() to return the value of what findText("") findsAlexandru Croitor2017-09-221-3/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously when a find operation was finished by calling findText(""), the selection buffer was cleared and calling selectedText() would return an empty string, even though on the UI side a blue rectangle selection was still visible. This was due to an incorrect Unselect() call in WebContentsAdapter::stopFinding(). With the new selection change support in the parent patch, and with the removed Unselect() call, selectedText() now properly returns the value of the highlighted blue selection after searching is finished. Task-number: QTBUG-60673 Task-number: QTBUG-54071 Task-number: QTBUG-53134 Change-Id: I89e0eddb0c14af6d6c06ee878e706be65d3b0831 Reviewed-by: Viktor Engelmann <viktor.engelmann@qt.io> Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
* | Set custom drag data as Chrome doesAllan Sandfeld Jensen2017-09-161-0/+11
| | | | | | | | | | | | | | | | Expose any custom data in the pickled form Chrome uses. Task-number: QTBUG-61503 Change-Id: Ie89bd04f35b1dba94b91e87960cde66238d738df Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* | Merge remote-tracking branch 'origin/5.9' into 5.10Allan Sandfeld Jensen2017-09-141-2/+23
|\| | | | | | | Change-Id: I0860a46b981c1f711bec45d7a495bcec2a80ee1f
| * Set referrer on download requestsJüri Valdmann2017-09-121-2/+23
| | | | | | | | | | | | | | | | | | Note that the Referer header still won't be sent if the download is triggered via an anchor element with the 'download' attribute: crbug.com/455987 . Task-number: QTBUG-61354 Change-Id: I5af971af916b2190756e3e58f19736072a213922 Reviewed-by: Michal Klocek <michal.klocek@qt.io>
* | Adaptations for Chromium 60Alexandru Croitor2017-09-111-1/+1
| | | | | | | | | | | | Change-Id: I536258e22c2ec143f2fd3f1cbda229e0611b6af4 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* | Adaptations for Chromium 59Allan Sandfeld Jensen2017-09-111-25/+24
| | | | | | | | | | Change-Id: I472053e316bfa782d0a6fb8903f4901be12247ae Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* | Merge branch '5.9' into 5.10Allan Sandfeld Jensen2017-09-061-1/+36
|\| | | | | | | Change-Id: I9fe9946ba47f9ef509a861963c83e275a25fffd0
| * Handle content::DropData::file_contentsJoerg Bornemann2017-08-181-1/+35
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | DropData::file_contents and DropData::file_description_filename are filled by Chromium if the user drags an image from a web page. Write the file's content into a file with the suggested file name in a temporary directory, and set the drop action to "move". This enables users to drag images from the browser to the desktop or a file browser. The file is moved by the client to the target location. The temporary directory is removed when the page is closed. Note that Chrome doesn't use this temporary directory trick, but employs techniques like XDS [1] on Linux to transfer the data via the native clipboard/DnD MIME object. Unfortunately QDrag doesn't support this. Support could be added, but I consider this solution as good enough. [1] https://www.freedesktop.org/wiki/Specifications/XDS/ Task-number: QTBUG-60790 Change-Id: I44f2b3170a124e861ed4131c421903d895b70715 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* | Merge remote-tracking branch 'origin/5.9' into devAllan Sandfeld Jensen2017-08-141-0/+16
|\| | | | | | | | | | | Includes sha1 bump of src/3rdparty to head of 58-based. Change-Id: I37743c3979c1b6fb21f71eab7048e82f7aa5d78b
| * Set web contents font setting to defaultAllan Sandfeld Jensen2017-08-031-0/+10
| | | | | | | | | | | | | | | | | | | | Chromium has since version 50 overridden the global font settings with the settings of every web contents created, so we need to first set the global settings in the web contents, to still follow system defaults. Task-number: QTBUG-62146 Change-Id: If10847c81beda08ecb7bfdf7556e39b1d2989754 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
| * Support command-line argument --force-webrtc-ip-handling-policyAllan Sandfeld Jensen2017-07-181-0/+6
| | | | | | | | | | | | | | | | | | | | This command-line argument makes it possibly to block exposure of internal IP addresses when WebRTC access hasn't been granted, using --force-webrtc-ip-handling-policy=default_public_interface_only Task-number: QTBUG-57505 Change-Id: I0cddd1b20e0814811894204cb31e0c463a75f7be Reviewed-by: Kai Koehne <kai.koehne@qt.io>
* | Remove support for building with Qt versions < 5.8.0Allan Sandfeld Jensen2017-08-041-2/+0
| | | | | | | | | | Change-Id: I2f2ba754111e198298b7d1a595343fcd773e05e5 Reviewed-by: Kai Koehne <kai.koehne@qt.io>
* | Merge remote-tracking branch 'origin/5.9' into devAllan Sandfeld Jensen2017-07-051-1/+2
|\| | | | | | | Change-Id: Ida702fd5fa05a32d6cd7fc737aa061da74b675a0
| * Fix crash when accessibility is disabledAllan Sandfeld Jensen2017-06-231-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | With the no-accessibility feature moved to qtgui-config, we don't always include it where web_content_apapter_client.h is included, which gives it an inconsistent binary layout. Solve it by making the optional method always defined as it doesn't rely on anything from accessibility. Task-number: QTBUG-61200 Change-Id: I65f34ab2b6763f3166b945e700994bd8d019a835 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
| * Fix QMimeData to content::DropData conversionJoerg Bornemann2017-06-061-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When files are dropped then it's expected that dataTransfer.files and dataTransfer.items have the same amount of entries. That means that whenever QMimeData contains files we must only convert those and ignore the rest. But while files do not allow other items before them, text and URLs may co-exist in content::DropData. This is consistent with the behavior of Chromium and Firefox and what web pages expect. Task-number: QTBUG-59690 Change-Id: Iad56aac3e071dcfa09fa5dfcc788c1c54c6eeae6 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* | Simple adaptations for Chromium 58Allan Sandfeld Jensen2017-06-141-5/+5
| | | | | | | | | | Change-Id: I7c2c85973b03fdbd2eafb5339f33a3758d53e924 Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
* | Adaptations for Chromium 57Allan Sandfeld Jensen2017-06-141-11/+10
|/ | | | | Change-Id: Ia2756c1e9b13839c2330bd98cf953d47cbdac0dd Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
* Fix backwards compatibilityAllan Sandfeld Jensen2017-05-101-0/+2
| | | | | | | | | | QtWebEngine supports building with last stable and last LTS Qt releases. Guard some 5.7-5.9 API from being used when not available, and reinstate the default features for 5.6 LTS builds. Change-Id: Ia288a49109d011a2bee883d4a2d38d994b497d59 Reviewed-by: Michael Brüning <michael.bruning@qt.io>
* Fix spellcheck feature checkAllan Sandfeld Jensen2017-04-041-1/+1
| | | | | | | | | Was changed to generated buildflag headers instead of command line defines. Task-number: QTBUG-59687 Change-Id: Iead64f5321d000c07172ee27a0032394527ec501 Reviewed-by: Michael Brüning <michael.bruning@qt.io>
* Adaptations for Chromium 56Allan Sandfeld Jensen2017-03-271-22/+23
| | | | | Change-Id: I78240d7956de4716757761fc6517f031b4adb822 Reviewed-by: Michael Brüning <michael.bruning@qt.io>
* Merge remote-tracking branch 'origin/5.8' into 5.9Allan Sandfeld Jensen2017-03-021-55/+23
|\ | | | | | | Change-Id: Iff6ab3c287c58d8ec84a1513460bfce5218e8a61
| * Fix Q_ASSERT when dragging an item over WebEngineViewJoerg Bornemann2017-02-211-55/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When dragging something over a WebEngineView we're waiting for the result of the asynchronous DragTargetDragOver using a RunLoop. The result will be delivered by a call to updateDragAction. The RunLoop will call MessagePumpForUIQt::Run which spins a QEventLoop. The QEventLoop will dispatch more posted QDragMoveEvent objects while we're handling the current QDragMoveEvent. This triggers a recursion guard's Q_ASSERT when dragging from a QtQuick item onto a WebEngineView. When waiting for the DragTargetDragOver result we're not interested in Qt events. Instead of using a RunLoop, implement a poor man's chromium event loop and actively wait for updateDragAction being called. In practice, no more than two iterations of the loop are run until updateDragAction is called. Therefore the extra CPU and sleep times are negligible. Task-number: QTBUG-58920 Change-Id: Icfdf9c680c4c9987ac3dbb41fbc3e1403af0fa9f Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* | Adapt devtools to Chromium 55Allan Sandfeld Jensen2017-03-011-1/+1
| | | | | | | | | | | | | | A restructuring of all our devtools integration classes. Change-Id: I2a32b9b2e66c17b72aaa3bbf246a22d211409aa5 Reviewed-by: Michal Klocek <michal.klocek@qt.io>
* | Simple adaptations to Chromium 55Allan Sandfeld Jensen2017-03-011-1/+1
| | | | | | | | | | | | | | The simplest adaptations to API and build changes in Chromium 55 Change-Id: I923fa188690a04902492317807f72f006bcab9c6 Reviewed-by: Michal Klocek <michal.klocek@qt.io>
* | Assert WindowOpenDisposition enum valuesAllan Sandfeld Jensen2017-02-011-0/+11
| | | | | | | | | | | | | | We are depending on them matching but were not asserting it. Change-Id: I86e9a9a2f516e8a149d82077884bf08b4d8aee51 Reviewed-by: Michael Brüning <michael.bruning@qt.io>
* | Merge remote-tracking branch 'origin/5.8' into devLiang Qi2017-01-301-16/+50
|\| | | | | | | Change-Id: Ic36a80502730d404ab96dfa11ff1eb0ac6eb302d
| * Forward mouse buttons and keyboard modifiers while draggingJoerg Bornemann2017-01-261-1/+27
| | | | | | | | | | | | | | | | Until now we always pretended that the left mouse button was used and no modifier key was pressed. Change-Id: I0f4b84ed87e7c94289c14c13a6cd12c3beda671a Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
| * Fix canceling drag and drop actionsJoerg Bornemann2017-01-261-15/+23
| | | | | | | | | | | | | | | | | | | | RenderViewHost::DragSourceEndedAt must be called after dropping and after canceling a drag. Otherwise scripts running on the web page do not get properly notified. Task-number: QTBUG-58037 Change-Id: Ia245131c59f03f3331158bea6cc2f53bce50f989 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* | Merge remote-tracking branch 'origin/5.8' into devLiang Qi2017-01-251-5/+16
|\| | | | | | | | | | | | | | | Conflicts: src/3rdparty tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp Change-Id: I070173576fc4be53689ce0dd9e1fd4133f5814da
| * Fix conversion from blink::WebDragOperation to Qt::DropActionJoerg Bornemann2017-01-181-5/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | blink::WebDragOperation is a bit field, even if it is not used in its blink::WebDragOperationsMask incarnation. In particular, WebDragOperationGeneric can be set in addition to other operations. This fixes situations where UpdateDragCursor is called with multiple bits set in its WebDragOperationArgument and the drag action will be spuriously ignored. Also directly pass the WebDragOperation we get from UpdateDragCursor to chromium's API without converting to QDropAction and then converting it back. Task-number: QTBUG-58037 Change-Id: I5c85699de534771f84db69abf7b98e779872a0f7 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* | Merge remote-tracking branch 'origin/5.8' into devAllan Sandfeld Jensen2017-01-181-3/+15
|\| | | | | | | Change-Id: If16bfc6f0fbfd0040e13a8a3cbaa113fda10f387
| * Prevent accessing d when view closed during DnD operationViktor Engelmann2017-01-021-3/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | When a WebEngineView is closed while a Drag-n-Drop operation is in progress, the this pointer and its d-pointer become invalid, so the accesses after drag->exec must be prevented from being executed. To achieve this, a lambda function is connected to dragSources &QObject::destroyed signal, which invalidates a bool on the stack (and cancels the Drag-n-Drop operation). Task-number: QTBUG-57713 Change-Id: I9cbb5e6aba99e307d62773bc18f4fec5f79cf703 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* | Add methods to issue various types of HTTP requestsViktor Engelmann2017-01-111-5/+46
| | | | | | | | | | | | | | | | | | | | | | | | | | Added class QWebEngineHttpRequest, which describes a GET or POST HTTP Request. Also added overloads of method "load" to QWebEngineView, QWebEnginePage and WebContentsAdapter, which issue such a request. These can be used for example to simulate form-submissions. Task-number: QTBUG-53314 Task-number: QTBUG-53372 Change-Id: I85ac8cdd3d1557905b35e3172b922aba356d1c41 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* | Emit a new signal when printing to a PDF file finishesMichael Brüning2017-01-101-8/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | [ChangeLog][Important Changes] Printing to a PDF file will now emit signal the signal pdfPrintingFinished in both QQuickWebEngineView and QWebEnginePage. The boolean passed with the signal to indicate if the printing and saving of the PDF was successful. The path of the created file is also passed to enable the user to map the signal to a print request. Task-number: QTBUG-56677 Change-Id: Ifab5a20b048f33a8cd872165bd4d453b01708037 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
* | Make QQuickWebEngineNewViewRequest::requestedUrl readable for QMLViktor Engelmann2016-12-151-7/+9
| | | | | | | | | | | | | | | | | | | | Added Q_PROPERTY and getter for QQuickWebEngineNewViewRequest::m_requestedUrl so that it can be read from QML. Task-number: QTBUG-55590 Change-Id: I39e89690f996a1db7c9ce39103429186b26811f8 Reviewed-by: Michael Brüning <michael.bruning@qt.io>
* | Fix unused-function error for callbackOnPrintingFinishedMichal Klocek2016-12-091-0/+2
|/ | | | | Change-Id: I689cb8564ce04067499e4c252a6d36e70ee51930 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* Move the QPrinter and QtWidgets related code out of the PDFium wrapperMichael Brüning2016-11-251-36/+4
| | | | | | | | | | | This moves the actual printing using QPrinter to the WebEngineWidgets part of the API. The printsupport module depends on the widgets module and therefore QtWebEngineCore also had a dependency to widgets. This is removed by this change. Change-Id: If6e5745709a59de18f2123b930cbe6e64390c867 Reviewed-by: Michal Klocek <michal.klocek@qt.io>
* Merge "Merge remote-tracking branch 'origin/5.7' into 5.8" into refs/staging/5.8Allan Sandfeld Jensen2016-11-111-9/+13
|\
| * Merge remote-tracking branch 'origin/5.7' into 5.8Liang Qi2016-11-111-9/+13
| |\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/core/content_browser_client_qt.cpp src/core/content_browser_client_qt.h src/core/gl_surface_qt.cpp src/core/print_view_manager_qt.cpp src/core/web_contents_delegate_qt.cpp src/core/web_engine_context.cpp src/webengine/doc/src/qtwebengine-overview.qdoc src/webengine/doc/src/qtwebengine-platform-notes.qdoc src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp src/webenginewidgets/webenginewidgets.pro sync.profile Change-Id: I44495f4d899580c882d6b86d68d7f6b77c8e91f6
| | * Fix hang when dragging files from file picker onto QWebEngineViewJoerg Bornemann2016-10-261-0/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The method WebContentsAdapter::updateDragPosition actively waits for the UpdateDragCursor message, sent by the renderer. This active wait does not work whenever we're currently in a base::MessageLoop::RunTask call, because of its internal recursion guard nestable_tasks_allowed. Add a check for nestable_tasks_allowed and bail out if we know that the active wait will fail. This fixes the hang. Ensure that the modal file picker dialog is shown outside of base::MessageLoop::RunTask. This enables drag 'n drop updates from the file picker to QWebEngineView. Task-number: QTBUG-56488 Change-Id: Ia13ada9c19e7780e12ca633ab1caeac352aca2a9 Reviewed-by: Viktor Engelmann <viktor.engelmann@qt.io> Reviewed-by: Michael Brüning <michael.bruning@qt.io>
| | * Consider multiple contents in mimeDataFromDropData conversionViktor Engelmann2016-10-111-9/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | content::DropData can have multiple contents (e.g. an <img> tag has itself as .html property, but also the src="..." attribute as .url property. Therefore, we should always consider all 3 cases and not return immediately when we have found the first content. Task-number: QTBUG-55858 Change-Id: Ie13851e8edb9ada45184a19b6ccfe38839bb9923 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* | | Fix DCHECK when dropping items onto WebEngineViewJoerg Bornemann2016-11-111-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Chromium 53 now requires to call RVH::FilterDropData() before DragTargetDragEnter and DragTargetDrop. This fixes the DCHECK and allows Chromium to filter the dropdata's URL (via RenderProcess::FilterURL) before proceeding. Task-number: QTBUG-56303 Change-Id: I29ad350b0b66d2ca1daae1d6d83f6e01206d1250 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> Reviewed-by: Viktor Engelmann <viktor.engelmann@qt.io>
* | | Fix drops that originate outside the WebEngineViewJoerg Bornemann2016-11-111-15/+12
|/ / | | | | | | | | | | | | | | | | | | | | Dragging things from another application onto QWebEngineView crashed. RenderViewHost::DragTargetDrop now requires a DropData object. Save the DropData object also in the case where we create it for a drag from outside. Change-Id: I8409500a4b27d06aeec02dce9856aca7e1415402 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> Reviewed-by: Viktor Engelmann <viktor.engelmann@qt.io>