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(