Change summary
crates/gpui2/src/element.rs | 5 ++++-
crates/gpui2/src/interactive.rs | 7 ++++---
2 files changed, 8 insertions(+), 4 deletions(-)
Detailed changes
@@ -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 {
@@ -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();