diff options
author | Aram Drevekenin <aram@poor.dev> | 2023-02-27 19:15:45 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-27 19:15:45 +0100 |
commit | b3b0ddbab82ab74c02dbc991b24f4a3c88f2bcbe (patch) | |
tree | dbfb33b8f2a737918a913fc4ef557406708dfa3e /zellij-server/src/panes | |
parent | 4d1b12754363306ecbdcdba52986b7e92fc522c3 (diff) |
fix(layouts): do not relayout twice on auto_layout (#2202)
* fix(layouts): do not relayout twice on auto_layout
* style(fmt): rustfmt
Diffstat (limited to 'zellij-server/src/panes')
-rw-r--r-- | zellij-server/src/panes/tiled_panes/mod.rs | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/zellij-server/src/panes/tiled_panes/mod.rs b/zellij-server/src/panes/tiled_panes/mod.rs index 8ab5cb4f9..28941746e 100644 --- a/zellij-server/src/panes/tiled_panes/mod.rs +++ b/zellij-server/src/panes/tiled_panes/mod.rs @@ -160,7 +160,27 @@ impl TiledPanes { self.move_clients_between_panes(pane_id, with_pane_id); removed_pane } - pub fn insert_pane(&mut self, pane_id: PaneId, mut pane: Box<dyn Pane>) { + pub fn insert_pane(&mut self, pane_id: PaneId, pane: Box<dyn Pane>) { + let should_relayout = true; + self.add_pane(pane_id, pane, should_relayout); + } + pub fn insert_pane_without_relayout(&mut self, pane_id: PaneId, pane: Box<dyn Pane>) { + let should_relayout = false; + self.add_pane(pane_id, pane, should_relayout); + } + pub fn has_room_for_new_pane(&mut self) -> bool { + let cursor_height_width_ratio = self.cursor_height_width_ratio(); + let pane_grid = TiledPaneGrid::new( + &mut self.panes, + &self.panes_to_hide, + *self.display_area.borrow(), + *self.viewport.borrow(), + ); + pane_grid + .find_room_for_new_pane(cursor_height_width_ratio) + .is_some() + } + fn add_pane(&mut self, pane_id: PaneId, mut pane: Box<dyn Pane>, should_relayout: bool) { let cursor_height_width_ratio = self.cursor_height_width_ratio(); let pane_grid = TiledPaneGrid::new( &mut self.panes, @@ -178,22 +198,12 @@ impl TiledPanes { pane_to_split.set_geom(first_geom); pane.set_geom(second_geom); self.panes.insert(pane_id, pane); - self.relayout(!split_direction); + if should_relayout { + self.relayout(!split_direction); + } } } } - pub fn has_room_for_new_pane(&mut self) -> bool { - let cursor_height_width_ratio = self.cursor_height_width_ratio(); - let pane_grid = TiledPaneGrid::new( - &mut self.panes, - &self.panes_to_hide, - *self.display_area.borrow(), - *self.viewport.borrow(), - ); - pane_grid - .find_room_for_new_pane(cursor_height_width_ratio) - .is_some() - } pub fn fixed_pane_geoms(&self) -> Vec<Viewport> { self.panes .values() |