Fix confusing error message

Conrad Irwin created

Change summary

crates/gpui2/src/element.rs     | 5 ++++-
crates/gpui2/src/interactive.rs | 7 ++++---
2 files changed, 8 insertions(+), 4 deletions(-)

Detailed changes

crates/gpui2/src/element.rs 🔗

@@ -134,7 +134,10 @@ where
                         .layout(state, frame_state.as_mut().unwrap(), cx);
                 }
             }
-            _ => panic!("must call initialize before layout"),
+            ElementRenderPhase::Start => panic!("must call initialize before layout"),
+            ElementRenderPhase::LayoutRequested { .. } | ElementRenderPhase::Painted => {
+                panic!("element rendered twice")
+            }
         };
 
         self.phase = ElementRenderPhase::LayoutRequested {

crates/gpui2/src/interactive.rs 🔗

@@ -397,9 +397,10 @@ pub trait ElementInteraction<V: 'static>: 'static {
                         None
                     }),
                 ));
-                let result = stateful.stateless.initialize(cx, f);
-                stateful.key_listeners.pop();
-                result
+
+                cx.with_key_dispatch_context(stateful.dispatch_context.clone(), |cx| {
+                    cx.with_key_listeners(mem::take(&mut stateful.key_listeners), f)
+                })
             })
         } else {
             let stateless = self.as_stateless_mut();