1
0
Fork 0

window: don't process unrelated release events

When processing button events related to moving/resizing the window,
only the first button should be considered.

https://bugzilla.gnome.org/show_bug.cgi?id=704759
This commit is contained in:
Lionel Landwerlin 2013-07-23 17:42:22 +01:00
parent c3f28b9cdb
commit 1fa56bd7e0

View file

@ -10075,47 +10075,50 @@ meta_window_handle_mouse_grab_op_event (MetaWindow *window,
switch (xev->evtype) switch (xev->evtype)
{ {
case XI_ButtonRelease: case XI_ButtonRelease:
meta_display_check_threshold_reached (window->display, if (xev->detail == 1)
xev->root_x,
xev->root_y);
/* If the user was snap moving then ignore the button release
* because they may have let go of shift before releasing the
* mouse button and they almost certainly do not want a
* non-snapped movement to occur from the button release.
*/
if (!window->display->grab_last_user_action_was_snap)
{ {
if (meta_grab_op_is_moving (window->display->grab_op)) meta_display_check_threshold_reached (window->display,
xev->root_x,
xev->root_y);
/* If the user was snap moving then ignore the button
* release because they may have let go of shift before
* releasing the mouse button and they almost certainly do
* not want a non-snapped movement to occur from the button
* release.
*/
if (!window->display->grab_last_user_action_was_snap)
{ {
if (window->tile_mode != META_TILE_NONE) if (meta_grab_op_is_moving (window->display->grab_op))
meta_window_tile (window); {
else if (xev->root == window->screen->xroot) if (window->tile_mode != META_TILE_NONE)
update_move (window, meta_window_tile (window);
xev->mods.effective & ShiftMask, else if (xev->root == window->screen->xroot)
xev->root_x, update_move (window,
xev->root_y); xev->mods.effective & ShiftMask,
} xev->root_x,
else if (meta_grab_op_is_resizing (window->display->grab_op)) xev->root_y);
{ }
if (xev->root == window->screen->xroot) else if (meta_grab_op_is_resizing (window->display->grab_op))
update_resize (window, {
xev->mods.effective & ShiftMask, if (xev->root == window->screen->xroot)
xev->root_x, update_resize (window,
xev->root_y, xev->mods.effective & ShiftMask,
TRUE); xev->root_x,
xev->root_y,
TRUE);
/* If a tiled window has been dragged free with a /* If a tiled window has been dragged free with a
* mouse resize without snapping back to the tiled * mouse resize without snapping back to the tiled
* state, it will end up with an inconsistent tile * state, it will end up with an inconsistent tile
* mode on mouse release; cleaning the mode earlier * mode on mouse release; cleaning the mode earlier
* would break the ability to snap back to the tiled * would break the ability to snap back to the tiled
* state, so we wait until mouse release. * state, so we wait until mouse release.
*/ */
update_tile_mode (window); update_tile_mode (window);
}
} }
meta_display_end_grab_op (window->display, xev->time);
} }
meta_display_end_grab_op (window->display, xev->time);
break; break;
case XI_Motion: case XI_Motion: