Fix bug in panel button dispatch

Mikayla Maki created

Change summary

crates/workspace/src/dock.rs | 20 ++++++++++++++------
1 file changed, 14 insertions(+), 6 deletions(-)

Detailed changes

crates/workspace/src/dock.rs 🔗

@@ -503,13 +503,21 @@ impl View for PanelButtons {
                             })
                             .with_cursor_style(CursorStyle::PointingHand)
                             .on_click(MouseButton::Left, {
+                                let tooltip_action =
+                                    tooltip_action.as_ref().map(|action| action.boxed_clone());
                                 move |_, this, cx| {
-                                    if let Some(workspace) = this.workspace.upgrade(cx) {
-                                        cx.window_context().defer(move |cx| {
-                                            workspace.update(cx, |workspace, cx| {
-                                                workspace.toggle_panel(dock_position, panel_ix, cx)
-                                            });
-                                        });
+                                    if let Some(tooltip_action) = &tooltip_action {
+                                        let window_id = cx.window_id();
+                                        let view_id = this.workspace.id();
+                                        let tooltip_action = tooltip_action.boxed_clone();
+                                        cx.spawn(|_, mut cx| async move {
+                                            cx.dispatch_action(
+                                                window_id,
+                                                view_id,
+                                                &*tooltip_action,
+                                            )
+                                            .ok();
+                                        }).detach();
                                     }
                                 }
                             })