settings_ui: Preserve selected nav entry when changing files (#39721)
Closes #ISSUE Release Notes: - N/A *or* Added/Fixed/Improved ...
This commit is contained in:
@@ -818,6 +818,24 @@ impl SettingsWindow {
|
||||
}
|
||||
|
||||
fn build_navbar(&mut self) {
|
||||
let mut prev_navbar_state = HashMap::new();
|
||||
let mut root_entry = "";
|
||||
let mut prev_selected_entry = None;
|
||||
for (index, entry) in self.navbar_entries.iter().enumerate() {
|
||||
let sub_entry_title;
|
||||
if entry.is_root {
|
||||
sub_entry_title = None;
|
||||
root_entry = entry.title;
|
||||
} else {
|
||||
sub_entry_title = Some(entry.title);
|
||||
}
|
||||
let key = (root_entry, sub_entry_title);
|
||||
if index == self.navbar_entry {
|
||||
prev_selected_entry = Some(key);
|
||||
}
|
||||
prev_navbar_state.insert(key, entry.expanded);
|
||||
}
|
||||
|
||||
let mut navbar_entries = Vec::with_capacity(self.navbar_entries.len());
|
||||
for (page_index, page) in self.pages.iter().enumerate() {
|
||||
navbar_entries.push(NavBarEntry {
|
||||
@@ -841,6 +859,27 @@ impl SettingsWindow {
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
let mut root_entry = "";
|
||||
let mut found_nav_entry = false;
|
||||
for (index, entry) in navbar_entries.iter_mut().enumerate() {
|
||||
let sub_entry_title;
|
||||
if entry.is_root {
|
||||
root_entry = entry.title;
|
||||
sub_entry_title = None;
|
||||
} else {
|
||||
sub_entry_title = Some(entry.title);
|
||||
};
|
||||
let key = (root_entry, sub_entry_title);
|
||||
if Some(key) == prev_selected_entry {
|
||||
self.navbar_entry = index;
|
||||
found_nav_entry = true;
|
||||
}
|
||||
entry.expanded = *prev_navbar_state.get(&key).unwrap_or(&false);
|
||||
}
|
||||
if !found_nav_entry {
|
||||
self.navbar_entry = 0;
|
||||
}
|
||||
self.navbar_entries = navbar_entries;
|
||||
}
|
||||
|
||||
@@ -1046,7 +1085,7 @@ impl SettingsWindow {
|
||||
return;
|
||||
}
|
||||
self.current_file = self.files[ix].0.clone();
|
||||
self.navbar_entry = 0;
|
||||
// self.navbar_entry = 0;
|
||||
self.build_ui(cx);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user