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/qqnxwindow.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/qqnxwindow.cpp')
-rw-r--r-- | src/plugins/platforms/qnx/qqnxwindow.cpp | 26 |
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()); |