Implement event capturing for PickList

This commit is contained in:
Héctor Ramón Jiménez 2020-11-12 00:47:21 +01:00
parent 31c509b206
commit 7ff95f3a88

View File

@ -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(