diff --git a/crates/gpui/src/platform/mac/window.rs b/crates/gpui/src/platform/mac/window.rs index 09181d5766..793caca8d2 100644 --- a/crates/gpui/src/platform/mac/window.rs +++ b/crates/gpui/src/platform/mac/window.rs @@ -337,7 +337,6 @@ struct MacWindowState { handle: AnyWindowHandle, executor: ForegroundExecutor, native_window: id, - native_window_was_closed: bool, native_view: NonNull, display_link: Option, renderer: renderer::Renderer, @@ -605,6 +604,10 @@ impl MacWindow { registerForDraggedTypes: NSArray::arrayWithObject(nil, NSFilenamesPboardType) ]; + let () = msg_send![ + native_window, + setReleasedWhenClosed: NO + ]; let native_view: id = msg_send![VIEW_CLASS, alloc]; let native_view = NSView::init(native_view); @@ -622,7 +625,6 @@ impl MacWindow { handle, executor, native_window, - native_window_was_closed: false, native_view: NonNull::new_unchecked(native_view), display_link: None, renderer: renderer::new_renderer( @@ -770,19 +772,17 @@ impl Drop for MacWindow { this.renderer.destroy(); let window = this.native_window; this.display_link.take(); - if !this.native_window_was_closed { - unsafe { - this.native_window.setDelegate_(nil); - } - - this.executor - .spawn(async move { - unsafe { - window.close(); - } - }) - .detach(); + unsafe { + this.native_window.setDelegate_(nil); } + this.executor + .spawn(async move { + unsafe { + window.close(); + window.autorelease(); + } + }) + .detach(); } } @@ -1592,7 +1592,6 @@ extern "C" fn close_window(this: &Object, _: Sel) { let close_callback = { let window_state = get_window_state(this); let mut lock = window_state.as_ref().lock(); - lock.native_window_was_closed = true; lock.close_callback.take() };