@@ -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();
@@ -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),
@@ -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};