diff --git a/crates/gpui/src/view.rs b/crates/gpui/src/view.rs index c6a4d4b52c588716a5c1599ed7691bd07711aa24..47f2809038d650e1f74de96019f134e05f9d6a20 100644 --- a/crates/gpui/src/view.rs +++ b/crates/gpui/src/view.rs @@ -23,6 +23,7 @@ impl Sealed for View {} #[doc(hidden)] pub struct AnyViewState { root_style: Style, + next_stacking_order_id: u16, cache_key: Option, element: Option, } @@ -292,6 +293,7 @@ impl Element for AnyView { let root_style = cx.layout_style(layout_id).unwrap().clone(); let state = AnyViewState { root_style, + next_stacking_order_id: 0, cache_key: None, element: Some(element), }; @@ -314,7 +316,7 @@ impl Element for AnyView { && !cx.window.dirty_views.contains(&self.entity_id()) && !cx.window.refreshing { - cx.reuse_view(); + cx.reuse_view(state.next_stacking_order_id); return; } } @@ -326,6 +328,7 @@ impl Element for AnyView { element.draw(bounds.origin, bounds.size.into(), cx); } + state.next_stacking_order_id = cx.window.next_frame.next_stacking_order_id; state.cache_key = Some(ViewCacheKey { bounds, stacking_order: cx.stacking_order().clone(), diff --git a/crates/gpui/src/window/element_cx.rs b/crates/gpui/src/window/element_cx.rs index ceed10671c9eed9d685444c9b27938c7d1df04f8..132cc72a5c7d344cf3dedbbc693ff2306b5bb8b9 100644 --- a/crates/gpui/src/window/element_cx.rs +++ b/crates/gpui/src/window/element_cx.rs @@ -292,7 +292,7 @@ impl<'a> VisualContext for ElementContext<'a> { } impl<'a> ElementContext<'a> { - pub(crate) fn reuse_view(&mut self) { + pub(crate) fn reuse_view(&mut self, next_stacking_order_id: u16) { let view_id = self.parent_view_id(); let grafted_view_ids = self .cx @@ -333,6 +333,9 @@ impl<'a> ElementContext<'a> { self.window.next_frame.requested_cursor_style = Some(style); } } + + debug_assert!(next_stacking_order_id >= self.window.next_frame.next_stacking_order_id); + self.window.next_frame.next_stacking_order_id = next_stacking_order_id; } pub fn with_text_style(&mut self, style: Option, f: F) -> R