feat(theme): GNOME sessions get dark theme preference from gsettings

This commit is contained in:
Eleven 2024-04-26 16:38:32 +02:00 committed by GitHub
parent d138c86a11
commit 084ce30478
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -101,7 +101,7 @@ pub struct Theme {
impl Default for Theme {
fn default() -> Self {
Self::dark_default()
Self::preferred_theme()
}
}
@ -513,6 +513,40 @@ impl Theme {
builder = builder.accent(adjusted_c);
builder.build()
}
/// choose default color palette based on preferred GTK color scheme
pub fn gtk_prefer_colorscheme() -> Self {
let gsettings = "/usr/bin/gsettings";
let cmd = std::process::Command::new(gsettings)
.arg("get")
.arg("org.gnome.desktop.interface")
.arg("color-scheme")
.output();
if let Ok(cmd) = cmd {
let color_scheme = String::from_utf8_lossy(&cmd.stdout);
if color_scheme.trim().contains("light") {
return Self::light_default();
}
};
Self::dark_default()
}
/// check current desktop environment and preferred color scheme and set it as default
pub fn preferred_theme() -> Self {
let current_desktop = std::env::var("XDG_CURRENT_DESKTOP");
if let Ok(desktop) = current_desktop {
if desktop.trim().to_lowercase().contains("gnome") {
return Self::gtk_prefer_colorscheme();
}
}
Self::dark_default()
}
}
impl From<CosmicPalette> for Theme {