Checkpoint

Antonio Scandurra created

Change summary

crates/gpui3/src/view.rs                  | 13 ++++++++++---
crates/gpui3_macros/src/derive_element.rs |  4 +++-
2 files changed, 13 insertions(+), 4 deletions(-)

Detailed changes

crates/gpui3/src/view.rs 🔗

@@ -67,7 +67,11 @@ impl<V: 'static + Send + Sync> Element for View<V> {
         _: Option<Self::ElementState>,
         cx: &mut ViewContext<()>,
     ) -> Self::ElementState {
-        self.state.update(cx, |state, cx| (self.render)(state, cx))
+        self.state.update(cx, |state, cx| {
+            let mut any_element = (self.render)(state, cx);
+            any_element.initialize(state, cx);
+            any_element
+        })
     }
 
     fn layout(
@@ -161,8 +165,11 @@ impl<V: Send + Sync + 'static> ViewObject for View<V> {
 
     fn initialize(&mut self, cx: &mut WindowContext) -> AnyBox {
         cx.with_element_id(self.entity_id(), |cx| {
-            self.state
-                .update(cx, |state, cx| Box::new((self.render)(state, cx)) as AnyBox)
+            self.state.update(cx, |state, cx| {
+                let mut any_element = Box::new((self.render)(state, cx));
+                any_element.initialize(state, cx);
+                any_element as AnyBox
+            })
         })
     }
 

crates/gpui3_macros/src/derive_element.rs 🔗

@@ -65,7 +65,9 @@ pub fn derive_element(input: TokenStream) -> TokenStream {
             ) -> Self::ElementState {
                 use gpui3::IntoAnyElement;
 
-                self.render(view_state, cx).into_any()
+                let mut element = self.render(view_state, cx).into_any();
+                element.initialize(view_state, cx);
+                element
             }
 
             fn layout(