From 5657f456687eec53d6fc8818c9a4b04c1ca78d67 Mon Sep 17 00:00:00 2001 From: atagen Date: Tue, 7 Apr 2026 19:16:30 +1000 Subject: [PATCH] container: switch to event-based damage --- src/tree/container.rs | 31 ++++++++----------------------- 1 file changed, 8 insertions(+), 23 deletions(-) diff --git a/src/tree/container.rs b/src/tree/container.rs index 09b881b4..6dea9989 100644 --- a/src/tree/container.rs +++ b/src/tree/container.rs @@ -1,6 +1,5 @@ use { crate::{ - async_engine::SpawnedFuture, backend::ButtonState, cursor::KnownCursor, cursor_user::CursorUser, @@ -139,8 +138,6 @@ pub struct ContainerNode { scroller: Scroller, toplevel_data: ToplevelData, attention_requests: ThresholdCounter, - pending_layout_damage: Cell, - layout_damage_timeout: Cell>>, pub layout_complete: Rc, pub child_added: Rc, pub child_removed: Rc, @@ -261,8 +258,6 @@ impl ContainerNode { weak, ), attention_requests: Default::default(), - pending_layout_damage: Cell::new(false), - layout_damage_timeout: Cell::new(None), layout_complete: state.post_layout_event_sources.create_source(), child_added: state.lazy_event_sources.create_source(), child_removed: state.lazy_event_sources.create_source(), @@ -454,20 +449,12 @@ impl ContainerNode { if !self.layout_scheduled.replace(true) { self.state.pending_container_layout.push(self.clone()); } - if self.toplevel_data.visible.get() { - self.pending_layout_damage.set(true); - } } fn schedule_layout_immediate(self: &Rc) { self.schedule_layout(); - self.flush_layout_damage(); - } - - fn flush_layout_damage(&self) { - if self.pending_layout_damage.replace(false) { + if self.toplevel_data.visible.get() { self.damage(); - self.layout_damage_timeout.take(); } } @@ -502,13 +489,9 @@ impl ContainerNode { self.schedule_render_titles(); self.schedule_compute_render_positions(); self.layout_complete.trigger(); - if self.pending_layout_damage.get() { - let slf = self.clone(); - let timeout = self.state.eng.spawn("layout damage timeout", async move { - slf.state.wheel.timeout(16).await.ok(); - slf.flush_layout_damage(); - }); - self.layout_damage_timeout.set(Some(timeout)); + if self.toplevel_data.visible.get() && self.all_children_match_body() { + self.all_children_resized.trigger(); + self.damage(); } } @@ -1859,10 +1842,12 @@ impl Node for ContainerNode { if let Some(node) = cn.get(&child.node_id()) { self.update_child_size(node, width, height); } - if self.pending_layout_damage.get() && self.all_children_match_body() { + if self.all_children_match_body() { self.all_children_resized.trigger(); + if self.toplevel_data.visible.get() { + self.damage(); + } } - self.flush_layout_damage(); } fn node_child_active_changed(self: Rc, child: &dyn Node, active: bool, depth: u32) {