ssh remoting: Hide share button while connecting to project (#19885)

Bennet Bo Fenner and Thorsten created

Co-Authored-by: Thorsten <thorsten@zed.dev>

Release Notes:

- N/A

Co-authored-by: Thorsten <thorsten@zed.dev>

Change summary

crates/recent_projects/src/recent_projects.rs | 2 +-
crates/recent_projects/src/ssh_connections.rs | 4 ++++
crates/title_bar/src/collab.rs                | 9 ++++++++-
crates/workspace/src/workspace.rs             | 2 +-
4 files changed, 14 insertions(+), 3 deletions(-)

Detailed changes

crates/recent_projects/src/recent_projects.rs 🔗

@@ -1,7 +1,7 @@
 pub mod disconnected_overlay;
 mod remote_servers;
 mod ssh_connections;
-pub use ssh_connections::open_ssh_project;
+pub use ssh_connections::{is_connecting_over_ssh, open_ssh_project};
 
 use disconnected_overlay::DisconnectedOverlay;
 use fuzzy::{StringMatch, StringMatchCandidate};

crates/recent_projects/src/ssh_connections.rs 🔗

@@ -689,6 +689,10 @@ impl SshClientDelegate {
     }
 }
 
+pub fn is_connecting_over_ssh(workspace: &Workspace, cx: &AppContext) -> bool {
+    workspace.active_modal::<SshConnectionModal>(cx).is_some()
+}
+
 pub fn connect_over_ssh(
     unique_identifier: String,
     connection_options: SshConnectionOptions,

crates/title_bar/src/collab.rs 🔗

@@ -282,6 +282,13 @@ impl TitleBar {
             return Vec::new();
         };
 
+        let is_connecting_to_project = self
+            .workspace
+            .update(cx, |workspace, cx| {
+                recent_projects::is_connecting_over_ssh(workspace, cx)
+            })
+            .unwrap_or(false);
+
         let room = room.read(cx);
         let project = self.project.read(cx);
         let is_local = project.is_local() || project.is_via_ssh();
@@ -298,7 +305,7 @@ impl TitleBar {
 
         let mut children = Vec::new();
 
-        if is_local && can_share_projects {
+        if is_local && can_share_projects && !is_connecting_to_project {
             children.push(
                 Button::new(
                     "toggle_sharing",

crates/workspace/src/workspace.rs 🔗

@@ -4465,7 +4465,7 @@ impl Workspace {
         self.modal_layer.read(cx).has_active_modal()
     }
 
-    pub fn active_modal<V: ManagedView + 'static>(&mut self, cx: &AppContext) -> Option<View<V>> {
+    pub fn active_modal<V: ManagedView + 'static>(&self, cx: &AppContext) -> Option<View<V>> {
         self.modal_layer.read(cx).active_modal()
     }