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| {