From a4a244ce87bce494a8db837b99fb2f4e591f7bed Mon Sep 17 00:00:00 2001 From: Michael Aaron Murphy Date: Wed, 27 Nov 2024 08:20:25 +0100 Subject: [PATCH] improv(region): allow deselecting languages in the language context drawer --- cosmic-settings/src/pages/time/region.rs | 27 +++++++++++++++--------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/cosmic-settings/src/pages/time/region.rs b/cosmic-settings/src/pages/time/region.rs index 2758bf9..78bda02 100644 --- a/cosmic-settings/src/pages/time/region.rs +++ b/cosmic-settings/src/pages/time/region.rs @@ -37,6 +37,7 @@ pub enum Message { SourceContext(SourceContext), Refresh(Arc>), RegionContext, + RemoveLanguage(DefaultKey), } impl From for crate::app::Message { @@ -164,9 +165,18 @@ impl Page { } } - Message::SelectRegion(id) => { - let mut commands = Vec::with_capacity(2); + Message::RemoveLanguage(id) => { + if let Some(language) = self.available_languages.remove(id) { + if let Some((config, locales)) = self.config.as_mut() { + if let Some(pos) = locales.iter().position(|l| l == &language.lang_code) { + locales.remove(pos); + _ = config.set("system_locales", &locales); + } + } + } + } + Message::SelectRegion(id) => { if let Some((region, language)) = self.available_languages.get(id).zip(self.language.as_ref()) { @@ -175,14 +185,11 @@ impl Page { let lang = language.lang_code.clone(); let region = region.lang_code.clone(); - commands.push(cosmic::task::future(async move { + return cosmic::task::future(async move { _ = set_locale(lang, region).await; Message::Refresh(Arc::new(page_reload().await)) - })); + }); } - - commands.push(cosmic::Task::done(crate::app::Message::CloseContextDrawer)); - return cosmic::Task::batch(commands); } Message::AddLanguageContext => { @@ -339,10 +346,10 @@ impl Page { .class(cosmic::theme::Container::List) .apply(widget::button::custom) .class(cosmic::theme::Button::Transparent) - .on_press_maybe(if is_installed { - None + .on_press(if is_installed { + Message::RemoveLanguage(id) } else { - Some(Message::AddLanguage(id)) + Message::AddLanguage(id) }); list = list.add(button)