diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-03-23 14:38:07 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-03-23 15:45:44 +0400 |
| commit | b7ed2fb82a19afe73e3e51ef2331ac6ad9c175a0 (patch) | |
| tree | 8757c39889958bd6a8f87ac9089d8e5a7fd43a76 /src/niri.rs | |
| parent | f3f02aca2058dd7adc4d75707ded2b5d8887a258 (diff) | |
| download | niri-b7ed2fb82a19afe73e3e51ef2331ac6ad9c175a0.tar.gz niri-b7ed2fb82a19afe73e3e51ef2331ac6ad9c175a0.tar.bz2 niri-b7ed2fb82a19afe73e3e51ef2331ac6ad9c175a0.zip | |
Add is-active window rule matcher
Diffstat (limited to 'src/niri.rs')
| -rw-r--r-- | src/niri.rs | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/src/niri.rs b/src/niri.rs index 7984d3c4..5e425396 100644 --- a/src/niri.rs +++ b/src/niri.rs @@ -438,6 +438,7 @@ impl State { self.update_keyboard_focus(); self.refresh_pointer_focus(); foreign_toplevel::refresh(self); + self.niri.refresh_window_rules(); self.niri.redraw_queued_outputs(&mut self.backend); { @@ -911,9 +912,9 @@ impl State { let mut windows = vec![]; self.niri.layout.with_windows_mut(|mapped, _| { - mapped.rules = - ResolvedWindowRules::compute(window_rules, WindowRef::Mapped(mapped)); - windows.push(mapped.window.clone()); + if mapped.recompute_window_rules(window_rules) { + windows.push(mapped.window.clone()); + } }); for win in windows { self.niri.layout.update_window(&win); @@ -2149,6 +2150,33 @@ impl Niri { self.idle_notifier_state.set_is_inhibited(is_inhibited); } + pub fn refresh_window_rules(&mut self) { + let _span = tracy_client::span!("Niri::refresh_window_rules"); + + let config = self.config.borrow(); + let window_rules = &config.window_rules; + + let mut windows = vec![]; + let mut outputs = HashSet::new(); + self.layout.with_windows_mut(|mapped, output| { + if mapped.recompute_window_rules_if_needed(window_rules) { + windows.push(mapped.window.clone()); + + if let Some(output) = output { + outputs.insert(output.clone()); + } + } + }); + drop(config); + + for win in windows { + self.layout.update_window(&win); + } + for output in outputs { + self.queue_redraw(&output); + } + } + pub fn render<R: NiriRenderer>( &self, renderer: &mut R, |
