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,14 +174,15 @@ 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) =
if let Some((mut nested, nested_layout)) =
element.overlay(layout, renderer).zip(layouts.next()) element.overlay(layout, renderer).zip(layouts.next())
{ {
recurse( recurse(
@ -194,22 +195,46 @@ where
shell, shell,
) )
} else { } else {
event::Status::Ignored (event::Status::Ignored, false)
}; };
if matches!(status, event::Status::Ignored) { if matches!(nested_status, event::Status::Ignored) {
let is_over = nested_is_over
|| cursor
.position()
.map(|cursor_position| {
element.is_over(
layout,
renderer,
cursor_position,
)
})
.unwrap_or_default();
(
element.on_event( element.on_event(
event, layout, cursor, renderer, clipboard, shell, 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(