diff options
author | Olivier Fourdan <fourdan@xfce.org> | 2015-01-17 17:09:12 +0100 |
---|---|---|
committer | Olivier Fourdan <fourdan@xfce.org> | 2015-01-17 17:21:21 +0100 |
commit | 24c8f337bb62e8573ac7a9220480a68e2d7b7775 (patch) | |
tree | f86d498ff3e1030893f35284273efce97cbf3168 | |
parent | 1876e4c707e6edd8f1d30afc4847949099e4ea75 (diff) | |
download | xfwm4-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.c | 12 |
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 |