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/tab | |
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/tab')
9 files changed, 43 insertions, 208 deletions
diff --git a/zellij-server/src/tab/layout_applier.rs b/zellij-server/src/tab/layout_applier.rs index eed7f8c86..b2c3817bf 100644 --- a/zellij-server/src/tab/layout_applier.rs +++ b/zellij-server/src/tab/layout_applier.rs @@ -609,7 +609,7 @@ impl ExistingTabState { default_to_closest_position: bool, ) -> Vec<(&PaneId, &Box<dyn Pane>)> { let mut candidates: Vec<_> = self.existing_panes.iter().collect(); - candidates.sort_by(|(_a_id, a), (_b_id, b)| { + candidates.sort_by(|(a_id, a), (b_id, b)| { let a_invoked_with = a.invoked_with(); let b_invoked_with = b.invoked_with(); if Run::is_same_category(run, a_invoked_with) @@ -637,7 +637,7 @@ impl ExistingTabState { let b_y_distance = abs(b.position_and_size().y, position_and_size.y); (a_x_distance + a_y_distance).cmp(&(b_x_distance + b_y_distance)) } else { - std::cmp::Ordering::Equal + a_id.cmp(&b_id) // just so it's a stable sort } } }); diff --git a/zellij-server/src/tab/mod.rs b/zellij-server/src/tab/mod.rs index 9e11fdfdf..bcd549ccc 100644 --- a/zellij-server/src/tab/mod.rs +++ b/zellij-server/src/tab/mod.rs @@ -1017,6 +1017,7 @@ impl Tab { if self.tiled_panes.fullscreen_is_active() { self.tiled_panes.unset_fullscreen(); } + let should_auto_layout = self.auto_layout && !self.swap_layouts.is_tiled_damaged(); if self.tiled_panes.has_room_for_new_pane() { if let PaneId::Terminal(term_pid) = pid { let next_terminal_position = self.get_next_terminal_position(); @@ -1035,14 +1036,21 @@ impl Tab { None, ); new_terminal.set_active_at(Instant::now()); - self.tiled_panes.insert_pane(pid, Box::new(new_terminal)); + if should_auto_layout { + // no need to relayout here, we'll do it when reapplying the swap layout + // below + self.tiled_panes + .insert_pane_without_relayout(pid, Box::new(new_terminal)); + } else { + self.tiled_panes.insert_pane(pid, Box::new(new_terminal)); + } self.should_clear_display_before_rendering = true; if let Some(client_id) = client_id { self.tiled_panes.focus_pane(pid, client_id); } } } - if self.auto_layout && !self.swap_layouts.is_tiled_damaged() { + if should_auto_layout { // only do this if we're already in this layout, otherwise it might be // confusing and not what the user intends self.swap_layouts.set_is_tiled_damaged(); // we do this so that we won't skip to the diff --git a/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__can_increase_size_into_pane_stack_non_directionally.snap b/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__can_increase_size_into_pane_stack_non_directionally.snap index 997af6c2f..bb6bcaab9 100644 --- a/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__can_increase_size_into_pane_stack_non_directionally.snap +++ b/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__can_increase_size_into_pane_stack_non_directionally.snap @@ -1,6 +1,6 @@ --- source: zellij-server/src/tab/./unit/tab_integration_tests.rs -assertion_line: 4062 +assertion_line: 4299 expression: snapshot --- 00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ @@ -17,8 +17,8 @@ expression: snapshot 11 (C): │ │ 12 (C): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ 13 (C): ┌ Pane #2 ────────────────────────────────────────────────────────┐┌ Pane #4 ───────────────────────────────────────────┐ -14 (C): │ │┌ Pane #5 ───────────────────────────────────────────┐ -15 (C): │ │┌ Pane #6 ───────────────────────────────────────────┐ +14 (C): │ │┌ Pane #3 ───────────────────────────────────────────┐ +15 (C): │ │┌ Pane #5 ───────────────────────────────────────────┐ 16 (C): │ ││ │ 17 (C): │ ││ │ 18 (C): │ ││ │ @@ -31,7 +31,7 @@ expression: snapshot 25 (C): │ ││ │ 26 (C): │ ││ │ 27 (C): └─────────────────────────────────────────────────────────────────┘└────────────────────────────────────────────────────┘ -28 (C): ┌ Pane #3 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +28 (C): ┌ Pane #6 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ 29 (C): │ │ 30 (C): │ │ 31 (C): │ │ diff --git a/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__can_increase_size_into_pane_stack_vertically.snap b/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__can_increase_size_into_pane_stack_vertically.snap index b800c6344..644233cd1 100644 --- a/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__can_increase_size_into_pane_stack_vertically.snap +++ b/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__can_increase_size_into_pane_stack_vertically.snap @@ -1,6 +1,6 @@ --- source: zellij-server/src/tab/./unit/tab_integration_tests.rs -assertion_line: 4047 +assertion_line: 4237 expression: snapshot --- 00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ @@ -17,8 +17,8 @@ expression: snapshot 11 (C): │ │ 12 (C): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ 13 (C): ┌ Pane #2 ──────────────────────────────────────────────────┐┌ Pane #4 ─────────────────────────────────────────────────┐ -14 (C): │ │┌ Pane #5 ─────────────────────────────────────────────────┐ -15 (C): │ │┌ Pane #6 ─────────────────────────────────────────────────┐ +14 (C): │ │┌ Pane #3 ─────────────────────────────────────────────────┐ +15 (C): │ │┌ Pane #5 ─────────────────────────────────────────────────┐ 16 (C): │ ││ │ 17 (C): │ ││ │ 18 (C): │ ││ │ @@ -28,7 +28,7 @@ expression: snapshot 22 (C): │ ││ │ 23 (C): │ ││ │ 24 (C): └───────────────────────────────────────────────────────────┘└──────────────────────────────────────────────────────────┘ -25 (C): ┌ Pane #3 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +25 (C): ┌ Pane #6 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ 26 (C): │ │ 27 (C): │ │ 28 (C): │ │ diff --git a/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__can_increase_size_of_main_pane_in_stack_non_directionally.snap b/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__can_increase_size_of_main_pane_in_stack_non_directionally.snap index bcd3b4ee9..ac85d9c1a 100644 --- a/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__can_increase_size_of_main_pane_in_stack_non_directionally.snap +++ b/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__can_increase_size_of_main_pane_in_stack_non_directionally.snap @@ -1,6 +1,6 @@ --- source: zellij-server/src/tab/./unit/tab_integration_tests.rs -assertion_line: 3823 +assertion_line: 4024 expression: snapshot --- 00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ @@ -17,8 +17,8 @@ expression: snapshot 11 (C): │ │ 12 (C): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ 13 (C): ┌ Pane #2 ───────────────────────────────────────────┐┌ Pane #4 ────────────────────────────────────────────────────────┐ -14 (C): │ │┌ Pane #5 ────────────────────────────────────────────────────────┐ -15 (C): │ │┌ Pane #6 ────────────────────────────────────────────────────────┐ +14 (C): │ │┌ Pane #3 ────────────────────────────────────────────────────────┐ +15 (C): │ │┌ Pane #5 ────────────────────────────────────────────────────────┐ 16 (C): │ ││ │ 17 (C): │ ││ │ 18 (C): │ ││ │ @@ -31,7 +31,7 @@ expression: snapshot 25 (C): │ ││ │ 26 (C): │ ││ │ 27 (C): └────────────────────────────────────────────────────┘└─────────────────────────────────────────────────────────────────┘ -28 (C): ┌ Pane #3 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +28 (C): ┌ Pane #6 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ 29 (C): │ │ 30 (C): │ │ 31 (C): │ │ diff --git a/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__can_increase_size_of_main_pane_in_stack_vertically.snap b/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__can_increase_size_of_main_pane_in_stack_vertically.snap index b5dea0aa6..a18772aca 100644 --- a/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__can_increase_size_of_main_pane_in_stack_vertically.snap +++ b/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__can_increase_size_of_main_pane_in_stack_vertically.snap @@ -1,6 +1,6 @@ --- source: zellij-server/src/tab/./unit/tab_integration_tests.rs -assertion_line: 3807 +assertion_line: 3961 expression: snapshot --- 00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ @@ -17,8 +17,8 @@ expression: snapshot 11 (C): │ │ 12 (C): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ 13 (C): ┌ Pane #2 ──────────────────────────────────────────────────┐┌ Pane #4 ─────────────────────────────────────────────────┐ -14 (C): │ │┌ Pane #5 ─────────────────────────────────────────────────┐ -15 (C): │ │┌ Pane #6 ─────────────────────────────────────────────────┐ +14 (C): │ │┌ Pane #3 ─────────────────────────────────────────────────┐ +15 (C): │ │┌ Pane #5 ─────────────────────────────────────────────────┐ 16 (C): │ ││ │ 17 (C): │ ││ │ 18 (C): │ ││ │ @@ -31,7 +31,7 @@ expression: snapshot 25 (C): │ ││ │ 26 (C): │ ││ │ 27 (C): └───────────────────────────────────────────────────────────┘└──────────────────────────────────────────────────────────┘ -28 (C): ┌ Pane #3 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +28 (C): ┌ Pane #6 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ 29 (C): │ │ 30 (C): │ │ 31 (C): │ │ diff --git a/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__increasing_size_into_main_pane_in_stack_horizontally_does_not_break_stack.snap b/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__increasing_size_into_main_pane_in_stack_horizontally_does_not_break_stack.snap index 417fe7cdd..2302f121a 100644 --- a/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__increasing_size_into_main_pane_in_stack_horizontally_does_not_break_stack.snap +++ b/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__increasing_size_into_main_pane_in_stack_horizontally_does_not_break_stack.snap @@ -1,6 +1,6 @@ --- source: zellij-server/src/tab/./unit/tab_integration_tests.rs -assertion_line: 4178 +assertion_line: 4384 expression: snapshot --- 00 (C): ┌ Pane #1 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ @@ -17,11 +17,11 @@ expression: snapshot 11 (C): │ │ 12 (C): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ 13 (C): ┌ Pane #2 ────────────────────────────────────────────────────────┐┌ Pane #4 ───────────────────────────────────────────┐ -14 (C): │ │┌ Pane #6 ───────────────────────────────────────────┐ -15 (C): │ │┌ Pane #7 ───────────────────────────────────────────┐ -16 (C): │ │┌ Pane #8 ───────────────────────────────────────────┐ +14 (C): │ │┌ Pane #5 ───────────────────────────────────────────┐ +15 (C): │ │┌ Pane #6 ───────────────────────────────────────────┐ +16 (C): │ │┌ Pane #7 ───────────────────────────────────────────┐ 17 (C): │ │┌ Pane #9 ───────────────────────────────────────────┐ -18 (C): │ │┌ Pane #10 ──────────────────────────────────────────┐ +18 (C): │ │┌ Pane #8 ───────────────────────────────────────────┐ 19 (C): └─────────────────────────────────────────────────────────────────┘┌ Pane #11 ──────────────────────────────────────────┐ 20 (C): ┌ Pane #3 ────────────────────────────────────────────────────────┐│ │ 21 (C): │ ││ │ @@ -30,7 +30,7 @@ expression: snapshot 24 (C): │ ││ │ 25 (C): │ ││ │ 26 (C): └─────────────────────────────────────────────────────────────────┘└────────────────────────────────────────────────────┘ -27 (C): ┌ Pane #5 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +27 (C): ┌ Pane #10 ─────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ 28 (C): │ │ 29 (C): │ │ 30 (C): │ │ diff --git a/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__move_focus_left_into_stacked_panes.snap b/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__move_focus_left_into_stacked_panes.snap index 6a0d0d7ee..c0f5e10a2 100644 --- a/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__move_focus_left_into_stacked_panes.snap +++ b/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__move_focus_left_into_stacked_panes.snap @@ -1,13 +1,13 @@ --- source: zellij-server/src/tab/./unit/tab_integration_tests.rs -assertion_line: 3378 +assertion_line: 3476 expression: snapshot --- -00 (C): ┌ Pane #3 ──────────────────────────────────────────────────┐┌ Pane #7 |