mouse_area: Fix on_drag behavior without on_release

Mouse/touch release events should end the drag even if there's not an
`on_release` callback.

This was causing https://github.com/pop-os/cosmic-comp/issues/1071.
This commit is contained in:
Ian Douglas Scott 2025-01-28 11:50:44 -08:00 committed by Ashley Wulber
parent 1f93ae8c3f
commit 592f17729c
No known key found for this signature in database
GPG key ID: 5216D4F46A90A820

View file

@ -504,46 +504,40 @@ fn update<Message: Clone, Theme, Renderer>(
}
}
if let Some(message) = widget.on_release.as_ref() {
match event {
Event::Mouse(mouse::Event::ButtonReleased(mouse::Button::Left))
| Event::Touch(touch::Event::FingerLifted { .. }) => {
state.drag_initiated = None;
match event {
Event::Mouse(mouse::Event::ButtonReleased(mouse::Button::Left))
| Event::Touch(touch::Event::FingerLifted { .. }) => {
state.drag_initiated = None;
if let Some(message) = widget.on_release.as_ref() {
shell.publish(message.clone());
}
shell.capture_event();
return;
}
Event::Mouse(mouse::Event::ButtonReleased(mouse::Button::Right)) => {
if let Some(message) = widget.on_right_release.as_ref() {
shell.publish(message.clone());
}
}
Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Middle)) => {
if let Some(message) = widget.on_middle_press.as_ref() {
shell.publish(message.clone());
shell.capture_event();
return;
}
Event::Mouse(mouse::Event::ButtonReleased(
mouse::Button::Right,
)) => {
if let Some(message) = widget.on_right_release.as_ref() {
shell.publish(message.clone());
}
}
Event::Mouse(mouse::Event::ButtonReleased(mouse::Button::Middle)) => {
if let Some(message) = widget.on_middle_release.as_ref() {
shell.publish(message.clone());
}
Event::Mouse(mouse::Event::ButtonPressed(
mouse::Button::Middle,
)) => {
if let Some(message) = widget.on_middle_press.as_ref() {
shell.publish(message.clone());
shell.capture_event();
}
}
Event::Mouse(mouse::Event::WheelScrolled { delta }) => {
if let Some(on_scroll) = widget.on_scroll.as_ref() {
shell.publish(on_scroll(*delta));
shell.capture_event();
}
Event::Mouse(mouse::Event::ButtonReleased(
mouse::Button::Middle,
)) => {
if let Some(message) = widget.on_middle_release.as_ref() {
shell.publish(message.clone());
}
}
Event::Mouse(mouse::Event::WheelScrolled { delta }) => {
if let Some(on_scroll) = widget.on_scroll.as_ref() {
shell.publish(on_scroll(*delta));
shell.capture_event();
}
}
_ => {}
};
}
}
_ => {}
};
if let Some(on_scroll) = widget.on_scroll.as_ref() {
if let Event::Mouse(mouse::Event::WheelScrolled { delta }) = event {