fix(region): only display 'Install additional languages' if gnome-language-selector is available
This commit is contained in:
parent
f5f6d3e8f0
commit
a0245a29e8
3 changed files with 52 additions and 13 deletions
24
Cargo.lock
generated
24
Cargo.lock
generated
|
|
@ -1730,6 +1730,7 @@ dependencies = [
|
|||
"udev",
|
||||
"upower_dbus",
|
||||
"url",
|
||||
"which",
|
||||
"xkb-data",
|
||||
"xkeysym",
|
||||
"zbus 5.13.2",
|
||||
|
|
@ -2398,6 +2399,12 @@ dependencies = [
|
|||
"syn 2.0.114",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "env_home"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c7f84e12ccf0a7ddc17a6c41c93326024c42920d7ee630d04950e6926645c0fe"
|
||||
|
||||
[[package]]
|
||||
name = "equator"
|
||||
version = "0.4.2"
|
||||
|
|
@ -8424,6 +8431,17 @@ dependencies = [
|
|||
"web-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "which"
|
||||
version = "8.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d3fabb953106c3c8eea8306e4393700d7657561cb43122571b172bbfb7c7ba1d"
|
||||
dependencies = [
|
||||
"env_home",
|
||||
"rustix 1.1.3",
|
||||
"winsafe",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "widestring"
|
||||
version = "1.2.1"
|
||||
|
|
@ -9072,6 +9090,12 @@ dependencies = [
|
|||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winsafe"
|
||||
version = "0.0.19"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904"
|
||||
|
||||
[[package]]
|
||||
name = "wit-bindgen"
|
||||
version = "0.46.0"
|
||||
|
|
|
|||
|
|
@ -92,6 +92,7 @@ gettext-rs = { version = "0.7.7", features = [
|
|||
], optional = true }
|
||||
num-traits = "0.2"
|
||||
pwhash = "1"
|
||||
which = "8.0.0"
|
||||
|
||||
[dependencies.icu]
|
||||
version = "2.1.1"
|
||||
|
|
|
|||
|
|
@ -26,6 +26,8 @@ use icu::{
|
|||
use locales_rs as locale;
|
||||
use slotmap::{DefaultKey, SlotMap};
|
||||
|
||||
static GNOME_LANGUAGE_SELECTOR: &str = "gnome-language-selector";
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub enum Message {
|
||||
AddLanguage(DefaultKey),
|
||||
|
|
@ -99,6 +101,7 @@ pub struct PageRefresh {
|
|||
region: Option<SystemLocale>,
|
||||
available_languages: SlotMap<DefaultKey, SystemLocale>,
|
||||
system_locales: BTreeMap<String, SystemLocale>,
|
||||
language_selector_available: bool,
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
|
|
@ -113,6 +116,8 @@ pub struct Page {
|
|||
registry: Option<locale::Registry>,
|
||||
expanded_source_popover: Option<usize>,
|
||||
add_language_search: String,
|
||||
/// Whether gnome-language-selector is in the path.
|
||||
language_selector_available: bool,
|
||||
/// Cached LC_NUMERIC locale in icu locale format.
|
||||
numeric_locale: Option<Locale>,
|
||||
/// Cached LC_TIME locale in icu locale format.
|
||||
|
|
@ -165,22 +170,27 @@ impl page::Page<crate::pages::Message> for Page {
|
|||
.on_clear(Message::AddLanguageSearch(String::new()))
|
||||
.apply(Element::from)
|
||||
.map(crate::pages::Message::from);
|
||||
let install_additional_button =
|
||||
widget::button::standard(fl!("install-additional-languages"))
|
||||
.on_press(Message::InstallAdditionalLanguages)
|
||||
.apply(widget::container)
|
||||
.width(Length::Fill)
|
||||
.align_x(Alignment::End)
|
||||
.apply(Element::from)
|
||||
.map(crate::pages::Message::from);
|
||||
|
||||
context_drawer(
|
||||
let drawer = context_drawer(
|
||||
self.add_language_view().map(crate::pages::Message::from),
|
||||
crate::pages::Message::CloseContextDrawer,
|
||||
)
|
||||
.title(fl!("add-language", "context"))
|
||||
.header(search)
|
||||
.footer(install_additional_button)
|
||||
.header(search);
|
||||
|
||||
if self.language_selector_available {
|
||||
let install_additional_button =
|
||||
widget::button::standard(fl!("install-additional-languages"))
|
||||
.on_press(Message::InstallAdditionalLanguages)
|
||||
.apply(widget::container)
|
||||
.width(Length::Fill)
|
||||
.align_x(Alignment::End)
|
||||
.apply(Element::from)
|
||||
.map(crate::pages::Message::from);
|
||||
|
||||
drawer.footer(install_additional_button)
|
||||
} else {
|
||||
drawer
|
||||
}
|
||||
}
|
||||
ContextView::Region => {
|
||||
let search = widget::search_input("", &self.add_language_search)
|
||||
|
|
@ -259,7 +269,7 @@ impl Page {
|
|||
|
||||
Message::InstallAdditionalLanguages => {
|
||||
return cosmic::task::future(async move {
|
||||
_ = tokio::process::Command::new("gnome-language-selector")
|
||||
_ = tokio::process::Command::new(GNOME_LANGUAGE_SELECTOR)
|
||||
.status()
|
||||
.await;
|
||||
|
||||
|
|
@ -275,6 +285,7 @@ impl Page {
|
|||
self.language = page_refresh.language;
|
||||
self.region = page_refresh.region;
|
||||
self.registry = Some(page_refresh.registry.0);
|
||||
self.language_selector_available = page_refresh.language_selector_available;
|
||||
self.numeric_locale = self.icu_locale_from_env("LC_NUMERIC");
|
||||
self.time_locale = self.icu_locale_from_env("LC_TIME");
|
||||
}
|
||||
|
|
@ -765,6 +776,8 @@ pub async fn page_reload() -> eyre::Result<PageRefresh> {
|
|||
available_languages.insert(language);
|
||||
}
|
||||
|
||||
let language_selector_available = which::which(GNOME_LANGUAGE_SELECTOR).is_ok();
|
||||
|
||||
Ok(PageRefresh {
|
||||
config,
|
||||
registry: Registry(registry),
|
||||
|
|
@ -772,6 +785,7 @@ pub async fn page_reload() -> eyre::Result<PageRefresh> {
|
|||
region,
|
||||
available_languages,
|
||||
system_locales,
|
||||
language_selector_available,
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue