summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/platforms/ios/qiosscreen.h1
-rw-r--r--src/plugins/platforms/ios/qiosscreen.mm33
-rw-r--r--src/plugins/platforms/ios/qiosviewcontroller.mm38
3 files changed, 38 insertions, 34 deletions
diff --git a/src/plugins/platforms/ios/qiosscreen.h b/src/plugins/platforms/ios/qiosscreen.h
index 9c7d53dcd6..155ad603c2 100644
--- a/src/plugins/platforms/ios/qiosscreen.h
+++ b/src/plugins/platforms/ios/qiosscreen.h
@@ -73,7 +73,6 @@ public:
UIScreen *uiScreen() const;
void updateProperties();
- void layoutWindows();
public slots:
void updateStatusBarVisibility();
diff --git a/src/plugins/platforms/ios/qiosscreen.mm b/src/plugins/platforms/ios/qiosscreen.mm
index 86ef71c914..266e6848e2 100644
--- a/src/plugins/platforms/ios/qiosscreen.mm
+++ b/src/plugins/platforms/ios/qiosscreen.mm
@@ -252,9 +252,6 @@ void QIOSScreen::updateProperties()
QWindowSystemInterface::handleScreenGeometryChange(screen(), m_geometry, m_availableGeometry);
}
-
- if (screen())
- layoutWindows();
}
void QIOSScreen::updateStatusBarVisibility()
@@ -295,36 +292,6 @@ void QIOSScreen::updateStatusBarVisibility()
}
}
-void QIOSScreen::layoutWindows()
-{
- QList<QWindow*> 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<QIOSWindow *>(window->handle());
- if (!platformWindow)
- continue;
-
- // FIXME: Handle more complex cases of no-state and/or child windows when rotating
-
- if (window->windowState() & Qt::WindowFullScreen
- || (window->windowState() & Qt::WindowNoState && window->geometry() == oldGeometry))
- platformWindow->applyGeometry(newGeometry);
- else if (window->windowState() & Qt::WindowMaximized
- || (window->windowState() & Qt::WindowNoState && window->geometry() == oldAvailableGeometry))
- platformWindow->applyGeometry(newAvailableGeometry);
- }
-}
-
QRect QIOSScreen::geometry() const
{
return m_geometry;
diff --git a/src/plugins/platforms/ios/qiosviewcontroller.mm b/src/plugins/platforms/ios/qiosviewcontroller.mm
index 940e6b075e..782c98f66e 100644
--- a/src/plugins/platforms/ios/qiosviewcontroller.mm
+++ b/src/plugins/platforms/ios/qiosviewcontroller.mm
@@ -50,6 +50,39 @@
#include "qiosscreen.h"
#include "qiosglobal.h"
#include "qioswindow.h"
+#include "quiview.h"
+
+// -------------------------------------------------------------------------
+
+@interface QIOSDesktopManagerView : UIView
+@end
+
+@implementation QIOSDesktopManagerView
+
+- (void)layoutSubviews
+{
+ for (int i = int(self.subviews.count) - 1; i >= 0; --i) {
+ UIView *view = static_cast<UIView *>([self.subviews objectAtIndex:i]);
+ if (![view isKindOfClass:[QUIView class]])
+ continue;
+
+ [self layoutView: static_cast<QUIView *>(view)];
+ }
+}
+
+- (void)layoutView:(QUIView *)view
+{
+ QWindow *window = view.qwindow;
+ Q_ASSERT(window->handle());
+
+ // Re-apply window states to update geometry
+ if (window->windowState() & (Qt::WindowFullScreen | Qt::WindowMaximized))
+ window->handle()->setWindowState(window->windowState());
+}
+
+@end
+
+// -------------------------------------------------------------------------
@implementation QIOSViewController
@@ -82,6 +115,11 @@
return self;
}
+- (void)loadView
+{
+ self.view = [[[QIOSDesktopManagerView alloc] init] autorelease];
+}
+
-(BOOL)shouldAutorotate
{
// Until a proper orientation and rotation API is in place, we always auto rotate.