From a56793c2140ed864569d141f54a5c7e5d17d245c Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Wed, 17 May 2023 16:14:05 -0700 Subject: [PATCH] Clear buffer font size adjustments when buffer font size setting changes --- crates/theme/src/theme.rs | 11 +++++++++++ crates/theme/src/theme_settings.rs | 8 +++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/crates/theme/src/theme.rs b/crates/theme/src/theme.rs index 7a94f45656a891544dcabce3bf5e2ab2d7336f7a..eb404cdaad6ad5a8d5e7fa5c572e0ad709e6c4e4 100644 --- a/crates/theme/src/theme.rs +++ b/crates/theme/src/theme.rs @@ -10,6 +10,7 @@ use gpui::{ }; use serde::{de::DeserializeOwned, Deserialize}; use serde_json::Value; +use settings::SettingsStore; use std::{collections::HashMap, sync::Arc}; use ui::{ButtonStyle, CheckboxStyle, IconStyle, ModalStyle, SvgStyle}; @@ -23,6 +24,16 @@ pub fn current(cx: &AppContext) -> Arc { pub fn init(source: impl AssetSource, cx: &mut AppContext) { cx.set_global(ThemeRegistry::new(source, cx.font_cache().clone())); settings::register::(cx); + + let mut prev_buffer_font_size = settings::get::(cx).buffer_font_size; + cx.observe_global::(move |cx| { + let buffer_font_size = settings::get::(cx).buffer_font_size; + if buffer_font_size != prev_buffer_font_size { + prev_buffer_font_size = buffer_font_size; + reset_font_size(cx); + } + }) + .detach(); } #[derive(Deserialize, Default)] diff --git a/crates/theme/src/theme_settings.rs b/crates/theme/src/theme_settings.rs index 9c8f1e3553b936326e0860995539edb7dbd23fdc..f86d3fd8dd38477993f490d1824aab6ee232d646 100644 --- a/crates/theme/src/theme_settings.rs +++ b/crates/theme/src/theme_settings.rs @@ -19,7 +19,7 @@ pub struct ThemeSettings { pub buffer_font_family_name: String, pub buffer_font_features: fonts::Features, pub buffer_font_family: FamilyId, - buffer_font_size: f32, + pub(crate) buffer_font_size: f32, pub theme: Arc, } @@ -75,8 +75,10 @@ pub fn adjust_font_size(cx: &mut AppContext, f: fn(&mut f32)) { } pub fn reset_font_size(cx: &mut AppContext) { - cx.remove_global::(); - cx.refresh_windows(); + if cx.has_global::() { + cx.remove_global::(); + cx.refresh_windows(); + } } impl settings::Setting for ThemeSettings {