Fix edge case where the welcome page might open in the dock if the user's actions race the welcome experience action

Mikayla Maki created

Change summary

crates/workspace/src/workspace.rs | 17 +++++++++++++++++
crates/zed/src/zed.rs             |  2 +-
2 files changed, 18 insertions(+), 1 deletion(-)

Detailed changes

crates/workspace/src/workspace.rs 🔗

@@ -1349,6 +1349,23 @@ impl Workspace {
         pane
     }
 
+    pub fn add_item_to_center(
+        &mut self,
+        item: Box<dyn ItemHandle>,
+        cx: &mut ViewContext<Self>,
+    ) -> bool {
+        if let Some(center_pane) = self.last_active_center_pane.clone() {
+            if let Some(center_pane) = center_pane.upgrade(cx) {
+                Pane::add_item(self, &center_pane, item, true, true, None, cx);
+                true
+            } else {
+                false
+            }
+        } else {
+            false
+        }
+    }
+
     pub fn add_item(&mut self, item: Box<dyn ItemHandle>, cx: &mut ViewContext<Self>) {
         let active_pane = self.active_pane().clone();
         Pane::add_item(self, &active_pane, item, true, true, None, cx);

crates/zed/src/zed.rs 🔗

@@ -266,7 +266,7 @@ pub fn init(app_state: &Arc<AppState>, cx: &mut gpui::MutableAppContext) {
             open_new(&app_state, cx, |workspace, cx| {
                 workspace.toggle_sidebar(SidebarSide::Left, cx);
                 let welcome_page = cx.add_view(|cx| welcome::WelcomePage::new(cx));
-                workspace.add_item(Box::new(welcome_page.clone()), cx);
+                workspace.add_item_to_center(Box::new(welcome_page.clone()), cx);
                 Dock::move_dock(workspace, settings::DockAnchor::Bottom, false, cx);
                 cx.focus(welcome_page);
                 cx.notify();