From ab5dd5f43a3655dc99c6991dfbe0684866356a13 Mon Sep 17 00:00:00 2001 From: Hojjat Date: Thu, 16 Jul 2026 10:47:27 -0600 Subject: [PATCH] fix: preserve content when rebuilding appearance drawer --- cosmic-settings/src/pages/desktop/appearance/drawer.rs | 10 ++++++++++ .../src/pages/desktop/appearance/font_config.rs | 5 +++++ cosmic-settings/src/pages/desktop/appearance/mod.rs | 4 +++- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/cosmic-settings/src/pages/desktop/appearance/drawer.rs b/cosmic-settings/src/pages/desktop/appearance/drawer.rs index 4d8334f..32c727e 100644 --- a/cosmic-settings/src/pages/desktop/appearance/drawer.rs +++ b/cosmic-settings/src/pages/desktop/appearance/drawer.rs @@ -153,6 +153,16 @@ impl Content { } } + pub fn preserve_from(&mut self, previous: &mut Content) { + self.font_config + .take_families_from(&mut previous.font_config); + + self.icons_fetched = previous.icons_fetched; + self.icon_theme_active = previous.icon_theme_active; + self.icon_themes = std::mem::take(&mut previous.icon_themes); + self.icon_handles = std::mem::take(&mut previous.icon_handles); + } + pub fn update_font( &mut self, message: FontMessage, diff --git a/cosmic-settings/src/pages/desktop/appearance/font_config.rs b/cosmic-settings/src/pages/desktop/appearance/font_config.rs index 420a044..f367a0f 100644 --- a/cosmic-settings/src/pages/desktop/appearance/font_config.rs +++ b/cosmic-settings/src/pages/desktop/appearance/font_config.rs @@ -94,6 +94,11 @@ impl Model { self.font_filter.clear(); } + pub fn take_families_from(&mut self, other: &mut Model) { + self.interface_font_families = std::mem::take(&mut other.interface_font_families); + self.monospace_font_families = std::mem::take(&mut other.monospace_font_families); + } + pub fn font_loaded( &mut self, mono: Vec>, diff --git a/cosmic-settings/src/pages/desktop/appearance/mod.rs b/cosmic-settings/src/pages/desktop/appearance/mod.rs index 594656e..7ab3061 100644 --- a/cosmic-settings/src/pages/desktop/appearance/mod.rs +++ b/cosmic-settings/src/pages/desktop/appearance/mod.rs @@ -200,7 +200,9 @@ impl Page { Message::DrawerOpen(context_view) => { self.context_view = Some(context_view); - self.drawer = drawer::Content::from(&self.theme_manager); + let mut previous = + std::mem::replace(&mut self.drawer, drawer::Content::from(&self.theme_manager)); + self.drawer.preserve_from(&mut previous); tasks.push(cosmic::task::message( crate::app::Message::OpenContextDrawer(self.entity), ));