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