Clear buffer font size adjustments when buffer font size setting changes

Max Brunsfeld created

Change summary

crates/theme/src/theme.rs          | 11 +++++++++++
crates/theme/src/theme_settings.rs |  8 +++++---
2 files changed, 16 insertions(+), 3 deletions(-)

Detailed changes

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<Theme> {
 pub fn init(source: impl AssetSource, cx: &mut AppContext) {
     cx.set_global(ThemeRegistry::new(source, cx.font_cache().clone()));
     settings::register::<ThemeSettings>(cx);
+
+    let mut prev_buffer_font_size = settings::get::<ThemeSettings>(cx).buffer_font_size;
+    cx.observe_global::<SettingsStore, _>(move |cx| {
+        let buffer_font_size = settings::get::<ThemeSettings>(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)]

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<Theme>,
 }
 
@@ -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::<AdjustedBufferFontSize>();
-    cx.refresh_windows();
+    if cx.has_global::<AdjustedBufferFontSize>() {
+        cx.remove_global::<AdjustedBufferFontSize>();
+        cx.refresh_windows();
+    }
 }
 
 impl settings::Setting for ThemeSettings {