From ef82d8190d2faf4a142cd402ed4e07422771a4fc Mon Sep 17 00:00:00 2001 From: lenemter Date: Fri, 1 Nov 2024 11:37:23 +0300 Subject: [PATCH 1/2] DragDropAction: properly handle button release event --- lib/DragDropAction.vala | 76 +++++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 37 deletions(-) diff --git a/lib/DragDropAction.vala b/lib/DragDropAction.vala index 7e8e77baf..f15daf8f6 100644 --- a/lib/DragDropAction.vala +++ b/lib/DragDropAction.vala @@ -216,40 +216,6 @@ namespace Gala { return Clutter.EVENT_STOP; - case EventType.BUTTON_RELEASE: - case EventType.TOUCH_END: - if (!is_valid_touch_event (event)) { - return Clutter.EVENT_PROPAGATE; - } - - if (!dragging) { - float x, y, ex, ey; - event.get_coords (out ex, out ey); - actor.get_transformed_position (out x, out y); - - // release has happened within bounds of actor - if (clicked && x < ex && x + actor.width > ex && y < ey && y + actor.height > ey) { - actor_clicked (event.get_button ()); - } - - if (clicked) { - ungrab_actor (); - clicked = false; - } - - return Clutter.EVENT_STOP; - } else if (dragging) { - if (hovered != null) { - finish (); - hovered = null; - } else { - cancel (); - } - - return Clutter.EVENT_STOP; - } - break; - default: break; } @@ -298,7 +264,42 @@ namespace Gala { if (event.get_key_symbol () == Key.Escape) { cancel (); } - break; + + return Clutter.EVENT_STOP; + + case EventType.BUTTON_RELEASE: + case EventType.TOUCH_END: + if (!is_valid_touch_event (event)) { + return Clutter.EVENT_PROPAGATE; + } + + if (dragging) { + if (hovered != null) { + finish (); + hovered = null; + } else { + cancel (); + } + + return Clutter.EVENT_STOP; + } + + float x, y, ex, ey; + event.get_coords (out ex, out ey); + actor.get_transformed_position (out x, out y); + + // release has happened within bounds of actor + if (clicked && x < ex && x + actor.width > ex && y < ey && y + actor.height > ey) { + actor_clicked (event.get_button ()); + } + + if (clicked) { + ungrab_actor (); + clicked = false; + } + + return Clutter.EVENT_STOP; + case EventType.MOTION: case EventType.TOUCH_UPDATE: if (!is_valid_touch_event (event)) { @@ -338,6 +339,7 @@ namespace Gala { } } return Clutter.EVENT_STOP; + } else if (dragging) { handle.x -= last_x - x; handle.y -= last_y - y; @@ -468,11 +470,11 @@ namespace Gala { var type = event.get_type (); return ( + Meta.Util.is_wayland_compositor () || type != Clutter.EventType.TOUCH_BEGIN && type != Clutter.EventType.TOUCH_CANCEL && type != Clutter.EventType.TOUCH_END && - type != Clutter.EventType.TOUCH_UPDATE || - Meta.Util.is_wayland_compositor () + type != Clutter.EventType.TOUCH_UPDATE ); } } From d03cd1b2c29f28a6c2bb9848b30113ee56f396a0 Mon Sep 17 00:00:00 2001 From: lenemter Date: Fri, 1 Nov 2024 11:47:45 +0300 Subject: [PATCH 2/2] Fix lint --- lib/DragDropAction.vala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/DragDropAction.vala b/lib/DragDropAction.vala index f15daf8f6..9ae7e27f6 100644 --- a/lib/DragDropAction.vala +++ b/lib/DragDropAction.vala @@ -299,7 +299,7 @@ namespace Gala { } return Clutter.EVENT_STOP; - + case EventType.MOTION: case EventType.TOUCH_UPDATE: if (!is_valid_touch_event (event)) {