diff --git a/src/shell/element/surface.rs b/src/shell/element/surface.rs index b97856030..25f1ee726 100644 --- a/src/shell/element/surface.rs +++ b/src/shell/element/surface.rs @@ -103,6 +103,9 @@ struct Minimized(AtomicBool); #[derive(Default)] struct Sticky(AtomicBool); +#[derive(Default)] +struct Suspended(AtomicBool); + #[derive(Default)] struct GlobalGeometry(Mutex>>); @@ -448,6 +451,7 @@ impl CosmicSurface { let _ = surface.set_mapped(true); } } + self.update_suspended(); } pub fn is_sticky(&self) -> bool { @@ -466,7 +470,16 @@ impl CosmicSurface { .store(sticky, Ordering::SeqCst); } - pub fn set_suspended(&self, suspended: bool) { + fn update_suspended(&self) { + let minimized = self.is_minimized(); + let suspended = self + .0 + .user_data() + .get_or_insert_threadsafe(Minimized::default) + .0 + .load(Ordering::SeqCst); + + let suspended = minimized || suspended; match self.0.underlying_surface() { WindowSurface::Wayland(window) => window.with_pending_state(|state| { if suspended { @@ -481,6 +494,15 @@ impl CosmicSurface { } } + pub fn set_suspended(&self, suspended: bool) { + self.0 + .user_data() + .get_or_insert_threadsafe(Suspended::default) + .0 + .store(suspended, Ordering::SeqCst); + self.update_suspended(); + } + pub fn min_size_without_ssd(&self) -> Option> { match self.0.underlying_surface() { WindowSurface::Wayland(toplevel) => {