diff --git a/crates/workspace/src/pane.rs b/crates/workspace/src/pane.rs index 5d7f373b2f..031b06fe27 100644 --- a/crates/workspace/src/pane.rs +++ b/crates/workspace/src/pane.rs @@ -201,27 +201,19 @@ impl Pane { .upgrade(cx) .and_then(|v| pane.index_for_item(v.as_ref())) { - if let Some(item) = pane.active_item() { - pane.nav_history.borrow_mut().set_mode(mode); - item.deactivated(cx); - pane.nav_history - .borrow_mut() - .set_mode(NavigationMode::Normal); - } + let prev_active_item_index = pane.active_item_index; + pane.nav_history.borrow_mut().set_mode(mode); + pane.activate_item(index, true, cx); + pane.nav_history + .borrow_mut() + .set_mode(NavigationMode::Normal); - let prev_active_index = mem::replace(&mut pane.active_item_index, index); - - let mut navigated = prev_active_index != pane.active_item_index; + let mut navigated = prev_active_item_index != pane.active_item_index; if let Some(data) = entry.data { navigated |= pane.active_item()?.navigate(data, cx); } if navigated { - pane.focus_active_item(cx); - pane.update_toolbar(cx); - pane.activate(cx); - cx.emit(Event::ActivateItem { local: true }); - cx.notify(); break None; } } @@ -377,10 +369,12 @@ impl Pane { } pub fn activate_item(&mut self, index: usize, local: bool, cx: &mut ViewContext) { + use NavigationMode::{GoingBack, GoingForward}; if index < self.items.len() { let prev_active_item_ix = mem::replace(&mut self.active_item_index, index); - if prev_active_item_ix != self.active_item_index - && prev_active_item_ix < self.items.len() + if matches!(self.nav_history.borrow().mode, GoingBack | GoingForward) + || (prev_active_item_ix != self.active_item_index + && prev_active_item_ix < self.items.len()) { self.items[prev_active_item_ix].deactivated(cx); cx.emit(Event::ActivateItem { local });