diff options
author | 2025-02-03 17:24:05 +0100 | |
---|---|---|
committer | 2025-02-03 17:24:05 +0100 | |
commit | 50eaef28447f453bc90133de19cff8b2bfee27de (patch) | |
tree | eaa85242780846f22198dd02909a69815385f589 /widget/src/stack.rs | |
parent | 141290c7402a4e087ce18d60b210f4feeafcebee (diff) | |
parent | 0c0651de5b1722194d48c19cd645e747fb72ccb6 (diff) | |
download | iced-50eaef28447f453bc90133de19cff8b2bfee27de.tar.gz iced-50eaef28447f453bc90133de19cff8b2bfee27de.tar.bz2 iced-50eaef28447f453bc90133de19cff8b2bfee27de.zip |
Merge branch 'master' into explore-input-method2
Diffstat (limited to 'widget/src/stack.rs')
-rw-r--r-- | widget/src/stack.rs | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/widget/src/stack.rs b/widget/src/stack.rs index 12ed941d..d5cf1ecf 100644 --- a/widget/src/stack.rs +++ b/widget/src/stack.rs @@ -216,15 +216,15 @@ where viewport: &Rectangle, ) { let is_over = cursor.is_over(layout.bounds()); - let is_mouse_movement = - matches!(event, Event::Mouse(mouse::Event::CursorMoved { .. })); + let end = self.children.len() - 1; - for ((child, state), layout) in self + for (i, ((child, state), layout)) in self .children .iter_mut() .rev() .zip(tree.children.iter_mut().rev()) .zip(layout.children().rev()) + .enumerate() { child.as_widget_mut().update( state, @@ -237,22 +237,19 @@ where viewport, ); - if is_over - && !is_mouse_movement - && cursor != mouse::Cursor::Unavailable - { + if shell.is_event_captured() { + return; + } + + if i < end && is_over && !cursor.is_levitating() { let interaction = child.as_widget().mouse_interaction( state, layout, cursor, viewport, renderer, ); if interaction != mouse::Interaction::None { - cursor = mouse::Cursor::Unavailable; + cursor = cursor.levitate(); } } - - if shell.is_event_captured() { - return; - } } } |