Implement event capturing for PickList
This commit is contained in:
parent
31c509b206
commit
7ff95f3a88
@ -230,10 +230,12 @@ where
|
|||||||
) -> event::Status {
|
) -> event::Status {
|
||||||
match event {
|
match event {
|
||||||
Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left)) => {
|
Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left)) => {
|
||||||
if *self.is_open {
|
let event_status = if *self.is_open {
|
||||||
// TODO: Encode cursor availability in the type system
|
// TODO: Encode cursor availability in the type system
|
||||||
*self.is_open =
|
*self.is_open =
|
||||||
cursor_position.x < 0.0 || cursor_position.y < 0.0;
|
cursor_position.x < 0.0 || cursor_position.y < 0.0;
|
||||||
|
|
||||||
|
event::Status::Captured
|
||||||
} else if layout.bounds().contains(cursor_position) {
|
} else if layout.bounds().contains(cursor_position) {
|
||||||
let selected = self.selected.as_ref();
|
let selected = self.selected.as_ref();
|
||||||
|
|
||||||
@ -242,18 +244,24 @@ where
|
|||||||
.options
|
.options
|
||||||
.iter()
|
.iter()
|
||||||
.position(|option| Some(option) == selected);
|
.position(|option| Some(option) == selected);
|
||||||
}
|
|
||||||
|
event::Status::Captured
|
||||||
|
} else {
|
||||||
|
event::Status::Ignored
|
||||||
|
};
|
||||||
|
|
||||||
if let Some(last_selection) = self.last_selection.take() {
|
if let Some(last_selection) = self.last_selection.take() {
|
||||||
messages.push((self.on_selected)(last_selection));
|
messages.push((self.on_selected)(last_selection));
|
||||||
|
|
||||||
*self.is_open = false;
|
*self.is_open = false;
|
||||||
|
|
||||||
|
event::Status::Captured
|
||||||
|
} else {
|
||||||
|
event_status
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => event::Status::Ignored,
|
||||||
}
|
}
|
||||||
|
|
||||||
event::Status::Ignored
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn draw(
|
fn draw(
|
||||||
|
Loading…
Reference in New Issue
Block a user