summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/qnx/qqnxscreen.cpp
diff options
context:
space:
mode:
authorBernd Weimer <bweimer@blackberry.com>2013-09-18 16:14:49 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-20 23:45:06 +0200
commit6a12da7fb3b78335ee4c39949381380b5a3325f9 (patch)
tree80b4ff1799dd794728651c53d147da9df994a05a /src/plugins/platforms/qnx/qqnxscreen.cpp
parent6b95130faa31307579cb3711cab2101d07d20823 (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.cpp63
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);