Return "open in new window" as default in recent projects (#8798)

Jason Lee created

https://github.com/zed-industries/zed/assets/5518/8bbd13a7-9144-48b0-9bc8-6651725476f8

Closes https://github.com/zed-industries/zed/issues/8651

Reworks `recent_projects::OpenRecent` action with collab projects in mind:
* keep the "open in new window" behavior for corresponding menu and command entries
* use new, "reuse current window" behavior in the recent projects picker up in the toolbar

This way, old Zed behavior is not customizable, kept as original in all main use cases — so that projects shared via remote entities: a channel and a call, are never accidentally closed, breaking the sharing. 

Release Notes:

- Return "open in new window" as default in recent projects

Change summary

crates/recent_projects/src/recent_projects.rs | 14 +++++++-------
crates/zed/src/app_menus.rs                   |  2 +-
2 files changed, 8 insertions(+), 8 deletions(-)

Detailed changes

crates/recent_projects/src/recent_projects.rs 🔗

@@ -16,10 +16,14 @@ use workspace::{ModalView, Workspace, WorkspaceId, WorkspaceLocation, WORKSPACE_
 
 #[derive(PartialEq, Clone, Deserialize, Default)]
 pub struct OpenRecent {
-    #[serde(default)]
+    #[serde(default = "default_create_new_window")]
     pub create_new_window: bool,
 }
 
+fn default_create_new_window() -> bool {
+    true
+}
+
 gpui::impl_actions!(projects, [OpenRecent]);
 
 pub fn init(cx: &mut AppContext) {
@@ -268,7 +272,7 @@ impl PickerDelegate for RecentProjectsDelegate {
                                     workspace
                                         .update(&mut cx, |workspace, cx| {
                                             workspace.open_workspace_for_paths(
-                                                replace_current_window,
+                                                true,
                                                 candidate_paths,
                                                 cx,
                                             )
@@ -279,11 +283,7 @@ impl PickerDelegate for RecentProjectsDelegate {
                                 }
                             })
                         } else {
-                            workspace.open_workspace_for_paths(
-                                replace_current_window,
-                                candidate_paths,
-                                cx,
-                            )
+                            workspace.open_workspace_for_paths(false, candidate_paths, cx)
                         }
                     } else {
                         Task::ready(Ok(()))

crates/zed/src/app_menus.rs 🔗

@@ -40,7 +40,7 @@ pub fn app_menus() -> Vec<Menu<'static>> {
                 MenuItem::action(
                     "Open Recent...",
                     recent_projects::OpenRecent {
-                        create_new_window: false,
+                        create_new_window: true,
                     },
                 ),
                 MenuItem::separator(),