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 | 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 | ||