diff --git a/crates/git_ui/src/git_panel.rs b/crates/git_ui/src/git_panel.rs index 7bd4f3b32a6bd1fa2be6e26d5662f51c80e5a0e6..b9846e1df7430d7b9cf9a5267f790d44e6649447 100644 --- a/crates/git_ui/src/git_panel.rs +++ b/crates/git_ui/src/git_panel.rs @@ -1133,7 +1133,22 @@ impl GitPanel { } if matches!(self.entries.get(new_index), Some(GitListEntry::Header(..))) { - self.selected_entry = Some(new_index.saturating_sub(1)); + self.selected_entry = match &self.view_mode { + GitPanelViewMode::Flat => Some(new_index.saturating_sub(1)), + GitPanelViewMode::Tree(tree_view_state) => { + maybe!({ + let current_logical_index = tree_view_state + .logical_indices + .iter() + .position(|&i| i == new_index)?; + + tree_view_state + .logical_indices + .get(current_logical_index.saturating_sub(1)) + .copied() + }) + } + }; } else { self.selected_entry = Some(new_index); }