Focus followed items when they become active if the pane is active

Antonio Scandurra and Nathan Sobo created

Co-Authored-By: Nathan Sobo <nathan@zed.dev>

Change summary

crates/server/src/rpc.rs          | 3 +--
crates/workspace/src/pane.rs      | 2 +-
crates/workspace/src/workspace.rs | 3 +++
3 files changed, 5 insertions(+), 3 deletions(-)

Detailed changes

crates/server/src/rpc.rs 🔗

@@ -4311,6 +4311,7 @@ mod tests {
                 .downcast::<Editor>()
                 .unwrap()
         });
+        assert!(cx_b.read(|cx| editor_b2.is_focused(cx)));
         assert_eq!(
             editor_b2.read_with(cx_b, |editor, cx| editor.project_path(cx)),
             Some((worktree_id, "2.txt").into())
@@ -4349,12 +4350,10 @@ mod tests {
             .condition(cx_b, |editor, cx| editor.text(cx) == "TWO")
             .await;
 
-        eprintln!("=========================>>>>>>>>");
         editor_a1.update(cx_a, |editor, cx| {
             editor.select_ranges([3..3], None, cx);
             editor.set_scroll_position(vec2f(0., 100.), cx);
         });
-        eprintln!("=========================<<<<<<<<<");
         editor_b1
             .condition(cx_b, |editor, cx| editor.selected_ranges(cx) == vec![3..3])
             .await;

crates/workspace/src/pane.rs 🔗

@@ -485,7 +485,7 @@ impl Pane {
         cx.notify();
     }
 
-    fn focus_active_item(&mut self, cx: &mut ViewContext<Self>) {
+    pub fn focus_active_item(&mut self, cx: &mut ViewContext<Self>) {
         if let Some(active_item) = self.active_item() {
             cx.focus(active_item);
         }

crates/workspace/src/workspace.rs 🔗

@@ -1902,6 +1902,9 @@ impl Workspace {
 
         for (pane, item) in items_to_add {
             Pane::add_item(self, pane.clone(), item.boxed_clone(), false, cx);
+            if pane == self.active_pane {
+                pane.update(cx, |pane, cx| pane.focus_active_item(cx));
+            }
             cx.notify();
         }
         None