summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/ios/qioswindow.mm
diff options
context:
space:
mode:
authorTor Arne Vestbø <tor.arne.vestbo@digia.com>2013-11-21 11:25:48 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-11-22 22:36:34 +0100
commitf441d8e52360fe5c03887fa0bbce8bfda2c8ff2d (patch)
tree765ec2cd47d947962fddb7a2a88085070c3704f4 /src/plugins/platforms/ios/qioswindow.mm
parentae5392a00bdd5a569250cd4e387868141cbd68e9 (diff)
iOS: Change show() to imply maximize, and showFullScreen() to hide status bar
Matches the Android behavior, and gives an easy and predictable way to show true fullscreen windows that is similar to how one would do it on a desktop platform. We keep the statusbar visibility in sync with the window state of the active window. Change-Id: Ia4b99e03f83e19f9ef56cc99b9d477cc6da4c734 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
Diffstat (limited to 'src/plugins/platforms/ios/qioswindow.mm')
-rw-r--r--src/plugins/platforms/ios/qioswindow.mm33
1 files changed, 29 insertions, 4 deletions
diff --git a/src/plugins/platforms/ios/qioswindow.mm b/src/plugins/platforms/ios/qioswindow.mm
index e835b829a8..d4e656c390 100644
--- a/src/plugins/platforms/ios/qioswindow.mm
+++ b/src/plugins/platforms/ios/qioswindow.mm
@@ -456,6 +456,10 @@ void QIOSWindow::setVisible(bool visible)
if (visible) {
requestActivateWindow();
+
+ if (window()->isTopLevel())
+ static_cast<QIOSScreen *>(screen())->updateStatusBarVisibility();
+
} else {
// Activate top-most visible QWindow:
NSArray *subviews = m_view.viewController.view.subviews;
@@ -530,10 +534,6 @@ void QIOSWindow::applyGeometry(const QRect &rect)
void QIOSWindow::setWindowState(Qt::WindowState state)
{
- // FIXME: Figure out where or how we should disable/enable the statusbar.
- // Perhaps setting QWindow to maximized should also mean that we'll show
- // the statusbar, and vice versa for fullscreen?
-
switch (state) {
case Qt::WindowNoState:
applyGeometry(m_normalGeometry);
@@ -552,6 +552,14 @@ void QIOSWindow::setWindowState(Qt::WindowState state)
default:
Q_UNREACHABLE();
}
+
+ if (window()->isTopLevel() && window()->isVisible() && window()->isActive()) {
+ // The window state of the QWindow is not updated until after
+ // we return from this method, so we have to defer any updates
+ // of the statusbar that depend on the current window state.
+ QMetaObject::invokeMethod(static_cast<QIOSScreen *>(screen()),
+ "updateStatusBarVisibility", Qt::QueuedConnection);
+ }
}
void QIOSWindow::setParent(const QPlatformWindow *parentWindow)
@@ -569,6 +577,23 @@ void QIOSWindow::setParent(const QPlatformWindow *parentWindow)
}
}
+QIOSWindow *QIOSWindow::topLevelWindow() const
+{
+ QWindow *window = this->window();
+ while (window) {
+ QWindow *parent = window->parent();
+ if (!parent)
+ parent = window->transientParent();
+
+ if (!parent)
+ break;
+
+ window = parent;
+ }
+
+ return static_cast<QIOSWindow *>(window->handle());
+}
+
void QIOSWindow::requestActivateWindow()
{
// Note that several windows can be active at the same time if they exist in the same