diff --git a/crates/sidebar/src/sidebar.rs b/crates/sidebar/src/sidebar.rs index d12badb48c00e965b97e4d0af82c624c7f549069..2872853b532122f7e19d3986c719f02f3ea3b000 100644 --- a/crates/sidebar/src/sidebar.rs +++ b/crates/sidebar/src/sidebar.rs @@ -1676,6 +1676,10 @@ impl Sidebar { let multi_workspace = multi_workspace.clone(); let project_group_key = project_group_key.clone(); + let has_multiple_projects = multi_workspace + .read_with(cx, |mw, _| mw.project_group_keys().count() >= 2) + .unwrap_or(false); + let menu = ContextMenu::build_persistent(window, cx, move |menu, _window, menu_cx| { let mut menu = menu @@ -1730,10 +1734,12 @@ impl Sidebar { }, ); - let menu = if project_group_key.host().is_none() { + let menu = if project_group_key.host().is_none() + && has_multiple_projects + { menu.entry( "Open Project in New Window", - None, + Some(Box::new(workspace::MoveProjectToNewWindow)), { let project_group_key = project_group_key.clone(); let multi_workspace = multi_workspace.clone(); diff --git a/crates/workspace/src/multi_workspace.rs b/crates/workspace/src/multi_workspace.rs index 3d60b08449cd032cfdae8f98e028837a247d8491..9615de53a50a8d1380c97c7840aec2f9fa6973b8 100644 --- a/crates/workspace/src/multi_workspace.rs +++ b/crates/workspace/src/multi_workspace.rs @@ -54,6 +54,8 @@ actions!( ShowFewerThreads, /// Creates a new thread in the current workspace. NewThread, + /// Moves the active project to a new window. + MoveProjectToNewWindow, ] ); @@ -1714,6 +1716,18 @@ impl Render for MultiWorkspace { } }, )) + .when(self.project_group_keys.len() >= 2, |el| { + el.on_action(cx.listener( + |this: &mut Self, _: &MoveProjectToNewWindow, window, cx| { + let key = this.project_group_key_for_workspace( + this.workspace(), + cx, + ); + this.open_project_group_in_new_window(&key, window, cx) + .detach_and_log_err(cx); + }, + )) + }) }) .when( self.sidebar_open() && self.multi_workspace_enabled(cx), diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index 81224c0e2db520a278bfb21429e211ba9a4f09ae..98425f2523fa2d6b47cca3828f754b0ac8f9f4ce 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -31,10 +31,10 @@ mod workspace_settings; pub use crate::notifications::NotificationFrame; pub use dock::Panel; pub use multi_workspace::{ - CloseWorkspaceSidebar, DraggedSidebar, FocusWorkspaceSidebar, MultiWorkspace, - MultiWorkspaceEvent, NewThread, NextProject, NextThread, PreviousProject, PreviousThread, - ShowFewerThreads, ShowMoreThreads, Sidebar, SidebarEvent, SidebarHandle, SidebarRenderState, - SidebarSide, ToggleWorkspaceSidebar, sidebar_side_context_menu, + CloseWorkspaceSidebar, DraggedSidebar, FocusWorkspaceSidebar, MoveProjectToNewWindow, + MultiWorkspace, MultiWorkspaceEvent, NewThread, NextProject, NextThread, PreviousProject, + PreviousThread, ShowFewerThreads, ShowMoreThreads, Sidebar, SidebarEvent, SidebarHandle, + SidebarRenderState, SidebarSide, ToggleWorkspaceSidebar, sidebar_side_context_menu, }; pub use path_list::{PathList, SerializedPathList}; pub use toast_layer::{ToastAction, ToastLayer, ToastView};