summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLionel Landwerlin <llandwerlin@gmail.com>2013-07-23 17:42:22 +0100
committerLionel Landwerlin <llandwerlin@gmail.com>2013-10-13 01:55:58 +0100
commit55840c626c1b634be5fb054127c40a0fcaefad72 (patch)
tree342d2324a7dc9ff052ec22fb959b40a274173f32
parentf0e56567174a224b49055ae765e580356e414908 (diff)
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
-rw-r--r--src/core/window.c77
1 files changed, 40 insertions, 37 deletions
diff --git a/src/core/window.c b/src/core/window.c
index 002e4c5f..c7c24951 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -9711,47 +9711,50 @@ meta_window_handle_mouse_grab_op_event (MetaWindow *window,
switch (xev->evtype)
{
case XI_ButtonRelease:
- 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 (xev->detail == 1)
{
- if (meta_grab_op_is_moving (window->display->grab_op))
- {
- if (window->tile_mode != META_TILE_NONE)
- meta_window_tile (window);
- else if (xev->root == window->screen->xroot)
- update_move (window,
- xev->mods.effective & ShiftMask,
- xev->root_x,
- xev->root_y);
- }
- else if (meta_grab_op_is_resizing (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 (xev->root == window->screen->xroot)
- update_resize (window,
- xev->mods.effective & ShiftMask,
- xev->root_x,
- xev->root_y,
- TRUE);
-
- /* If a tiled window has been dragged free with a
- * mouse resize without snapping back to the tiled
- * state, it will end up with an inconsistent tile
- * mode on mouse release; cleaning the mode earlier
- * would break the ability to snap back to the tiled
- * state, so we wait until mouse release.
- */
- update_tile_mode (window);
+ if (meta_grab_op_is_moving (window->display->grab_op))
+ {
+ if (window->tile_mode != META_TILE_NONE)
+ meta_window_tile (window);
+ else if (xev->root == window->screen->xroot)
+ update_move (window,
+ xev->mods.effective & ShiftMask,
+ xev->root_x,
+ xev->root_y);
+ }
+ else if (meta_grab_op_is_resizing (window->display->grab_op))
+ {
+ if (xev->root == window->screen->xroot)
+ update_resize (window,
+ xev->mods.effective & ShiftMask,
+ xev->root_x,
+ xev->root_y,
+ TRUE);
+
+ /* If a tiled window has been dragged free with a
+ * mouse resize without snapping back to the tiled
+ * state, it will end up with an inconsistent tile
+ * mode on mouse release; cleaning the mode earlier
+ * would break the ability to snap back to the tiled
+ * state, so we wait until mouse release.
+ */
+ update_tile_mode (window);
+ }
}
+ meta_display_end_grab_op (window->display, xev->time);
}
-
- meta_display_end_grab_op (window->display, xev->time);
break;
case XI_Motion: