From c62efb52b538063ab561cd5c8fceab206de7c427 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Wed, 20 Nov 2013 17:33:48 +0100 Subject: iOS: Use custom method to lay out windows instead of resizeMaximizedWindows() Since we guard against overriding the geometry in setGeometry() when a window has a window state, we need to use a custom method to lay out windows that calls applyGeometry() instead. Change-Id: I6508e6aac6746c024a6172f709b8339b35b40994 Reviewed-by: Richard Moe Gustavsen --- src/plugins/platforms/ios/qiosscreen.mm | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) (limited to 'src/plugins/platforms/ios/qiosscreen.mm') diff --git a/src/plugins/platforms/ios/qiosscreen.mm b/src/plugins/platforms/ios/qiosscreen.mm index de6585fd19..3c054b4b04 100644 --- a/src/plugins/platforms/ios/qiosscreen.mm +++ b/src/plugins/platforms/ios/qiosscreen.mm @@ -182,7 +182,33 @@ void QIOSScreen::updateProperties() } if (screen()) - resizeMaximizedWindows(); + layoutWindows(); +} + +void QIOSScreen::layoutWindows() +{ + QList windows = QGuiApplication::topLevelWindows(); + + const QRect oldGeometry = screen()->geometry(); + const QRect oldAvailableGeometry = screen()->availableGeometry(); + const QRect newGeometry = geometry(); + const QRect newAvailableGeometry = availableGeometry(); + + for (int i = 0; i < windows.size(); ++i) { + QWindow *window = windows.at(i); + + if (platformScreenForWindow(window) != this) + continue; + + QIOSWindow *platformWindow = static_cast(window->handle()); + if (!platformWindow) + continue; + + if (window->windowState() & Qt::WindowFullScreen || window->geometry() == oldGeometry) + platformWindow->applyGeometry(newGeometry); + else if (window->windowState() & Qt::WindowMaximized || window->geometry() == oldAvailableGeometry) + platformWindow->applyGeometry(newAvailableGeometry); + } } QRect QIOSScreen::geometry() const -- cgit v1.2.3