summaryrefslogtreecommitdiffstats
path: root/native/src/widget
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2023-04-13 06:44:09 +0200
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2023-04-13 06:44:09 +0200
commit29971c9d71fe81b12eae56eeaf87c6b6890c83f9 (patch)
treec2aca47794306ef1a486580efb582b0f6b09438d /native/src/widget
parentf247528725982e3214df3b06c153347fe4945b0f (diff)
downloadiced-29971c9d71fe81b12eae56eeaf87c6b6890c83f9.tar.gz
iced-29971c9d71fe81b12eae56eeaf87c6b6890c83f9.tar.bz2
iced-29971c9d71fe81b12eae56eeaf87c6b6890c83f9.zip
Avoid returning on mouse enter in `MouseListener`
The event that triggers a mouse enter could be a mouse button press/release.
Diffstat (limited to 'native/src/widget')
-rw-r--r--native/src/widget/mouse_listener.rs24
1 files changed, 10 insertions, 14 deletions
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<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());
}
}