Author: olivier Date: 2006-07-12 18:39:16 +0000 (Wed, 12 Jul 2006) New Revision: 22422
Modified: xfwm4/trunk/src/client.c Log: Fix a major issue with key/mouse grabs introduces in beta2, rework grabs and ungrabs, grab using last known event time, ungrab with current server time. Modified: xfwm4/trunk/src/client.c =================================================================== --- xfwm4/trunk/src/client.c 2006-07-12 13:30:54 UTC (rev 22421) +++ xfwm4/trunk/src/client.c 2006-07-12 18:39:16 UTC (rev 22422) @@ -3662,16 +3662,16 @@ 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 @@ } 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ { 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 @@ 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 @@ 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) { _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits