From 5df1318e75d4ac4e7c159d04568bfe40dbbe206e Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Fri, 16 Feb 2024 19:06:11 +0100 Subject: [PATCH] Don't use stale layout when view cache is invalidated in GPUI (#7914) When a view is invalidated, we want to participate in Taffy layout with an accurate style rather than the dummy style we use when a view is cached. Previously, we only detected invalidation during paint. This adds logic to layout as well to avoid using the dummy style when dirty. Release Notes: - N/A --------- Co-authored-by: Nathan --- crates/gpui/src/view.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/crates/gpui/src/view.rs b/crates/gpui/src/view.rs index d171cada4e315399e8414822664c36064ef8ac13..207eac63817a2b688a2d8a6c05cc00262bbf1da9 100644 --- a/crates/gpui/src/view.rs +++ b/crates/gpui/src/view.rs @@ -282,7 +282,10 @@ impl Element for AnyView { cx: &mut ElementContext, ) -> (LayoutId, Self::State) { cx.with_view_id(self.entity_id(), |cx| { - if self.cache { + if self.cache + && !cx.window.dirty_views.contains(&self.entity_id()) + && !cx.window.refreshing + { if let Some(state) = state { let layout_id = cx.request_layout(&state.root_style, None); return (layout_id, state); @@ -313,8 +316,6 @@ impl Element for AnyView { && cache_key.content_mask == cx.content_mask() && cache_key.stacking_order == *cx.stacking_order() && cache_key.text_style == cx.text_style() - && !cx.window.dirty_views.contains(&self.entity_id()) - && !cx.window.refreshing { cx.reuse_view(state.next_stacking_order_id); return;