diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-12-27 09:31:32 +0300 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-12-30 20:12:37 +0300 |
| commit | fc99724aba1c0043eda3ad1b9829da8ae802d310 (patch) | |
| tree | 2a0face72bccbbf86da931bd92a7a5885b58e040 /src/handlers | |
| parent | 88fbc62b1d3cb245453b9ac5a8faae2b9159866a (diff) | |
| download | niri-fc99724aba1c0043eda3ad1b9829da8ae802d310.tar.gz niri-fc99724aba1c0043eda3ad1b9829da8ae802d310.tar.bz2 niri-fc99724aba1c0043eda3ad1b9829da8ae802d310.zip | |
Add open-focused window rule
Diffstat (limited to 'src/handlers')
| -rw-r--r-- | src/handlers/compositor.rs | 42 |
1 files changed, 26 insertions, 16 deletions
diff --git a/src/handlers/compositor.rs b/src/handlers/compositor.rs index 3856849f..c0dc9428 100644 --- a/src/handlers/compositor.rs +++ b/src/handlers/compositor.rs @@ -126,6 +126,32 @@ impl CompositorHandler for State { // moment, that is here. let is_floating = rules.compute_open_floating(toplevel); + // Figure out if we should activate the window. + let activate = rules.open_focused.map(|focus| { + if focus { + ActivateWindow::Yes + } else { + ActivateWindow::No + } + }); + let activate = activate.unwrap_or_else(|| { + // Check the token timestamp again in case the window took a while between + // requesting activation and mapping. + let token = activation_token_data.filter(|token| { + token.timestamp.elapsed() < XDG_ACTIVATION_TOKEN_TIMEOUT + }); + if token.is_some() { + ActivateWindow::Yes + } else { + let config = self.niri.config.borrow(); + if config.debug.strict_new_window_focus_policy { + ActivateWindow::No + } else { + ActivateWindow::Smart + } + } + }); + let parent = toplevel .parent() .and_then(|parent| self.niri.layout.find_window_and_output(&parent)) @@ -146,22 +172,6 @@ impl CompositorHandler for State { let mapped = Mapped::new(window, rules, hook); let window = mapped.window.clone(); - // Check the token timestamp again in case the window took a while between - // requesting activation and mapping. - let activate = match activation_token_data - .filter(|token| token.timestamp.elapsed() < XDG_ACTIVATION_TOKEN_TIMEOUT) - { - Some(_) => ActivateWindow::Yes, - None => { - let config = self.niri.config.borrow(); - if config.debug.strict_new_window_focus_policy { - ActivateWindow::No - } else { - ActivateWindow::Smart - } - } - }; - let target = if let Some(p) = &parent { // Open dialogs next to their parent window. AddWindowTarget::NextTo(p) |
