From d756a9210acd97eb41191f5199f4d7357f4d253a Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Wed, 7 Feb 2024 12:00:33 +0100 Subject: Override `MouseArea` interaction only when contents are idle --- widget/src/mouse_area.rs | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/widget/src/mouse_area.rs b/widget/src/mouse_area.rs index a5967077..c9258c40 100644 --- a/widget/src/mouse_area.rs +++ b/widget/src/mouse_area.rs @@ -101,7 +101,7 @@ impl<'a, Message, Theme, Renderer> MouseArea<'a, Message, Theme, Renderer> { self } - /// The version of the cursor to use when hovering. + /// The [`mouse::Interaction`] to use when hovering the area. #[must_use] pub fn mouse_interaction( mut self, @@ -226,21 +226,22 @@ where viewport: &Rectangle, renderer: &Renderer, ) -> mouse::Interaction { - if !cursor.is_over(layout.bounds()) { - return mouse::Interaction::default(); - } - - if let Some(interaction) = self.interaction { - return interaction; - } - - self.content.as_widget().mouse_interaction( + let content_interaction = self.content.as_widget().mouse_interaction( &tree.children[0], layout, cursor, viewport, renderer, - ) + ); + + match (self.interaction, content_interaction) { + (Some(interaction), mouse::Interaction::Idle) + if cursor.is_over(layout.bounds()) => + { + interaction + } + _ => content_interaction, + } } fn draw( -- cgit