summaryrefslogtreecommitdiff
path: root/schist_desktop_gui/src/gui/components/navigation/navigation_set_options.rs
diff options
context:
space:
mode:
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.rs9
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,