diff options
author | Bernd Weimer <bweimer@blackberry.com> | 2013-09-18 16:14:49 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-09-20 23:45:06 +0200 |
commit | 6a12da7fb3b78335ee4c39949381380b5a3325f9 (patch) | |
tree | 80b4ff1799dd794728651c53d147da9df994a05a /src/plugins/platforms/qnx/qqnxscreen.cpp | |
parent | 6b95130faa31307579cb3711cab2101d07d20823 (diff) |
Added support for cover windows on BlackBerry platform
On the BlackBerry platform when an application is minimized an
alternate cover window is shown. This patch allows Qt to render
into those windows.
A new window type "Qt::CoverWindow" has been introduced.
Change-Id: If5e321f5cb00f6d3ed7a5dc0af425655d7a9253a
Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com>
Reviewed-by: Fabian Bumberger <fbumberger@rim.com>
Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
Diffstat (limited to 'src/plugins/platforms/qnx/qqnxscreen.cpp')
-rw-r--r-- | src/plugins/platforms/qnx/qqnxscreen.cpp | 63 |
1 files changed, 42 insertions, 21 deletions
diff --git a/src/plugins/platforms/qnx/qqnxscreen.cpp b/src/plugins/platforms/qnx/qqnxscreen.cpp index 69e672aefc..6c3fd08a41 100644 --- a/src/plugins/platforms/qnx/qqnxscreen.cpp +++ b/src/plugins/platforms/qnx/qqnxscreen.cpp @@ -126,6 +126,7 @@ QQnxScreen::QQnxScreen(screen_context_t screenContext, screen_display_t display, m_posted(false), m_keyboardHeight(0), m_nativeOrientation(Qt::PrimaryOrientation), + m_coverWindow(0), m_cursor(new QQnxCursor()) { qScreenDebug() << Q_FUNC_INFO; @@ -431,45 +432,59 @@ void QQnxScreen::addWindow(QQnxWindow *window) if (m_childWindows.contains(window)) return; - // Ensure that the desktop window is at the bottom of the zorder. - // If we do not do this then we may end up activating the desktop - // when the navigator service gets an event that our window group - // has been activated (see QQnxScreen::activateWindowGroup()). - // Such a situation would strangely break focus handling due to the - // invisible desktop widget window being layered on top of normal - // windows - if (window->window()->type() == Qt::Desktop) - m_childWindows.push_front(window); - else - m_childWindows.push_back(window); - updateHierarchy(); + if (window->window()->type() != Qt::CoverWindow) { + // Ensure that the desktop window is at the bottom of the zorder. + // If we do not do this then we may end up activating the desktop + // when the navigator service gets an event that our window group + // has been activated (see QQnxScreen::activateWindowGroup()). + // Such a situation would strangely break focus handling due to the + // invisible desktop widget window being layered on top of normal + // windows + if (window->window()->type() == Qt::Desktop) + m_childWindows.push_front(window); + else + m_childWindows.push_back(window); + updateHierarchy(); + } else { +#if !defined(Q_OS_BLACKBERRY_TABLET) + m_coverWindow = window; +#endif + } } void QQnxScreen::removeWindow(QQnxWindow *window) { qScreenDebug() << Q_FUNC_INFO << "window =" << window; - const int numWindowsRemoved = m_childWindows.removeAll(window); - if (numWindowsRemoved > 0) - updateHierarchy(); + if (window != m_coverWindow) { + const int numWindowsRemoved = m_childWindows.removeAll(window); + if (numWindowsRemoved > 0) + updateHierarchy(); + } else { + m_coverWindow = 0; + } } void QQnxScreen::raiseWindow(QQnxWindow *window) { qScreenDebug() << Q_FUNC_INFO << "window =" << window; - removeWindow(window); - m_childWindows.push_back(window); - updateHierarchy(); + if (window != m_coverWindow) { + removeWindow(window); + m_childWindows.push_back(window); + updateHierarchy(); + } } void QQnxScreen::lowerWindow(QQnxWindow *window) { qScreenDebug() << Q_FUNC_INFO << "window =" << window; - removeWindow(window); - m_childWindows.push_front(window); - updateHierarchy(); + if (window != m_coverWindow) { + removeWindow(window); + m_childWindows.push_front(window); + updateHierarchy(); + } } void QQnxScreen::updateHierarchy() @@ -652,6 +667,9 @@ void QQnxScreen::activateWindowGroup(const QByteArray &id) Q_FOREACH (QQnxWindow *childWindow, m_childWindows) childWindow->setExposed(true); + if (m_coverWindow) + m_coverWindow->setExposed(false); + QWindowSystemInterface::handleWindowActivated(window); } @@ -662,6 +680,9 @@ void QQnxScreen::deactivateWindowGroup(const QByteArray &id) if (!rootWindow() || id != rootWindow()->groupName()) return; + if (m_coverWindow) + m_coverWindow->setExposed(true); + Q_FOREACH (QQnxWindow *childWindow, m_childWindows) childWindow->setExposed(false); |