Closes #ISSUE Release Notes: - N/A *or* Added/Fixed/Improved ...
Unified · Split
| @@ -818,6 +818,24 @@ impl SettingsWindow { · 817 unmodified lines | ||
| 818 | 818 | } |
| 819 | 819 | |
| 820 | 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 | 839 | let mut navbar_entries = Vec::with_capacity(self.navbar_entries.len()); |
| 822 | 840 | for (page_index, page) in self.pages.iter().enumerate() { |
| 823 | 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 | 883 | self.navbar_entries = navbar_entries; |
| 845 | 884 | } |
| 846 | 885 | |
| @@ -1046,7 +1085,7 @@ impl SettingsWindow { · 199 unmodified lines | ||
| 1046 | 1085 | return; |
| 1047 | 1086 | } |
| 1048 | 1087 | self.current_file = self.files[ix].0.clone(); |
| 1049 | − self.navbar_entry = 0; | |
| 1088 | + // self.navbar_entry = 0; | |
| 1050 | 1089 | self.build_ui(cx); |
| 1051 | 1090 | } |
| 1052 | 1091 | |