diff --git a/src/widget/dropdown/multi/menu.rs b/src/widget/dropdown/multi/menu.rs index 689fb0de..e699890b 100644 --- a/src/widget/dropdown/multi/menu.rs +++ b/src/widget/dropdown/multi/menu.rs @@ -366,7 +366,8 @@ where let mut current_offset = 0.0; - let previous_hover_option = self.hovered_option.take(); + let previous_hover_option = self.hovered_option.clone(); + *self.hovered_option = None; for (element, elem_height) in self.options.elements().zip(heights) { let bounds = Rectangle { @@ -377,27 +378,23 @@ where }; if bounds.contains(cursor_position) { - *self.hovered_option = if let OptionElement::Option((_, item)) = element - { - if previous_hover_option.as_ref() == Some(item) { - previous_hover_option - } else { - shell.request_redraw(); - + if let OptionElement::Option((_, item)) = element { + *self.hovered_option = Some(item.clone()); + if previous_hover_option.as_ref() != Some(item) { if let Some(on_option_hovered) = self.on_option_hovered { shell.publish(on_option_hovered(item.clone())); } - - Some(item.clone()) } - } else { - None - }; + } break; } current_offset += elem_height; } + + if *self.hovered_option != previous_hover_option { + shell.request_redraw(); + } } } Event::Touch(touch::Event::FingerPressed { .. }) => { diff --git a/src/widget/menu/menu_inner.rs b/src/widget/menu/menu_inner.rs index 4ea71bc4..291d7db0 100644 --- a/src/widget/menu/menu_inner.rs +++ b/src/widget/menu/menu_inner.rs @@ -634,6 +634,10 @@ impl<'b, Message: Clone + 'static> Menu<'b, Message> { shell, ); + if view_cursor.is_over(viewport) { + shell.request_redraw(); + } + if self.is_overlay && view_cursor.is_over(viewport) { shell.capture_event(); } @@ -1699,6 +1703,7 @@ fn process_scroll_events( } } shell.capture_event(); + shell.request_redraw(); }); }