Fix unwanted mouse grab op on rapid click-and-release

This commit is contained in:
Elijah Newren 2004-04-16 03:38:19 +00:00
parent c60ec1802a
commit 4b9a23e8eb
2 changed files with 14 additions and 6 deletions

View File

@ -1,3 +1,11 @@
2004-04-15 Elijah Newren <newren@math.utah.edu>
* src/display.c: Prevent unwanted grab op from occurring.
Previously, for some people under certain conditions, clicking and
releasing the mouse button rapidly enough would result in Metacity
starting a move operation due to ignoring the button release.
This should fix that problem (it does for me). See bug 136587.
2004-04-11 Rob Adams <readams@readams.net> 2004-04-11 Rob Adams <readams@readams.net>
* configure.in: Make the --enable-xinerama switch work properly. * configure.in: Make the --enable-xinerama switch work properly.

View File

@ -1270,7 +1270,7 @@ event_callback (XEvent *event,
if (display->grab_op != META_GRAB_OP_NONE && if (display->grab_op != META_GRAB_OP_NONE &&
display->grab_window != NULL && display->grab_window != NULL &&
event->xany.serial > display->grab_start_serial && event->xany.serial >= display->grab_start_serial &&
grab_op_is_mouse (display->grab_op)) grab_op_is_mouse (display->grab_op))
meta_window_handle_mouse_grab_op_event (display->grab_window, event); meta_window_handle_mouse_grab_op_event (display->grab_window, event);
} }
@ -1337,7 +1337,7 @@ event_callback (XEvent *event,
if ((window && if ((window &&
grab_op_is_mouse (display->grab_op) && grab_op_is_mouse (display->grab_op) &&
display->grab_button != (int) event->xbutton.button && display->grab_button != (int) event->xbutton.button &&
event->xany.serial > display->grab_start_serial && event->xany.serial >= display->grab_start_serial &&
display->grab_window == window) || display->grab_window == window) ||
grab_op_is_keyboard (display->grab_op)) grab_op_is_keyboard (display->grab_op))
{ {
@ -1498,19 +1498,19 @@ event_callback (XEvent *event,
break; break;
case ButtonRelease: case ButtonRelease:
if (display->grab_window == window && if (display->grab_window == window &&
event->xany.serial > display->grab_start_serial && event->xany.serial >= display->grab_start_serial &&
grab_op_is_mouse (display->grab_op)) grab_op_is_mouse (display->grab_op))
meta_window_handle_mouse_grab_op_event (window, event); meta_window_handle_mouse_grab_op_event (window, event);
break; break;
case MotionNotify: case MotionNotify:
if (display->grab_window == window && if (display->grab_window == window &&
event->xany.serial > display->grab_start_serial && event->xany.serial >= display->grab_start_serial &&
grab_op_is_mouse (display->grab_op)) grab_op_is_mouse (display->grab_op))
meta_window_handle_mouse_grab_op_event (window, event); meta_window_handle_mouse_grab_op_event (window, event);
break; break;
case EnterNotify: case EnterNotify:
if (display->grab_window == window && if (display->grab_window == window &&
event->xany.serial > display->grab_start_serial && event->xany.serial >= display->grab_start_serial &&
grab_op_is_mouse (display->grab_op)) grab_op_is_mouse (display->grab_op))
meta_window_handle_mouse_grab_op_event (window, event); meta_window_handle_mouse_grab_op_event (window, event);
/* do this even if window->has_focus to avoid races */ /* do this even if window->has_focus to avoid races */
@ -1574,7 +1574,7 @@ event_callback (XEvent *event,
break; break;
case LeaveNotify: case LeaveNotify:
if (display->grab_window == window && if (display->grab_window == window &&
event->xany.serial > display->grab_start_serial && event->xany.serial >= display->grab_start_serial &&
grab_op_is_mouse (display->grab_op)) grab_op_is_mouse (display->grab_op))
meta_window_handle_mouse_grab_op_event (window, event); meta_window_handle_mouse_grab_op_event (window, event);
else if (window != NULL) else if (window != NULL)