Sune Vuorela wrote, On 2006-10-10 06:46:
Hi!

Upstream have now proposed a patch (which I am attaching)

I have rebuild kwin using this patch.

It is as usual on:
http://mirror.pusling.com/kwin_3.5.5-1_i386.deb

and now it has md5:
$ md5sum kwin_3.5.5-1_i386.deb
1a7ef28a39d59be36f87fa30a2e040ae  kwin_3.5.5-1_i386.deb

Please test quickly and report back if it fixes it.
(if needed on another arch, just drop the patch in debian/patches and build)

It appears to be working correctly thanks! (-:

Arthur.


Thank you

/Sune


------------------------------------------------------------------------

--- kwin/client.cpp.orig        2006-10-09 13:17:39.000000000 +0200
+++ kwin/client.cpp     2006-10-09 13:17:55.000000000 +0200
@@ -477,17 +477,30 @@
     // calls it or when the decoration is created/destroyed
if( Shape::version() >= 0x11 ) // 1.1, has input shape support
-        { // there appears to be no way to find out if a window has input
-          // shape set or not, so always set propagate the input shape
-          // (it's the same like the bounding shape by default)
-        XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput, 0, 0,
+        { // There appears to be no way to find out if a window has input
+          // shape set or not, so always propagate the input shape
+          // (it's the same like the bounding shape by default).
+          // Also, build the shape using a helper window, not directly
+          // in the frame window, because the sequence set-shape-to-frame,
+          // remove-shape-of-client, add-input-shape-of-client has the problem
+          // that after the second step there's a hole in the input shape
+          // until the real shape of the client is added and that can make
+          // the window lose focus (which is a problem with mouse focus 
policies)
+        static Window helper_window = None;
+        if( helper_window == None )
+            helper_window = XCreateSimpleWindow( qt_xdisplay(), qt_xrootwin(),
+                0, 0, 1, 1, 0, 0, 0 );
+        XResizeWindow( qt_xdisplay(), helper_window, width(), height());
+        XShapeCombineShape( qt_xdisplay(), helper_window, ShapeInput, 0, 0,
                            frameId(), ShapeBounding, ShapeSet );
-        XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput,
+        XShapeCombineShape( qt_xdisplay(), helper_window, ShapeInput,
                            clientPos().x(), clientPos().y(),
                            window(), ShapeBounding, ShapeSubtract );
-        XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput,
+        XShapeCombineShape( qt_xdisplay(), helper_window, ShapeInput,
                            clientPos().x(), clientPos().y(),
                            window(), ShapeInput, ShapeUnion );
+        XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput, 0, 0,
+                           helper_window, ShapeInput, ShapeSet );
         }
     }


--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to