diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2025-05-10 22:48:11 +0300 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2025-05-10 22:49:55 +0300 |
| commit | a2efaf2816f14ea437d88bc6b9253b1e347c4cee (patch) | |
| tree | 840c4776a4a0a4e55e3b4c8057e4aa59c75e956b | |
| parent | 58166914607025ae9fb20d868138238bebd4c6bc (diff) | |
| download | niri-a2efaf2816f14ea437d88bc6b9253b1e347c4cee.tar.gz niri-a2efaf2816f14ea437d88bc6b9253b1e347c4cee.tar.bz2 niri-a2efaf2816f14ea437d88bc6b9253b1e347c4cee.zip | |
Add is-urgent window rule matcher
| -rw-r--r-- | niri-config/src/lib.rs | 5 | ||||
| -rw-r--r-- | src/window/mapped.rs | 1 | ||||
| -rw-r--r-- | src/window/mod.rs | 6 | ||||
| -rw-r--r-- | wiki/Configuration:-Window-Rules.md | 14 |
4 files changed, 26 insertions, 0 deletions
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<bool>, #[knuffel(property)] + pub is_urgent: Option<bool>, + #[knuffel(property)] pub at_startup: Option<bool>, } @@ -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:  +#### `is-urgent` + +<sup>Since: next release</sup> + +Can be `true` or `false`. +Matches windows that request the user's attention. + +```kdl +window-rule { + match is-urgent=true +} +``` + #### `at-startup` <sup>Since: 0.1.6</sup> |
