diff --git a/cosmic-theme/src/output/gtk4_output.rs b/cosmic-theme/src/output/gtk4_output.rs index dbafe089..3ee5b281 100644 --- a/cosmic-theme/src/output/gtk4_output.rs +++ b/cosmic-theme/src/output/gtk4_output.rs @@ -176,7 +176,7 @@ impl Theme { } /// 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 { return Err(OutputError::MissingConfigDir); }; @@ -187,44 +187,53 @@ impl Theme { fs::create_dir_all(>k4).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"); - - 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)?; + let gtk3_dest = gtk3.join("gtk.css"); #[cfg(target_family = "unix")] - { + for gtk_dest in [>k4_dest, >k3_dest] { use std::fs::metadata; use std::os::unix::fs::symlink; - let gtk3_dest = gtk3.join("gtk.css"); - let gtk3_dest_bak = gtk3.join("gtk.css.bak"); + let mut gtk_dest_bak = gtk_dest.clone(); + gtk_dest_bak.set_extension("css.bak"); - if gtk3_dest.exists() { - if metadata(>k3_dest) + if gtk_dest.exists() { + if metadata(>k_dest) .map_err(OutputError::Io)? .file_type() .is_symlink() { - fs::remove_file(>k3_dest).map_err(OutputError::Io)?; + fs::remove_file(>k_dest).map_err(OutputError::Io)?; } 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(()) } + + /// 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 {