Change summary
crates/gpui2/src/app.rs | 21 ++++++++++++++++-----
crates/gpui2/src/app/entity_map.rs | 2 +-
crates/gpui2/src/app/test_context.rs | 2 +-
crates/live_kit_client2/examples/test_app.rs | 2 +-
crates/zed2/src/zed2.rs | 1 -
5 files changed, 19 insertions(+), 9 deletions(-)
Detailed changes
@@ -234,10 +234,10 @@ impl AppContext {
app_version: platform.app_version().ok(),
};
- Rc::new_cyclic(|this| AppCell {
+ let app = Rc::new_cyclic(|this| AppCell {
app: RefCell::new(AppContext {
this: this.clone(),
- platform,
+ platform: platform.clone(),
app_metadata,
text_system,
flushing_effects: false,
@@ -269,12 +269,21 @@ impl AppContext {
layout_id_buffer: Default::default(),
propagate_event: true,
}),
- })
+ });
+
+ platform.on_quit(Box::new({
+ let cx = app.clone();
+ move || {
+ cx.borrow_mut().shutdown();
+ }
+ }));
+
+ app
}
/// Quit the application gracefully. Handlers registered with `ModelContext::on_app_quit`
/// will be given 100ms to complete before exiting.
- pub fn quit(&mut self) {
+ pub fn shutdown(&mut self) {
let mut futures = Vec::new();
for observer in self.quit_observers.remove(&()) {
@@ -292,8 +301,10 @@ impl AppContext {
{
log::error!("timed out waiting on app_will_quit");
}
+ }
- self.globals_by_type.clear();
+ pub fn quit(&mut self) {
+ self.platform.quit();
}
pub fn app_metadata(&self) -> AppMetadata {
@@ -26,7 +26,7 @@ impl EntityId {
impl Display for EntityId {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- write!(f, "{}", self)
+ write!(f, "{}", self.as_u64())
}
}
@@ -96,7 +96,7 @@ impl TestAppContext {
}
pub fn quit(&self) {
- self.app.borrow_mut().quit();
+ self.app.borrow_mut().shutdown();
}
pub fn refresh(&mut self) -> Result<()> {
@@ -167,7 +167,7 @@ fn main() {
panic!("unexpected message");
}
- cx.update(|cx| cx.quit()).ok();
+ cx.update(|cx| cx.shutdown()).ok();
})
.detach();
});
@@ -502,7 +502,6 @@ fn quit(_: &mut Workspace, _: &Quit, cx: &mut gpui::ViewContext<Workspace>) {
cx.update(|_, cx| {
cx.quit();
})?;
-
anyhow::Ok(())
})
.detach_and_log_err(cx);