QNX: Add support for window states
authorThomas McGuire <thomas.mcguire.qnx@kdab.com>
Wed, 27 Jun 2012 08:38:13 +0000 (10:38 +0200)
committerQt by Nokia <qt-info@nokia.com>
Wed, 27 Jun 2012 12:43:00 +0000 (14:43 +0200)
Now QQuickView::showFullscreen() works as expected.
QQuickView has no fallback for platforms without window state support,
as opposed to QWidget.

Change-Id: I9c41fe563ea1f6d117eaebd3ea1db87465142b85
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
src/plugins/platforms/qnx/qqnxwindow.cpp
src/plugins/platforms/qnx/qqnxwindow.h

index 72187f8..4f52713 100644 (file)
@@ -72,7 +72,8 @@ QQnxWindow::QQnxWindow(QWindow *window, screen_context_t context)
 #endif
       m_screen(0),
       m_parentWindow(0),
-      m_visible(true)
+      m_visible(true),
+      m_windowState(Qt::WindowNoState)
 {
     qWindowDebug() << Q_FUNC_INFO << "window =" << window << ", size =" << window->size();
     int result;
@@ -133,6 +134,10 @@ QQnxWindow::QQnxWindow(QWindow *window, screen_context_t context)
 
     // Add window to plugin's window mapper
     QQnxIntegration::addWindow(m_window, window);
+
+    // setWindowState() does not get called when the platform window hasn't been created yet, so
+    // make sure to apply the inital window state here
+    setWindowState(window->windowState());
 }
 
 QQnxWindow::~QQnxWindow()
@@ -541,6 +546,39 @@ void QQnxWindow::requestActivateWindow()
     gainedFocus();
 }
 
+
+Qt::WindowState QQnxWindow::setWindowState(Qt::WindowState state)
+{
+    qWindowDebug() << Q_FUNC_INFO << "state =" << state;
+
+    // Prevent two calls with Qt::WindowFullScreen from changing m_unmaximizedGeometry
+    if (m_windowState == state)
+        return state;
+
+    switch (state) {
+
+    // WindowMinimized is not supported - navigator does not have an API to minimize a window
+    // WindowActive is not an accepted parameter according to the docs
+    case Qt::WindowMinimized:
+    case Qt::WindowActive:
+        return m_windowState;
+
+    case Qt::WindowMaximized:
+    case Qt::WindowFullScreen:
+        m_unmaximizedGeometry = geometry();
+        setGeometry(state == Qt::WindowMaximized ? m_screen->availableGeometry() : m_screen->geometry());
+        break;
+
+    case Qt::WindowNoState:
+        if (m_unmaximizedGeometry.isValid())
+            setGeometry(m_unmaximizedGeometry);
+        break;
+    }
+
+    m_windowState = state;
+    return state;
+}
+
 void QQnxWindow::gainedFocus()
 {
     qWindowDebug() << Q_FUNC_INFO << "window =" << window();
index 50b9a42..4a461d0 100644 (file)
@@ -96,6 +96,7 @@ public:
     void raise();
     void lower();
     void requestActivateWindow();
+    Qt::WindowState setWindowState(Qt::WindowState state);
 
     void gainedFocus();
 
@@ -137,6 +138,8 @@ private:
     QList<QQnxWindow*> m_childWindows;
     QQnxWindow *m_parentWindow;
     bool m_visible;
+    QRect m_unmaximizedGeometry;
+    Qt::WindowState m_windowState;
 };
 
 QT_END_NAMESPACE