Always focus a panel when zooming it

Nathan Sobo created

This allows us to zoom a panel when clicking a button, even if the
panel isn't currently focused.

Change summary

crates/ai/src/assistant.rs        | 8 +-------
crates/workspace/src/workspace.rs | 7 ++++---
2 files changed, 5 insertions(+), 10 deletions(-)

Detailed changes

crates/ai/src/assistant.rs 🔗

@@ -384,13 +384,7 @@ impl AssistantPanel {
         })
         .with_cursor_style(CursorStyle::PointingHand)
         .on_click(MouseButton::Left, |_, this, cx| {
-            if this.zoomed {
-                cx.emit(AssistantPanelEvent::ZoomOut)
-            } else {
-                this.has_focus = true; // Hack: Because focus_in is processed last, we need to set this here.
-                cx.focus_self();
-                cx.emit(AssistantPanelEvent::ZoomIn);
-            }
+            this.toggle_zoom(&ToggleZoom, cx);
         })
     }
 

crates/workspace/src/workspace.rs 🔗

@@ -905,10 +905,11 @@ impl Workspace {
                     });
                 } else if T::should_zoom_in_on_event(event) {
                     dock.update(cx, |dock, cx| dock.set_panel_zoomed(&panel, true, cx));
-                    if panel.has_focus(cx) {
-                        this.zoomed = Some(panel.downgrade().into_any());
-                        this.zoomed_position = Some(panel.read(cx).position(cx));
+                    if !panel.has_focus(cx) {
+                        cx.focus(&panel);
                     }
+                    this.zoomed = Some(panel.downgrade().into_any());
+                    this.zoomed_position = Some(panel.read(cx).position(cx));
                 } else if T::should_zoom_out_on_event(event) {
                     dock.update(cx, |dock, cx| dock.set_panel_zoomed(&panel, false, cx));
                     if this.zoomed_position == Some(prev_position) {