summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/windows
Commit message (Collapse)AuthorAgeFilesLines
* Windows: handle theme changes synchronously when settings changeVolker Hilsheimer3 days1-1/+1
| | | | | | | | | | | | The handleSettingsChange handler is usually already executed through the event loop. And if it is called directly e.g. when changing settings programmatically, then all side effects of the change should be in effect immediately. Task-number: QTBUG-124490 Change-Id: I243772860b1137ef9fe712c4b0d1c88593d2bdb4 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* Windows: simplify setting the dark borderVolker Hilsheimer3 days2-17/+2
| | | | | | | | | | | | | | | A round trip through querying the window attribute to avoid a call to the setter is overkill, we can assume that the setter won't do anything if the value of the attribute doesn't change. Also, don't check whether QWindowsIntegration::darkModeHandling is overridden before calling setDarkMode, which checks that flag already. The flag will be very rarely cleared (and we might want to remove support for this obscure mechanism soon). Task-number: QTBUG-124490 Change-Id: I7e027fd53f556200edfd127eaf5f2b97f027528e Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* Windows: refactor theme's handling of color schemeVolker Hilsheimer3 days2-3/+12
| | | | | | | | | | | | | | Make the functions populating the palette static class members so that they can access private helpers. Encapsulate logic that overrides the system or (later) explicitly set color scheme into a helper that always respects the presence of a high-contrast theme. Task-number: QTBUG-124490 Change-Id: I7ad09596bb308b17b4c6ec34bb02cb6cf4b8c1bb Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: Santhosh Kumar <santhosh.kumar.selvaraj@qt.io> Reviewed-by: Wladimir Leuschner <wladimir.leuschner@qt.io>
* Windows: store the color scheme instead of a boolean for darkVolker Hilsheimer3 days2-20/+21
| | | | | | | | | | | | | | | | Since the color scheme is a tri-state (it might be Unknown when a high-contrast theme is active), don't store a "darkMode" value, but the color scheme. Make the query-functions private to the theme, the external API should always return the stored value, which gets updated when a theme change is processed. Task-number: QTBUG-124490 Change-Id: I41e6336773a3bb426b406dce370ef81c20e513ee Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: Wladimir Leuschner <wladimir.leuschner@qt.io> Reviewed-by: Santhosh Kumar <santhosh.kumar.selvaraj@qt.io>
* Windows: Prevent potential "crash" in setApplicationBadgeOliver Wolff10 days1-6/+10
| | | | | | | | | | | | In some circumstances our application badge code seems to throw an exception. The issue is hard to reproduce but just catching the exception should be enough to fall back to the "non-winrt" version of the code. Fixes: QTBUG-117091 Pick-to: 6.5 6.7 Change-Id: I61f4e59f7309e2bb47b50a6ca6f3099ed9cd0af1 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* ColorScheme: remove unused QWindowsApplication::isDarkModeVolker Hilsheimer10 days2-6/+0
| | | | | | | | | | It unnecessarily duplicates and distributes logic for reporting whether the application should run in dark or light mode. Task-number: QTBUG-124490 Change-Id: I227660cf3e1f21afd5fd9b3d6452f6109f3cf799 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: Wladimir Leuschner <wladimir.leuschner@qt.io>
* ColorScheme: consolidate dark mode handling on Windows into ThemeVolker Hilsheimer10 days7-31/+33
| | | | | | | | | | | | | | | Move storage of whether dark mode is set into a static class member of QWindowsTheme, and remove QWindowsContext::isDarkMode; ask the theme instead using the colorScheme() implementation, which will return the stored value. Move the code handling settings changes into QWindowsTheme as well. Task-number: QTBUG-124490 Change-Id: I4795e80b6ab2c94701385dc84771e9ad5578cf32 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io> Reviewed-by: Wladimir Leuschner <wladimir.leuschner@qt.io> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* Remove QWindowsComBasePavel Dubsky2024-04-192-53/+0
| | | | | | | QWindowsComBase is now replaced with QComObject Change-Id: Ieb54b357fc4d658b751a35f0ba06df777617aafc Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* QWindow: Persist foreign winId to support destroy/create cyclesTor Arne Vestbø2024-04-191-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | We used to set a private _q_foreignWinId property on QWindow when creating foreign windows, and this was the mechanism which we then passed the foreign winId to the platform plugin. With c585802e946d97e7d177ea334a162dc7bc286b84 this was removed, since we now were passing the winId through via explicit QPA APIs, and since 0c6911e5cde24c45d6f2c08b6e71064bdd1eccfa removed the ability to explicitly destroy() a foreign window. But when closing a QWindow, we destroy both the window itself, and all its children, including foreign windows. In this case we still want to support recreating the foreign window, for example when the parent window is shown again. To enable this we restore the _q_foreignWinId private property, but keep the limitation of not being able to explicitly destroy a foreign window. Pick-to: 6.7 6.5 Fixes: QTBUG-124160 Change-Id: Ia885ba9f043e64fb21eedd2b4c344679726f1b5c Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* Use QComObject with QWindowsUiaMainProviderPavel Dubsky2024-04-182-29/+16
| | | | | | | | This change adds QComObject as base to QWindowsUiaMainProvider in order to reuse its implementation of IUnknown. Change-Id: I48808262364992f90f18fc881594f151eeb29a3f Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* WindowsIconEngine: Use the correct icon for document-propertiesGary Wang2024-04-121-1/+1
| | | | | | | | | | | | Currently the icon used by document-properties is a gear icon, on Windows, the actual icon used by explorer's context menu for the properties menu option is the wrench icon. This patch change the icon to the wrench icon. Fixes: QTBUG-124085 Pick-to: 6.7 Change-Id: Ife49ad64d23b73b7676bc39330887e2cb320dcf9 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Unify behavior of QSystemTrayIcon::geometry for hidden icons on WindowsOliver Wolff2024-04-102-0/+27
| | | | | | | | | | | | | | | | | | | | | When a system tray icon on Windows wasn't visible (hidden behind the ^ icon in the task bar) our previous implementation gave different results on Windows 10 and Windows 11. On Windows 10 the geometry returned the geometry of the ^ icon itself while we returned a geometry outside of the screen geometry on Windows 11 (that was what the Windows API gave us). We work around this problem by using version specific hacks to be able to check for the visibility of the system tray icon itself. If the icon is hidden we just return QRect(). [ChangeLog][Windows] The geometry of a hidden QSystemTrayIcon was unified over different Windows versions. It will always return QRect() now. Change-Id: Iee7dea184936a13a9221df9c421400ba304a4c38 Reviewed-by: Miguel Costa <miguel.costa@qt.io>
* Remove QWindowsComBasePavel Dubsky2024-04-051-30/+0
| | | | | | | | | | | QWindowsComBase is now replaced with QComObject, let's remove the former since it's a duplication. Change-Id: I7f911fa036c1f2eaaee168250b8294170430cc5d Reviewed-by: Oliver Wolff <oliver.wolff@qt.io> Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* Fix a regression when painting CMYK over ARGB32_PremultipliedAllan Sandfeld Jensen2024-04-041-1/+1
| | | | | | | | | | With the introduction of CMYK32 the old logic of assuming depth meant compatible alpha version no longer works. So change the logic to more explicitly return compatible opaque or alpha versions and remove the now invalid qt_maybeAlphaVersionWithSameDepth. Change-Id: Ib1f7b76b0ce0eae7d49a0dfe369918a746bbe2b4 Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
* Font icon engines: reverse implementation to avoid pixmapsVolker Hilsheimer2024-04-041-24/+26
| | | | | | | | | | | | Draw the glyph directly in the paint() override, and use that from the scaledPixmap implementation. This avoids a pixmap creation just for drawing an icon with an existing painter. Pick-to: 6.7 Change-Id: Iece0083a3a9f3625d843bc6e9d836baf9b5d84f8 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Doris Verria <doris.verria@qt.io> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* Windows: use MSG timestamps for input eventsGiuseppe D'Angelo2024-04-034-29/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Input events have a timestamp. When dispatching an event through QPA, a platform plugin can either provide it, or QPA will use an internal QElapsedTimer to provide a timestamp. Windows input messages do come with a timestamp already, so we can use that instead of the QPA. The two methods are not equivalent. For instance: for various reasons, Qt does not honor Windows' "double clicked" message, but uses the delta between two mouse events to establish if the second click is actually a double click. Now suppose that the user double clicks on a widget. On the first click, the application does something that freezes it for a bit (e.g. some heavy repainting or whatever). Does the second click register as a double click or not? * If we're using Qt's own timer, the answer is NO; the event is pulled from the WM queue after the freeze, given a timestamp far away from the last click, and so it will be deemed another single click * If we use the OS' timestamps, then the second click will be seen as "close" to the first click, and correctly registered as second click. This reasoning can be extended to many other QPA events, but looks like the APIs for some are missing (e.g. enter events), so I'm not tackling them here. This commit reverts ade96ff6446d4b0977d4e5f03b96b77ff8223b8b. Task-number: QTBUG-109833 Task-number: QTBUG-122226 Change-Id: I5f3fba029b44c618ef622bacdc4bcc3928e04867 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io> 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> Reviewed-by: Yuhang Zhao <yuhangzhao@deepin.org>
* Clean up windows accessibility backendMiguel Costa2024-03-278-22/+174
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | What was done: * Removed headers in src/gui/accessible/windows/apisupport: as of v13.1.0, MinGW supports most of the definitions in these headers. Including uiautomation.h should be enough. * Removed the QWindowsUiaWrapper class: it's not meant to be extended or itself instantiated, is an "ultra-thin" layer (it even preserves the "all-caps" Win types of function args), and is in effect only a MinGW-bound "kludge". Instead of this class, use the UI Automation API directly, with the assumption that it's available and fully functional, as specified in the MS docs. Any gaps between this assumption and what is delivered by MinGW are bridged with specific (and explicit) temporary "kludges". * Implemented said specific "kludges" in qwindowsuiautomation. For Windows builds, the header just includes uiautomation.h, and the .cpp is empty. For MinGW, the header contains definitions still missing from uiautomation.h, and the .cpp implements functions of the UI Automation core library through imports from the uiautomationcore DLL. * Windows plugins (and tst_qaccessibility): use the UI Automation API definitions directly, instead of the "ultra-thin" wrapper. * Windows plugin builds: use uiautomationcore library, if found. What's intended: * Unburden Gui of the Windows UI Automation COM interfaces and other definitions that are copied in the uia*.h headers. * Make the Windows plugins independent of MinGW shortcomings. * Remove the QWindowsUiaWrapper class that essentially only hides these shortcomings and the "kludge" code needed to overcome them. * As MinGW adds further support to the UI Automation API over time, make it noticeable which workarounds are no longer needed. The current approach of hiding "kludges" in a wrapper class will also hide the fact that they're no longer needed, if/when that time comes. Change-Id: I0070636817d5de81d0b106e9179e2d0442362e2a Reviewed-by: Wladimir Leuschner <wladimir.leuschner@qt.io> Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* Windows QPA: Include custom margins in atypical marginsTimothée Keller2024-03-051-5/+6
| | | | | | | | | | | | When calculating atypical margins that are used with ExtendsContentIntoTitleBar, the margins were checked against systemmargins, and then custom margins were added later. Instead, add the custom margins immediately and take them into account during calculations. Pick-to: 6.7 6.6 6.5 Change-Id: I44af663c85b8bdf080d769e3b38431cbe5df64f3 Reviewed-by: David Faure <david.faure@kdab.com>
* Add QT_IM_MODULES env to allows specify multi IM keyJiDe Zhang2024-03-052-4/+5
| | | | | | | | | | | | | | | | | Like as QT_QPA_PLATFORM, supports specifying multiple keys, and can perform fallback operations to prioritize the use of a certain plug-in. This is useful when using Wayland and XWayland applications at the same time. For an example, we can set "QT_IM_MODULES=wayland;fcitx", and the wayland application will use the wayland input context plugin, the xwayland application will use fcitx, which can't be done without adding a new environment variable, if we specify "QT_IM_MODULE=wayland", the XWayland applications may not be able to use the input method. Fixes: QTBUG-120202 Change-Id: Iac408af241963147747a2fe685f1e27bf9d9ee64 Reviewed-by: Liang Qi <liang.qi@qt.io> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: David Edmundson <davidedmundson@kde.org>
* windows: Remove workaround for delayed OpenGL initializationTor Arne Vestbø2024-03-013-24/+0
| | | | | | | | | | We no longer use QSurface::RasterGLSurface for composition, so the window will already be QSurface::OpenGLSurface during WindowCreationData::initialize. Pick-to: 6.7 6.6 6.5 Change-Id: I9b5ea0245ddf4a19d165bde9ad6fd48a98bfca4f Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io> Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* QWindows11Style: Revert Windows global palette changesWladimir Leuschner2024-02-291-135/+39
| | | | | | | | | | | Revert Windows global palette changes and set the QPalette for QWindows11Style in QWindows11Style::polish Fixes: QTBUG-120571 Pick-to: 6.7 Change-Id: Iad4eb699c2dbfed38a917e6c9bc378c4262dc66e Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* Windows: clean up System Tray Icon message iconVolker Hilsheimer2024-02-282-1/+10
| | | | | | | | | | | | | | The handle is not owned by the Shell, we have to clear it up ourselves. The documentation is not clear about how long the handle needs to be kept alive, so store the icon when we create it as a member of the private, and clean it up when it need to be recreated, or when the QSystemTrayIcon instance gets destroyed. Fixes: QTBUG-96348 Fixes: QTBUG-62945 Pick-to: 6.7 6.6 6.5 6.2 5.15 Change-Id: I6f93f29a415cde2cfe4e1b296295783c15b4da4b Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* Replace QWindowsComBase with QComObjectPavel Dubsky2024-02-2720-59/+50
| | | | | | | | | | | | Currently with have two base classes for COM-objects that implement basic IUnknown functionality and the idea is to remove duplication and keep just one. Since QComObject supports more features than QWindowsComBase, such as multiple inheritance and intermediate interface querying, we should switch to the former one. Change-Id: Ief6567496de9f547b936de91d634c6998ba59a75 Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Windows QPA: Fix unity buildFriedemann Kleint2024-02-201-0/+2
| | | | | | | | | | Undef a macro that clashes with variables in other sources. Pick-to: 6.7 6.6 6.5 Task-number: QTBUG-109394 Change-Id: Id62f886ad64908047fc896f7e48da04759308123 Reviewed-by: Wladimir Leuschner <wladimir.leuschner@qt.io> Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* Implement icon mapping for Apple, Android, and WindowsRayam Pinto2024-02-181-1/+247
| | | | | | | | | | | Not all xcb icons have a corresponding icon on all other desktop platforms, so we might want to remove those enums for which we have almost no coverage in a follow-up commit. Pick-to: 6.7 Change-Id: I8fdc64f773768ce4ed1e0050f2a3bddef976e688 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Add QPlatformIntegration::BackingStoreStaticContents capabilityTor Arne Vestbø2024-02-131-0/+2
| | | | | | | | | | | | | | This was a feature in Qt 4, but the only platform that carried it over to Qt 5 was Windows, in ab76593f18396e693f24066592244ca95e135ea2, and that's still the situation. As a first step in possibly implementing this on more platforms, lets replace the hard-coded check in QWidgetRepaintManager::hasStaticContents with a proper QPlatformIntegration capability check in the only call site. Pick-to: 6.7 Change-Id: I2067109f45116cd8c62facf7224cd748f19e845b Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* Windows: Default to DirectWrite font backendEskil Abrahamsen Blomfeldt2024-02-062-9/+9
| | | | | | | | | | | | | The GDI font backend is missing support for certain modern features, and has a lot of work arounds for missing APIs. DirectWrite is the modern way to handle fonts on Windows, so we make this the default now, but keep the old backend as a fail safe. Fixes: QTBUG-119420 Change-Id: I0ea5cdfdcd759ccc894efb01b2410826c44aa1ea Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: Lars Knoll <lars@knoll.priv.no>
* Simplify new QIcon ThemeIcon constants and APIVolker Hilsheimer2024-01-261-11/+11
| | | | | | | | | | | | | | | | | | | | Originally we thought that exposing the string literal through the API would be useful for people that want to know what icon they will get when using a specific constant. But since the mapping from platform independent icon name to platform specific icon name is anyway hidden in the engine implementation, this is no longer useful. Based on header review comments, simplify this by making the ThemeIcon list of constants a scoped enum. If it's really useful for e.g. designers to know which exact icon they get on a specific platform, then we could, in a future release, add a static QIcon::themeIconName API that returns the platform specific icon string for a ThemeIcon constant. Pick-to: 6.7 Change-Id: I231eb98fefb4ac82d38209b4e1257bb3caadeb08 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* Windows QPA: don't take dpi rounding policy into account when fullscreenTimothée Keller2024-01-161-10/+10
| | | | | | | | | | | With some HighDpiScaleFactorRoundingPolicy, going fullscreen can end up not filling the whole screen. In this case, ignore the rounding (only for the window size, not its content). Fixes: QTBUG-115954 Pick-to: 6.7 6.6 Change-Id: Ie87196358ef28dbe2fcbc180b1740ed9f784b4a0 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* QPA/Windows: Cleanup QShGetFileInfoThread on shutdownChristian Ehrlicher2024-01-121-83/+84
| | | | | | | | | Properly clean up the QShGetFileInfoThread on shutdown. Also rework the whole class to make it thread-safe. Fixes: QTBUG-90876 Change-Id: Iecd501ab95a6464c5f1e61f831b7288eb9578b16 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* QWindowsSystemTrayIcon: use high-dpi icons for notificationsChristian Ehrlicher2024-01-091-14/+3
| | | | | | | | | | | Do not downscale the icon used for QSystemTrayIcon even though the msdn documentation states that SM_CXICON/SM_CYICON should be used as the size to avoid blurry icons in the notification. Pick-to: 6.7 6.6 Fixes: QTBUG-103825 Change-Id: I2d466e895254aa3c41682290cc7864632c57d5d7 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* QWindowsTheme: honor dpr when requesting standard iconsChristian Ehrlicher2023-12-221-6/+9
| | | | | | | | | | | | | The devicePixelRatio was not taken into account when a standard icon was requested from the windows qpa which resulted in blurry icons for a dpr != 1. Therefore pass the dpr-corrected size to QWindowsTheme::standardPixmap() and pass this size to SHDefExtractIcon() to get a correctly scaled icon. Pick-to: 6.7 6.6 Fixes: QTBUG-52622 Change-Id: Ia771dd2f93fa133cf2c4429ef59a9c5cb05ad047 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* Fix Maximized frameless window painting wrong with WS_THICKFRAMEYansheng Zhu2023-12-211-12/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | In Qt versions greater than 6.4.2, when using Qt:FramelessWindowHint and WS_THICKFRAME simultaneously, and handling the WM_NCCALCSIZE message to draw a frameless window, the right and bottom sides may extend beyond the drawable boundaries. This is because in the previous commits, the calculation for margins was skipped for windows with Qt:FramelessWindowHint set. This is correct for non-maximized windows. However, when a window is maximized on Windows, its actual size is slightly larger than the drawable area to avoid users from dragging the border to resize the window. When window was maximized , the code for calculating geometry should remove the margins instead of skipping its calculation. The fixed code determines whether to skip the calculation of margins and frame by checking whether the window is maximized during the calculation [ChangeLog][QPA][Windows] Adding a check for the maximized state of the window during the calculation of margins. Margins calculation will not be skipped for maximized windows. Task-number: QTBUG-120196 Pick-to: 6.7 6.6 6.5 Change-Id: I63c8dbc8f65ff28cc581be261acfd3f675b027c4 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* QFileDialog/win: pass only filename to IFileDialog::SetFileName()Christian Ehrlicher2023-12-191-1/+1
| | | | | | | | | | | One more place were we should only pass the filename instead the full path to IFileDialog::SetFileName() Amends 19c701d370512e81d1b934f899b03ae0c2e6953f Pick-to: 6.7 6.6 Task-number: QTBUG-47159 Change-Id: I3ac36eb2b6b6fe84fe6985590da882b1d5733efa Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* QPA/Windows: remove uneeded USE_IIMAGELISTChristian Ehrlicher2023-12-181-20/+1
| | | | | | | | | USE_IIMAGELIST was added back in 2013 when not all platfroms supported this. Nowadays we can expect that this is available everywhere so we can remove it. Change-Id: Ia66f4bb672dcbafbfefde0a5654fa2d2397d0ce5 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* QPA/Windows: remove unneeded check for outdated MinGW versionChristian Ehrlicher2023-12-181-10/+2
| | | | | | | | | Remove an unused ifdef for MinGW < 3 which is no longer needed Pick-to: 6.7 Change-Id: Id6a647982c22a1bbf5139e85aace1f37844400a9 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* QPA/Windows: remove unused and outdated documentationChristian Ehrlicher2023-12-181-25/+0
| | | | | | | | | | The documentation about QWindowsIntegration is outdated since ages and not used anywhere so remove it. Pick-to: 6.7 Change-Id: I3addb77f2024bfc8239aa57a866e9bdb8afc8381 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io> Reviewed-by: Jaishree Vyas <jaishree.vyas@qt.io>
* QPA/Windows: misc cleanup of QShGetFileInfoThreadChristian Ehrlicher2023-12-181-7/+5
| | | | | | | | | | | Misc cleanup of QShGetFileInfoThread: - use QThread's interruption abilities instead custom one - use QMutexLocker instead manual lock/unlock Task-number: QTBUG-90876 Change-Id: If0566e56ab765fb95e837cdfa09639c1622b6d4e Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* Windows QPA: don't override user-removed marginsTimothée Keller2023-12-181-5/+14
| | | | | | | | | | | When calculating margins, added a check to see if the window rect and the client rect are the same size. If they are, we return early, to avoid overwriting user-defined specific margins. Fixes: QTBUG-117704 Pick-to: 6.7 6.6 6.5 Change-Id: I9947feab4cb900293fb6be6cf09c56268f38d64a Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* QFileDialog/win: pass only filename to IFileDialog::SetFileName()Christian Ehrlicher2023-12-161-1/+1
| | | | | | | | | | | | | | When calling QFileDialog::selectFile(), the file is passed as QUrl to the underlying functions. Then this url was converted back to a local file and the full path (with wrong path separators on windows) was shown in the filename edit box in the native dialog. There was already a comment to use QUrl::fileName() but it did not exist when the code was written and later it was forgotten. Pick-to: 6.7 6.6 Fixes: QTBUG-47159 Change-Id: I478dfd0e4943277c0ac78ebf4e138257e7ea8662 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* Windows QPA: Omit native virtual key in WM_CHARJohannes Grunenberg2023-12-151-1/+1
| | | | | | | | | | | | WM_CHAR doesn't send the native virtual key in wParam, but it sends the generated UTF-16 code unit, so no assumptions can be made about the pressed key. lParam still contains the scancode. Fixes: QTBUG-117903 Pick-to: 6.5 6.6 6.7 Change-Id: Iedc5936118936009db8f6b0c1ce6147db2739422 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* QWindowsCursor: create correct DDB in createBitmapCursor()Christian Ehrlicher2023-12-141-4/+11
| | | | | | | | | | | CreateCursor() expects a ddb and according the docs a ddb must be word-aligned but we created a byte-aligned ddb which results in a wrongly rendered cursor later on. Pick-to: 6.7 6.6 Task-number: QTBUG-82434 Change-Id: Ie847865a0d868043571faf4b7f4fdf6a92fce448 Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
* Fix hang issue during drag and drop in windowsSanthosh Kumar2023-12-141-1/+2
| | | | | | | | | | | | | | | | During drag and drop operation, we used to get window under mouse and process events for that window after the patch set 9ff5b886fade489b7cc268626f518145650f6b2c. But this sometimes cause hang issue in GetMessage() when the respective window doesn't capture mouse event and we are required to process mouse events. This patch fixes this issue by considering whether the window under mouse has capture. Fixes: QTBUG-115260 Pick-to: 6.7 6.6 6.5 6.2 Change-Id: I748936e4ce23e60abce51d34c1326cfb105b06cb Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* Windows QPA: Always process system sound eventsChristian Heimlich2023-12-131-5/+6
| | | | | | | | | | | | | | | 1b96c75661f678632485513d1323166bc6d74e5c reduced event noise by dropping accessibility events if Windows UI automation has not been activated; however, this did not take into account that some widgets (e.g. QMessageBox) rely on accessibility event processing to emit certain system sounds. Change notifyAccessibilityUpdate() so that system sound related events are processed regardless of accessibility activation. Pick-to: 6.5 6.6 6.7 Change-Id: I22f1516e8fbb3727b065ecc2c30b272b2d6fd1c0 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* Make some QScreen native interfaces publicDavid Redondo2023-12-081-3/+2
| | | | | | | | | | [ChangeLog][QtGui][QScreen] The QAndroidScreen, QWaylandScreen and QWaylandWindow native interfaces are now available on QScreen to provide a handle to the underlying platform screen. Task-number: QTBUG-113795 Change-Id: I83d70046678dfb79ee08544ddfc1820f3ff2d118 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* Remove QT_MAKE_UNCHECKED_ARRAY_ITERATORMårten Nordheim2023-12-071-1/+1
| | | | | | | We only used it in one location and it's no longer needed. Change-Id: I2092313b75d4510dda12f8f6decc9652f8191301 Reviewed-by: Marc Mutz <marc.mutz@qt.io>
* QIcon: turn platform engines on by defaultVolker Hilsheimer2023-12-071-4/+1
| | | | | | | | | | | | | | | | | | | | | | They are used when an icon is constructed via QIcon::fromTheme, unless an application-defined theme provides the requested icon. Update the documentation. For now we don't provide a way to "opt out". This might change, depending on the feedback during the Qt 6.7 beta phase. [ChangeLog][QtGui][QIcon] Qt now has implementations of native icon engines for macOS, iOS, Windows 10, Windows 11, and Android. These engines provide access to the native icon libraries and fonts, mapping standard icons to the corresponding native icon asset. Icons from application-defined themes take precedence, but the last-resort fallback icon passed as the second parameter into the QIcon::fromTheme(QString, QIcon) overload is only used if the icon is not available from the native library. See the QIcon documentation for details. Change-Id: I618e5c137c40f8e6309c0e4d4219a5a2759a475d Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* QIcon: clean up Windows and Android icon enginesVolker Hilsheimer2023-12-072-36/+28
| | | | | | | | | | | | Use good old QString for the list of glyphs, and just render what we get. The use case where we need to draw multiple symbols on top of each other is (for now) academic, and we can support emojis just with QString. Proof the latter point by mapping "banana" to the respective emoji. Change-Id: I8005a99f015e6eb2a2a635f9d892163f2008a673 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* Fix signed integer overflow in handling WM_SIZE messageWladimir Leuschner2023-11-281-1/+1
| | | | | | | | | | | | | The width and height of WM_SIZE parameters in LPARAM are unsigned ints, but were extracted as signed ints with GET_X_LPARAM and GET_Y_LPARAM, leading to signed integer overflow when using big window sizes. The width and height are now extracted with LOWORD and HIWORD. Fixes: QTBUG-119424 Pick-to: 6.6 Change-Id: Ie68716a08a686739b6464ce76319dc659fede336 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io> Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io>
* a11y: Fix bug where some characters were not spoken while moving cursorJan Arve Sæther2023-11-231-4/+4
| | | | | | | | | | | | | | | | | | The problem occurred when we moved the cursor to the penultimate character of the string, because the boundary condition was wrong. It is important to realize that the offsets are moved *between* each character (and also before and after the whole string), just like you would move a cursor. This means that the offsets can be in the range [0, len] (closed interval) The problem could only be reproduced with JAWS. Pick-to: 6.6 6.5 6.2 Fixes: QTBUG-115156 Change-Id: I0c5f05fa391e6c7744ab22d71afe8904b49e89bc Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>