From 9b2d3fcd48dd35717ffc57cec46f968d44a1b773 Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Mon, 8 May 2023 17:09:29 -0700 Subject: [PATCH 1/3] Fully remove panes and update internal data structures --- crates/workspace/src/persistence/model.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/crates/workspace/src/persistence/model.rs b/crates/workspace/src/persistence/model.rs index 08da41d7e85560d098807eb0cd3fa070171cd18a..ff027b60427328664b6e1e6242a53c7e48bd07a9 100644 --- a/crates/workspace/src/persistence/model.rs +++ b/crates/workspace/src/persistence/model.rs @@ -147,7 +147,14 @@ impl SerializedPaneGroup { } else { let pane = pane.upgrade(cx)?; workspace - .update(cx, |workspace, cx| workspace.remove_pane(pane, cx)) + .update(cx, |workspace, cx| { + workspace.panes.retain(|p| p != &pane); + cx.focus(workspace.panes.last().unwrap()); + if workspace.last_active_center_pane == Some(pane.downgrade()) { + workspace.last_active_center_pane = None; + } + cx.notify(); + }) .log_err()?; None } From 49335d017a7663e94e27c9d6f5c6c908e684631d Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Mon, 8 May 2023 17:25:28 -0700 Subject: [PATCH 2/3] Add manual removal code to remove_panes --- crates/workspace/src/workspace.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index d69484caa7727b4ced8828800fb438b1c8417cb7..4a6ae57f07898cb41f9e75de61cba21885d7a86f 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -2459,7 +2459,14 @@ impl Workspace { self.remove_panes(child.clone(), cx) } } - Member::Pane(pane) => self.remove_pane(pane.clone(), cx), + Member::Pane(pane) => { + self.panes.retain(|p| p != &pane); + cx.focus(self.panes.last().unwrap()); + if self.last_active_center_pane == Some(pane.downgrade()) { + self.last_active_center_pane = None; + } + cx.notify(); + }, } } From fa049bea6ee22ee83f8598cf93e28b6418a7eebb Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Mon, 8 May 2023 17:31:36 -0700 Subject: [PATCH 3/3] Refactor and fix format --- crates/workspace/src/persistence/model.rs | 9 +-------- crates/workspace/src/workspace.rs | 24 +++++++++++------------ 2 files changed, 13 insertions(+), 20 deletions(-) diff --git a/crates/workspace/src/persistence/model.rs b/crates/workspace/src/persistence/model.rs index ff027b60427328664b6e1e6242a53c7e48bd07a9..e838d22f0d746c7a717dbcac4804dcc3f593a00a 100644 --- a/crates/workspace/src/persistence/model.rs +++ b/crates/workspace/src/persistence/model.rs @@ -147,14 +147,7 @@ impl SerializedPaneGroup { } else { let pane = pane.upgrade(cx)?; workspace - .update(cx, |workspace, cx| { - workspace.panes.retain(|p| p != &pane); - cx.focus(workspace.panes.last().unwrap()); - if workspace.last_active_center_pane == Some(pane.downgrade()) { - workspace.last_active_center_pane = None; - } - cx.notify(); - }) + .update(cx, |workspace, cx| workspace.force_remove_pane(&pane, cx)) .log_err()?; None } diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index 4a6ae57f07898cb41f9e75de61cba21885d7a86f..a57cea526bd950c4be5c0bfc1f7d9a5eecb39cc2 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -1743,16 +1743,12 @@ impl Workspace { fn remove_pane(&mut self, pane: ViewHandle, cx: &mut ViewContext) { if self.center.remove(&pane).unwrap() { - self.panes.retain(|p| p != &pane); - cx.focus(self.panes.last().unwrap()); + self.force_remove_pane(&pane, cx); self.unfollow(&pane, cx); self.last_leaders_by_pane.remove(&pane.downgrade()); for removed_item in pane.read(cx).items() { self.panes_by_item.remove(&removed_item.id()); } - if self.last_active_center_pane == Some(pane.downgrade()) { - self.last_active_center_pane = None; - } cx.notify(); } else { @@ -2460,16 +2456,20 @@ impl Workspace { } } Member::Pane(pane) => { - self.panes.retain(|p| p != &pane); - cx.focus(self.panes.last().unwrap()); - if self.last_active_center_pane == Some(pane.downgrade()) { - self.last_active_center_pane = None; - } - cx.notify(); - }, + self.force_remove_pane(&pane, cx); + } } } + fn force_remove_pane(&mut self, pane: &ViewHandle, cx: &mut ViewContext) { + self.panes.retain(|p| p != pane); + cx.focus(self.panes.last().unwrap()); + if self.last_active_center_pane == Some(pane.downgrade()) { + self.last_active_center_pane = None; + } + cx.notify(); + } + fn serialize_workspace(&self, cx: &AppContext) { fn serialize_pane_handle( pane_handle: &ViewHandle,