aboutsummaryrefslogtreecommitdiff
path: root/src/window
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/window
parentd120e0c45142251b7c59b3a36f9bda709a58095e (diff)
downloadniri-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.rs19
-rw-r--r--src/window/unmapped.rs5
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")
+ }
}