From 8b84afbd38e057c6dd378bdd42b9467d8a7baa24 Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Fri, 29 Nov 2024 11:37:33 +0300 Subject: Add strict-new-window-focus-policy debug flag --- niri-config/src/lib.rs | 2 ++ src/handlers/compositor.rs | 9 ++++++++- wiki/Configuration:-Debug-Options.md | 14 ++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/niri-config/src/lib.rs b/niri-config/src/lib.rs index 76222934..f49c2496 100644 --- a/niri-config/src/lib.rs +++ b/niri-config/src/lib.rs @@ -1537,6 +1537,8 @@ pub struct DebugConfig { pub keep_laptop_panel_on_when_lid_is_closed: bool, #[knuffel(child)] pub disable_monitor_names: bool, + #[knuffel(child)] + pub strict_new_window_focus_policy: bool, } #[derive(knuffel::DecodeScalar, Debug, Clone, Copy, PartialEq, Eq)] diff --git a/src/handlers/compositor.rs b/src/handlers/compositor.rs index ed36100b..ae53bfc8 100644 --- a/src/handlers/compositor.rs +++ b/src/handlers/compositor.rs @@ -145,7 +145,14 @@ impl CompositorHandler for State { .filter(|token| token.timestamp.elapsed() < XDG_ACTIVATION_TOKEN_TIMEOUT) { Some(_) => ActivateWindow::Yes, - None => ActivateWindow::Smart, + None => { + let config = self.niri.config.borrow(); + if config.debug.strict_new_window_focus_policy { + ActivateWindow::No + } else { + ActivateWindow::Smart + } + } }; let output = if let Some(p) = parent { diff --git a/wiki/Configuration:-Debug-Options.md b/wiki/Configuration:-Debug-Options.md index f622bd68..5ba851fe 100644 --- a/wiki/Configuration:-Debug-Options.md +++ b/wiki/Configuration:-Debug-Options.md @@ -24,6 +24,7 @@ debug { disable-transactions keep-laptop-panel-on-when-lid-is-closed disable-monitor-names + strict-new-window-focus-policy } binds { @@ -194,6 +195,19 @@ debug { } ``` +### `strict-new-window-focus-policy` + +Since: 0.1.11 + +Disables heuristic automatic focusing for new windows. +Only windows that activate themselves with a valid xdg-activation token will be focused. + +```kdl +debug { + strict-new-window-focus-policy +} +``` + ### Key Bindings These are not debug options, but rather key bindings. -- cgit