Add on_open handler to combo_box widget
Co-authored-by: Wail Abou <abou.w@hotmail.com>
This commit is contained in:
parent
2e3082d665
commit
9d9ac0ff35
1 changed files with 20 additions and 7 deletions
|
|
@ -41,6 +41,7 @@ pub struct ComboBox<
|
|||
selection: text_input::Value,
|
||||
on_selected: Box<dyn Fn(T) -> Message>,
|
||||
on_option_hovered: Option<Box<dyn Fn(T) -> Message>>,
|
||||
on_open: Option<Message>,
|
||||
on_close: Option<Message>,
|
||||
on_input: Option<Box<dyn Fn(String) -> Message>>,
|
||||
menu_class: <Theme as menu::Catalog>::Class<'a>,
|
||||
|
|
@ -77,6 +78,7 @@ where
|
|||
on_selected: Box::new(on_selected),
|
||||
on_option_hovered: None,
|
||||
on_input: None,
|
||||
on_open: None,
|
||||
on_close: None,
|
||||
menu_class: <Theme as Catalog>::default_menu(),
|
||||
padding: text_input::DEFAULT_PADDING,
|
||||
|
|
@ -104,6 +106,13 @@ where
|
|||
self
|
||||
}
|
||||
|
||||
/// Sets the message that will be produced when the [`ComboBox`] is
|
||||
/// opened.
|
||||
pub fn on_open(mut self, message: Message) -> Self {
|
||||
self.on_open = Some(message);
|
||||
self
|
||||
}
|
||||
|
||||
/// Sets the message that will be produced when the outside area
|
||||
/// of the [`ComboBox`] is pressed.
|
||||
pub fn on_close(mut self, message: Message) -> Self {
|
||||
|
|
@ -632,15 +641,19 @@ where
|
|||
text_input_state.is_focused()
|
||||
};
|
||||
|
||||
if started_focused && !is_focused && !published_message_to_shell {
|
||||
if let Some(message) = self.on_close.take() {
|
||||
shell.publish(message);
|
||||
}
|
||||
}
|
||||
|
||||
// Focus changed, invalidate widget tree to force a fresh `view`
|
||||
if started_focused != is_focused {
|
||||
// Focus changed, invalidate widget tree to force a fresh `view`
|
||||
shell.invalidate_widgets();
|
||||
|
||||
if !published_message_to_shell {
|
||||
if is_focused {
|
||||
if let Some(on_open) = self.on_open.take() {
|
||||
shell.publish(on_open);
|
||||
}
|
||||
} else if let Some(on_close) = self.on_close.take() {
|
||||
shell.publish(on_close);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
event_status
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue