diff --git a/crates/call/src/room.rs b/crates/call/src/room.rs index 3a662458f2fa8cbba895befab8b237473c0faa1f..eeb8a6a5d88fef4bd1c679a9d11ed43c656a99fc 100644 --- a/crates/call/src/room.rs +++ b/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); }); } } diff --git a/crates/project/src/project.rs b/crates/project/src/project.rs index a164b5b885f927737efba79a5693ff22aa1500aa..fb4e6b5b803e41a5fc8e713a2800cd2e82602c90 100644 --- a/crates/project/src/project.rs +++ b/crates/project/src/project.rs @@ -175,6 +175,7 @@ pub enum Event { }, RemoteIdChanged(Option), 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) { + cx.emit(Event::Closed); + } + pub fn is_read_only(&self) -> bool { match &self.client_state { Some(ProjectClientState::Remote { diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index 3b1351860bac688369c9cb97225a749f8ed84e30..f752e6d2b6ec6212c1e22ef9f1e38f3cb65048b5 100644 --- a/crates/workspace/src/workspace.rs +++ b/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()