Change summary
crates/workspace/src/pane.rs | 28 +++++++++++-----------------
1 file changed, 11 insertions(+), 17 deletions(-)
Detailed changes
@@ -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_index = mem::replace(&mut pane.active_item_index, index);
+ 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 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<Self>) {
+ 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 });