diff --git a/crates/gpui/src/app.rs b/crates/gpui/src/app.rs index 892c1295475f06fafb8df3581ef7819c3a568638..725e0416a7de62297458113b15e80e5da6e74fc7 100644 --- a/crates/gpui/src/app.rs +++ b/crates/gpui/src/app.rs @@ -851,6 +851,12 @@ impl MutableAppContext { self.cx.windows.keys().cloned() } + pub fn activate_window(&self, window_id: usize) { + if let Some((_, window)) = self.presenters_and_platform_windows.get(&window_id) { + window.activate() + } + } + pub fn root_view(&self, window_id: usize) -> Option> { self.cx .windows diff --git a/crates/gpui/src/platform.rs b/crates/gpui/src/platform.rs index 0e1bb3fca97f9861a1caa8eaa6d07df62a54f1c1..9d5acf90e98db1c88af9b5178aee3b6a1aad9724 100644 --- a/crates/gpui/src/platform.rs +++ b/crates/gpui/src/platform.rs @@ -96,6 +96,7 @@ pub trait Window: WindowContext { answers: &[&str], done_fn: Box, ); + fn activate(&self); } pub trait WindowContext { diff --git a/crates/gpui/src/platform/mac/window.rs b/crates/gpui/src/platform/mac/window.rs index 518c91a5f541f2598d29200b23146010d1949c81..2d6ea0055e84a9ce17c532101fb528e9138ee135 100644 --- a/crates/gpui/src/platform/mac/window.rs +++ b/crates/gpui/src/platform/mac/window.rs @@ -347,6 +347,12 @@ impl platform::Window for Window { ]; } } + + fn activate(&self) { + unsafe { + let _: () = msg_send![self.0.borrow().native_window, makeKeyAndOrderFront: nil]; + } + } } impl platform::WindowContext for Window { diff --git a/crates/gpui/src/platform/test.rs b/crates/gpui/src/platform/test.rs index 984da925f46e2115bba6a2d27bf02ed509b2df1d..bffa9858159e67d1145af635d2bcca9951fe6c3e 100644 --- a/crates/gpui/src/platform/test.rs +++ b/crates/gpui/src/platform/test.rs @@ -223,6 +223,8 @@ impl super::Window for Window { fn prompt(&self, _: crate::PromptLevel, _: &str, _: &[&str], f: Box) { self.last_prompt.replace(Some(f)); } + + fn activate(&self) {} } pub fn platform() -> Platform { diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index 531d976fd57b02872cdd56bc35fcb937b889bb9f..e1f21237613b56a7c8289c80d585fe70b60b6deb 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -1462,10 +1462,11 @@ pub fn open_paths( // Open paths in existing workspace if possible let mut existing = None; for window_id in cx.window_ids().collect::>() { - if let Some(workspace) = cx.root_view::(window_id) { - if workspace.update(cx, |view, cx| { - if view.contains_paths(abs_paths, cx.as_ref()) { - existing = Some(workspace.clone()); + if let Some(workspace_handle) = cx.root_view::(window_id) { + if workspace_handle.update(cx, |workspace, cx| { + if workspace.contains_paths(abs_paths, cx.as_ref()) { + cx.activate_window(window_id); + existing = Some(workspace_handle.clone()); true } else { false