aboutsummaryrefslogtreecommitdiff
path: root/src/handlers
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-12-27 09:31:32 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2024-12-30 20:12:37 +0300
commitfc99724aba1c0043eda3ad1b9829da8ae802d310 (patch)
tree2a0face72bccbbf86da931bd92a7a5885b58e040 /src/handlers
parent88fbc62b1d3cb245453b9ac5a8faae2b9159866a (diff)
downloadniri-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.rs42
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)