Avoid returning on mouse enter in MouseListener

The event that triggers a mouse enter could be a mouse button
press/release.
This commit is contained in:
Héctor Ramón Jiménez 2023-04-13 06:44:09 +02:00
parent f247528725
commit 29971c9d71
No known key found for this signature in database
GPG key ID: 140CC052C94F138E

View file

@ -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<Message: Clone, Renderer>(
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());
}
}