From c248d15d131edd6e07a175269c80c33766257d5d Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Fri, 25 Oct 2024 22:04:09 +0300 Subject: [PATCH] Properly deserialize active pane in the workspace (#19744) Without setting the active pane metadata, no center pane events are emitted on start before the pane is focused manually, which breaks deserialization of other components like outline panel, which should show the active pane's active item outlines on start. Release Notes: - N/A Co-authored-by: Thorsten Ball --- crates/workspace/src/workspace.rs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index adc3e687413a51e8c4101102c18e6200b58da524..f9c4e95945b199b6e30a235e830c6d72f01a2f66 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -2947,9 +2947,7 @@ impl Workspace { status_bar.set_active_pane(&pane, cx); }); if self.active_pane != pane { - self.active_pane = pane.clone(); - self.active_item_path_changed(cx); - self.last_active_center_pane = Some(pane.downgrade()); + self.set_active_pane(&pane, cx); } if self.last_active_center_pane.is_none() { @@ -2972,6 +2970,12 @@ impl Workspace { cx.notify(); } + fn set_active_pane(&mut self, pane: &View, cx: &mut ViewContext) { + self.active_pane = pane.clone(); + self.active_item_path_changed(cx); + self.last_active_center_pane = Some(pane.downgrade()); + } + fn handle_panel_focused(&mut self, cx: &mut ViewContext) { self.update_active_view_for_followers(cx); } @@ -4277,12 +4281,11 @@ impl Workspace { // Swap workspace center group workspace.center = PaneGroup::with_root(center_group); - workspace.last_active_center_pane = active_pane.as_ref().map(|p| p.downgrade()); if let Some(active_pane) = active_pane { - workspace.active_pane = active_pane; + workspace.set_active_pane(&active_pane, cx); cx.focus_self(); } else { - workspace.active_pane = workspace.center.first_pane().clone(); + workspace.set_active_pane(&workspace.center.first_pane(), cx); } }