fix: send pointer leave to root menu if no sub menu is open

This commit is contained in:
Hojjat 2026-09-15 17:03:49 -06:00 • committed by Victoria Brekenfeld
parent 6645edff64
commit 58837e27b8

View file

@ -578,10 +578,12 @@ impl PointerGrab<State> for MenuGrab {
PointerTarget::motion(&element.iced, &self.seat, state, &new_event); PointerTarget::motion(&element.iced, &self.seat, state, &new_event);
} }
} else { } else {
// Keep the root menu hovered while a submenu is open
let keep_root = usize::from(elements.len() > 1);
elements elements
.iter_mut() .iter_mut()
.filter(|element| element.pointer_entered) .filter(|element| element.pointer_entered)
.skip(1) .skip(keep_root)
.for_each(|element| { .for_each(|element| {
PointerTarget::leave( PointerTarget::leave(
&element.iced, &element.iced,
@ -1019,10 +1021,11 @@ impl TabletToolGrab<State> for MenuGrab {
); );
self.last_tablet_idx = Some(i); self.last_tablet_idx = Some(i);
} else { } else {
let keep_root = usize::from(elements.len() > 1);
elements elements
.iter_mut() .iter_mut()
.filter(|element| element.tablet_entered.is_some()) .filter(|element| element.tablet_entered.is_some())
.skip(1) .skip(keep_root)
.for_each(|element| { .for_each(|element| {
TabletToolTarget::proximity_out( TabletToolTarget::proximity_out(
&element.iced, &element.iced,