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
@@ -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);
})
}
@@ -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) {