summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier Fourdan <fourdan@xfce.org>2015-01-17 17:09:12 +0100
committerOlivier Fourdan <fourdan@xfce.org>2015-01-17 17:21:21 +0100
commit24c8f337bb62e8573ac7a9220480a68e2d7b7775 (patch)
treef86d498ff3e1030893f35284273efce97cbf3168
parent1876e4c707e6edd8f1d30afc4847949099e4ea75 (diff)
downloadxfwm4-24c8f337bb62e8573ac7a9220480a68e2d7b7775.tar.gz
Allow cycling even without the pointer grab
Bug: 11463 This allows cycling during a drag and drop. Signed-off-by: Olivier Fourdan <fourdan@xfce.org>
-rw-r--r--src/cycle.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/cycle.c b/src/cycle.c
index 1f1dccc18..1df14df14 100644
--- a/src/cycle.c
+++ b/src/cycle.c
@@ -375,6 +375,8 @@ clientCycleEventFilter (XEvent * xevent, gpointer data)
c = c2;
}
break;
+ case ButtonRelease:
+ break;
case EnterNotify:
case LeaveNotify:
/* Track whether the pointer is inside one of the tab-windows */
@@ -492,8 +494,8 @@ clientCycle (Client * c, XKeyEvent * ev)
g1 = myScreenGrabKeyboard (screen_info, ev->time);
g2 = myScreenGrabPointer (screen_info, TRUE, LeaveWindowMask, None, ev->time);
-
- if (!g1 || !g2)
+ /* Grabbing the pointer may fail e.g. if the user is doing a drag'n drop */
+ if (!g1)
{
TRACE ("grab failed in clientCycle");
@@ -545,7 +547,11 @@ clientCycle (Client * c, XKeyEvent * ev)
}
myScreenUngrabKeyboard (screen_info, myDisplayGetCurrentTime (display_info));
- myScreenUngrabPointer (screen_info, myDisplayGetCurrentTime (display_info));
+ if (g2)
+ {
+ /* If we succeeded in grabbing the pointer, release it */
+ myScreenUngrabPointer (screen_info, myDisplayGetCurrentTime (display_info));
+ }
}
gboolean