diff options
Diffstat (limited to 'src/input/mod.rs')
| -rw-r--r-- | src/input/mod.rs | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/input/mod.rs b/src/input/mod.rs index a6fc549f..a952a23a 100644 --- a/src/input/mod.rs +++ b/src/input/mod.rs @@ -779,7 +779,19 @@ impl State { self.niri.queue_redraw_all(); } Action::FocusWindowPrevious => { - if let Some(window) = self.niri.previously_focused_window.clone() { + let current = self.niri.layout.focus().map(|win| win.id()); + if let Some(window) = self + .niri + .layout + .windows() + .map(|(_, win)| win) + .filter(|win| Some(win.id()) != current) + .max_by_key(|win| win.get_focus_timestamp()) + .map(|win| win.window.clone()) + { + // Commit current focus so repeated focus-window-previous works as expected. + self.niri.mru_apply_keyboard_commit(); + self.focus_window(&window); } } |
