diff options
author | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2024-04-05 16:28:31 +0200 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2024-04-18 15:25:22 +0200 |
commit | eb9923c67ed919c4072a22857d4c32419de3d521 (patch) | |
tree | 4a3a64aac5b77138516c82140ccfac4ebb53fb4f /src/plugins/platforms/ios | |
parent | e48a9aca5d1b6b6dac017003b7c8dd9de5953c54 (diff) |
iOS: Support message box at startup without relying on screen's window
Task-number: QTBUG-121781
Change-Id: Iafc911dad6c668799383f423e38ab389c29688b4
Reviewed-by: Doris Verria <doris.verria@qt.io>
Diffstat (limited to 'src/plugins/platforms/ios')
-rw-r--r-- | src/plugins/platforms/ios/qiosglobal.mm | 13 | ||||
-rw-r--r-- | src/plugins/platforms/ios/qiosmessagedialog.mm | 24 |
2 files changed, 17 insertions, 20 deletions
diff --git a/src/plugins/platforms/ios/qiosglobal.mm b/src/plugins/platforms/ios/qiosglobal.mm index 169c292a00..8d0df38dbe 100644 --- a/src/plugins/platforms/ios/qiosglobal.mm +++ b/src/plugins/platforms/ios/qiosglobal.mm @@ -88,10 +88,15 @@ int infoPlistValue(NSString* key, int defaultValue) UIWindow *presentationWindow(QWindow *window) { UIWindow *uiWindow = window ? reinterpret_cast<UIView *>(window->winId()).window : nullptr; -#if !defined(Q_OS_VISIONOS) - if (!uiWindow) - uiWindow = qt_apple_sharedApplication().keyWindow; -#endif + if (!uiWindow) { + auto *scenes = [qt_apple_sharedApplication().connectedScenes allObjects]; + if (scenes.count > 0) { + auto *windowScene = static_cast<UIWindowScene*>(scenes[0]); + uiWindow = windowScene.keyWindow; + if (!uiWindow && windowScene.windows.count) + uiWindow = windowScene.windows[0]; + } + } return uiWindow; } diff --git a/src/plugins/platforms/ios/qiosmessagedialog.mm b/src/plugins/platforms/ios/qiosmessagedialog.mm index 979829377a..7fbd5d8729 100644 --- a/src/plugins/platforms/ios/qiosmessagedialog.mm +++ b/src/plugins/platforms/ios/qiosmessagedialog.mm @@ -117,25 +117,17 @@ bool QIOSMessageDialog::show(Qt::WindowFlags windowFlags, Qt::WindowModality win } UIWindow *window = presentationWindow(parent); - if (!window) { - qCDebug(lcQpaWindow, "Attempting to exec a dialog without any window/widget visible."); - - auto *primaryScreen = static_cast<QIOSScreen*>(QGuiApplication::primaryScreen()->handle()); - Q_ASSERT(primaryScreen); - - window = primaryScreen->uiWindow(); - if (window.hidden) { - // With a window hidden, an attempt to present view controller - // below fails with a warning, that a view "is not a part of - // any view hierarchy". The UIWindow is initially hidden, - // as unhiding it is what hides the splash screen. - window.hidden = NO; - } - } - if (!window) return false; + if (window.hidden) { + // With a window hidden, an attempt to present view controller + // below fails with a warning, that a view "is not a part of + // any view hierarchy". The UIWindow is initially hidden, + // as unhiding it is what hides the splash screen. + window.hidden = NO; + } + [window.rootViewController presentViewController:m_alertController animated:YES completion:nil]; return true; } |