diff options
author | Thomas McGuire <thomas.mcguire.qnx@kdab.com> | 2012-06-27 10:38:13 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-06-27 14:43:00 +0200 |
commit | 20e2fd074a12e62f7d361c69602a473bb16f2b95 (patch) | |
tree | 91c18c71e716aaf90e3cb1f2bb2093a9481b2d71 /src/plugins/platforms/qnx | |
parent | c196f89b7e298252944680bf0ba230a33feef718 (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.cpp | 40 | ||||
-rw-r--r-- | src/plugins/platforms/qnx/qqnxwindow.h | 3 |
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 |