mirror of
https://github.com/zed-industries/zed.git
synced 2026-10-19 11:04:06 +00:00
Closes https://github.com/zed-industries/zed/issues/48468 ## Solution This change addresses a macOS shutdown ordering issue where closing the last window with the native close button could clear session state before persistence tasks complete, causing next launch to open no project/untitled. - [crates/workspace/src/workspace.rs](/Users/caleul/Documents/Work/Projects/zed/crates/workspace/src/workspace.rs) - Make `save_last_workspace` dynamic on macOS based on whether closing the last window will quit the app (`on_last_window_closed == quit_app`). - Keeps `save_last_workspace` true only when the window close path is equivalent to quit, so last-session data remains valid only in the intended scenario. - [crates/workspace/src/multi_workspace.rs](/Users/caleul/Documents/Work/Projects/zed/crates/workspace/src/multi_workspace.rs) - In `close_window`, before removing the window, explicitly flush: - workspace serialization tasks - pending workspace removal tasks - multi-workspace serialization task - This prevents losing in-memory state on fast close/quit paths. - [crates/session/src/session.rs](/Users/caleul/Documents/Work/Projects/zed/crates/session/src/session.rs) - Guard `app_will_quit` to only persist window stack when non-empty, preventing empty-stack state from being written during close path that destroys the window stack first. ## Testing - Did you test these changes? - Manual repro/fix confirmed in local testing flow by the previous author. - Please confirm after merge with: 1) open 2–3 projects in workspace sidebar 2) set `on_last_window_closed: "quit_app"` and `restore_on_startup: "last_session"` 3) close with red X 4) relaunch app and verify sessions restore all active workspaces - Are there any parts that need more testing? - Multi-window mixed close scenarios and one-window with dirty non-serializable items. - Regression for non-quit close mode (`on_last_window_closed: "close") to ensure behavior remains unchanged. - How can others test this? - Follow the 4-step repro path above on macOS. - Check logs for `timed out waiting on app_will_quit` in `~/Library/Logs/Zed/Zed.log` and confirm no restore regression. - Platforms tested: - Verified for macOS (target path of bug). - Not validated on Linux/Windows in this patch path. ## Self-Review Checklist - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content adheres to Zed's UI standards (no UI/UX diff here) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes - Closing last macOS window via the red close button now correctly preserves and restores last-session workspace state when configured to quit on last-window close. --------- Co-authored-by: Kirill Bulatov <kirill@zed.dev> |
||
|---|---|---|
| .. | ||
| src | ||
| Cargo.toml | ||
| LICENSE-GPL | ||