From 20e2fd074a12e62f7d361c69602a473bb16f2b95 Mon Sep 17 00:00:00 2001 From: Thomas McGuire Date: Wed, 27 Jun 2012 10:38:13 +0200 Subject: 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 --- src/plugins/platforms/qnx/qqnxwindow.cpp | 40 +++++++++++++++++++++++++++++++- src/plugins/platforms/qnx/qqnxwindow.h | 3 +++ 2 files changed, 42 insertions(+), 1 deletion(-) 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 m_childWindows; QQnxWindow *m_parentWindow; bool m_visible; + QRect m_unmaximizedGeometry; + Qt::WindowState m_windowState; }; QT_END_NAMESPACE -- cgit v1.2.3