fix(segmented_button): ignore button release / finger lifted events when dragged out of target
This commit is contained in:
parent
508753ae69
commit
a234a45ea6
1 changed files with 20 additions and 3 deletions
|
|
@ -592,6 +592,7 @@ where
|
||||||
wheel_timestamp: Default::default(),
|
wheel_timestamp: Default::default(),
|
||||||
dnd_state: Default::default(),
|
dnd_state: Default::default(),
|
||||||
fingers_pressed: Default::default(),
|
fingers_pressed: Default::default(),
|
||||||
|
pressed_item: None,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -918,11 +919,25 @@ where
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(on_activate) = self.on_activate.as_ref() {
|
if let Some(on_activate) = self.on_activate.as_ref() {
|
||||||
if let Event::Mouse(mouse::Event::ButtonReleased(mouse::Button::Left))
|
if let Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left))
|
||||||
|
| Event::Touch(touch::Event::FingerPressed { .. }) = event
|
||||||
|
{
|
||||||
|
state.pressed_item = Some(Item::Tab(key));
|
||||||
|
} else if let Event::Mouse(mouse::Event::ButtonReleased(
|
||||||
|
mouse::Button::Left,
|
||||||
|
))
|
||||||
| Event::Touch(touch::Event::FingerLifted { .. }) = event
|
| Event::Touch(touch::Event::FingerLifted { .. }) = event
|
||||||
{
|
{
|
||||||
shell.publish(on_activate(key));
|
let mut can_activate = true;
|
||||||
return event::Status::Captured;
|
if state.pressed_item != Some(Item::Tab(key)) {
|
||||||
|
can_activate = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if can_activate {
|
||||||
|
shell.publish(on_activate(key));
|
||||||
|
state.pressed_item = None;
|
||||||
|
return event::Status::Captured;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1666,6 +1681,8 @@ pub struct LocalState {
|
||||||
pub dnd_state: crate::widget::dnd_destination::State<Option<Entity>>,
|
pub dnd_state: crate::widget::dnd_destination::State<Option<Entity>>,
|
||||||
/// Tracks multi-touch events
|
/// Tracks multi-touch events
|
||||||
fingers_pressed: HashSet<Finger>,
|
fingers_pressed: HashSet<Finger>,
|
||||||
|
/// The currently pressed item
|
||||||
|
pressed_item: Option<Item>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, PartialEq)]
|
#[derive(Debug, Default, PartialEq)]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue