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
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits