From c186ca1acb112b2bbf62b750d992065fa0b3e595 Mon Sep 17 00:00:00 2001 From: rhysd Date: Thu, 23 Jan 2025 22:16:11 +0900 Subject: [PATCH] Do not capture released event inside `image::Viewer` when mouse is not dragged --- widget/src/image/viewer.rs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/widget/src/image/viewer.rs b/widget/src/image/viewer.rs index 20a7955f3a..131fd0784d 100644 --- a/widget/src/image/viewer.rs +++ b/widget/src/image/viewer.rs @@ -231,9 +231,20 @@ where Event::Mouse(mouse::Event::ButtonReleased(mouse::Button::Left)) => { let state = tree.state.downcast_mut::(); - if state.cursor_grabbed_at.is_some() { + if let Some(grab_start) = state.cursor_grabbed_at { state.cursor_grabbed_at = None; - shell.capture_event(); + + let dragged = cursor + .position_over(bounds) + .map(|grab_end| { + (grab_start.x - grab_end.x).abs() >= 1.0 + || (grab_start.y - grab_end.y).abs() >= 1.0 + }) + .unwrap_or(true); + + if dragged { + shell.capture_event(); + } } } Event::Mouse(mouse::Event::CursorMoved { position }) => {