From 4038ac1db54eb044afed0194e2cfdddf50a9b572 Mon Sep 17 00:00:00 2001 From: Julian Orth Date: Mon, 14 Apr 2025 13:08:08 +0200 Subject: [PATCH] wl_surface: ignore toplevel damage bounds if toplevel is detached --- src/cpu_worker/tests.rs | 2 +- src/ifs/wl_surface.rs | 2 +- src/tree/toplevel.rs | 7 +++++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/cpu_worker/tests.rs b/src/cpu_worker/tests.rs index 4f9ab2b7..c77a8620 100644 --- a/src/cpu_worker/tests.rs +++ b/src/cpu_worker/tests.rs @@ -6,7 +6,7 @@ use { utils::asyncevent::AsyncEvent, wheel::Wheel, }, - std::{any::Any, future::pending, rc::Rc, sync::Arc}, + std::{future::pending, rc::Rc, sync::Arc}, uapi::{OwnedFd, c::EFD_CLOEXEC}, }; diff --git a/src/ifs/wl_surface.rs b/src/ifs/wl_surface.rs index 59c72a61..82e71ad1 100644 --- a/src/ifs/wl_surface.rs +++ b/src/ifs/wl_surface.rs @@ -1453,7 +1453,7 @@ impl WlSurface { } fn apply_damage(&self, pending: &PendingState) { - let bounds = self.toplevel.get().map(|tl| tl.node_absolute_position()); + let bounds = self.toplevel.get().and_then(|tl| tl.tl_render_bounds()); let pos = self.buffer_abs_pos.get(); let apply_damage = |pos: Rect| { if pending.damage_full { diff --git a/src/tree/toplevel.rs b/src/tree/toplevel.rs index 4d5ec230..556cc885 100644 --- a/src/tree/toplevel.rs +++ b/src/tree/toplevel.rs @@ -203,6 +203,13 @@ pub trait ToplevelNodeBase: Node { let _ = start; default_tile_drag_bounds(self, split) } + + fn tl_render_bounds(&self) -> Option { + self.tl_data() + .parent + .is_some() + .then_some(self.node_absolute_position()) + } } pub struct FullscreenedData {