summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTor Arne Vestbø <tor.arne.vestbo@digia.com>2013-11-27 18:20:10 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-11-29 09:55:14 +0100
commit9b782dca45331c0e0246b8439d5cf007a440afc8 (patch)
tree6914d150b64e41539ad187dfab6e3f126800934d /src
parentc5b19f252188a01dd7b12090f4776420e3714000 (diff)
iOS: Update screen properties when we trigger statusbar changes on iOS7
Ideally we'd have a callback from iOS when this happens, so we can also react to changes done outside of Qt, but willChangeStatusBarFrame and friends do not seem to give us what we want. Change-Id: I686ce7950395a83c4257372363c773a95c3935ed Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/platforms/ios/qiosscreen.mm19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/plugins/platforms/ios/qiosscreen.mm b/src/plugins/platforms/ios/qiosscreen.mm
index 57522cb1a3..96410952f9 100644
--- a/src/plugins/platforms/ios/qiosscreen.mm
+++ b/src/plugins/platforms/ios/qiosscreen.mm
@@ -189,6 +189,9 @@ void QIOSScreen::updateProperties()
void QIOSScreen::updateStatusBarVisibility()
{
+ if (!isQtApplication())
+ return;
+
QWindow *focusWindow = QGuiApplication::focusWindow();
// If we don't have a focus window we leave the status
@@ -199,20 +202,26 @@ void QIOSScreen::updateStatusBarVisibility()
return;
UIView *view = reinterpret_cast<UIView *>(focusWindow->handle()->winId());
+ QIOSViewController *viewController = static_cast<QIOSViewController *>(view.viewController);
+
+ bool currentStatusBarVisibility = [UIApplication sharedApplication].statusBarHidden;
+ if (viewController.prefersStatusBarHidden == currentStatusBarVisibility)
+ return;
+
#if QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__IPHONE_7_0)
if (QSysInfo::MacintoshVersion >= QSysInfo::MV_IOS_7_0) {
- [view.viewController setNeedsStatusBarAppearanceUpdate];
+ [viewController setNeedsStatusBarAppearanceUpdate];
+ dispatch_async(dispatch_get_main_queue(), ^{
+ updateProperties();
+ });
} else
#endif
{
- bool wasHidden = [UIApplication sharedApplication].statusBarHidden;
- QIOSViewController *viewController = static_cast<QIOSViewController *>(view.viewController);
[[UIApplication sharedApplication]
setStatusBarHidden:[viewController prefersStatusBarHidden]
withAnimation:UIStatusBarAnimationNone];
- if ([UIApplication sharedApplication].statusBarHidden != wasHidden)
- updateProperties();
+ updateProperties();
}
}