From 7b4c7bda730abc8a3929c13d05b5c02b084139e3 Mon Sep 17 00:00:00 2001
From: Thomas McGuire <thomas.mcguire.qnx@kdab.com>
Date: Fri, 19 Apr 2013 16:44:02 +0200
Subject: [PATCH] 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>
---
 .../blackberry/common/windowgrabber.cpp       | 24 +++++++++++++++++++
 1 file changed, 24 insertions(+)

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);
-- 
GitLab