From 6cc8cd2c69667304bc9a882a54a69fb0f8d90f4b Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Thu, 9 Apr 2026 20:45:56 -0700 Subject: [PATCH] Wait to add workspace to multi-workspace until deserialization finishes --- crates/workspace/src/workspace.rs | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index 81224c0e2db520a278bfb21429e211ba9a4f09ae..a55b8729f0e150bfb0ec3c212e8e9dbf10add056 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -1914,6 +1914,7 @@ impl Workspace { OpenMode::NewWindow => None, _ => requesting_window, }; + let reuse_existing_window = window_to_replace.is_some(); let (window, workspace): (WindowHandle, Entity) = if let Some(window) = window_to_replace { @@ -1922,7 +1923,7 @@ impl Workspace { .map(|w| w.centered_layout) .unwrap_or(false); - let workspace = window.update(cx, |multi_workspace, window, cx| { + let workspace = window.update(cx, |_multi_workspace, window, cx| { let workspace = cx.new(|cx| { let mut workspace = Workspace::new( Some(workspace_id), @@ -1941,17 +1942,6 @@ impl Workspace { workspace }); - match open_mode { - OpenMode::Activate => { - multi_workspace.activate(workspace.clone(), window, cx); - } - OpenMode::Add => { - multi_workspace.add(workspace.clone(), &*window, cx); - } - OpenMode::NewWindow => { - unreachable!() - } - } workspace })?; (window, workspace) @@ -2059,6 +2049,20 @@ impl Workspace { } } + if reuse_existing_window { + window.update(cx, |multi_workspace, window, cx| match open_mode { + OpenMode::Activate => { + multi_workspace.activate(workspace.clone(), window, cx); + } + OpenMode::Add => { + multi_workspace.add(workspace.clone(), &*window, cx); + } + OpenMode::NewWindow => { + unreachable!() + } + })?; + } + window .update(cx, |_, _window, cx| { workspace.update(cx, |this: &mut Workspace, cx| {