Fix panic on quit

This commit is contained in:
Conrad Irwin 2023-11-27 15:32:26 -07:00
parent 107c3d7f67
commit 47b4d9942f
3 changed files with 21 additions and 6 deletions

View file

@ -683,6 +683,9 @@ impl Drop for MacWindow {
this.executor this.executor
.spawn(async move { .spawn(async move {
unsafe { unsafe {
// todo!() this panic()s when you click the red close button
// unless should_close returns false.
// (luckliy in zed it always returns false)
window.close(); window.close();
} }
}) })

View file

@ -1517,6 +1517,13 @@ impl<'a> WindowContext<'a> {
.set_input_handler(Box::new(input_handler)); .set_input_handler(Box::new(input_handler));
} }
} }
pub fn on_window_should_close(&mut self, f: impl Fn(&mut WindowContext) -> bool + 'static) {
let mut this = self.to_async();
self.window
.platform_window
.on_should_close(Box::new(move || this.update(|_, cx| f(cx)).unwrap_or(true)))
}
} }
impl Context for WindowContext<'_> { impl Context for WindowContext<'_> {

View file

@ -166,12 +166,17 @@ pub fn initialize_workspace(app_state: Arc<AppState>, cx: &mut AppContext) {
// vim::observe_keystrokes(cx); // vim::observe_keystrokes(cx);
// cx.on_window_should_close(|workspace, cx| { let handle = cx.view().downgrade();
// if let Some(task) = workspace.close(&Default::default(), cx) { cx.on_window_should_close(move |cx| {
// task.detach_and_log_err(cx); handle
// } .update(cx, |workspace, cx| {
// false if let Some(task) = workspace.close(&Default::default(), cx) {
// }); task.detach_and_log_err(cx);
}
false
})
.unwrap_or(true)
});
cx.spawn(|workspace_handle, mut cx| async move { cx.spawn(|workspace_handle, mut cx| async move {
let project_panel = ProjectPanel::load(workspace_handle.clone(), cx.clone()); let project_panel = ProjectPanel::load(workspace_handle.clone(), cx.clone());