diff --git a/crates/ui2/src/components/status_bar.rs b/crates/ui2/src/components/status_bar.rs index a7d1abd1e4447f38ae555fb3a6ea7d72e24a6da3..841640cbc0b79fa3803a9becf670e2970d9dd812 100644 --- a/crates/ui2/src/components/status_bar.rs +++ b/crates/ui2/src/components/status_bar.rs @@ -1,8 +1,9 @@ use std::marker::PhantomData; use std::sync::atomic::Ordering; +use std::sync::Arc; use crate::prelude::*; -use crate::{get_workspace_state, Button, ClickHandler, Icon, IconButton, IconColor, ToolDivider}; +use crate::{get_workspace_state, Button, Icon, IconButton, IconColor, ToolDivider}; #[derive(Default, PartialEq)] pub enum Tool { @@ -35,17 +36,15 @@ pub struct StatusBar { left_tools: Option, right_tools: Option, bottom_tools: Option, - on_select_language: ClickHandler, } impl StatusBar { - pub fn new(on_select_language: ClickHandler) -> Self { + pub fn new() -> Self { Self { state_type: PhantomData, left_tools: None, right_tools: None, bottom_tools: None, - on_select_language, } } @@ -148,7 +147,23 @@ impl StatusBar { .items_center() .gap_1() .child(Button::new("116:25")) - .child(Button::new("Rust").on_click(self.on_select_language.clone())), + .child(Button::new("Rust").on_click(Arc::new(|_, cx| { + let is_showing_language_selector = workspace_state + .show_language_selector + .load(Ordering::SeqCst); + + workspace_state + .show_language_selector + .compare_exchange( + is_showing_language_selector, + !is_showing_language_selector, + Ordering::SeqCst, + Ordering::SeqCst, + ) + .unwrap(); + + cx.notify(); + }))), ) .child(ToolDivider::new()) .child( diff --git a/crates/ui2/src/components/workspace.rs b/crates/ui2/src/components/workspace.rs index dced9107e8f5c31a8d1bc539f3ac8c43332ab293..4912e572b1acc386e471850ac9948749f187f9d7 100644 --- a/crates/ui2/src/components/workspace.rs +++ b/crates/ui2/src/components/workspace.rs @@ -218,23 +218,7 @@ impl WorkspaceElement { .filter(|_| workspace_state.show_chat_panel.load(Ordering::SeqCst)), ), ) - .child(StatusBar::new(Arc::new(move |_, cx| { - let is_showing_language_selector = workspace_state - .show_language_selector - .load(Ordering::SeqCst); - - workspace_state - .show_language_selector - .compare_exchange( - is_showing_language_selector, - !is_showing_language_selector, - Ordering::SeqCst, - Ordering::SeqCst, - ) - .unwrap(); - - cx.notify(); - }))) + .child(StatusBar::new()) .children( Some( div()