diff --git a/src/app/core.rs b/src/app/core.rs index 65cbda13..4fa48953 100644 --- a/src/app/core.rs +++ b/src/app/core.rs @@ -46,6 +46,9 @@ pub struct Core { /// Enables debug features in cosmic/iced. pub debug: bool, + /// Disables loading the icon theme from cosmic-config. + pub(super) icon_theme_override: bool, + /// Whether the window is too small for the nav bar + main content. is_condensed: bool, @@ -95,6 +98,7 @@ impl Default for Core { fn default() -> Self { Self { debug: false, + icon_theme_override: false, is_condensed: false, keyboard_nav: true, nav_bar: NavBar { diff --git a/src/app/cosmic.rs b/src/app/cosmic.rs index 09c2d8c5..ae7429df 100644 --- a/src/app/cosmic.rs +++ b/src/app/cosmic.rs @@ -563,6 +563,13 @@ impl Cosmic { } Message::ToolkitConfig(config) => { + // Change the icon theme if not defined by the application. + if !self.app.core().icon_theme_override + && crate::icon_theme::default() != config.icon_theme + { + crate::icon_theme::set_default(config.icon_theme.clone()); + } + self.app.core_mut().toolkit_config = config; } diff --git a/src/app/mod.rs b/src/app/mod.rs index 3e015395..aa33515f 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -42,6 +42,7 @@ pub mod message { pub use self::command::Command; pub use self::core::Core; pub use self::settings::Settings; +use crate::config::CosmicTk; use crate::prelude::*; use crate::theme::THEME; use crate::widget::{context_drawer, nav_bar, popover}; @@ -66,16 +67,19 @@ pub(crate) fn iced_settings( settings: Settings, flags: App::Flags, ) -> iced::Settings<(Core, App::Flags)> { - if let Some(icon_theme) = settings.default_icon_theme { - crate::icon_theme::set_default(icon_theme); - } - let mut core = Core::default(); core.debug = settings.debug; + core.icon_theme_override = settings.default_icon_theme.is_some(); core.set_scale_factor(settings.scale_factor); core.set_window_width(settings.size.width as u32); core.set_window_height(settings.size.height as u32); + if let Some(icon_theme) = settings.default_icon_theme { + crate::icon_theme::set_default(icon_theme); + } else { + crate::icon_theme::set_default(core.toolkit_config.icon_theme.clone()); + } + THEME.with(move |t| { let mut cosmic_theme = t.borrow_mut(); cosmic_theme.set_theme(settings.theme.theme_type); diff --git a/src/app/settings.rs b/src/app/settings.rs index 48bdd729..5b27f9ae 100644 --- a/src/app/settings.rs +++ b/src/app/settings.rs @@ -82,7 +82,7 @@ impl Default for Settings { client_decorations: true, debug: false, default_font: font::FONT, - default_icon_theme: Some(String::from("Cosmic")), + default_icon_theme: None, default_text_size: 14.0, resizable: Some(8.0), scale_factor: std::env::var("COSMIC_SCALE") diff --git a/src/config/toolkit.rs b/src/config/toolkit.rs index 56395d56..996bd2ab 100644 --- a/src/config/toolkit.rs +++ b/src/config/toolkit.rs @@ -17,6 +17,9 @@ pub struct CosmicTk { /// Show maximize button in window header. pub show_maximize: bool, + + /// Preferred icon theme + pub icon_theme: String, } impl Default for CosmicTk { @@ -24,6 +27,7 @@ impl Default for CosmicTk { Self { show_minimize: true, show_maximize: true, + icon_theme: String::from("Cosmic"), } } }