Skip to content

Commit

Permalink
Add on_open handler to combo_box widget
Browse files Browse the repository at this point in the history
Co-authored-by: Wail Abou <abou.w@hotmail.com>
  • Loading branch information
hecrj and WailAbou committed Sep 13, 2024
1 parent 2e3082d commit 9d9ac0f
Showing 1 changed file with 20 additions and 7 deletions.
27 changes: 20 additions & 7 deletions widget/src/combo_box.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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>,
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 9d9ac0f

Please sign in to comment.