summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/qnx/qqnxwindow.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/qqnxwindow.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/qqnxwindow.cpp')
-rw-r--r--src/plugins/platforms/qnx/qqnxwindow.cpp26
1 files changed, 20 insertions, 6 deletions
diff --git a/src/plugins/platforms/qnx/qqnxwindow.cpp b/src/plugins/platforms/qnx/qqnxwindow.cpp
index a5e899aa7e..a129380575 100644
--- a/src/plugins/platforms/qnx/qqnxwindow.cpp
+++ b/src/plugins/platforms/qnx/qqnxwindow.cpp
@@ -51,13 +51,16 @@
#include <QtCore/QDebug>
-#include <errno.h>
-
#if defined(Q_OS_BLACKBERRY)
+#if !defined(Q_OS_BLACKBERRY_TABLET)
+#include "qqnxnavigatorcover.h"
+#endif
#include <sys/pps.h>
#include <bps/navigator.h>
#endif
+#include <errno.h>
+
#if defined(QQNXWINDOW_DEBUG)
#define qWindowDebug qDebug
#else
@@ -81,7 +84,8 @@ QQnxWindow::QQnxWindow(QWindow *window, screen_context_t context)
// Create child QNX window
errno = 0;
- if (static_cast<QQnxScreen *>(window->screen()->handle())->isPrimaryScreen()) {
+ if (static_cast<QQnxScreen *>(window->screen()->handle())->isPrimaryScreen()
+ && window->type() != Qt::CoverWindow) {
result = screen_create_window_type(&m_window, m_screenContext, SCREEN_CHILD_WINDOW);
} else {
result = screen_create_window(&m_window, m_screenContext);
@@ -352,7 +356,7 @@ void QQnxWindow::setScreen(QQnxScreen *platformScreen)
qFatal("QQnxWindow: failed to set window display, errno=%d", errno);
- if (m_screen->isPrimaryScreen()) {
+ if (m_screen->isPrimaryScreen() && window()->type() != Qt::CoverWindow) {
// Add window to display's window group
errno = 0;
result = screen_join_window_group(m_window, platformScreen->windowGroupName());
@@ -361,8 +365,7 @@ void QQnxWindow::setScreen(QQnxScreen *platformScreen)
Q_FOREACH (QQnxWindow *childWindow, m_childWindows) {
// Only subwindows and tooltips need necessarily be moved to another display with the window.
- if ((window()->type() & Qt::WindowType_Mask) == Qt::SubWindow ||
- (window()->type() & Qt::WindowType_Mask) == Qt::ToolTip)
+ if (window()->type() == Qt::SubWindow || window()->type() == Qt::ToolTip)
childWindow->setScreen(platformScreen);
}
}
@@ -558,6 +561,17 @@ void QQnxWindow::initWindow()
setScreen(static_cast<QQnxScreen *>(window()->screen()->handle()));
+ if (window()->type() == Qt::CoverWindow) {
+#if !defined(Q_OS_BLACKBERRY_TABLET)
+ screen_set_window_property_pv(m_screen->rootWindow()->nativeHandle(),
+ SCREEN_PROPERTY_ALTERNATE_WINDOW, (void**)&m_window);
+#if defined(Q_OS_BLACKBERRY)
+ m_cover.reset(new QQnxNavigatorCover);
+#endif
+#endif // Q_OS_BLACKBERRY_TABLET
+ m_exposed = false;
+ }
+
// Add window to plugin's window mapper
QQnxIntegration::addWindow(m_window, window());