From 8a78353fa1f326267b40c23f31695951c467be1f Mon Sep 17 00:00:00 2001 From: LuisLiraC Date: Sun, 10 Mar 2024 16:18:06 -0600 Subject: Prioritize release events in `scrollable` --- widget/src/scrollable.rs | 38 ++++++++++++++++---------------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/widget/src/scrollable.rs b/widget/src/scrollable.rs index 4b916025..34312752 100644 --- a/widget/src/scrollable.rs +++ b/widget/src/scrollable.rs @@ -390,6 +390,21 @@ where ) }; + if matches!( + event, + Event::Mouse(mouse::Event::ButtonReleased(mouse::Button::Left)) + | Event::Touch( + touch::Event::FingerLifted { .. } + | touch::Event::FingerLost { .. } + ) + ) { + state.scroll_area_touched_at = None; + state.x_scroller_grabbed_at = None; + state.y_scroller_grabbed_at = None; + + return event_status; + } + if let event::Status::Captured = event_status { return event::Status::Captured; } @@ -479,10 +494,7 @@ where ); } } - touch::Event::FingerLifted { .. } - | touch::Event::FingerLost { .. } => { - state.scroll_area_touched_at = None; - } + _ => {} } event_status = event::Status::Captured; @@ -492,15 +504,6 @@ where if let Some(scroller_grabbed_at) = state.y_scroller_grabbed_at { match event { - Event::Mouse(mouse::Event::ButtonReleased( - mouse::Button::Left, - )) - | Event::Touch(touch::Event::FingerLifted { .. }) - | Event::Touch(touch::Event::FingerLost { .. }) => { - state.y_scroller_grabbed_at = None; - - event_status = event::Status::Captured; - } Event::Mouse(mouse::Event::CursorMoved { .. }) | Event::Touch(touch::Event::FingerMoved { .. }) => { if let Some(scrollbar) = scrollbars.y { @@ -572,15 +575,6 @@ where if let Some(scroller_grabbed_at) = state.x_scroller_grabbed_at { match event { - Event::Mouse(mouse::Event::ButtonReleased( - mouse::Button::Left, - )) - | Event::Touch(touch::Event::FingerLifted { .. }) - | Event::Touch(touch::Event::FingerLost { .. }) => { - state.x_scroller_grabbed_at = None; - - event_status = event::Status::Captured; - } Event::Mouse(mouse::Event::CursorMoved { .. }) | Event::Touch(touch::Event::FingerMoved { .. }) => { let Some(cursor_position) = cursor.position() else { -- cgit