From da8919002fce336eeea84c9c0b1f97601195d446 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Mon, 23 Oct 2023 11:34:35 +0200 Subject: [PATCH] Fix runtime errors --- crates/feature_flags2/src/feature_flags2.rs | 4 ++-- crates/gpui2/src/app.rs | 8 +++----- crates/gpui2/src/interactive.rs | 6 +++--- crates/storybook2/src/storybook2.rs | 3 +++ crates/ui2/src/lib.rs | 2 +- crates/ui2/src/settings.rs | 6 +++++- crates/ui2/src/theme.rs | 22 +++++++++++++-------- 7 files changed, 31 insertions(+), 20 deletions(-) diff --git a/crates/feature_flags2/src/feature_flags2.rs b/crates/feature_flags2/src/feature_flags2.rs index d5f10ea5876e06b6bae3ef0ce5f0e32b59beb536..48534051e768b13c18346025dc8dec28c41111f8 100644 --- a/crates/feature_flags2/src/feature_flags2.rs +++ b/crates/feature_flags2/src/feature_flags2.rs @@ -51,13 +51,13 @@ pub trait FeatureFlagAppExt { impl FeatureFlagAppExt for AppContext { fn update_flags(&mut self, staff: bool, flags: Vec) { - let feature_flags = self.default_global::(); + let feature_flags = self.default_global_mut::(); feature_flags.staff = staff; feature_flags.flags = flags; } fn set_staff(&mut self, staff: bool) { - let feature_flags = self.default_global::(); + let feature_flags = self.default_global_mut::(); feature_flags.staff = staff; } diff --git a/crates/gpui2/src/app.rs b/crates/gpui2/src/app.rs index 516cdbc46ad02670e500b4f1e0ee4b5bf0af6902..1e4852ff4d462e967dc2bbd0b5aa373bdd962225 100644 --- a/crates/gpui2/src/app.rs +++ b/crates/gpui2/src/app.rs @@ -510,14 +510,12 @@ impl AppContext { .unwrap() } - pub fn default_global(&mut self) -> &mut G { + pub fn default_global_mut(&mut self) -> &mut G { let global_type = TypeId::of::(); self.push_effect(Effect::NotifyGlobalObservers { global_type }); self.globals_by_type - .insert(global_type, Box::new(G::default())); - self.globals_by_type - .get_mut(&global_type) - .unwrap() + .entry(global_type) + .or_insert_with(|| Box::new(G::default())) .downcast_mut::() .unwrap() } diff --git a/crates/gpui2/src/interactive.rs b/crates/gpui2/src/interactive.rs index 56dcba9571bbfc0e2f6fc9126fc99deac9b96a50..475cbb75a470427b5c33f3356c6f6f0cbb59364f 100644 --- a/crates/gpui2/src/interactive.rs +++ b/crates/gpui2/src/interactive.rs @@ -603,7 +603,7 @@ pub struct GroupBounds(HashMap; 1]>>); impl GroupBounds { pub fn get(name: &SharedString, cx: &mut AppContext) -> Option> { - cx.default_global::() + cx.default_global_mut::() .0 .get(name) .and_then(|bounds_stack| bounds_stack.last()) @@ -611,7 +611,7 @@ impl GroupBounds { } pub fn push(name: SharedString, bounds: Bounds, cx: &mut AppContext) { - cx.default_global::() + cx.default_global_mut::() .0 .entry(name) .or_default() @@ -619,7 +619,7 @@ impl GroupBounds { } pub fn pop(name: &SharedString, cx: &mut AppContext) { - cx.default_global::() + cx.default_global_mut::() .0 .get_mut(name) .unwrap() diff --git a/crates/storybook2/src/storybook2.rs b/crates/storybook2/src/storybook2.rs index 552e124c06e30c81d9a3f4f697635d3aedb0cf96..6aba3f5c26b98038ab0cce38e768a66848ff65bd 100644 --- a/crates/storybook2/src/storybook2.rs +++ b/crates/storybook2/src/storybook2.rs @@ -56,6 +56,9 @@ fn main() { let selector = story_selector.unwrap_or(StorySelector::Component(ComponentStory::Workspace)); + cx.set_global(theme.clone()); + ui::settings::init(cx); + let window = cx.open_window( WindowOptions { bounds: WindowBounds::Fixed(Bounds { diff --git a/crates/ui2/src/lib.rs b/crates/ui2/src/lib.rs index c2d02369a1a2b77ca5acfb745ae2db1a4137b621..8bc7bfa810927e9477e6c52ac67b23bb40dba980 100644 --- a/crates/ui2/src/lib.rs +++ b/crates/ui2/src/lib.rs @@ -4,7 +4,7 @@ mod components; mod element_ext; mod elements; pub mod prelude; -mod settings; +pub mod settings; mod static_data; mod theme; diff --git a/crates/ui2/src/settings.rs b/crates/ui2/src/settings.rs index 5c88608c88f1e0d3fa9777c49a4d31e1a16fc5b8..48a2e8e7b439513b64e89ca6cd12ae0f5f408d88 100644 --- a/crates/ui2/src/settings.rs +++ b/crates/ui2/src/settings.rs @@ -1,9 +1,13 @@ use std::ops::Deref; -use gpui2::{rems, AbsoluteLength, WindowContext}; +use gpui2::{rems, AbsoluteLength, AppContext, WindowContext}; use crate::prelude::*; +pub fn init(cx: &mut AppContext) { + cx.set_global(FakeSettings::default()); +} + /// Returns the user settings. pub fn user_settings(cx: &WindowContext) -> FakeSettings { cx.global::().clone() diff --git a/crates/ui2/src/theme.rs b/crates/ui2/src/theme.rs index dec773b08fb21a953ca3fef6a9cdedabf3c72275..bf354e7c15e935b87f09a3f53bfc9deb43020c91 100644 --- a/crates/ui2/src/theme.rs +++ b/crates/ui2/src/theme.rs @@ -137,9 +137,9 @@ where E: Element, F: FnOnce(&mut ViewContext) -> E, { - cx.default_global::().0.push(theme.clone()); + cx.default_global_mut::().0.push(theme.clone()); let child = build_child(cx); - cx.default_global::().0.pop(); + cx.default_global_mut::().0.pop(); Themed { theme, child } } @@ -174,9 +174,11 @@ impl Element for Themed { element_state: Option, cx: &mut ViewContext, ) -> Self::ElementState { - cx.default_global::().0.push(self.theme.clone()); + cx.default_global_mut::() + .0 + .push(self.theme.clone()); let element_state = self.child.initialize(view_state, element_state, cx); - cx.default_global::().0.pop(); + cx.default_global_mut::().0.pop(); element_state } @@ -189,9 +191,11 @@ impl Element for Themed { where Self: Sized, { - cx.default_global::().0.push(self.theme.clone()); + cx.default_global_mut::() + .0 + .push(self.theme.clone()); let layout_id = self.child.layout(view_state, element_state, cx); - cx.default_global::().0.pop(); + cx.default_global_mut::().0.pop(); layout_id } @@ -204,9 +208,11 @@ impl Element for Themed { ) where Self: Sized, { - cx.default_global::().0.push(self.theme.clone()); + cx.default_global_mut::() + .0 + .push(self.theme.clone()); self.child.paint(bounds, view_state, frame_state, cx); - cx.default_global::().0.pop(); + cx.default_global_mut::().0.pop(); } }