diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-03-23 10:35:12 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-03-23 15:45:44 +0400 |
| commit | 354f0b039a768c77e9c703cbcbca693f0b8c6f96 (patch) | |
| tree | a00568e3318202e1011f9af7f2b1cdad9dc3044a /src/window | |
| parent | d120e0c45142251b7c59b3a36f9bda709a58095e (diff) | |
| download | niri-354f0b039a768c77e9c703cbcbca693f0b8c6f96.tar.gz niri-354f0b039a768c77e9c703cbcbca693f0b8c6f96.tar.bz2 niri-354f0b039a768c77e9c703cbcbca693f0b8c6f96.zip | |
Pass Un/Mapped to window rule resolution
Diffstat (limited to 'src/window')
| -rw-r--r-- | src/window/mod.rs | 19 | ||||
| -rw-r--r-- | src/window/unmapped.rs | 5 |
2 files changed, 23 insertions, 1 deletions
diff --git a/src/window/mod.rs b/src/window/mod.rs index bb6f2151..4d225223 100644 --- a/src/window/mod.rs +++ b/src/window/mod.rs @@ -12,6 +12,13 @@ pub use mapped::Mapped; pub mod unmapped; pub use unmapped::{InitialConfigureState, Unmapped}; +/// Reference to a mapped or unmapped window. +#[derive(Debug, Clone, Copy)] +pub enum WindowRef<'a> { + Unmapped(&'a Unmapped), + Mapped(&'a Mapped), +} + /// Rules fully resolved for a window. #[derive(Debug, PartialEq)] pub struct ResolvedWindowRules { @@ -46,6 +53,15 @@ pub struct ResolvedWindowRules { pub draw_border_with_background: Option<bool>, } +impl<'a> WindowRef<'a> { + pub fn toplevel(self) -> &'a ToplevelSurface { + match self { + WindowRef::Unmapped(unmapped) => unmapped.toplevel(), + WindowRef::Mapped(mapped) => mapped.toplevel(), + } + } +} + impl ResolvedWindowRules { pub const fn empty() -> Self { Self { @@ -61,11 +77,12 @@ impl ResolvedWindowRules { } } - pub fn compute(rules: &[WindowRule], toplevel: &ToplevelSurface) -> Self { + pub fn compute(rules: &[WindowRule], window: WindowRef) -> Self { let _span = tracy_client::span!("ResolvedWindowRules::compute"); let mut resolved = ResolvedWindowRules::empty(); + let toplevel = window.toplevel(); with_states(toplevel.wl_surface(), |states| { let role = states .data_map diff --git a/src/window/unmapped.rs b/src/window/unmapped.rs index 51e37e07..9cde4ca7 100644 --- a/src/window/unmapped.rs +++ b/src/window/unmapped.rs @@ -1,5 +1,6 @@ use smithay::desktop::Window; use smithay::output::Output; +use smithay::wayland::shell::xdg::ToplevelSurface; use super::ResolvedWindowRules; use crate::layout::workspace::ColumnWidth; @@ -58,4 +59,8 @@ impl Unmapped { pub fn needs_initial_configure(&self) -> bool { matches!(self.state, InitialConfigureState::NotConfigured { .. }) } + + pub fn toplevel(&self) -> &ToplevelSurface { + self.window.toplevel().expect("no X11 support") + } } |
