diff --git a/crates/vim/src/vim.rs b/crates/vim/src/vim.rs index be54fed084..f50da3afbb 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 0637ecc671..095abcb061 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(); }