History

settings_ui: Preserve selected nav entry when changing files (#39721)

Closes #ISSUE Release Notes: - N/A *or* Added/Fixed/Improved ...

Ben Kunkle committed 1 year ago

Commit cd679411 parent 669db621 file · +40 −1Browse files

Unified · Split

crates/settings_ui/src/settings_ui.rs+40−1
@@ -818,6 +818,24 @@ impl SettingsWindow { · 817 unmodified lines
818 }818 }
819 819
820 fn build_navbar(&mut self) {820 fn build_navbar(&mut self) {
821 let mut prev_navbar_state = HashMap::new();
822 let mut root_entry = "";
823 let mut prev_selected_entry = None;
824 for (index, entry) in self.navbar_entries.iter().enumerate() {
825 let sub_entry_title;
826 if entry.is_root {
827 sub_entry_title = None;
828 root_entry = entry.title;
829 } else {
830 sub_entry_title = Some(entry.title);
831 }
832 let key = (root_entry, sub_entry_title);
833 if index == self.navbar_entry {
834 prev_selected_entry = Some(key);
835 }
836 prev_navbar_state.insert(key, entry.expanded);
837 }
838
821 let mut navbar_entries = Vec::with_capacity(self.navbar_entries.len());839 let mut navbar_entries = Vec::with_capacity(self.navbar_entries.len());
822 for (page_index, page) in self.pages.iter().enumerate() {840 for (page_index, page) in self.pages.iter().enumerate() {
823 navbar_entries.push(NavBarEntry {841 navbar_entries.push(NavBarEntry {
@@ -841,6 +859,27 @@ impl SettingsWindow { · 17 unmodified lines
841 });859 });
842 }860 }
843 }861 }
862
863 let mut root_entry = "";
864 let mut found_nav_entry = false;
865 for (index, entry) in navbar_entries.iter_mut().enumerate() {
866 let sub_entry_title;
867 if entry.is_root {
868 root_entry = entry.title;
869 sub_entry_title = None;
870 } else {
871 sub_entry_title = Some(entry.title);
872 };
873 let key = (root_entry, sub_entry_title);
874 if Some(key) == prev_selected_entry {
875 self.navbar_entry = index;
876 found_nav_entry = true;
877 }
878 entry.expanded = *prev_navbar_state.get(&key).unwrap_or(&false);
879 }
880 if !found_nav_entry {
881 self.navbar_entry = 0;
882 }
844 self.navbar_entries = navbar_entries;883 self.navbar_entries = navbar_entries;
845 }884 }
846 885
@@ -1046,7 +1085,7 @@ impl SettingsWindow { · 199 unmodified lines
1046 return;1085 return;
1047 }1086 }
1048 self.current_file = self.files[ix].0.clone();1087 self.current_file = self.files[ix].0.clone();
1049 self.navbar_entry = 0;1088 // self.navbar_entry = 0;
1050 self.build_ui(cx);1089 self.build_ui(cx);
1051 }1090 }
1052 1091