diff --git a/src/ifs/wl_seat.rs b/src/ifs/wl_seat.rs index 508dcf64..d20d6137 100644 --- a/src/ifs/wl_seat.rs +++ b/src/ifs/wl_seat.rs @@ -730,8 +730,16 @@ impl WlSeatGlobal { }; if direction == Direction::Down && tl.node_is_container() { tl.node_do_focus(self, direction); - } else if let Some(p) = tl.tl_data().parent.get() { - if let Some(c) = p.node_into_container() { + } else { + let data = tl.tl_data(); + if data.is_fullscreen.get() + && let Some(output) = data.output_opt() + && let Some(target) = self.state.find_output_in_direction(&output, direction) + { + target.take_keyboard_navigation_focus(self, direction); + } else if let Some(p) = data.parent.get() + && let Some(c) = p.node_into_container() + { c.move_focus_from_child(self, tl.deref(), direction); } } diff --git a/src/tree/container.rs b/src/tree/container.rs index d9a8c80e..7aab26a2 100644 --- a/src/tree/container.rs +++ b/src/tree/container.rs @@ -1013,12 +1013,8 @@ impl ContainerNode { if let Some(parent) = self.toplevel_data.parent.get() { if let Some(c) = parent.node_into_container() { c.move_focus_from_child(seat, self.deref(), direction); - } else if let Some(output) = self.find_neighboring_output(direction) - && let Some(ws) = output.workspace.get() - && let Some(c) = ws.container.get() - && c.node_visible() - { - c.node_do_focus(seat, direction); + } else if let Some(output) = self.find_neighboring_output(direction) { + output.take_keyboard_navigation_focus(seat, direction); } } }; diff --git a/src/tree/output.rs b/src/tree/output.rs index 9802ada5..74640db3 100644 --- a/src/tree/output.rs +++ b/src/tree/output.rs @@ -1488,6 +1488,21 @@ impl OutputNode { } } } + + pub fn take_keyboard_navigation_focus(&self, seat: &Rc, direction: Direction) { + let Some(ws) = self.workspace.get() else { + return; + }; + if let Some(fs) = ws.fullscreen.get() { + if fs.node_visible() { + fs.node_do_focus(seat, direction); + } + } else if let Some(c) = ws.container.get() { + if c.node_visible() { + c.node_do_focus(seat, direction); + } + } + } } pub struct OutputTitle {