diff options
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") + } } |
