diff --git a/crates/vim/src/vim.rs b/crates/vim/src/vim.rs index be54fed0842768d35ddac9099e2d9c6fb7258f4b..f50da3afbbd352996f7237e7d3b061b84244b1ef 100644 --- a/crates/vim/src/vim.rs +++ b/crates/vim/src/vim.rs @@ -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| { diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index 0637ecc671b9337fe2d03abe8be23079594aaf99..095abcb061d712f19e87029ed947e12794cdeb53 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -3240,9 +3240,31 @@ impl Workspace { } } - pub fn resize_pane(&mut self, axis: gpui::Axis, amount: Pixels, cx: &mut Context) { - 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, + ) { + 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(); }