fix: retain repository status between picker openings
This commit is contained in:
+19
-12
@@ -1830,6 +1830,7 @@ pub struct Editor {
|
||||
startup_diagnostic: Option<StartupDiagnostic>,
|
||||
project_root: PathBuf,
|
||||
file_picker: Option<FilePicker>,
|
||||
picker_repository_changes: Vec<crate::repository::WorkingFileChange>,
|
||||
file_explorer_side: DockSide,
|
||||
file_picker_view: FileView,
|
||||
file_explorer_view: FileView,
|
||||
@@ -1958,6 +1959,7 @@ impl Editor {
|
||||
startup_diagnostic: None,
|
||||
project_root: std::env::current_dir()?,
|
||||
file_picker: None,
|
||||
picker_repository_changes: Vec::new(),
|
||||
file_explorer_side: DockSide::Right,
|
||||
file_picker_view: FileView::Tree,
|
||||
file_explorer_view: FileView::Tree,
|
||||
@@ -4790,21 +4792,24 @@ impl Editor {
|
||||
|
||||
pub(crate) fn set_picker_repository_changes(
|
||||
&mut self,
|
||||
tab: usize,
|
||||
root: &Path,
|
||||
changes: Vec<crate::repository::WorkingFileChange>,
|
||||
) -> bool {
|
||||
let picker = if tab == self.tab_id {
|
||||
self.file_picker.as_mut().filter(|_| self.diff.is_none())
|
||||
} else {
|
||||
self.tabs
|
||||
.get_mut(&tab)
|
||||
.and_then(|tab| tab.file_picker.as_mut().filter(|_| tab.diff.is_none()))
|
||||
};
|
||||
let Some(picker) = picker.filter(|picker| picker.root == root) else {
|
||||
if root != self.project_root {
|
||||
return false;
|
||||
};
|
||||
picker.set_repository_changes(changes)
|
||||
}
|
||||
let mut changed = false;
|
||||
for picker in self.file_picker.iter_mut().chain(
|
||||
self.tabs
|
||||
.values_mut()
|
||||
.filter_map(|tab| tab.file_picker.as_mut()),
|
||||
) {
|
||||
if picker.root == root {
|
||||
changed |= picker.set_repository_changes(changes.clone());
|
||||
}
|
||||
}
|
||||
self.picker_repository_changes = changes;
|
||||
changed
|
||||
}
|
||||
|
||||
pub fn file_explorer_side(&self) -> DockSide {
|
||||
@@ -4861,6 +4866,7 @@ impl Editor {
|
||||
#[cfg(test)]
|
||||
pub(crate) fn set_project_root(&mut self, root: PathBuf) {
|
||||
self.project_root = root;
|
||||
self.picker_repository_changes.clear();
|
||||
}
|
||||
/// Pending decimal prefix for the next Normal/Visual motion or editing action.
|
||||
pub fn count(&self) -> Option<usize> {
|
||||
@@ -5950,7 +5956,8 @@ impl Editor {
|
||||
picker.clear_error();
|
||||
} else {
|
||||
match FilePicker::scan(self.project_root.clone(), presentation, view) {
|
||||
Ok(picker) => {
|
||||
Ok(mut picker) => {
|
||||
picker.set_repository_changes(self.picker_repository_changes.clone());
|
||||
self.file_picker = Some(picker);
|
||||
}
|
||||
Err(error) => {
|
||||
|
||||
Reference in New Issue
Block a user