Cursor availability during on_event

This commit is contained in:
Cory Forsstrom 2023-02-18 19:11:50 -08:00 committed by Héctor Ramón Jiménez
parent 83140d6049
commit 4de6ee6fa1
No known key found for this signature in database
GPG key ID: 140CC052C94F138E

View file

@ -174,42 +174,67 @@ where
renderer: &Renderer, renderer: &Renderer,
clipboard: &mut dyn Clipboard, clipboard: &mut dyn Clipboard,
shell: &mut Shell<'_, Message>, shell: &mut Shell<'_, Message>,
) -> event::Status ) -> (event::Status, bool)
where where
Renderer: renderer::Renderer, Renderer: renderer::Renderer,
{ {
let mut layouts = layout.children(); let mut layouts = layout.children();
if let Some(layout) = layouts.next() { if let Some(layout) = layouts.next() {
let status = if let Some((mut nested, nested_layout)) = let (nested_status, nested_is_over) =
element.overlay(layout, renderer).zip(layouts.next()) if let Some((mut nested, nested_layout)) =
{ element.overlay(layout, renderer).zip(layouts.next())
recurse( {
&mut nested, recurse(
nested_layout, &mut nested,
event.clone(), nested_layout,
cursor, event.clone(),
renderer, cursor,
clipboard, renderer,
shell, clipboard,
) shell,
} else { )
event::Status::Ignored } else {
}; (event::Status::Ignored, false)
};
if matches!(status, event::Status::Ignored) { if matches!(nested_status, event::Status::Ignored) {
element.on_event( let is_over = nested_is_over
event, layout, cursor, renderer, clipboard, shell, || cursor
.position()
.map(|cursor_position| {
element.is_over(
layout,
renderer,
cursor_position,
)
})
.unwrap_or_default();
(
element.on_event(
event,
layout,
if nested_is_over {
mouse::Cursor::Unavailable
} else {
cursor
},
renderer,
clipboard,
shell,
),
is_over,
) )
} else { } else {
status (nested_status, nested_is_over)
} }
} else { } else {
event::Status::Ignored (event::Status::Ignored, false)
} }
} }
recurse( let (status, _) = recurse(
&mut self.overlay, &mut self.overlay,
layout, layout,
event, event,
@ -217,7 +242,9 @@ where
renderer, renderer,
clipboard, clipboard,
shell, shell,
) );
status
} }
pub fn mouse_interaction( pub fn mouse_interaction(