diff --git a/crates/recent_projects/src/recent_projects.rs b/crates/recent_projects/src/recent_projects.rs index 35ef024743475fc2036600724224f9f3c06bca4a..71a27737bdd1bfc82923a45459b7e100adbbf22e 100644 --- a/crates/recent_projects/src/recent_projects.rs +++ b/crates/recent_projects/src/recent_projects.rs @@ -90,6 +90,18 @@ pub fn init(cx: &mut App) { }); }); + #[cfg(target_os = "windows")] + cx.on_action(|open_wsl: &zed_actions::wsl_actions::OpenWsl, cx| { + let create_new_window = open_wsl.create_new_window; + with_active_or_new_workspace(cx, move |workspace, window, cx| { + let handle = cx.entity().downgrade(); + let fs = workspace.project().read(cx).fs().clone(); + workspace.toggle_modal(window, cx, |window, cx| { + RemoteServerProjects::wsl(create_new_window, fs, window, handle, cx) + }); + }); + }); + cx.on_action(|open_recent: &OpenRecent, cx| { let create_new_window = open_recent.create_new_window; with_active_or_new_workspace(cx, move |workspace, window, cx| { diff --git a/crates/recent_projects/src/remote_servers.rs b/crates/recent_projects/src/remote_servers.rs index f7b9001444dea0371009a2ca878d12ab808a8823..d8dd37485e140d603e219ff6bdf8c9780da51528 100644 --- a/crates/recent_projects/src/remote_servers.rs +++ b/crates/recent_projects/src/remote_servers.rs @@ -522,12 +522,48 @@ impl Mode { } impl RemoteServerProjects { + #[cfg(target_os = "windows")] + pub fn wsl( + create_new_window: bool, + fs: Arc, + window: &mut Window, + workspace: WeakEntity, + cx: &mut Context, + ) -> Self { + Self::new_inner( + Mode::AddWslDistro(AddWslDistro::new(window, cx)), + create_new_window, + fs, + window, + workspace, + cx, + ) + } + pub fn new( create_new_window: bool, fs: Arc, window: &mut Window, workspace: WeakEntity, cx: &mut Context, + ) -> Self { + Self::new_inner( + Mode::default_mode(&BTreeSet::new(), cx), + create_new_window, + fs, + window, + workspace, + cx, + ) + } + + fn new_inner( + mode: Mode, + create_new_window: bool, + fs: Arc, + window: &mut Window, + workspace: WeakEntity, + cx: &mut Context, ) -> Self { let focus_handle = cx.focus_handle(); let mut read_ssh_config = SshSettings::get_global(cx).read_ssh_config; @@ -558,7 +594,7 @@ impl RemoteServerProjects { }); Self { - mode: Mode::default_mode(&BTreeSet::new(), cx), + mode, focus_handle, workspace, retained_connections: Vec::new(), diff --git a/crates/zed_actions/src/lib.rs b/crates/zed_actions/src/lib.rs index 2015f6db3b6c5754fe6b7e433866f05f43de440f..81cca94f067de206a52241d202acf517dc80c614 100644 --- a/crates/zed_actions/src/lib.rs +++ b/crates/zed_actions/src/lib.rs @@ -512,4 +512,13 @@ pub mod wsl_actions { #[serde(default)] pub create_new_window: bool, } + + /// Open a wsl distro. + #[derive(PartialEq, Clone, Deserialize, Default, JsonSchema, Action)] + #[action(namespace = projects)] + #[serde(deny_unknown_fields)] + pub struct OpenWsl { + #[serde(default)] + pub create_new_window: bool, + } }