@@ -124,7 +124,7 @@ pub fn init(cx: &mut App) {
workspace.reset_pane_sizes(cx);
});
- workspace.register_action(|workspace, _: &MaximizePane, _, cx| {
+ workspace.register_action(|workspace, _: &MaximizePane, window, cx| {
let pane = workspace.active_pane();
let Some(size) = workspace.bounding_box_for_pane(&pane) else {
return;
@@ -138,7 +138,7 @@ pub fn init(cx: &mut App) {
} else {
px(10000.)
};
- workspace.resize_pane(Axis::Vertical, desired_size - size.size.height, cx)
+ workspace.resize_pane(Axis::Vertical, desired_size - size.size.height, window, cx)
});
workspace.register_action(|workspace, action: &ResizePane, window, cx| {
@@ -162,7 +162,7 @@ pub fn init(cx: &mut App) {
ResizeIntent::Narrow => (Axis::Horizontal, width.width * -1.),
};
- workspace.resize_pane(axis, amount * count, cx);
+ workspace.resize_pane(axis, amount * count, window, cx);
});
workspace.register_action(|workspace, _: &SearchSubmit, window, cx| {
@@ -3240,9 +3240,31 @@ impl Workspace {
}
}
- pub fn resize_pane(&mut self, axis: gpui::Axis, amount: Pixels, cx: &mut Context<Self>) {
- self.center
- .resize(&self.active_pane, axis, amount, &self.bounds);
+ pub fn resize_pane(
+ &mut self,
+ axis: gpui::Axis,
+ amount: Pixels,
+ window: &mut Window,
+ cx: &mut Context<Self>,
+ ) {
+ let docks = self.all_docks();
+ let active_dock = docks
+ .into_iter()
+ .find(|dock| dock.focus_handle(cx).contains_focused(window, cx));
+
+ if let Some(dock) = active_dock {
+ let Some(panel_size) = dock.read(cx).active_panel_size(window, cx) else {
+ return;
+ };
+ match dock.read(cx).position() {
+ DockPosition::Left => resize_left_dock(panel_size + amount, self, window, cx),
+ DockPosition::Bottom => resize_bottom_dock(panel_size + amount, self, window, cx),
+ DockPosition::Right => resize_right_dock(panel_size + amount, self, window, cx),
+ }
+ } else {
+ self.center
+ .resize(&self.active_pane, axis, amount, &self.bounds);
+ }
cx.notify();
}