diff --git a/src/client.c b/src/client.c index efed9f3056ad1e71f76401e07eccbdb3b1f5acfd..30860d12249c19a8a8d47ba48d835287ffdd9b55 100644 --- a/src/client.c +++ b/src/client.c @@ -3662,16 +3662,16 @@ clientMove (Client * c, XEvent * ev) cursor = myDisplayGetCursorMove(display_info); getMouseXY (screen_info, screen_info->xroot, &passdata.mx, &passdata.my); } - g1 = myScreenGrabKeyboard (screen_info, CurrentTime); + g1 = myScreenGrabKeyboard (screen_info, myDisplayGetCurrentTime (display_info)); g2 = myScreenGrabPointer (screen_info, ButtonMotionMask | ButtonReleaseMask, - cursor, CurrentTime); + cursor, myDisplayGetCurrentTime (display_info)); if (!g1 || !g2) { TRACE ("grab failed in clientMove"); gdk_beep (); - myScreenUngrabKeyboard (screen_info, CurrentTime); - myScreenUngrabPointer (screen_info, CurrentTime); + myScreenUngrabKeyboard (screen_info, myDisplayGetCurrentTime (display_info)); + myScreenUngrabPointer (screen_info, myDisplayGetCurrentTime (display_info)); return; } @@ -3732,7 +3732,7 @@ clientMove (Client * c, XEvent * ev) } clientConfigure (c, &wc, changes, NO_CFG_FLAG); - myScreenUngrabKeyboard (screen_info, myDisplayGetCurrentTime (display_info)); + myScreenUngrabKeyboard (screen_info, CurrentTime); if (!passdata.released) { /* If this is a drag-move, wait for the button to be released. @@ -3742,7 +3742,7 @@ clientMove (Client * c, XEvent * ev) gtk_main (); eventFilterPop (display_info->xfilter); } - myScreenUngrabPointer (screen_info, myDisplayGetCurrentTime (display_info)); + myScreenUngrabPointer (screen_info, CurrentTime); if (passdata.grab && screen_info->params->box_move) { myDisplayUngrabServer (display_info); @@ -4171,18 +4171,18 @@ clientResize (Client * c, int corner, XEvent * ev) getMouseXY (screen_info, screen_info->xroot, &passdata.mx, &passdata.my); } - g1 = myScreenGrabKeyboard (screen_info, CurrentTime); + g1 = myScreenGrabKeyboard (screen_info, myDisplayGetCurrentTime (display_info)); g2 = myScreenGrabPointer (screen_info, ButtonMotionMask | ButtonReleaseMask, myDisplayGetCursorResize(display_info, passdata.corner), - CurrentTime); + myDisplayGetCurrentTime (display_info)); if (!g1 || !g2) { TRACE ("grab failed in clientResize"); gdk_beep (); - myScreenUngrabKeyboard (screen_info, CurrentTime); - myScreenUngrabPointer (screen_info, CurrentTime); + myScreenUngrabKeyboard (screen_info, myDisplayGetCurrentTime (display_info)); + myScreenUngrabPointer (screen_info, myDisplayGetCurrentTime (display_info)); return; } @@ -4243,7 +4243,7 @@ clientResize (Client * c, int corner, XEvent * ev) wc.height = c->height; clientConfigure (c, &wc, CWX | CWY | CWHeight | CWWidth, CFG_NOTIFY); - myScreenUngrabKeyboard (screen_info, myDisplayGetCurrentTime (display_info)); + myScreenUngrabKeyboard (screen_info, CurrentTime); if (!passdata.released) { /* If this is a drag-resize, wait for the button to be released. @@ -4253,7 +4253,7 @@ clientResize (Client * c, int corner, XEvent * ev) gtk_main (); eventFilterPop (display_info->xfilter); } - myScreenUngrabPointer (screen_info, myDisplayGetCurrentTime (display_info)); + myScreenUngrabPointer (screen_info, CurrentTime); if (passdata.grab && screen_info->params->box_resize) { myDisplayUngrabServer (display_info); @@ -4316,6 +4316,7 @@ clientCycle_event_filter (XEvent * xevent, gpointer data) if (key_pressed) { Client *c2 = NULL; + /* If KEY_CYCLE_WINDOWS has Shift, then do not reverse */ if (!(modifier & ShiftMask) && (xevent->xkey.state & ShiftMask)) { @@ -4332,6 +4333,12 @@ clientCycle_event_filter (XEvent * xevent, gpointer data) c = c2; passdata->c = c; } + + /* If last key press event had not our modifier pressed, finish cycling */ + if (!(xevent->xkey.state & modifier)) + { + cycling = FALSE; + } } if (c) @@ -4348,7 +4355,8 @@ clientCycle_event_filter (XEvent * xevent, gpointer data) { int keysym = XLookupKeysym (&xevent->xkey, 0); - if (IsModifierKey(keysym) && (keysym != XK_Shift_L) && (keysym != XK_Shift_R)) + if (!(xevent->xkey.state & modifier) || + (IsModifierKey(keysym) && (keysym != XK_Shift_L) && (keysym != XK_Shift_R))) { cycling = FALSE; } @@ -4388,16 +4396,16 @@ clientCycle (Client * c, XEvent * ev) screen_info = c->screen_info; display_info = screen_info->display_info; - g1 = myScreenGrabKeyboard (screen_info, CurrentTime); - g2 = myScreenGrabPointer (screen_info, NoEventMask, None, CurrentTime); + g1 = myScreenGrabKeyboard (screen_info, myDisplayGetCurrentTime (display_info)); + g2 = myScreenGrabPointer (screen_info, NoEventMask, None, myDisplayGetCurrentTime (display_info)); if (!g1 || !g2) { TRACE ("grab failed in clientCycle"); gdk_beep (); - myScreenUngrabKeyboard (screen_info, CurrentTime); - myScreenUngrabPointer (screen_info, CurrentTime); + myScreenUngrabKeyboard (screen_info, myDisplayGetCurrentTime (display_info)); + myScreenUngrabPointer (screen_info, myDisplayGetCurrentTime (display_info)); return; } @@ -4445,8 +4453,8 @@ clientCycle (Client * c, XEvent * ev) tabwinDestroy (passdata.tabwin); g_free (passdata.tabwin); } - myScreenUngrabKeyboard (screen_info, myDisplayGetCurrentTime (display_info)); - myScreenUngrabPointer (screen_info, myDisplayGetCurrentTime (display_info)); + myScreenUngrabKeyboard (screen_info, CurrentTime); + myScreenUngrabPointer (screen_info, CurrentTime); if (passdata.c) {