shell/element: Don't render decorations for dead windows

This commit is contained in:
Victoria Brekenfeld 2025-12-17 18:11:51 +01:00 committed by Victoria Brekenfeld
parent 6d0f1b273f
commit 15bbada498
3 changed files with 32 additions and 18 deletions

View file

@ -606,6 +606,10 @@ impl CosmicMapped {
CosmicMappedRenderElement<R>: RenderElement<R>,
C: From<CosmicMappedRenderElement<R>>,
{
if !self.element.alive() {
return None;
}
match &self.element {
CosmicMappedInternal::Stack(s) => s
.shadow_render_element::<R, CosmicMappedRenderElement<R>>(

View file

@ -730,6 +730,13 @@ impl CosmicStack {
R::TextureId: Send + Clone + 'static,
C: From<CosmicStackRenderElement<R>>,
{
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())

View file

@ -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::<R, WaylandSurfaceRenderElement<R>>(
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 {