diff options
Diffstat (limited to 'schist_desktop_gui/src/gui/components/navigation/navigation_set_options.rs')
| -rw-r--r-- | schist_desktop_gui/src/gui/components/navigation/navigation_set_options.rs | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/schist_desktop_gui/src/gui/components/navigation/navigation_set_options.rs b/schist_desktop_gui/src/gui/components/navigation/navigation_set_options.rs index c2c9952..3eb455c 100644 --- a/schist_desktop_gui/src/gui/components/navigation/navigation_set_options.rs +++ b/schist_desktop_gui/src/gui/components/navigation/navigation_set_options.rs @@ -1,5 +1,7 @@ use iced::Element; +use crate::traits::Focusable; + use super::{Message, Navigation}; pub enum SetOptionsResult<TOption> { @@ -9,10 +11,12 @@ pub enum SetOptionsResult<TOption> { impl<'a, TOption> Navigation<TOption> where - TOption: Clone + PartialEq + 'a, + TOption: Clone + Focusable + PartialEq + 'a, Element<'a, Message<TOption>>: From<&'a TOption>, { - pub fn set_options(&mut self, options: Vec<TOption>) -> SetOptionsResult<TOption> { + pub fn set_options(&mut self, options: &mut Vec<TOption>) -> SetOptionsResult<TOption> { + options.iter_mut().for_each(TOption::unfocus); + let active_option_index = self.active_option .clone() @@ -31,6 +35,7 @@ where .split_last() .map_or_else(Vec::new, |(_last, rest)| rest.to_vec()); self.active_option = options.last().cloned(); + self.active_option.iter_mut().for_each(TOption::focus); options.last().cloned().map_or( SetOptionsResult::SetOptionsAndKeptSelection, SetOptionsResult::SetOptionsAndSetSelectedOption, |
