summaryrefslogtreecommitdiffstats
path: root/src/plugins
Commit message (Collapse)AuthorAgeFilesLines
* Flush the initial clear blit with SCREEN_WAIT_IDLEJames McDonnell2018-05-021-1/+1
| | | | | | | | | | Without it, the clear runs asynchronously and screen may clear pixels _after_ Qt updates them. Change-Id: I0c0844676d8a4387439a2f818ee08942ccaf6b08 Reviewed-by: Dan Cape <dcape@qnx.com> Reviewed-by: Janne Koskinen <janne.p.koskinen@qt.io> Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
* macOS: Don't trigger deferred needsDisplay when using timer-based requestUpdateTor Arne Vestbø2018-05-021-1/+1
| | | | | | | | | | | | We've reverted to using the default timer-based request-update mechanism for now, so the code in [QNSView updateRegion:] needs to ensure it's only triggering a deferred needsDisplay if requestUpdate was done via the (now disabled) [QNSview requestUpdate], which uses setNeedsDisplay. Task-number: QTBUG-68048 Task-number: QTBUG-68047 Change-Id: I0421a32773908daa0f1be0075f4f2d25c90c8aea Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* xcb: round down the scale factor for values < 0.8Mathieu Velten2018-05-021-1/+6
| | | | | | | | | | This solves huge UI on some (most ?) HD 13 inches that have a calculated scale factor around 1.75. Task-number: QTBUG-53022 QTBUG-57211 Change-Id: I6cc22d3e47d38cb1d5a0daf5646a936256664e48 Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io> Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
* Convert features.toolbar to QT_[REQUIRE_]CONFIGStephan Binner2018-05-023-2/+8
| | | | | | | | Move declaration of pick/perp helpers up the dependency chain Change-Id: I7084ed829a057a0c45d60445c416fb07f2cb5624 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
* Show high DPI custom cursor on macOSFrederik Christiani2018-04-261-0/+1
| | | | | | | | | | | | | | | | | Set the devicePixelRatio to 1 on the scaled down pixmap. A scaled down version of the high DPI pixmap is added to the NSCursor in addition to the high DPI one, but the devicePixelRatio must be set correctly on the smaller of the two for macOS to pick the right image to use on a high resolution display (retina). This change also fixes the problem that only a high DPI custom cursor with a hotspot in the upper left quadrant is applied by macOS. I suspect that the NSCursor was discarded by macOS, because the hotspot was outside the device independent bounds of the smaller scaled image. Task-number: QTBUG-52211 Change-Id: I7e552e8f62f5255dd3786da44b2f619f6790c37a Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* Windows QPA: Add missing calls to keyboard initializationFriedemann Kleint2018-04-251-1/+2
| | | | | | | | | Add calls to changeKeyboard() to the QWindowsKeyMapper constructor and the handling of WM_INPUTLANGCHANGE so that the locale is correctly initialized and changes are processed. Change-Id: Ia30d8c6434ca85165e4882240ae16f9a75dcf4ff Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* Windows QPA: Fix handling of VK_DECIMAL/VK_SEPARATORFriedemann Kleint2018-04-251-2/+2
| | | | | | | | | Remove the hardcoded mapping from the key table for fallback keys since the keys are locale-dependent. Task-number: QTBUG-57992 Change-Id: I016ab5f7f7e8abfd30f6416d2e7597db7deecb9b Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* Cocoa: Don’t starve the event loop on requestUpdate()Morten Johan Sørvig2018-04-241-1/+1
| | | | | | | | | | | | | | | | | Some of our examples, and perhaps also some applications, call requestUpdate() immediately after producing a frame. This can cause Cocoa to immediately start (trying to) draw a new frame without processing e.g. input events. This should (and will) be handled by rate limiting updates with CVDisplayLink. In the mean time fall back to using the base class QPlatformWindow implementation, which is implemented using a timer, which will allow for input event processing. Change-Id: Ic2541f344b2f4018d785404a06274959a7bad2df Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@qt.io>
* QCocoaFontDialogHelper: Fix NSFontManager delegate warningGabriel de Dietrich2018-04-241-4/+3
| | | | | | | | | According to Apple's documentation, there's no delegate in NSFontManager. We set its target instead. The action is changeFont: by default. Change-Id: I8c01bfa97c78dd8097f38c27353748d13f51489f Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
* QCocoaWindow: Fix handleMouseEvent() compilation warningGabriel de Dietrich2018-04-241-1/+3
| | | | | | | | | qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm:408:53: warning: 'handleMouseEvent<QWindowSystemInterface::DefaultDelivery>' is deprecated [-Wdeprecated-declarations] QWindowSystemInterface::handleMouseEvent(window(), window()->mapFromGlobal(localPoint.toPoint()), localPoint, Change-Id: Ifbf8c46e31a1de2089ce0e16cec087fdd9adb64e Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
* Windows QPA: Fix Korean IME removing words when using CTRL shortcutsFriedemann Kleint2018-04-231-0/+8
| | | | | | | | | Ignore the WM_IME_ENDCOMPOSITION message in that case. Done-with: Tobias Koenig <tobias.koenig@kdab.com> Task-number: QTBUG-58300 Change-Id: I9506754a149905222a324b85634964fce398d3ac Reviewed-by: Liang Qi <liang.qi@qt.io>
* Windows QPA: Fix ambiguous shortcut overload warnings for ALT-keysFriedemann Kleint2018-04-201-2/+13
| | | | | | | | | | | Use the match with the least modifiers (prefer Shift+9 over Alt + Shift + 9) resulting in more missing modifiers. Task-number: QTBUG-67200 Change-Id: I90463c0dfaadda29dcd24a08ba35c91fac8bd04c Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io> Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io> Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* Windows QPA: Fix duplicate/missing native eventsFriedemann Kleint2018-04-204-18/+69
| | | | | | | | | | | | | | | | | | | Add utility functions to QWindowsContext input messages sent to native event filters (event dispatcher and window system interface). Do not send input and similar events to the event dispatcher since QEventDispatcherWin32::processEvents() also sends them. Note though that QEventDispatcherWin32 does not receive all windows messages. In QWindowsKeyMapper, send the WM_CHAR/WM_IMECHAR events from where the messages are removed. Task-number: QTBUG-67095 Change-Id: I5f61294fcb3aee7e0eacd840a2010d128cd02a5d Reviewed-by: Andre de la Rocha <andre.rocha@qt.io> Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* iOS: Use the non deprecated application:openURL functionAndy Shaw2018-04-181-3/+2
| | | | | | | | | | | In iOS 9.0, the original application:openURL function was deprecated and replaced with a newer one. As iOS 9.0 is no longer supported we can safely switch to the new one. This is also required to prevent a crash when the LSSupportsOpeningDocumentsInPlace and UIFileSharingEnabled keys are set to true in the Info.plist file. Change-Id: I59a7ee82e3ddb2777ef78e28b964ef8666c629af Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* QCocoaPlatformTheme: Fix tooltip background colorGabriel de Dietrich2018-04-181-1/+3
| | | | | | | | It use to be yellowish in the past, but modern versions of macOS show it light gray. Change-Id: I8cca5cbb37c73a6dfc79e633a746b9a7d7bced05 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* QMacStyle: Fix SC_ComboBoxEditField rectGabriel de Dietrich2018-04-181-2/+1
| | | | | Change-Id: I851e4bb1e0177ef5c594328c717e58ec7c9494e3 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* QMacStyle: Fix appearance of selected inactive tab bar buttonGabriel de Dietrich2018-04-181-9/+50
| | | | | | | | | | Because we use toggle NSButton for selected tabs, the inactive appearance doesn't follow what NSSegmentedControl would have shown. Therefore, we fall back to our good old habits, i.e., render on a pixmap and do some pixel transformations. Change-Id: I838a2f23abee5846219ba67328c79fa8cc359a9b Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* QMacStyle: Clean up code, remove dead bitsGabriel de Dietrich2018-04-182-170/+72
| | | | | | | | | | | | Change QMacStylePrivate::drawNSViewInRect() signature to remove all the unused parameters. Reuse recent tab direction functions where appropriate. Includes the infamous outter -> outer fix. Change-Id: I8f92d79d8a6c3b5903bfbb13293afb6f72a5340b Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* Do not ignore MenuItem on macOSJan Arve Saether2018-04-181-1/+0
| | | | | | | | | | | The idea was probably to ignore it since macOS already provides accessibility for a menu item in its native system menu. However, a Qt Quick Controls2 Menu will instead show a non-native menu, which should not be ignored. Task-number: QTBUG-63522 Change-Id: Ib5ae16ad991ebd7a18fa73b8f576f20b1c14d4c8 Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
* iOS: Trigger manual layout of root view controller when coming out of backgroundTor Arne Vestbø2018-04-186-31/+55
| | | | | | | | | | | | | | When rotating the device when the application is in the background iOS will ask the root view controller to layout its views when then foregrounding the application, but at that point the application state is still in the suspended state, meaning we block any view resizing or rendering. To ensure the views are resized correctly, we trigger a manual layout after the application comes out of the suspended state. Task-number: QTBUG-67719 Change-Id: I1ef0a4133d4b94edaac7b0f3cb4e49e367eb76d4 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* xcb: prevent crash with pixmap cursors on XRender-less X serversGatis Paeglis2018-04-143-8/+28
| | | | | | | | | | | | | | | We were using xcb_render_* APIs without checking if the server even supports this extension. Attempting to use an extension which is not present will always result in a crash. This patch adds the required guards and refactors how we detect presence of XRender extension. Also instead of falling back to some odd-looking bitmapped version just leave the current cursor unchanged. That is how we did it in Qt4 AFAICT. Task-number: QTBUG-66935 Change-Id: I4f27f1d65a77563ec34f3e0e94492c9236d7f9a6 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* xcb: fix bitmap cursor loading performance regressionGatis Paeglis2018-04-144-45/+38
| | | | | | | | | | | | | | | | ... introduced by 422838685c31d9b57133a8711bfd5db92095d96d. Instead of completely droping caching for bitmap cursors we can do the same what is done in libXcursor - have a fixed size cache, with oldest entries eventually being replaced with new bitmaps. This fixes the original issue, where the hash was growing indefinitely until running out of file descriptors and won't have the performance penalty as in 422838685c31d9b57133a8711bfd5db92095d96d. Task-number: QTBUG-66897 Change-Id: I14f80b46f97fd0e2c920e17a31ffbc0441cd9d22 Reviewed-by: Uli Schlachter <psychon@znc.in> Reviewed-by: Robin Burchell <robin.burchell@crimson.no> Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* xcb: cleanup the code for detecting when to create/destroy SHM segmentGatis Paeglis2018-04-141-6/+8
| | | | | | | | | | | - removed the check for "m_segmentSize > 0" as according to the code it will never be <= 0. - wrap the entire logic in connection()->hasShm() { .. } as that is when the logic becomes relevant. This makes the code more readable. Change-Id: I572420df8e29cc46593f8a13c250f8c05c6a9108 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* winrt: QWinRTEGLContext: add isValid functionalityOliver Wolff2018-04-132-0/+7
| | | | | | | | | | | | | QPlatformOpenGLContext::isValid always returns true but it is possible that creation of the context fails in QWinRTEGLContext. This case should be reflected in isValid because other places (like QOpenGLContext::isValid()) rely on it and not having proper information about the validity of the context might lead to crashes. Task-number: QTBUG-67568 Change-Id: If989ca47cdf7b27c44961beee5d97a4647184b0a Reviewed-by: Maurice Kalinowski <maurice.kalinowski@qt.io>
* QMacStyle doesn't depend on Carbon anymoreGabriel de Dietrich2018-04-123-211/+1
| | | | | | | | We also remove the old documentation file that is now mostly outdated. Change-Id: I32c9c6b0984be5e41653a92b0b9287a89f73ee38 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* QMacStyle: CE_TabBarTabShape is now HITheme-freeGabriel de Dietrich2018-04-122-103/+163
| | | | | | | | | | | This should be the last bit of QMacStyle depending on HIToolBox APIs. Small and mini sizes support coming later. Same for the focus ring. Change-Id: If625fccb87ebd0607b96a8c5040888df5a2a1032 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* QMacStyle: SE_TreeViewDisclosureItem is now HITheme-freeGabriel de Dietrich2018-04-121-18/+3
| | | | | Change-Id: I34f1325adc661edde7bba7d7374bc8cfb80900ae Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* QMacStyle: PE_FrameTabWidget in now HITheme-freeGabriel de Dietrich2018-04-122-74/+57
| | | | | Change-Id: If14e67bdae41099bb87fe2d7c4f65926d325766b Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* QMacStyle: Remove cached focus ring drawingGabriel de Dietrich2018-04-121-79/+23
| | | | | | | | | We go for direct drawing for now. Some of the logic was a bit sketchy, and we need to measure how useful is caching and eventually compatible with the focus frame animation. Change-Id: Id30a68f77a4129197536e8ca251906ee8a730925 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* QMacStyle: CC_ComboBox is now HITheme-freeGabriel de Dietrich2018-04-122-468/+241
| | | | | | | | | | | | | | | | For the time being, no more stretched QComboBox. They were already looking bad before and nobody complained, so it's a non-issue. In the future, we might use square combo boxes in the same way as we do for push buttons but for non-editable QComboBox only. Removes what is now dead code, including some leftovers. tst_QMacStyle updated to reflect size changes to accom- modate the focus ring. Change-Id: I60fac86b9acb52cc96373bca0b3cad598ec4f1e7 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* glx: Fix loading OpenGL library when libGL.so symlink is missingDmitry Shachnev2018-04-101-0/+2
| | | | | | | | Task-number: QTBUG-67537 Change-Id: Ib59bc27582f44b0c6b04efa57c44d877e1685bbb Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io> Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
* iOS: Remove sending of duplicate touch events after broken mergeTor Arne Vestbø2018-04-101-1/+1
| | | | | | | | | | | The merge in 0f315adf9199ef resulted in keeping both code paths, in effect sending two touch events for each native touch event, and also re-introduced the bug fixed by sending the touch events asynchronously in some cases. Change-Id: Id81f02d9597f4e0baeaddbdf9057fa32b6c31b2f Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Extend the MariaDB define check to cover the later versions tooAndy Shaw2018-04-101-2/+2
| | | | | Change-Id: Ide89b4e07feb116bf152cbf3f5630d313e8ba0f1 Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
* xcb: various coding style cleanups in qxcbbackingstoreGatis Paeglis2018-04-092-37/+33
| | | | | | | | | | | - Pass QXcbBackingStoreImage a pointer to QXcbBackingStore. This allow for simpler QXcbBackingStoreImage ctor. - Use member initializers. Change-Id: Ia992390060bb30e1184813cd0d115a8bf0fbc237 Reviewed-by: Błażej Szczygieł <spaz16@wp.pl> Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* xcb: rename two classes in qxcbbackingstoreGatis Paeglis2018-04-092-23/+23
| | | | | | | | | | | | | | QXcbShmImage to QXcbBackingStoreImage as it is an image that might or might not have SHM capability. The current name implies that it always uses SHM. QXcbShmGraphicsBuffer to QXcbGraphicsBuffer as it has nothing to do with SHM. Change-Id: I57ced75891e8b10515142769278a7f3f40da91ef Reviewed-by: Alexander Volkov <a.volkov@rusbitech.ru> Reviewed-by: Błażej Szczygieł <spaz16@wp.pl> Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* oci: Use OCIBindByPos2 to accommodate data longer than USHRT_MAXAndy Shaw2018-04-061-3/+3
| | | | | | | | OCIBindByPos2 is only needed when using execBatch(), binding data that is longer than USHRT_MAX works for exec() so this is left unchanged. Change-Id: Ifdcf91939d184f225d24c13052ea0b81611ecf91 Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
* Avoid multiple connections to same response in FileChooser portalJan Grulich2018-04-061-0/+3
| | | | | | | | | | | | When not specified, xdg-desktop-portal keeps using same Request object over and over when returning response, causing multiple connections to same slot on same DBus object. While this is not problem when using FileDialog just once, it is a problem for QML FileDialog which is usually reused. For this purpose x-d-p provides handle_token option where you can specify token to be used when creating Request objects. Change-Id: Ie6569700c48e05fcefa4d5c22c921410f87ea7ae Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* QMacStyle: Fix "on" toggle button text colorGabriel de Dietrich2018-04-051-1/+2
| | | | | Change-Id: I344c63debdcf012a16305f1b2124e8ad0785d982 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* Make nvidia resets opt-in based on QSurfaceFormat::ResetNotificationDavid Edmundson2018-04-051-1/+1
| | | | | | | | | | We can't be sure every user will check the return value from makeCurrent and reset appropriately. Even though after a reset a user will be left with the same garbage as before, it's safer than a potential infinite loop. Change-Id: I5b328c654ad2a89c5b8c4399e2eb38150f4f384b Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* Support graphics reset status for offscreen surfaces in XCB-GLXDavid Edmundson2018-04-051-0/+6
| | | | | | | | | | | | I originally didn't to match the ANGLE code, however it's important for all surfaces to be able to know to reset if their makeContext fails. This is espcially relevant on some Linux nvidia drivers which has a bug where while(glGetError()) won't ever clear whilst a reset is in progress. Change-Id: Iae3502168cda748c601a9aee1497e40c6d82cd83 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* Windows QPA: Fix override cursor not working when re-entering the windowFriedemann Kleint2018-04-052-0/+3
| | | | | | | | | Return early from QWindowsWindow::applyCursor() when an override cursor is set. Task-number: QTBUG-67467 Change-Id: I0d3ceead8bbbd3c6295c216a944a1ef15b6f8190 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* Fix read-only text browser sometimes jump to the top of the documentJarek Kobus2018-04-041-0/+6
| | | | | | | | | | | | | | | | | | | Respect the inputMethodAccepted() attribute of QPlatformInputContext in the ibus input context plugin. This is what for example the windows input context plugin does, too. A text browser that is read-only should not receive input method events that include a cursor placement. So when it receives the focus, we must only convey the received-focus information to the input method if the widget is editable (or accepts input method events generally speaking), because as soon as the ibus process learns about it, it will send an input method event that looks like a "let us reset the state a clean start and place the cursor at the beginning" message. We are not interested in reaching that state with the ibus process. Task-number: QTBUG-63066 Change-Id: I1b0e5f8a396bc31169d6081f9325092b447cf60a Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* Cocoa: Make QMacNativeWidget paint correctlyMorten Johan Sørvig2018-04-031-3/+5
| | | | | | | | | | | | | QWindows with transparent pixels (of which QMacNativeWidget is an example) must be composited, even if they are content views. This will display the NSWindow background instead of solid black for the areas where the Qt backingstore has transparent pixels. Change-Id: Ibee1327e11bc64975900b4c5d632dd5f103da4c8 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* Windows: handle multiple transient children when closing windowsMauro Persano2018-03-291-11/+7
| | | | | | | | | | On Windows, we must update the transient children of a window that's about to be destroyed or its transient children will be destroyed as well. This is already being done in the case of a single transient child, but there are still problems when there are more than one. Change-Id: Ib0de6767bf43dca508ecdb87cbdfedb59e9146e8 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
* Allow compilation with clang-cl disguised as clJürgen Hunold2018-03-281-1/+1
| | | | | | Task-number: QTBUG-63512 Change-Id: I7e0c4e144262a175c39508090c935c73186fac65 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
* QMacStyle: Fix spinbox implicit heightGabriel de Dietrich2018-03-271-1/+1
| | | | | | | We don't need to accommodate for the fake frame anymore. Change-Id: I2d84441d4239e1ff68f640dffda1a0d1a97fa2b3 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* QMacStyle: Fix text color for disabled default buttonsGabriel de Dietrich2018-03-271-4/+5
| | | | | Change-Id: I7c6ba0c3818a3e269e0350153cbde355bafd249a Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* QMacStyle: Remove CT_ToolButton related dead codeGabriel de Dietrich2018-03-271-29/+0
| | | | | | | | | sizeFromContents() just adds 10 points to the tool button size and returns. Therefore, the HITheme code that used to be shared with CT_PushButton becomes effectively dead. Change-Id: Ib0519b0037ec3097a00e2c14067d851040853499 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* QMacStyle: SE_PushButtonContents is HITheme-freeGabriel de Dietrich2018-03-272-131/+42
| | | | | | | | This also removes a few HITheme-related functions that are no longer needed. Change-Id: I356938d1e99f5fed106c945a94050fa35db58716 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* QMacStyle: Do manual button sizing for CT_PushButtonGabriel de Dietrich2018-03-271-40/+37
| | | | | | | | | We guarantee the same sizes as previously with HITheme for most common cases. Exotic cases may break and will be fixed along the way. Change-Id: I3e3e6ea702c7489c1cbaa821a30916f63c440c1f Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>