summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms
Commit message (Collapse)AuthorAgeFilesLines
...
* macOS: Implement support for backing store static contentsTor Arne Vestbø2024-02-133-31/+93
| | | | | | | | | | | | | | | We already had the machinery to copy one buffer to another, so this machinery has been generalized a bit, so we can use it to preserve the static content during buffer resize. As explained in the comments, we need to do the buffer copies during buffer creation, instead of relying on our back buffer finalization, as we are not guaranteed that we can always copy the static content from the front buffer. Pick-to: 6.7 Change-Id: Ia9b3ac6ec982949990d172b0b14f35b13bbae92a Reviewed-by: Axel Spoerl <axel.spoerl@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>
* Introduce NO_GENERATE_CPP_EXPORTS argument for qt_internal_add_moduleAlexey Edelev2024-02-093-0/+3
| | | | | | | | | | | The argument is inverted GENERATE_CPP_EXPORTS argument. Use it explicitly for the modules that do not require the autogenerated cpp exports. Task-number: QTBUG-90492 Change-Id: Ic67772ba9ed5e40f132a97e7d6844102ad023ff3 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* WASM builds now handle bitmap and pixmap cursorsKevin Keating2024-02-081-5/+22
| | | | | | | | | | | [ChangeLog][QtGui][Platform Specific Changes][wasm] Previously, bitmap and pixmap cursors were nonfunctional in wasm builds and would trigger warnings. These cursors now work as expected. Fixes: QTBUG-116796 Pick-to: 6.5 6.6 6.7 Change-Id: Idd9aa4d458a36452fd5b49f72cc595756fc50923 Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
* wasm: fix onLoaded delay functionalityMorten Sørvig2024-02-086-1/+44
| | | | | | | | | | | | | | | | | | | | | | | onLoaded and the initial expose/paint should be sequenced such that onLoaded is fired first, followed by the expose. This makes sure that we don't spend any time on painting frames before Qt is completely initialized. Add a "requestUpdateHold" mode to QWasmCompositor (initially on) which disables requestUpdate calls, as well as releaseRequestUpdateHold() which enables requestUpdate calls again. This is a one-way transition; the mode can't be enabled again. This amends commit f2e22774 which implemented the concept of startup tasks, where onLoaded can be delayed until for instance font loading has been completed. After this commit the expose event and initial commit will be delayed as well. Change-Id: Icc784306726174fbabe8785d54485860e968745a Reviewed-by: Lorn Potter <lorn.potter@gmail.com> Reviewed-by: Piotr Wierciński <piotr.wiercinski@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>
* Remove extra semi-colonsTasuku Suzuki2024-02-066-7/+7
| | | | | Change-Id: I92fddb36cd136fd1bd627955f15d0559b9942d7e Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
* Android: Fix QtTextureView inverted opacity conditionTinja Paavoseppä2024-02-061-1/+1
| | | | | | | | | | | The Android TextureView class wants to know whether the view is opaque, while the condition has been evaluating whether it should be transparent. Invert the condition to let Android know correctly whether the TextureView should have transparency. Pick-to: 6.7 Change-Id: Ic636f78dd3c691e85456c579e4559b8bc7a077a2 Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
* iOS: Guard traitCollectionDidChange against lack of QGuiApplicationTor Arne Vestbø2024-02-051-0/+3
| | | | | | | | | | During shutdown we may get traitCollectionDidChange for our QUIWindow, as it may outlive the QGuiApplication and the QWindows due to hanging around in an auto-release pool. Pick-to: 6.7 6.6 6.5 Change-Id: Ifc6471b933fb1b4d1e83e9b734aac31044dce03e Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* iOS: Guard against displayLayer after platform window is goneTor Arne Vestbø2024-02-051-0/+3
| | | | | | | | | | During shutdown the UIView might outlive its QIOSWindow platform window. If we receive displayLayer calls, we need to bail out, to avoid crashing when trying to send the expose event. Pick-to: 6.7 6.6 6.5 Change-Id: I2f36a4dd825e91b348bc57a06e6aa6b1a12fd249 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
* iOS: Remove QUIView from superview on QIOSWindow destructionTor Arne Vestbø2024-02-051-4/+5
| | | | | | | | | | | | | | | | Unlike on macOS, our UIViews are children of a QIOSDesktopManagerView that we use to do window management, so we need to remove the view from its superview, even if represents a top level QWindow. The only exception is top level foreign windows, which are used to represent a native UIView for the purpose of containing a Qt view hierarchy within. As we don't know anything about the foreign view's superview hiearchy we shouldn't touch it. Pick-to: 6.7 6.6 Fixes: QTBUG-120369 Change-Id: I6a43bb0a4e72d0d1525a7cc33d572ea7477215b3 Reviewed-by: Doris Verria <doris.verria@qt.io>
* Fix -Wdeprecated-anon-enum-enum-conversion issue in cocoa pluginAndy Nichols2024-02-021-2/+2
| | | | | | | | Noticed when building with -c++std c++20 for macOS. Lots more warnings in general but this one was an error. Change-Id: I8dd9ae33f23dd77b2ec619b7357f50b97e3ed8ef Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* Android: Add classes to embed QML into native AndroidTinja Paavoseppä2024-01-304-9/+124
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add classes that make it possible to add QML as a View into a native Android app: QtView: Base class for QtQuickView, handles non-Quick dependent operations. In essence a Java ViewGroup class which loads a QWindow and embeds it into itself. QtEmbeddedLoader: Extends QtLoader for embedded case, creates the embedded version of QtActivityDelegate and provides an embedded-specific path to loading Qt libraries (Mostly just allows users to set the name of the main lib) QtAndroidWindowEmbedding namespace: Deals with calls from QtEmbeddedDelegate to create/destroy QWindow and from QtView to show the window. Take the QtEmbeddedDelegate introduced in an earlier commit into use, and add functionality for loading QWindows for QtViews and managing QtViews into it. Add a factory for creating instances of QtEmbeddedDelegate. The factory holds a map of QtEmbeddedDelegate objects and creates them, with the Activity as the key. This is to make it so that the same delegate can be used by multiple views which share the same Context. Known issues left: * keyboard focus not working, as with other child windows Pick-to: 6.7 Task-number: QTBUG-118872 Change-Id: I94a5f9b4f904c05cc6368cf20f273fcf10d31f17 Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
* macOS: Don't condition deferred exec on specific NSAlert to be the modal windowTor Arne Vestbø2024-01-301-1/+1
| | | | | | | | | | | | | | | | | | | | | When a QMessageBox is created with setModal(true), the user can in theory choose to show() it, and then return back to the main event loop, instead of calling exec(). We tried to support that case via a single shot timer, called on the next pass of the event loop, that checked if the applications' current modal window was the alert, and if not, showed it at that point. That logic failed when there were more than one alert show at the same time. We do maintain a stack of the modal sessions and their windows in the Cocoa event dispatcher, so we could use that to check if a modal session had been started for the alert's window, but a similar solution is to just check the alert window's visible state. Fixes: QTBUG-121557 Pick-to: 6.7 6.6 6.6.2 6.5 Change-Id: I6f52a53e8f678bb8a071e334a09ab30669d95bbf Reviewed-by: Eike Ziller <eike.ziller@qt.io>
* QJniArray: don't subclass QJniObjectVolker Hilsheimer2024-01-291-1/+1
| | | | | | | | | | | | | | | | | | | | QJniObject is not prepared for being subclassed (no virtual destructor), and doing so is formally UB. Instead of making QJniArray(Base) a QJniObject subclass, give it a QJniObject member and make it convertible to/from QJniObject. Existing code still works with this change, even though it removes all the inherited QJniObject APIs for accessing fields and methods. However, as the Java array classes have a very narrow and well-defined API anyway we could, if needed, add those as C++ member functions instead of going through calling-by-string. Found during API review. Pick-to: 6.7 Task-number: QTBUG-119952 Change-Id: Ic4437116eed5e15226449bdabe48ab657cb14dc3 Reviewed-by: Marc Mutz <marc.mutz@qt.io>
* Simplify new QIcon ThemeIcon constants and APIVolker Hilsheimer2024-01-262-23/+23
| | | | | | | | | | | | | | | | | | | | 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>
* QCocoaA(11)y: do not try to access an element if rowIndex == -1Timur Pocheptsov2024-01-251-1/+1
| | | | | | | | | | This ends up in out of bounds exception. Pick-to: 6.7 6.6 6.5 6.6.2 Fixes: QTBUG-120469 Fixes: QTBUG-121008 Change-Id: Id895f311bbb59a3734ecadd0d2472a4018332e16 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Revert "macOS: Don't crash when starting a drag with empty mime data"Volker Hilsheimer2024-01-241-2/+0
| | | | | | | | | | | | This reverts commit 09afa7575276d7b500f17671a1ca9ca677767b44. It broke Qt Designer, which creates QDrag objects without any mime format. It's likely that user code does the same to support internal drag'n'drop. Pick-to: 6.7 6.6 6.6.2 6.5 Task-number: QTBUG-119216 Change-Id: I8b74f2d9b89588cd35bca9ca20973810036a2635 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* Android: Remove parent before adding window to screenTinja Paavoseppä2024-01-221-1/+1
| | | | | | | | | | | | | When a window's parent is set to null, remove the corresponding native view from its previous parent layout before adding it to the layout for top level windows. If the removal from the previous layout is done after adding the window to the screen, an exception will be thrown due to the view already having a parent. Fixes: QTBUG-121232 Pick-to: 6.7 Change-Id: I1c065b5158d32150042d25fb64f10cf48f83f9f4 Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
* Android: Add a context delegate for embedding QML to native AndroidTinja Paavoseppä2024-01-212-5/+5
| | | | | | | | | | | | | | | | | | | | | | | | When we are embedding a QML view to a non-Qt Android app, there are a lot of functionalities that are shared with the refular Qt Android app, but some are not. We should not, for example, try to control the hosting Activity. Create a base class that both the QtActivityDelegate, used for the standard Qt for Android app, and the delegate for the embedding case can extend. In this commit, the QtEmbeddedDelegate is very simple, the biggest difference to QtActivityDelegate being it does not create a QtLayout or instantiate a QtAccessibilityDelegate. It does start the Qt app, without waiting for a layout, and register to listen for changes in the state of the Qt app. Taking the embedded delegate into use, loading the embedded QML views and their handling is added in a follow up commit. Task-number: QTBUG-118872 Pick-to: 6.7 Change-Id: Id390a2b35c70b35880523886bf6fcf59d420cb42 Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
* macOS: Work around lack of native support for multi-part extensionsTor Arne Vestbø2024-01-171-21/+105
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Multi-part extensions such as "tar.gz" are not natively supported by macOS, e.g. one can not create a [UTType typeWithFilenameExtension:] for such an extension, and this goes all the way down to Foundation. As a result NSSavePanel gets confused when assigning a multi-part extension to allowedFileTypes, because it's using NSString operations such as stringByDeletingPathExtension or pathExtension, which also lack support for multi-part extensions. We've worked around this in the past by reducing these extensions to their last component, e.g. "tar.gz" reduced to "gz", but this results in the save panel turning the input file name "foo" into "foo.gz" if the user doesn't provide the full file name. Various attempts at working around the lack of multi-part extension support by breaking allowedFileTypes into ["tar.gz", "gz"], or doing selectively toggling of allowedFileTypes in panel:validateURL:error, have all proved to have corner cases and shortcomings of their own. As a last resort, we now treat multi-part extensions manually, by disabling the allowedFileTypes filter, and doing our own validation in the panel:validateURL:error callback. This requires us to also manually handle automatic extension for file names without extensions, as well as overwrite confirmation in the cases we do add an extension manually. The overwrite dialog and error messages for incompatible extensions have been modeled after their native macOS 14 counterparts, using translated strings from AppKit. Task-number: QTBUG-109877 Pick-to: 6.7 Change-Id: I6b7ce3c44b4c3b24802aa1f66f4593457ae4c929 Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
* macOS: Reset save dialog extension when resetting file name filterTor Arne Vestbø2024-01-172-0/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | We map QFileDialog name filters to NSSavePanel.allowedFileTypes, for example turning "Text Files (*.txt)" into allowedFileTypes = @[@"txt"]. In this case, the NSSavePanel will automatically add the extension to the user's file name, if they just type "foo". When a filter allows all files, we reset the allowedFileTypes to nil, but this does not reset the automatically added extension, so if the user switches from one filter (*.txt) to another (*.*), the file name will still have a .txt extension. This is problematic when the save panel's file name field does not show the extension to the user, which can happen automatically if the user types an initial file name without an extension, overriding what we've asked by setting extensionHidden=NO. When that happens, the user is shown "foo", but the actual file name is "foo.txt". To mitigate this confusing situation we do a round-trip via the UTTypeDirectory content type, which is a valid type without any extension. This forces the save panel to remove any extensions added automatically by previous filters. Pick-to: 6.7 Change-Id: Ia17a8c2734eff656116ef77a9813113a5076e9cc Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
* macOS: Disable currentChanged signal for NSSavePanelsTor Arne Vestbø2024-01-171-0/+8
| | | | | | | | | | | | | | | The panelSelectionDidChange callback is only called when the user selects a directory in the save panel, as all other files are not selectable. And when that happens, the reported selection is not the directory, but the current file name (which may be based on clicking an exsiting file, but that doesn't cause selection changes). To avoid this confusing and inconsistent behavior we disable the signal entirely when showing an NSSavePanel. Pick-to: 6.7 Change-Id: If706b8faa7027ca284ec8398f5c6e2a110e01f91 Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
* Android: Handle embedding container windows betterTinja Paavoseppä2024-01-162-12/+22
| | | | | | | | | | | Initialize surface container type to TextureView to make sure it's set also for embedding containers. Additional checks for embedding containers when setting parent or changing visibility. Pick-to: 6.7 Change-Id: Iba07bfbb9e8f16804627efbdfe78559ac2580e41 Reviewed-by: Assam Boudjelthia <assam.boudjelthia@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>
* Android: Bail early in showInputPanel() when focusWindow is not nativeAndy Nichols2024-01-151-0/+3
| | | | | | | | | | | | | | QAndroidInputContext::showInputPanel() assumes that any window with focus must be a native window, but sometimes the focus window will be an offscreen window, like in the case of using OpenXR where there is no native window to be focused. In that case the 2D input method overlay doesn't even make sense, since there is no window space to even map back to. This patch prevents crashes when trying to focus on text in Android VR/XR applications. Change-Id: I16ac1a07f0a86ec9786f09a2f416387c1885bde0 Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io> Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* macOS: Add helper function for getting AppKit localized stringsTor Arne Vestbø2024-01-153-2/+13
| | | | | | | | | | If we for some reason can't look up AppKit, or if the table or string within that table is not found we will end up using the key as is. Pick-to: 6.7 Change-Id: I5d574288e421e586458266899ffdff90eeadec8f Reviewed-by: Volker Hilsheimer <volker.hilsheimer@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>
* iOS: Avoid category method name clash for UIResponderPaul Heimann2024-01-116-12/+12
| | | | | | | | | | | | | | As described in Apples documentation, own methods which are added to existing classes should be prefixed to avoid category method name clashes. This prefix was missing from the function currentFirstResponder() which caused issues when closing the virtual keyboard on some iOS devices. (see https://developer.apple.com/library/archive/qa/qa1908/_index.html) Pick-to: 6.7 6.6 6.5 Task-number: QTBUG-119601 Change-Id: I82fb8a8beeb0a3234594357f1e1db67b0ae3da36 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* wasm: don't call requestActivate for windows that don't want itLorn Potter2024-01-101-1/+2
| | | | | | | | | | | | | QWindows that set Qt::QWindowDoesNotAcceptFocus like QtVirtualKeyboard should not get focus. gets rid of message: requestActivate() called for QtVirtualKeyboard::InputView(0x1cdf130) which has Qt::WindowDoesNotAcceptFocus set. Pick-to: 6.7 Change-Id: I649a8cff599769727beaeee11039cf1291fd502d Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io> Reviewed-by: Piotr Wierciński <piotr.wiercinski@qt.io>
* macOS: Explicitly show extensions in save dialog if filter is "all files"Tor Arne Vestbø2024-01-101-11/+19
| | | | | | | | | | Otherwise clicking an existing file in the dialog will not populate the full file name, which is what you'd expect for a filter allowing all files. Pick-to: 6.7 Change-Id: Ib9a014352d5e567e54f95414e744566615d735d8 Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
* macOS: Show extensions in file dialog when filtering on multi-part extensionTor Arne Vestbø2024-01-101-14/+22
| | | | | | | | | | | | | | | | | | | | | | | File extensions with multiple parts, such as as ".tar.gz" are not natively supported on macOS. Asking NSSavePanel to only allow file types with such extensions confuses it severely, so we work around it by reducing the native file name filter to the last component of the extension. In this situation, we explicitly tell the NSSavePanel to show the full filename, including the extension, so that the user can more easily see what the final file name will be. However, as part of 7f8a80ebf87cccb57da316202e5350eb5eca9d5d we ended up changing the logic to count the number of possible extensions for a given file type filter, not the number of parts in the extension. The logic has now been restored, but moved to init, so that it applies even if the initial filter is not a multi-part extension. Task-number: QTBUG-109877 Pick-to: 6.7 6.6 6.5 6.2 Change-Id: I244cea1cc2977f8adf7e359ea7116bbfad0e1059 Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
* wasm: move keyboard input handling for touchscreensLorn Potter2024-01-093-25/+14
| | | | | | | | | | It's better served where all keys are handled, and fixes bug with modifier keys Fixes: QTBUG-118503 Pick-to: 6.6 6.7 Change-Id: Ic53d1b332bd918dbc4fdd27ea4e43ad1e1ecce82 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* wasm: provide isValid implementation for QWasmOffscreenSurfaceLorn Potter2024-01-092-0/+6
| | | | | | | Fixes: QTBUG-120350 Pick-to: 6.6 6.7 Change-Id: I0cb2ba66a2d27f3d96a4a6a1cb85695f6b305178 Reviewed-by: Morten Johan Sørvig <morten.sorvig@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>
* Add styleHint function override for QEglFSIntegrationTomasz Kozłowski2024-01-092-0/+10
| | | | | | | | | | | | Without this change, while using EglFS, showIsFullscreen returns false, which is not true, because EglFS always runs in fullscreen. This change requires setting QT_QPA_PLATFORM_PLUGIN_PATH environmental variable. Pick-to: 6.7 Task-number: QTBUG-115777 Change-Id: Ie7cf709e002ac70d95fe5e2698d2ee7b52e08094 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* Fix opening temporary content: URIs from application content providersVolker Krause2024-01-091-1/+1
| | | | | | | | | | | | e5d591a0d09 focused on document or tree URIs you'd get from the file dialog, but we can also get ones via Intents from application-specific content providers (e.g. opening an attachment from an email client). Those need to be handled like a single document here, parsing them like a tree URI results in a bunch of Java exceptions down the line. Change-Id: I19cb1075fd6a3ccad927543f8bc5a63566f4877e Pick-to: 6.7 6.6 6.5 Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
* wasm: finish comment and remove debug outputMorten Sørvig2024-01-081-5/+2
| | | | | | Pick-to: 6.7 Change-Id: Iff832637ca600f382e99534c07f7cf35b0b6cdde Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* wasm: actually save dropped files to /qt/tmpMorten Sørvig2024-01-081-1/+1
| | | | | | | | | We were reporting the correct url, but saving to the root of the file system. Pick-to: 6.7 Change-Id: I3e1fd63efb77dd75ccf7a8f44a3211965fe11be8 Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
* wasm: Handle stylus events by generating QTabletEventsShawn Rutledge2023-12-287-1/+48
| | | | | | | Pick-to: 6.6 6.7 Fixes: QTBUG-120327 Change-Id: I37a92b9850385712b638c30f9a43028d8134f416 Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
* wasm: implement async drag-and-dropMorten Sørvig2023-12-284-81/+119
| | | | | | | | | | | | | | | | | | | | | | | Make toMimeDataWithFile() handle writing files to the in-memory file system correctly: this is an async operation and we need to collect the files as the writes complete and then invoke the callback once all files have been saved. There's then no need for a global static QMimeData. Use toMimeDataWithFile() for both the paste and drop handling, however QPlatformClipboard::setMimeData() takes ownership of the passed in QMimeData and the callback API must be designed accordingly. An open question is when we should delete the files. Deleting them right away (after calling the app event handler) is predictable, however it looks like QPlatformClipboard::setMimeData() retains the current QMimeData until a new one is set, so maybe we should follow that. Pick-to: 6.7 Change-Id: Ia9b825eaef1134ff9a554e51ee7e41d1c2ee779a Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
* 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>
* wasm: remove 'Vera' fontMorten Sørvig2023-12-212-5/+3
| | | | | | | | | We are already including the 'DejaVu' font, which is a further development of Vera and includes the same glyphs. Change-Id: I2eb58967751101489158ecbf268102a72b9b2bea Reviewed-by: Lorn Potter <lorn.potter@gmail.com> Reviewed-by: Piotr Wierciński <piotr.wiercinski@qt.io>
* wasm: write file to storage on dropLorn Potter2023-12-225-37/+102
| | | | | | Change-Id: Ibd1b5d623da07ad611cce577929a23ba991b6738 Pick-to: 6.7 Reviewed-by: Morten Johan Sørvig <morten.sorvig@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>
* wasm: add QWasmDrag back to handle drag/dropLorn Potter2023-12-2110-35/+374
| | | | | | | Change-Id: I7c577e6b13db9f5c51e5691baaf6417b956a5ff4 Done-with: Mikolaj.Boc@qt.io Pick-to: 6.7 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* wasm: move DataTransfer to dom::Lorn Potter2023-12-216-39/+194
| | | | | | Change-Id: I069292154bafd1c08a0d0f2e8a62052f596a80f3 Done-with: Mikolaj.Boc@qt.io Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
* macOS: Remove QScopedScopeLevelCounter from menu qt_itemFired callbackTor Arne Vestbø2023-12-211-1/+0
| | | | | | | | | | | | | | | | | | The activated signal is delivered as a queued connection, so we're going to raise the scope level as part of notifyInternal2() anyways. In addition, since c5d49725779292a04fed599eb7f508d334ffc5c3 we will automatically raise the level to 1 due to the catch all logic, so in case the connection is changed to direct connection, we'll still raise the scope level as needed. This removes the last remaining QScopedScopeLevelCounter outside of QtCore. Task-number: QTBUG-120124 Change-Id: I91a8ab8c1969d2209657daaca5c232928d1dd985 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* wasm: move image to web conversion to dom::Lorn Potter2023-12-213-33/+47
| | | | | | | | This allows other areas to utilize this Change-Id: I4bc7e8374289a19afe8b639b2b3b0dc0f8f65a3a Done-with: Mikolaj.Boc@qt.io Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* wasm: fix Pen inputLorn Potter2023-12-203-1/+4
| | | | | | | | | This also adds the ability to distinguish between a Pen and a Touch. Fixes: QTBUG-116989 Change-Id: Iffc5d20c9b46c1746a03c45dd12017d5dd5172a5 Pick-to: 6.6 6.7 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>