Fix panic on quit
This commit is contained in:
parent
107c3d7f67
commit
47b4d9942f
3 changed files with 21 additions and 6 deletions
|
@ -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();
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -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<'_> {
|
||||||
|
|
|
@ -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());
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue