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:
parent
1f93ae8c3f
commit
592f17729c
1 changed files with 29 additions and 35 deletions
|
|
@ -504,46 +504,40 @@ fn update<Message: Clone, Theme, Renderer>(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(message) = widget.on_release.as_ref() {
|
match event {
|
||||||
match event {
|
Event::Mouse(mouse::Event::ButtonReleased(mouse::Button::Left))
|
||||||
Event::Mouse(mouse::Event::ButtonReleased(mouse::Button::Left))
|
| Event::Touch(touch::Event::FingerLifted { .. }) => {
|
||||||
| Event::Touch(touch::Event::FingerLifted { .. }) => {
|
state.drag_initiated = None;
|
||||||
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.publish(message.clone());
|
||||||
shell.capture_event();
|
shell.capture_event();
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
Event::Mouse(mouse::Event::ButtonReleased(
|
}
|
||||||
mouse::Button::Right,
|
Event::Mouse(mouse::Event::ButtonReleased(mouse::Button::Middle)) => {
|
||||||
)) => {
|
if let Some(message) = widget.on_middle_release.as_ref() {
|
||||||
if let Some(message) = widget.on_right_release.as_ref() {
|
shell.publish(message.clone());
|
||||||
shell.publish(message.clone());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Event::Mouse(mouse::Event::ButtonPressed(
|
}
|
||||||
mouse::Button::Middle,
|
Event::Mouse(mouse::Event::WheelScrolled { delta }) => {
|
||||||
)) => {
|
if let Some(on_scroll) = widget.on_scroll.as_ref() {
|
||||||
if let Some(message) = widget.on_middle_press.as_ref() {
|
shell.publish(on_scroll(*delta));
|
||||||
shell.publish(message.clone());
|
shell.capture_event();
|
||||||
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 Some(on_scroll) = widget.on_scroll.as_ref() {
|
||||||
if let Event::Mouse(mouse::Event::WheelScrolled { delta }) = event {
|
if let Event::Mouse(mouse::Event::WheelScrolled { delta }) = event {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue