diff --git a/src/shell/element/mod.rs b/src/shell/element/mod.rs index baf4ff89..6167f04f 100644 --- a/src/shell/element/mod.rs +++ b/src/shell/element/mod.rs @@ -606,6 +606,10 @@ impl CosmicMapped { CosmicMappedRenderElement: RenderElement, C: From>, { + if !self.element.alive() { + return None; + } + match &self.element { CosmicMappedInternal::Stack(s) => s .shadow_render_element::>( diff --git a/src/shell/element/stack.rs b/src/shell/element/stack.rs index 029693be..858cec0b 100644 --- a/src/shell/element/stack.rs +++ b/src/shell/element/stack.rs @@ -730,6 +730,13 @@ impl CosmicStack { R::TextureId: Send + Clone + 'static, C: From>, { + if !self + .0 + .with_program(|p| p.override_alive.load(Ordering::Acquire)) + { + return Vec::new(); + } + let geometry = self .0 .with_program(|p| p.windows.lock().unwrap()[p.active.load(Ordering::SeqCst)].geometry()) diff --git a/src/shell/element/window.rs b/src/shell/element/window.rs index df57c749..d1ce34d5 100644 --- a/src/shell/element/window.rs +++ b/src/shell/element/window.rs @@ -509,7 +509,7 @@ impl CosmicWindow { elements.push(elem); } - elements.extend(self.0.with_program(|p| { + let window_elements = self.0.with_program(|p| { p.window .render_elements::>( renderer, @@ -518,23 +518,26 @@ impl CosmicWindow { alpha, scanout_override, ) - .into_iter() - .map(|elem| { - if has_ssd { - radii[1] = 0; - radii[3] = 0; - } - if radii.iter().any(|x| *x != 0) - && clip - && ClippedSurfaceRenderElement::will_clip(&elem, scale, geo, radii) - { - CosmicWindowRenderElement::Clipped(ClippedSurfaceRenderElement::new( - renderer, elem, scale, geo, radii, - )) - } else { - CosmicWindowRenderElement::Window(elem) - } - }) + }); + if window_elements.is_empty() { + return Vec::new(); + } + + elements.extend(window_elements.into_iter().map(|elem| { + if has_ssd { + radii[1] = 0; + radii[3] = 0; + } + if radii.iter().any(|x| *x != 0) + && clip + && ClippedSurfaceRenderElement::will_clip(&elem, scale, geo, radii) + { + CosmicWindowRenderElement::Clipped(ClippedSurfaceRenderElement::new( + renderer, elem, scale, geo, radii, + )) + } else { + CosmicWindowRenderElement::Window(elem) + } })); if has_ssd {