summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorThomas McGuire <thomas.mcguire.qnx@kdab.com>2013-04-19 16:44:02 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-04-19 17:24:23 +0200
commit7b4c7bda730abc8a3929c13d05b5c02b084139e3 (patch)
tree505e0dde3d5fab17be67e5ff8f660bc92749d69d /src
parentb315d3e5cd7ca58e0f9e4447f165b5a9c8e96d17 (diff)
Playbook: Work around failing screen_read_window()
Change-Id: Ie029585b3ac1420fe461523b67aa8b65193e23b0 Reviewed-by: Sean Harmer <sean.harmer@kdab.com> Reviewed-by: Mehdi Fekari <mfekari@rim.com>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/blackberry/common/windowgrabber.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/plugins/blackberry/common/windowgrabber.cpp b/src/plugins/blackberry/common/windowgrabber.cpp
index d02e022aa..db070d8e5 100644
--- a/src/plugins/blackberry/common/windowgrabber.cpp
+++ b/src/plugins/blackberry/common/windowgrabber.cpp
@@ -87,6 +87,30 @@ void WindowGrabber::start()
{
int result = 0;
+#ifdef Q_OS_BLACKBERRY_TABLET
+
+ // HACK: On the Playbook, screen_read_window() will fail for invisible windows.
+ // To workaround this, make the window visible again, but set a global
+ // alpha of less than 255. The global alpha makes the window completely invisible
+ // (due to a bug?), but screen_read_window() will work again.
+
+ errno = 0;
+ int val = 200; // anything less than 255
+ result = screen_set_window_property_iv(m_window, SCREEN_PROPERTY_GLOBAL_ALPHA, &val);
+ if (result != 0) {
+ qWarning() << "WindowGrabber: unable to set global alpha:" << strerror(errno);
+ return;
+ }
+
+ errno = 0;
+ val = 1;
+ result = screen_set_window_property_iv(m_window, SCREEN_PROPERTY_VISIBLE, &val);
+ if (result != 0) {
+ qWarning() << "WindowGrabber: unable to make window visible:" << strerror(errno);
+ return;
+ }
+#endif
+
result = screen_create_context(&m_screenContext, SCREEN_APPLICATION_CONTEXT);
if (result != 0) {
qWarning() << "WindowGrabber: cannot create screen context:" << strerror(errno);