improv(region): allow deselecting languages in the language context drawer
This commit is contained in:
parent
1d2c027478
commit
a4a244ce87
1 changed files with 17 additions and 10 deletions
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue