summaryrefslogtreecommitdiffstats
path: root/widget
diff options
context:
space:
mode:
authorLibravatar Radovan Blažek <blazra@gmail.com>2024-04-01 21:02:52 +0200
committerLibravatar Radovan Blažek <blazra@gmail.com>2024-04-01 21:38:58 +0200
commit8c08cce6ffb2214307bb79213896f5cb4ea5ea3f (patch)
treed8dc134465466d5cf3e0070cee1f827b26faae4a /widget
parentc30b4b0a1c9b191bcb65ae1732581b5c96b8bcfe (diff)
downloadiced-8c08cce6ffb2214307bb79213896f5cb4ea5ea3f.tar.gz
iced-8c08cce6ffb2214307bb79213896f5cb4ea5ea3f.tar.bz2
iced-8c08cce6ffb2214307bb79213896f5cb4ea5ea3f.zip
combo_box: Do not draw empty menu overlay
Fixes #2311
Diffstat (limited to 'widget')
-rw-r--r--widget/src/combo_box.rs65
1 files changed, 37 insertions, 28 deletions
diff --git a/widget/src/combo_box.rs b/widget/src/combo_box.rs
index e4f4a41f..253850df 100644
--- a/widget/src/combo_box.rs
+++ b/widget/src/combo_box.rs
@@ -700,38 +700,47 @@ where
..
} = tree.state.downcast_mut::<Menu<T>>();
- let bounds = layout.bounds();
-
self.state.sync_filtered_options(filtered_options);
- let mut menu = menu::Menu::new(
- menu,
- &filtered_options.options,
- hovered_option,
- |x| {
- tree.children[0]
- .state
- .downcast_mut::<text_input::State<Renderer::Paragraph>>(
- )
- .unfocus();
-
- (self.on_selected)(x)
- },
- self.on_option_hovered.as_deref(),
- &self.menu_class,
- )
- .width(bounds.width)
- .padding(self.padding);
-
- if let Some(font) = self.font {
- menu = menu.font(font);
- }
+ if filtered_options.options.is_empty() {
+ None
+ } else {
+ let bounds = layout.bounds();
+
+ let mut menu = menu::Menu::new(
+ menu,
+ &filtered_options.options,
+ hovered_option,
+ |x| {
+ tree.children[0]
+ .state
+ .downcast_mut::<text_input::State<Renderer::Paragraph>>(
+ )
+ .unfocus();
+
+ (self.on_selected)(x)
+ },
+ self.on_option_hovered.as_deref(),
+ &self.menu_class,
+ )
+ .width(bounds.width)
+ .padding(self.padding);
+
+ if let Some(font) = self.font {
+ menu = menu.font(font);
+ }
- if let Some(size) = self.size {
- menu = menu.text_size(size);
- }
+ if let Some(size) = self.size {
+ menu = menu.text_size(size);
+ }
- Some(menu.overlay(layout.position() + translation, bounds.height))
+ Some(
+ menu.overlay(
+ layout.position() + translation,
+ bounds.height,
+ ),
+ )
+ }
} else {
None
}