From a2efaf2816f14ea437d88bc6b9253b1e347c4cee Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Sat, 10 May 2025 22:48:11 +0300 Subject: Add is-urgent window rule matcher --- niri-config/src/lib.rs | 5 +++++ src/window/mapped.rs | 1 + src/window/mod.rs | 6 ++++++ wiki/Configuration:-Window-Rules.md | 14 ++++++++++++++ 4 files changed, 26 insertions(+) diff --git a/niri-config/src/lib.rs b/niri-config/src/lib.rs index 10ed31b5..b7214018 100644 --- a/niri-config/src/lib.rs +++ b/niri-config/src/lib.rs @@ -1457,6 +1457,8 @@ pub struct Match { #[knuffel(property)] pub is_window_cast_target: Option, #[knuffel(property)] + pub is_urgent: Option, + #[knuffel(property)] pub at_startup: Option, } @@ -4804,6 +4806,7 @@ mod tests { is_active_in_column: None, is_floating: None, is_window_cast_target: None, + is_urgent: None, at_startup: None, }, ], @@ -4822,6 +4825,7 @@ mod tests { is_active_in_column: None, is_floating: None, is_window_cast_target: None, + is_urgent: None, at_startup: None, }, Match { @@ -4836,6 +4840,7 @@ mod tests { is_active_in_column: None, is_floating: None, is_window_cast_target: None, + is_urgent: None, at_startup: None, }, ], diff --git a/src/window/mapped.rs b/src/window/mapped.rs index da6caf54..74a0ea4b 100644 --- a/src/window/mapped.rs +++ b/src/window/mapped.rs @@ -520,6 +520,7 @@ impl Mapped { if self.is_focused && urgent { return; } + let changed = self.is_urgent != urgent; self.is_urgent = urgent; self.need_to_recompute_rules |= changed; diff --git a/src/window/mod.rs b/src/window/mod.rs index 71aa607b..0b94d04d 100644 --- a/src/window/mod.rs +++ b/src/window/mod.rs @@ -440,6 +440,12 @@ fn window_matches(window: WindowRef, role: &XdgToplevelSurfaceRoleAttributes, m: } } + if let Some(is_urgent) = m.is_urgent { + if window.is_urgent() != is_urgent { + return false; + } + } + if let Some(is_active) = m.is_active { // Our "is-active" definition corresponds to the window having a pending Activated state. let pending_activated = server_pending diff --git a/wiki/Configuration:-Window-Rules.md b/wiki/Configuration:-Window-Rules.md index 03af8d41..7a10859b 100644 --- a/wiki/Configuration:-Window-Rules.md +++ b/wiki/Configuration:-Window-Rules.md @@ -35,6 +35,7 @@ window-rule { match is-active-in-column=true match is-floating=true match is-window-cast-target=true + match is-urgent=true match at-startup=true // Properties that apply once upon window opening. @@ -286,6 +287,19 @@ Example: ![](https://github.com/user-attachments/assets/375b381e-3a87-4e94-8676-44404971d893) +#### `is-urgent` + +Since: next release + +Can be `true` or `false`. +Matches windows that request the user's attention. + +```kdl +window-rule { + match is-urgent=true +} +``` + #### `at-startup` Since: 0.1.6 -- cgit