summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms
Commit message (Collapse)AuthorAgeFilesLines
...
* macOS: Forward application{Will,Did}FinishLaunching to reflection delegateTor Arne Vestbø2024-03-141-2/+5
| | | | | | | | | | | If a custom application delegate is installed prior to creating the Qt application delegate we will forward callbacks to the delegate, but this has to be done manually for any callback we implement. Fixes: QTBUG-122996 Pick-to: 6.7 6.6 6.5 Change-Id: Ia25e2c4b8cac37130d604c772c875c5d76c66764 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* QEventDispatcher*: port the Unix dispatchers to V2Thiago Macieira2024-03-132-20/+21
| | | | | | | | | | | They're all ported in one go because all the changes are the same and they all rely on QTimerInfoList. The changes are: - use Qt::TimerId to uniquely identify timer IDs - use Duration (nanoseconds) to specify the timer interval - rename registeredTimers() to timersForObject(), which is const Change-Id: I83dda2d36c904517b3c0fffd17b52958767d8a68 Reviewed-by: Ahmad Samir <a.samirh78@gmail.com>
* Android: Resize QWindow when its QtView is resizedTinja Paavoseppä2024-03-132-1/+11
| | | | | | | | | | If the Android View is resized, the QWindow instantiated by it should be resized accordingly. Task-number: QTBUG-122626 Pick-to: 6.7 Change-Id: I7bfbca149f927718d1e28cdabfa8759afbd06039 Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
* XCB: Unset the connection's mousePressWindow if it's this windowAndy Shaw2024-03-081-0/+2
| | | | | | | | | In some rare cases it can delete the window before this is handled by other calls, so rather than crashing we clean up. Pick-to: 6.7 6.6 6.5 6.2 5.15 Change-Id: Iddcd9890f0c13f4130626b0ed9c5b32f5890208d Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* wasm: send DPR change event on window updateMorten Sørvig2024-03-081-1/+6
| | | | | | | | | | | | | | | | | Qt Gui expects that the platform sends DPR update notifications if the DPR value has changed, before sending expose/paint events or delivering update request events. The most straightforward implementation is to send the DPR update event unconditionally and let Qt Gui determine if the DPR value has changed, especially if the native platform does not provide DPR change events. Pick-to: 6.6 6.7 Change-Id: Ica7a24a458b3b01f1c7b2e1e09d342114dc71331 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* wasm: Make sure we can add screen after releaseRequestUpdateHold has been calledEven Oscar Andersen2024-03-053-9/+14
| | | | | | | | | | | | | | Before this fix, such screens would not render due to requestUpdateHold is initialized to true and never reset. The fix is to change the requestUpdateHold member to be a static variable, so that it can be read by screens added after requestUpdateHold has been called. Also, add a test that would fail without this fix Change-Id: Idf2ac916766a03480272cd550f9d1ab7fc5c5158 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* drm: Fix having more than window over the screen's lifetimeLaszlo Agocs2024-03-052-1/+9
| | | | | | | | | | | | | | | | ...when not using atomic. On the non-atmic path the fb is passed in to drmModeSetCrtc. Here we need a new call to it if a new QWindow gets created after the previous one is destroyed. Previously this was not done, so it ended up with Device busy errors. Atomic does not need this since there the flip commit always contains framebufferPropertyId. Change-Id: Ie68152cad50438807ef45adfba65e74c8f30c956 Fixes: QTBUG-122663 Pick-to: 6.7 6.6 6.5 Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* drm: atomic: Avoid device busy when flipping after creating a new windowLaszlo Agocs2024-03-051-2/+6
| | | | | | | Task-number: QTBUG-122663 Change-Id: I168930428e8d09a9a042401460d678e20f3b82d5 Pick-to: 6.7 6.6 6.5 Reviewed-by: Andy Nichols <andy.nichols@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>
* Revert "QAndroidPlatformInputContext: send composition text and cursor jointly"Axel Spoerl2024-03-051-7/+15
| | | | | | | | | | | This reverts commit be3b9b2ab12f664c196d649e8c4247d70805d667. Reason for revert: Caused QTBUG-121561 Fixes: QTBUG-121561 Pick-to: 6.7 6.6 6.5 6.2 Change-Id: I4b59d97ede6c50d2575a7d7cebbe2291983dd19f Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* Add QT_IM_MODULES env to allows specify multi IM keyJiDe Zhang2024-03-056-19/+21
| | | | | | | | | | | | | | | | | 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>
* Replace some QString::fromUtf16() with QStringView::toString()Thiago Macieira2024-03-041-2/+2
| | | | | | | | | | | | | | The QStringView counterpart is somewhat faster because it doesn't go through the UTF-16 codec in QUtf16::convertToUnicode(), which tries to detect the BOM. I've included QString::fromWCharArray in this because: a) it's used extensively in Windows code b) wide chars in memory probably don't have BOMs anyway Change-Id: I01ec3c774d9943adb903fffd17b815be4d2ab8ba Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Ahmad Samir <a.samirh78@gmail.com>
* QAbstractFileEngine: remove redundant endEntryList() overridesAhmad Samir2024-03-034-12/+0
| | | | | | | | QAFE sub-classes endEntryList() overrides returned nullptr, which is exactly what the base class implementation does. Change-Id: I2e901647cd087c3b8ba674db6e7b371e620af340 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* 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>
* Fix -Wimplicit-fallthrough for clangTim Blechmann2024-03-011-0/+1
| | | | | | | | | | | | | | | | | | | Clang's `-Wimplicit-fallthrough` warnings are a little stricter than gcc's interpretation: switch (i) { case 0: foo(); case 4: break; } While gcc accepts the implicit fallthrough, if the following statement is a trivial `break`, clang will warn about it. Pick-to: 6.7 Change-Id: I38e0817f1bc034fbb552aeac21de1516edcbcbb0 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@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>
* CMake: Fix wasm build without PCH enabledAlexandru Croitor2024-02-201-0/+2
| | | | | | | | There were a few missing includes. Pick-to: 6.7 Change-Id: I352f4745a2691e96160408ab234a1ed8549f063c Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
* wasm: make opengles3 (webgl2) default surface formatLorn Potter2024-02-212-17/+34
| | | | | | | | | | | All major browsers support webgl2 out of the box. [ChangeLog][WebAssmebly] Default OpenGL ES version raised to 3.0 Fixes: QTBUG-110686 Pick-to: 6.7 Change-Id: I875b55c2e0f6e955249f121d92214cf10ed416d7 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io> Reviewed-by: Laszlo Agocs <laszlo.agocs@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>
* Apple: Fix a few deprecation warnings after bumping deployment targetsTor Arne Vestbø2024-02-195-8/+10
| | | | | | | | | | | | - kIOMasterPortDefault -> kIOMainPortDefault - Use UTType instead of Carbon Core functions/constants - NSWorkspace iconForFileType -> iconForContentType - Removed obsoleted kUTTypeInkText pasteboard type There are still a few more, but these will be fixed in follow ups. Change-Id: Ibbca226d578b4ba64bd9c8c5d0addc1870114a20 Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
* wasm: fix copy/paste error in FS export checkMorten Sørvig2024-02-191-11/+5
| | | | | | | | | | | | The check for environment variables was copied over from the ENV export test, but is not relevant for FS. Remove it and then inline at the call site since this this is now only three lines of code. Change-Id: If377401154ff1ef6c71a5f1ebeb6459118d4d395 Reviewed-by: Lorn Potter <lorn.potter@gmail.com> Reviewed-by: Even Oscar Andersen <even.oscar.andersen@qt.io>
* Android: Implement input connection listener in QtInputDelegateTinja Paavoseppä2024-02-191-1/+2
| | | | | | | | | | | This way we can just pass the input delegate as the listener for QtEditText when we create it, and having the listener in a separate member doesn't provide a real benefit anyway. Task-number: QTBUG-118139 Pick-to: 6.7 Change-Id: I0125c87ecd39eed550a120ea8326d2c50a1b016e Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
* Implement icon mapping for Apple, Android, and WindowsRayam Pinto2024-02-182-2/+489
| | | | | | | | | | | 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>
* QXcbWindow::handleLeaveNotifyEvent(): Consume when leaving geometryAxel Spoerl2024-02-171-5/+14
| | | | | | | | | | | | | | | | | | | | | | QXcbConnection::mousePressWindow() returns the XCB toplevel window, which has consumed the window system's last mouse press. When the function returns a valid pointer, QXcbWindow::handleLeaveNotifyEvent() didn't propagate the leave event to QWSI::handleLeaveEvent(). Instead, the leave event was ingored. That behavior is correct, e.g. when a button on the main window is pressed and the mouse hovers away from the button, with the mouse button continuously being pressed. It is not correct, if the mouse cursor leaves the main window. => Ignore the leave event only as long as the mouse cursor remains within mousePressWindow()->geometry(). => Deliver the leave event, when the mouse cursor leaves the window. Fixes: QTBUG-119864 Pick-to: 6.7 6.6 6.5 6.2 5.15 Change-Id: I30a6ebedcd148285b9f17dfd87885ff67726b54c Reviewed-by: Liang Qi <liang.qi@qt.io>
* Android: Do not double finger size for touch eventsZoltan Gera2024-02-161-4/+4
| | | | | | | | | | | | | Fingers in touch events are modelled by rotated ellipses with their major and minor axes stored respectively. The axis is the diameter of the ellipse in one direction, not its radius. These values should be converted to a rectangle correctly, without doubling their extents. The pair of this fixed code is located in function QWindowSystemInterfacePrivate::fromNativeTouchPoints(). Pick-to: 6.7 Change-Id: I4fea7e8168a9c248a744964d4821b774b85a6cf4 Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
* Change wasm files licenseLucie Gérard2024-02-162-2/+2
| | | | | | | | | The other files in this directory are non-LGPL Pick-to: 6.7 Task-number: QTBUG-121787 Change-Id: I9c319f723dafd7205029d7632c456412d1a3010b Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* iOS: Propagate focus changes to VoiceOverTor Arne Vestbø2024-02-155-5/+31
| | | | | | | | | | | | | | | | | | | | | Changing the focus object should update the VoiceOver focused element, the same way we do it on macOS. There's no NSAccessibilityFocusedUIElementChangedNotification on iOS, but we can pass the focused element as an argument when posting the UIAccessibilityLayoutChangedNotification. The class method on QMacAccessibilityElement to get an element for an QAccessible::Id was not used by any callers, and has been modified to resolve the container from the QAccessibleInterface, so that we don't need to plumb that all the way from the focus change event. Inspired-by: Jan Möller <jan.moeller@governikus.de> Fixes: QTBUG-114608 Pick-to: 6.7 6.6 6.5 Change-Id: I2e43ae649bc7e3a44c1e1200e8de66bf420b1949 Reviewed-by: Lars Schmertmann <lars.schmertmann@governikus.de> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Android: QtActivityDelegateBase listens to focus events from child viewsPetri Virkkunen2024-02-152-1/+21
| | | | | | | | | | | | | In order to detect gaining/losing and moving focus between windows, implement GlobalFocusChangeListener for the root View. Add a surfaceFocusChanged native function in QAndroidPlatformWindow in order to follow these focus changes. Task-number: QTBUG-118139 Pick-to: 6.7 Change-Id: Ia9bf6249c28a420f42793a9829aef31b12757630 Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
* macOS: Expand and tighten plumbing of QWindow's requested color spaceTor Arne Vestbø2024-02-155-20/+53
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A QWindow can have a requested target color space via its QSurfaceFormat. This allows users who know what color space their source material is in, or who do their own color matching, to ensure a consistent target color space. In the past we plumbed this to NSWindow's colorSpace property. This meant that you could only have one color space per top level, even if child windows were in play, and we could only set the color space if we were the ones creating the NSWindow, failing the color space request in cases where the window was embedded in a non-Qt window hierarchy. We now store the requested color space in our QNSView, and propagate it to both the IOSurfaces we use in QCALayerBackingStore, and to the view's layer, in case it's a CAMetalLayer. We also pick up any changes to the backing properties of the view, and ensure we update the color space accordingly. We still propagate the color space to NSWindow, as for OpenGL we don't use CAOpenGLLayer (which has a colorSpace property), but instead use NSOpenGLContext. This is not something we're going to change, so as a workaround we set the NSWindow color space, which does affect GL drawing via NSOpenGLContext. The granular color spaces we set on the IOSurfaces and CAMetalLayer will override the NSWindow state. Pick-to: 6.7 Change-Id: I5d9765d95140b8523ee09f70ff09a8c9400ffdc7 Reviewed-by: Pavel Dubsky <pavel.dubsky@qt.io> Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> Reviewed-by: Artem Dyomin <artem.dyomin@qt.io> Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io>
* Android: QtEditText support for full-screen soft keyboardRami Potinkara2024-02-152-1/+42
| | | | | | | | | | | | Full-screen soft keyboard support added. Including functionality for copy-cut-paste and line change. Future TODO QTBUG-121522 Task-number: QTBUG-109367 Pick-to: 6.7 6.6 6.5 6.2 Change-Id: Ia5632cacc910c7ebde0e40608c2abd027b8f953a Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
* 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>