improv(region): allow deselecting languages in the language context drawer

This commit is contained in:
Michael Aaron Murphy 2024-11-27 08:20:25 +01:00
parent 1d2c027478
commit a4a244ce87
No known key found for this signature in database
GPG key ID: B2732D4240C9212C

View file

@ -37,6 +37,7 @@ pub enum Message {
SourceContext(SourceContext), SourceContext(SourceContext),
Refresh(Arc<eyre::Result<PageRefresh>>), Refresh(Arc<eyre::Result<PageRefresh>>),
RegionContext, RegionContext,
RemoveLanguage(DefaultKey),
} }
impl From<Message> for crate::app::Message { impl From<Message> for crate::app::Message {
@ -164,9 +165,18 @@ impl Page {
} }
} }
Message::SelectRegion(id) => { Message::RemoveLanguage(id) => {
let mut commands = Vec::with_capacity(2); 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)) = if let Some((region, language)) =
self.available_languages.get(id).zip(self.language.as_ref()) self.available_languages.get(id).zip(self.language.as_ref())
{ {
@ -175,14 +185,11 @@ impl Page {
let lang = language.lang_code.clone(); let lang = language.lang_code.clone();
let region = region.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; _ = set_locale(lang, region).await;
Message::Refresh(Arc::new(page_reload().await)) Message::Refresh(Arc::new(page_reload().await))
})); });
} }
commands.push(cosmic::Task::done(crate::app::Message::CloseContextDrawer));
return cosmic::Task::batch(commands);
} }
Message::AddLanguageContext => { Message::AddLanguageContext => {
@ -339,10 +346,10 @@ impl Page {
.class(cosmic::theme::Container::List) .class(cosmic::theme::Container::List)
.apply(widget::button::custom) .apply(widget::button::custom)
.class(cosmic::theme::Button::Transparent) .class(cosmic::theme::Button::Transparent)
.on_press_maybe(if is_installed { .on_press(if is_installed {
None Message::RemoveLanguage(id)
} else { } else {
Some(Message::AddLanguage(id)) Message::AddLanguage(id)
}); });
list = list.add(button) list = list.add(button)