refactor(theme): use symlink for both gtk4 and gtk3 css and add method for reset
This commit is contained in:
parent
db63aefe6f
commit
1b62b9686c
1 changed files with 30 additions and 21 deletions
|
|
@ -176,7 +176,7 @@ impl Theme {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Apply gtk color variable settings
|
/// Apply gtk color variable settings
|
||||||
pub fn apply_gtk(&self) -> Result<(), OutputError> {
|
pub fn apply_gtk(is_dark: bool) -> Result<(), OutputError> {
|
||||||
let Some(config_dir) = dirs::config_dir() else {
|
let Some(config_dir) = dirs::config_dir() else {
|
||||||
return Err(OutputError::MissingConfigDir);
|
return Err(OutputError::MissingConfigDir);
|
||||||
};
|
};
|
||||||
|
|
@ -187,44 +187,53 @@ impl Theme {
|
||||||
fs::create_dir_all(>k4).map_err(OutputError::Io)?;
|
fs::create_dir_all(>k4).map_err(OutputError::Io)?;
|
||||||
fs::create_dir_all(>k3).map_err(OutputError::Io)?;
|
fs::create_dir_all(>k3).map_err(OutputError::Io)?;
|
||||||
|
|
||||||
|
let cosmic_css = gtk4
|
||||||
|
.join("cosmic")
|
||||||
|
.join(if is_dark { "dark.css" } else { "light.css" });
|
||||||
|
|
||||||
let gtk4_dest = gtk4.join("gtk.css");
|
let gtk4_dest = gtk4.join("gtk.css");
|
||||||
|
let gtk3_dest = gtk3.join("gtk.css");
|
||||||
fs::rename(>k4_dest, gtk4.join("gtk.css.bak")).map_err(OutputError::Io)?;
|
|
||||||
|
|
||||||
fs::copy(
|
|
||||||
gtk4.join("cosmic").join(if self.is_dark {
|
|
||||||
"dark.css"
|
|
||||||
} else {
|
|
||||||
"light.css"
|
|
||||||
}),
|
|
||||||
>k4_dest,
|
|
||||||
)
|
|
||||||
.map_err(OutputError::Io)?;
|
|
||||||
|
|
||||||
#[cfg(target_family = "unix")]
|
#[cfg(target_family = "unix")]
|
||||||
{
|
for gtk_dest in [>k4_dest, >k3_dest] {
|
||||||
use std::fs::metadata;
|
use std::fs::metadata;
|
||||||
use std::os::unix::fs::symlink;
|
use std::os::unix::fs::symlink;
|
||||||
|
|
||||||
let gtk3_dest = gtk3.join("gtk.css");
|
let mut gtk_dest_bak = gtk_dest.clone();
|
||||||
let gtk3_dest_bak = gtk3.join("gtk.css.bak");
|
gtk_dest_bak.set_extension("css.bak");
|
||||||
|
|
||||||
if gtk3_dest.exists() {
|
if gtk_dest.exists() {
|
||||||
if metadata(>k3_dest)
|
if metadata(>k_dest)
|
||||||
.map_err(OutputError::Io)?
|
.map_err(OutputError::Io)?
|
||||||
.file_type()
|
.file_type()
|
||||||
.is_symlink()
|
.is_symlink()
|
||||||
{
|
{
|
||||||
fs::remove_file(>k3_dest).map_err(OutputError::Io)?;
|
fs::remove_file(>k_dest).map_err(OutputError::Io)?;
|
||||||
} else {
|
} else {
|
||||||
fs::rename(>k3_dest, gtk3_dest_bak).map_err(OutputError::Io)?;
|
fs::rename(>k_dest, gtk_dest_bak).map_err(OutputError::Io)?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
symlink(gtk4_dest, gtk3_dest).map_err(OutputError::Io)?;
|
symlink(&cosmic_css, gtk_dest).map_err(OutputError::Io)?;
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Reset the applied gtk css
|
||||||
|
pub fn reset_gtk() -> Result<(), OutputError> {
|
||||||
|
let Some(config_dir) = dirs::config_dir() else {
|
||||||
|
return Err(OutputError::MissingConfigDir);
|
||||||
|
};
|
||||||
|
|
||||||
|
let gtk4 = config_dir.join("gtk-4.0");
|
||||||
|
let gtk3 = config_dir.join("gtk-3.0");
|
||||||
|
let gtk4_dest = gtk4.join("gtk.css");
|
||||||
|
let gtk3_dest = gtk3.join("gtk.css");
|
||||||
|
|
||||||
|
let res = fs::remove_file(gtk3_dest);
|
||||||
|
fs::remove_file(gtk4_dest).map_err(OutputError::Io)?;
|
||||||
|
Ok(res.map_err(OutputError::Io)?)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn component_gtk4_css(prefix: &str, c: &Component) -> String {
|
fn component_gtk4_css(prefix: &str, c: &Component) -> String {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue