From a5267e623f356d1792cba7f480dd671cc8b52406 Mon Sep 17 00:00:00 2001 From: Hojjat Date: Tue, 18 Aug 2026 18:39:52 -0600 Subject: [PATCH] fix: request redraw on hover state change in dropdown widget This also add a missing request when dropdown opens --- src/widget/dropdown/menu/mod.rs | 15 +++++++++++++++ src/widget/dropdown/multi/menu.rs | 9 +++++++++ src/widget/dropdown/widget.rs | 1 + 3 files changed, 25 insertions(+) diff --git a/src/widget/dropdown/menu/mod.rs b/src/widget/dropdown/menu/mod.rs index f18016d8..f6fbb218 100644 --- a/src/widget/dropdown/menu/mod.rs +++ b/src/widget/dropdown/menu/mod.rs @@ -508,6 +508,21 @@ where } *hovered_guard = Some(new_hovered_option); + } else { + let mut hovered_guard = self.hovered_option.lock().unwrap(); + + if hovered_guard.is_some() { + *hovered_guard = None; + shell.request_redraw(); + } + } + } + Event::Mouse(mouse::Event::CursorLeft) => { + let mut hovered_guard = self.hovered_option.lock().unwrap(); + + if hovered_guard.is_some() { + *hovered_guard = None; + shell.request_redraw(); } } Event::Touch(touch::Event::FingerPressed { .. }) => { diff --git a/src/widget/dropdown/multi/menu.rs b/src/widget/dropdown/multi/menu.rs index e699890b..fe1369c3 100644 --- a/src/widget/dropdown/multi/menu.rs +++ b/src/widget/dropdown/multi/menu.rs @@ -395,6 +395,15 @@ where if *self.hovered_option != previous_hover_option { shell.request_redraw(); } + } else if self.hovered_option.is_some() { + *self.hovered_option = None; + shell.request_redraw(); + } + } + Event::Mouse(mouse::Event::CursorLeft) => { + if self.hovered_option.is_some() { + *self.hovered_option = None; + shell.request_redraw(); } } Event::Touch(touch::Event::FingerPressed { .. }) => { diff --git a/src/widget/dropdown/widget.rs b/src/widget/dropdown/widget.rs index 8d80fb4a..e38be851 100644 --- a/src/widget/dropdown/widget.rs +++ b/src/widget/dropdown/widget.rs @@ -567,6 +567,7 @@ pub fn update< state: &mut State, on_selected: Arc Message + Send + Sync + 'static>| { state.is_open.store(true, Ordering::Relaxed); + shell.request_redraw(); let mut hovered_guard = state.hovered_option.lock().unwrap(); *hovered_guard = selected; let id = window::Id::unique();