Author: olivier
Date: 2007-09-07 22:18:04 +0000 (Fri, 07 Sep 2007)
New Revision: 26054

Modified:
   xfwm4/trunk/src/client.c
   xfwm4/trunk/src/focus.c
   xfwm4/trunk/src/keyboard.c
Log:
Fix wrong focus fallback if pending focus window disappears. Allow move/resize 
using the mouse even if the keyboard grab fails (bug #3535).

Modified: xfwm4/trunk/src/client.c
===================================================================
--- xfwm4/trunk/src/client.c    2007-09-07 18:37:47 UTC (rev 26053)
+++ xfwm4/trunk/src/client.c    2007-09-07 22:18:04 UTC (rev 26054)
@@ -4295,12 +4295,21 @@
     g2 = myScreenGrabPointer (screen_info, ButtonMotionMask | 
ButtonReleaseMask,
                               myDisplayGetCursorMove (display_info),
                               myDisplayGetCurrentTime (display_info));
-    if (!g1 || !g2)
+    if (passdata.use_keys && !g1)
     {
-        TRACE ("grab failed in clientMove");
+        TRACE ("keyboard grab failed in clientMove");
 
         gdk_beep ();
         myScreenUngrabKeyboard (screen_info);
+
+        return;
+    }
+
+    if (!g2)
+    {
+        TRACE ("button grab failed in clientMove");
+
+        gdk_beep ();
         myScreenUngrabPointer (screen_info);
 
         return;
@@ -4363,7 +4372,10 @@
     }
     clientConfigure (c, &wc, changes, NO_CFG_FLAG);
 
-    myScreenUngrabKeyboard (screen_info);
+    if (g1)
+    {
+        myScreenUngrabKeyboard (screen_info);
+    }
     if (!passdata.released)
     {
         /* If this is a drag-move, wait for the button to be released.
@@ -4840,12 +4852,21 @@
                               myDisplayGetCursorResize(display_info, 
passdata.corner),
                               myDisplayGetCurrentTime (display_info));
 
-    if (!g1 || !g2)
+    if (passdata.use_keys && !g1)
     {
-        TRACE ("grab failed in clientResize");
+        TRACE ("keyboard grab failed in clientResize");
 
         gdk_beep ();
         myScreenUngrabKeyboard (screen_info);
+
+        return;
+    }
+
+    if (!g2)
+    {
+        TRACE ("button grab failed in clientResize");
+
+        gdk_beep ();
         myScreenUngrabPointer (screen_info);
 
         return;
@@ -4910,7 +4931,10 @@
     c->xsync_waiting = FALSE;
 #endif /* HAVE_XSYNC */
 
-    myScreenUngrabKeyboard (screen_info);
+    if (g1)
+    {
+        myScreenUngrabKeyboard (screen_info);
+    }
     if (!passdata.released)
     {
         /* If this is a drag-resize, wait for the button to be released.

Modified: xfwm4/trunk/src/focus.c
===================================================================
--- xfwm4/trunk/src/focus.c     2007-09-07 18:37:47 UTC (rev 26053)
+++ xfwm4/trunk/src/focus.c     2007-09-07 22:18:04 UTC (rev 26054)
@@ -305,12 +305,12 @@
     new_focus = NULL;
     current_focus = client_focus;
     c2 = NULL;
-
+#if 0
     if (pending_focus)
     {
         current_focus = pending_focus;
     }
-
+#endif
     if ((c || current_focus) && (c != current_focus))
     {
         return;

Modified: xfwm4/trunk/src/keyboard.c
===================================================================
--- xfwm4/trunk/src/keyboard.c  2007-09-07 18:37:47 UTC (rev 26053)
+++ xfwm4/trunk/src/keyboard.c  2007-09-07 22:18:04 UTC (rev 26054)
@@ -160,50 +160,50 @@
 
     TRACE ("entering grabKey");
 
-    status=GrabSuccess;
+    status = GrabSuccess;
     if (key->keycode)
     {
         if (key->modifier == 0)
         {
             status |=
-                XGrabKey (dpy, key->keycode, AnyModifier, w, FALSE,
-                                        GrabModeAsync, GrabModeSync);
+                XGrabKey (dpy, key->keycode, AnyModifier, w,
+                                        TRUE, GrabModeAsync, GrabModeSync);
         }
         else
         {
             /* Here we grab all combinations of well known modifiers */
             status |=
                 XGrabKey (dpy, key->keycode,
-                                        key->modifier, w, FALSE,
-                                        GrabModeAsync, GrabModeSync);
+                                        key->modifier, w,
+                                        TRUE, GrabModeAsync, GrabModeSync);
             status |=
                 XGrabKey (dpy, key->keycode,
                                         key->modifier | ScrollLockMask, w,
-                                        FALSE, GrabModeAsync, GrabModeSync);
+                                        TRUE, GrabModeAsync, GrabModeSync);
             status |=
                 XGrabKey (dpy, key->keycode,
                                         key->modifier | NumLockMask, w,
-                                        FALSE, GrabModeAsync, GrabModeSync);
+                                        TRUE, GrabModeAsync, GrabModeSync);
             status |=
                 XGrabKey (dpy, key->keycode,
                                         key->modifier | LockMask, w,
-                                        FALSE, GrabModeAsync, GrabModeSync);
+                                        TRUE, GrabModeAsync, GrabModeSync);
             status |=
                 XGrabKey (dpy, key->keycode,
-                                        key->modifier | ScrollLockMask | 
NumLockMask, w, FALSE,
-                                        GrabModeAsync, GrabModeSync);
+                                        key->modifier | ScrollLockMask | 
NumLockMask, w,
+                                        TRUE, GrabModeAsync, GrabModeSync);
             status |=
                 XGrabKey (dpy, key->keycode,
-                                        key->modifier | ScrollLockMask | 
LockMask, w, FALSE,
-                                        GrabModeAsync, GrabModeSync);
+                                        key->modifier | ScrollLockMask | 
LockMask, w,
+                                        TRUE, GrabModeAsync, GrabModeSync);
             status |=
                 XGrabKey (dpy, key->keycode,
-                                        key->modifier | LockMask | 
NumLockMask, w, FALSE,
-                                        GrabModeAsync, GrabModeSync);
+                                        key->modifier | LockMask | 
NumLockMask, w,
+                                        TRUE, GrabModeAsync, GrabModeSync);
             status |=
                 XGrabKey (dpy, key->keycode,
-                                        key->modifier | ScrollLockMask | 
LockMask | NumLockMask,
-                                        w, FALSE, GrabModeAsync, GrabModeSync);
+                                        key->modifier | ScrollLockMask | 
LockMask | NumLockMask, w,
+                                        TRUE, GrabModeAsync, GrabModeSync);
         }
     }
 
@@ -225,7 +225,7 @@
 
     TRACE ("entering grabButton");
 
-    status=GrabSuccess;
+    status = GrabSuccess;
     if (modifier == AnyModifier)
     {
         status |=

_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to