diff --git a/crates/storybook/src/storybook.rs b/crates/storybook/src/storybook.rs index 47fc3b042a9ae5466c442ab9f79bdfea0b67eaf1..efbd46665ca312a6143c1e0358707c4aff8536e2 100644 --- a/crates/storybook/src/storybook.rs +++ b/crates/storybook/src/storybook.rs @@ -71,7 +71,7 @@ fn main() { let selector = story_selector; - let theme_registry = cx.global::(); + let theme_registry = ThemeRegistry::global(cx); let mut theme_settings = ThemeSettings::get_global(cx).clone(); theme_settings.active_theme = theme_registry.get(&theme_name).unwrap(); ThemeSettings::override_global(theme_settings, cx); diff --git a/crates/theme/src/registry.rs b/crates/theme/src/registry.rs index c90b1c909e32867eebc3b01a7cb496296028f257..1fbee2449ee4f6eea08aa2f5aa2604231a99fd86 100644 --- a/crates/theme/src/registry.rs +++ b/crates/theme/src/registry.rs @@ -2,7 +2,7 @@ use std::collections::HashMap; use std::sync::Arc; use anyhow::{anyhow, Context, Result}; -use gpui::{AssetSource, HighlightStyle, SharedString}; +use gpui::{AppContext, AssetSource, HighlightStyle, SharedString}; use refineable::Refineable; use util::ResultExt; @@ -24,6 +24,23 @@ pub struct ThemeRegistry { } impl ThemeRegistry { + /// Returns the global [`ThemeRegistry`]. + pub fn global(cx: &AppContext) -> &Self { + cx.global::() + } + + /// Returns a mutable reference to the global [`ThemeRegistry`]. + pub fn global_mut(cx: &mut AppContext) -> &mut Self { + cx.global_mut::() + } + + /// Returns a mutable reference to the global [`ThemeRegistry`]. + /// + /// Inserts a default [`ThemeRegistry`] if one does not yet exist. + pub fn default_global(cx: &mut AppContext) -> &mut Self { + cx.default_global::() + } + pub fn new(assets: Box) -> Self { let mut registry = Self { assets, diff --git a/crates/theme/src/settings.rs b/crates/theme/src/settings.rs index 67e7e7a0d8da34494e88311bbeb1a4edc6a51550..828a2f5de535929dcf3868fa91f93ca28b8f9ece 100644 --- a/crates/theme/src/settings.rs +++ b/crates/theme/src/settings.rs @@ -164,7 +164,7 @@ impl settings::Settings for ThemeSettings { user_values: &[&Self::FileContent], cx: &mut AppContext, ) -> Result { - let themes = cx.default_global::(); + let themes = ThemeRegistry::default_global(cx); let mut this = Self { ui_font_size: defaults.ui_font_size.unwrap().into(), @@ -230,8 +230,7 @@ impl settings::Settings for ThemeSettings { cx: &AppContext, ) -> schemars::schema::RootSchema { let mut root_schema = generator.root_schema_for::(); - let theme_names = cx - .global::() + let theme_names = ThemeRegistry::global(cx) .list_names(params.staff_mode) .map(|theme_name| Value::String(theme_name.to_string())) .collect(); diff --git a/crates/theme/src/theme.rs b/crates/theme/src/theme.rs index 5018a72da0e22789039c2fb3ca5e9ec905c6b3f6..2686ffe62db325048692303da3295503dcc92f71 100644 --- a/crates/theme/src/theme.rs +++ b/crates/theme/src/theme.rs @@ -63,7 +63,7 @@ pub fn init(themes_to_load: LoadThemes, cx: &mut AppContext) { cx.set_global(ThemeRegistry::new(assets)); if load_user_themes { - cx.global_mut::().load_user_themes(); + ThemeRegistry::global_mut(cx).load_user_themes(); } ThemeSettings::register(cx); diff --git a/crates/theme_selector/src/theme_selector.rs b/crates/theme_selector/src/theme_selector.rs index 14251c4a5353b7d0c088aee048bfdf0ee2c38c1a..d67ff9ba712b90da2c9fe7e051689c6ee74f6e02 100644 --- a/crates/theme_selector/src/theme_selector.rs +++ b/crates/theme_selector/src/theme_selector.rs @@ -102,7 +102,7 @@ impl ThemeSelectorDelegate { let original_theme = cx.theme().clone(); let staff_mode = cx.is_staff(); - let registry = cx.global::(); + let registry = ThemeRegistry::global(cx); let mut themes = registry.list(staff_mode).collect::>(); themes.sort_unstable_by(|a, b| { a.appearance @@ -135,7 +135,7 @@ impl ThemeSelectorDelegate { fn show_selected_theme(&mut self, cx: &mut ViewContext>) { if let Some(mat) = self.matches.get(self.selected_index) { - let registry = cx.global::(); + let registry = ThemeRegistry::global(cx); match registry.get(&mat.string) { Ok(theme) => { Self::set_theme(theme, cx);