summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/qnx
diff options
context:
space:
mode:
authorThomas McGuire <thomas.mcguire.qnx@kdab.com>2012-06-27 10:38:13 +0200
committerQt by Nokia <qt-info@nokia.com>2012-06-27 14:43:00 +0200
commit20e2fd074a12e62f7d361c69602a473bb16f2b95 (patch)
tree91c18c71e716aaf90e3cb1f2bb2093a9481b2d71 /src/plugins/platforms/qnx
parentc196f89b7e298252944680bf0ba230a33feef718 (diff)
QNX: Add support for window states
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>
Diffstat (limited to 'src/plugins/platforms/qnx')
-rw-r--r--src/plugins/platforms/qnx/qqnxwindow.cpp40
-rw-r--r--src/plugins/platforms/qnx/qqnxwindow.h3
2 files changed, 42 insertions, 1 deletions
diff --git a/src/plugins/platforms/qnx/qqnxwindow.cpp b/src/plugins/platforms/qnx/qqnxwindow.cpp
index 72187f8238..4f52713079 100644
--- a/src/plugins/platforms/qnx/qqnxwindow.cpp
+++ b/src/plugins/platforms/qnx/qqnxwindow.cpp
@@ -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();
diff --git a/src/plugins/platforms/qnx/qqnxwindow.h b/src/plugins/platforms/qnx/qqnxwindow.h
index 50b9a423f5..4a461d0acc 100644
--- a/src/plugins/platforms/qnx/qqnxwindow.h
+++ b/src/plugins/platforms/qnx/qqnxwindow.h
@@ -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