Merge pull request #2290 from zed-industries/close-remote-projects-when-leaving-call

Max Brunsfeld created

Close remote project windows when leaving a call

Change summary

crates/call/src/room.rs           | 1 +
crates/project/src/project.rs     | 5 +++++
crates/workspace/src/workspace.rs | 5 +++++
3 files changed, 11 insertions(+)

Detailed changes

crates/call/src/room.rs 🔗

@@ -275,6 +275,7 @@ impl Room {
             if let Some(project) = project.upgrade(cx) {
                 project.update(cx, |project, cx| {
                     project.disconnected_from_host(cx);
+                    project.close(cx);
                 });
             }
         }

crates/project/src/project.rs 🔗

@@ -175,6 +175,7 @@ pub enum Event {
     },
     RemoteIdChanged(Option<u64>),
     DisconnectedFromHost,
+    Closed,
     CollaboratorUpdated {
         old_peer_id: proto::PeerId,
         new_peer_id: proto::PeerId,
@@ -1172,6 +1173,10 @@ impl Project {
         }
     }
 
+    pub fn close(&mut self, cx: &mut ModelContext<Self>) {
+        cx.emit(Event::Closed);
+    }
+
     pub fn is_read_only(&self) -> bool {
         match &self.client_state {
             Some(ProjectClientState::Remote {

crates/workspace/src/workspace.rs 🔗

@@ -598,6 +598,11 @@ impl Workspace {
                     cx.blur();
                 }
 
+                project::Event::Closed => {
+                    let window_id = cx.window_id();
+                    cx.remove_window(window_id);
+                }
+
                 _ => {}
             }
             cx.notify()