Skip to content

Commit

Permalink
masonry: when querying widgets by pos, in case of overlap take last
Browse files Browse the repository at this point in the history
This takes the last child as returned by Widget::children_ids, i.e., the
last in "z-order".
  • Loading branch information
tomcur committed Aug 30, 2024
1 parent 205434a commit d35f474
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion masonry/src/widget/widget_ref.rs
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,9 @@ impl<'w> WidgetRef<'w, dyn Widget> {

/// Recursively find innermost widget at given position.
///
/// If multiple overlapping children of a widget contain the given position in their layout
/// boxes, the last child as determined by [`Widget::children_ids`] is chosen.
///
/// **pos** - the position in local coordinates (zero being the top-left of the
/// inner widget).
pub fn find_widget_at_pos(&self, pos: Point) -> Option<WidgetRef<'w, dyn Widget>> {
Expand All @@ -190,7 +193,7 @@ impl<'w> WidgetRef<'w, dyn Widget> {
}
}
// TODO - Use Widget::get_child_at_pos method
if let Some(child) = innermost_widget.children().into_iter().find(|child| {
if let Some(child) = innermost_widget.children().into_iter().rev().find(|child| {
!child.widget.skip_pointer() && child.state().window_layout_rect().contains(pos)
}) {
innermost_widget = child;
Expand Down

0 comments on commit d35f474

Please sign in to comment.