Ensure that sidebar toggle button works, regardless of focus (#52045)

Max Brunsfeld created

Previously, the sidebar toggle worked via an action, which is dependent
on what is focused. I changed it to directly call a method.

Release Notes:

- N/A

Change summary

crates/workspace/src/status_bar.rs | 12 ++++++++----
crates/workspace/src/workspace.rs  |  2 ++
2 files changed, 10 insertions(+), 4 deletions(-)

Detailed changes

crates/workspace/src/status_bar.rs 🔗

@@ -1,6 +1,6 @@
-use crate::{ItemHandle, Pane, ToggleWorkspaceSidebar};
+use crate::{ItemHandle, MultiWorkspace, Pane, ToggleWorkspaceSidebar};
 use gpui::{
-    Action, AnyView, App, Context, Decorations, Entity, IntoElement, ParentElement, Render, Styled,
+    AnyView, App, Context, Decorations, Entity, IntoElement, ParentElement, Render, Styled,
     Subscription, Window,
 };
 use std::any::TypeId;
@@ -104,8 +104,12 @@ impl StatusBar {
                 .tooltip(move |_, cx| {
                     Tooltip::for_action("Open Threads Sidebar", &ToggleWorkspaceSidebar, cx)
                 })
-                .on_click(|_, window, cx| {
-                    window.dispatch_action(ToggleWorkspaceSidebar.boxed_clone(), cx);
+                .on_click(move |_, window, cx| {
+                    if let Some(multi_workspace) = window.root::<MultiWorkspace>().flatten() {
+                        multi_workspace.update(cx, |multi_workspace, cx| {
+                            multi_workspace.toggle_sidebar(window, cx);
+                        });
+                    }
                 }),
             )
             .child(Divider::vertical().color(ui::DividerColor::Border))

crates/workspace/src/workspace.rs 🔗

@@ -11079,6 +11079,7 @@ mod tests {
             assert!(workspace.right_dock().read(cx).is_open());
             assert!(!panel.is_zoomed(window, cx));
             assert!(!panel.read(cx).focus_handle(cx).contains_focused(window, cx));
+            assert!(pane.read(cx).focus_handle(cx).contains_focused(window, cx));
         });
 
         // Close the dock
@@ -11090,6 +11091,7 @@ mod tests {
             assert!(!workspace.right_dock().read(cx).is_open());
             assert!(!panel.is_zoomed(window, cx));
             assert!(!panel.read(cx).focus_handle(cx).contains_focused(window, cx));
+            assert!(pane.read(cx).focus_handle(cx).contains_focused(window, cx));
         });
 
         // Open the dock