Update followers when navigating back and forth

Antonio Scandurra created

Change summary

crates/server/src/rpc.rs     | 23 +++++++++++++++++++++++
crates/workspace/src/pane.rs |  9 +++++----
2 files changed, 28 insertions(+), 4 deletions(-)

Detailed changes

crates/server/src/rpc.rs 🔗

@@ -4561,6 +4561,29 @@ mod tests {
             })
             .await;
 
+        // When client A navigates back and forth, client B does so as well.
+        workspace_a
+            .update(cx_a, |workspace, cx| {
+                workspace::Pane::go_back(workspace, None, cx)
+            })
+            .await;
+        workspace_b
+            .condition(cx_b, |workspace, cx| {
+                workspace.active_item(cx).unwrap().id() == editor_b2.id()
+            })
+            .await;
+
+        workspace_a
+            .update(cx_a, |workspace, cx| {
+                workspace::Pane::go_forward(workspace, None, cx)
+            })
+            .await;
+        workspace_b
+            .condition(cx_b, |workspace, cx| {
+                workspace.active_item(cx).unwrap().id() == editor_b1.id()
+            })
+            .await;
+
         // Changes to client A's editor are reflected on client B.
         editor_a1.update(cx_a, |editor, cx| {
             editor.select_ranges([1..1, 2..2], None, cx);

crates/workspace/src/pane.rs 🔗

@@ -206,10 +206,6 @@ impl Pane {
                     }
 
                     let prev_active_index = mem::replace(&mut pane.active_item_index, index);
-                    pane.focus_active_item(cx);
-                    pane.update_toolbar(cx);
-                    cx.emit(Event::ActivateItem { local: true });
-                    cx.notify();
 
                     let mut navigated = prev_active_index != pane.active_item_index;
                     if let Some(data) = entry.data {
@@ -217,6 +213,11 @@ impl Pane {
                     }
 
                     if navigated {
+                        pane.focus_active_item(cx);
+                        pane.update_toolbar(cx);
+                        pane.activate(cx);
+                        cx.emit(Event::ActivateItem { local: true });
+                        cx.notify();
                         break None;
                     }
                 }