From 4cd35f74628d2d05c07af6b2ccf8b86a09466274 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Ram=C3=B3n=20Jim=C3=A9nez?= Date: Fri, 12 Sep 2025 20:06:59 +0200 Subject: [PATCH] Invalidate `tooltip` layout on `mouse` events --- widget/src/tooltip.rs | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/widget/src/tooltip.rs b/widget/src/tooltip.rs index 3f81270f..900585fa 100644 --- a/widget/src/tooltip.rs +++ b/widget/src/tooltip.rs @@ -202,23 +202,23 @@ where shell: &mut Shell<'_, Message>, viewport: &Rectangle, ) { - let state = tree.state.downcast_mut::(); + if let Event::Mouse(_) = event { + let state = tree.state.downcast_mut::(); + let was_idle = *state == State::Idle; - let previous_state = *state; - let was_idle = *state == State::Idle; + *state = cursor + .position_over(layout.bounds()) + .map(|cursor_position| State::Hovered { cursor_position }) + .unwrap_or_default(); - *state = cursor - .position_over(layout.bounds()) - .map(|cursor_position| State::Hovered { cursor_position }) - .unwrap_or_default(); + let is_idle = *state == State::Idle; - let is_idle = *state == State::Idle; - - if was_idle != is_idle - || (self.position == Position::FollowCursor - && previous_state != *state) - { - shell.request_redraw(); + if was_idle != is_idle { + shell.invalidate_layout(); + shell.request_redraw(); + } else if self.position == Position::FollowCursor { + shell.request_redraw(); + } } self.content.as_widget_mut().update(