From 29971c9d71fe81b12eae56eeaf87c6b6890c83f9 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Thu, 13 Apr 2023 06:44:09 +0200 Subject: Avoid returning on mouse enter in `MouseListener` The event that triggers a mouse enter could be a mouse button press/release. --- native/src/widget/mouse_listener.rs | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) (limited to 'native/src') diff --git a/native/src/widget/mouse_listener.rs b/native/src/widget/mouse_listener.rs index f9c3acac..a7a06bcc 100644 --- a/native/src/widget/mouse_listener.rs +++ b/native/src/widget/mouse_listener.rs @@ -86,7 +86,7 @@ impl<'a, Message, Renderer> MouseListener<'a, Message, Renderer> { /// Local state of the [`MouseListener`]. #[derive(Default)] struct State { - hovered: bool, + is_hovered: bool, } impl<'a, Message, Renderer> MouseListener<'a, Message, Renderer> { @@ -266,27 +266,23 @@ fn update( shell: &mut Shell<'_, Message>, state: &mut State, ) -> event::Status { - let hovered = state.hovered; + let was_hovered = state.is_hovered; - if !layout.bounds().contains(cursor_position) { - if hovered { - state.hovered = false; + state.is_hovered = layout.bounds().contains(cursor_position); - if let Some(message) = widget.on_mouse_exit.clone() { - shell.publish(message); + if !state.is_hovered { + if was_hovered { + if let Some(message) = widget.on_mouse_exit.as_ref() { + shell.publish(message.clone()); } } return event::Status::Ignored; } - state.hovered = true; - - if !hovered { - if let Some(message) = widget.on_mouse_enter.clone() { - shell.publish(message); - - return event::Status::Ignored; + if !was_hovered { + if let Some(message) = widget.on_mouse_enter.as_ref() { + shell.publish(message.clone()); } } -- cgit