aboutsummaryrefslogtreecommitdiff
path: root/src/handlers
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-03-23 10:35:12 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2024-03-23 15:45:44 +0400
commit354f0b039a768c77e9c703cbcbca693f0b8c6f96 (patch)
treea00568e3318202e1011f9af7f2b1cdad9dc3044a /src/handlers
parentd120e0c45142251b7c59b3a36f9bda709a58095e (diff)
downloadniri-354f0b039a768c77e9c703cbcbca693f0b8c6f96.tar.gz
niri-354f0b039a768c77e9c703cbcbca693f0b8c6f96.tar.bz2
niri-354f0b039a768c77e9c703cbcbca693f0b8c6f96.zip
Pass Un/Mapped to window rule resolution
Diffstat (limited to 'src/handlers')
-rw-r--r--src/handlers/xdg_shell.rs21
1 files changed, 13 insertions, 8 deletions
diff --git a/src/handlers/xdg_shell.rs b/src/handlers/xdg_shell.rs
index 7bd47717..1c200ee5 100644
--- a/src/handlers/xdg_shell.rs
+++ b/src/handlers/xdg_shell.rs
@@ -28,7 +28,7 @@ use smithay::{
use crate::layout::workspace::ColumnWidth;
use crate::niri::{PopupGrabState, State};
-use crate::window::{InitialConfigureState, ResolvedWindowRules, Unmapped};
+use crate::window::{InitialConfigureState, ResolvedWindowRules, Unmapped, WindowRef};
impl XdgShellHandler for State {
fn xdg_shell_state(&mut self) -> &mut XdgShellState {
@@ -489,6 +489,10 @@ impl State {
return;
};
+ let config = self.niri.config.borrow();
+ let rules =
+ ResolvedWindowRules::compute(&config.window_rules, WindowRef::Unmapped(unmapped));
+
let Unmapped { window, state } = unmapped;
let InitialConfigureState::NotConfigured { wants_fullscreen } = state else {
@@ -496,9 +500,6 @@ impl State {
return;
};
- let config = self.niri.config.borrow();
- let rules = ResolvedWindowRules::compute(&config.window_rules, toplevel);
-
// Pick the target monitor. First, check if we had an output set in the window rules.
let mon = rules
.open_on_output
@@ -730,19 +731,23 @@ impl State {
}
pub fn update_window_rules(&mut self, toplevel: &ToplevelSurface) {
- let resolve =
- || ResolvedWindowRules::compute(&self.niri.config.borrow().window_rules, toplevel);
+ let config = self.niri.config.borrow();
+ let window_rules = &config.window_rules;
if let Some(unmapped) = self.niri.unmapped_windows.get_mut(toplevel.wl_surface()) {
+ let new_rules =
+ ResolvedWindowRules::compute(window_rules, WindowRef::Unmapped(unmapped));
if let InitialConfigureState::Configured { rules, .. } = &mut unmapped.state {
- *rules = resolve();
+ *rules = new_rules;
}
} else if let Some((mapped, output)) = self
.niri
.layout
.find_window_and_output_mut(toplevel.wl_surface())
{
- let new_rules = resolve();
+ let new_rules = ResolvedWindowRules::compute(window_rules, WindowRef::Mapped(mapped));
+ drop(config);
+
if mapped.rules != new_rules {
mapped.rules = new_rules;