summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2022-11-05 14:45:45 +0100
committerGitHub <noreply@github.com>2022-11-05 14:45:45 +0100
commit6c3c0f51d06fc7831cdd63e84cadbf44841f0612 (patch)
treecc925b9744e8e36b9993a093d4b597bc93237663
parentdde6ecf09a0a62e5f2ddf5d1a7d3d60694129ed5 (diff)
fix(panes): moving and toggling embed/float with frames (#1909)
* fix(ui): frame broken or missing when embedding/floating without pane frames * fix(panes): offset properly without pane frames
-rw-r--r--zellij-server/src/panes/tiled_panes/mod.rs9
-rw-r--r--zellij-server/src/tab/mod.rs5
-rw-r--r--zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__embed_floating_pane_without_pane_frames.snap26
-rw-r--r--zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__float_embedded_pane_without_pane_frames.snap26
-rw-r--r--zellij-server/src/tab/unit/tab_integration_tests.rs59
5 files changed, 123 insertions, 2 deletions
diff --git a/zellij-server/src/panes/tiled_panes/mod.rs b/zellij-server/src/panes/tiled_panes/mod.rs
index 3f4faa53a..3bbd872a2 100644
--- a/zellij-server/src/panes/tiled_panes/mod.rs
+++ b/zellij-server/src/panes/tiled_panes/mod.rs
@@ -142,7 +142,7 @@ impl TiledPanes {
mut with_pane: Box<dyn Pane>,
) -> Option<Box<dyn Pane>> {
let with_pane_id = with_pane.pid();
- if self.draw_pane_frames {
+ if self.draw_pane_frames && !with_pane.borderless() {
with_pane.set_content_offset(Offset::frame(1));
}
let removed_pane = self.panes.remove(&pane_id).map(|removed_pane| {
@@ -248,7 +248,7 @@ impl TiledPanes {
}
#[allow(clippy::if_same_then_else)]
- if draw_pane_frames & !pane.borderless() {
+ if draw_pane_frames && !pane.borderless() {
// there's definitely a frame around this pane, offset its contents
pane.set_content_offset(Offset::frame(1));
} else if draw_pane_frames && pane.borderless() {
@@ -828,6 +828,7 @@ impl TiledPanes {
}
resize_pty!(current_position, self.os_api).unwrap();
current_position.set_should_render(true);
+ self.set_pane_frames(self.draw_pane_frames);
}
pub fn move_active_pane_down(&mut self, client_id: ClientId) {
if let Some(active_pane_id) = self.get_active_pane_id(client_id) {
@@ -861,6 +862,7 @@ impl TiledPanes {
}
resize_pty!(current_position, self.os_api).unwrap();
current_position.set_should_render(true);
+ self.set_pane_frames(self.draw_pane_frames);
}
}
}
@@ -896,6 +898,7 @@ impl TiledPanes {
}
resize_pty!(current_position, self.os_api).unwrap();
current_position.set_should_render(true);
+ self.set_pane_frames(self.draw_pane_frames);
}
}
}
@@ -931,6 +934,7 @@ impl TiledPanes {
}
resize_pty!(current_position, self.os_api).unwrap();
current_position.set_should_render(true);
+ self.set_pane_frames(self.draw_pane_frames);
}
}
}
@@ -966,6 +970,7 @@ impl TiledPanes {
}
resize_pty!(current_position, self.os_api).unwrap();
current_position.set_should_render(true);
+ self.set_pane_frames(self.draw_pane_frames);
}
}
}
diff --git a/zellij-server/src/tab/mod.rs b/zellij-server/src/tab/mod.rs
index fca2386f9..9546f2201 100644
--- a/zellij-server/src/tab/mod.rs
+++ b/zellij-server/src/tab/mod.rs
@@ -768,6 +768,11 @@ impl Tab {
return Ok(());
}
if let Some(mut embedded_pane_to_float) = self.close_pane(focused_pane_id, true) {
+ if self.draw_pane_frames && !embedded_pane_to_float.borderless() {
+ embedded_pane_to_float.set_content_offset(Offset::frame(1));
+ } else if !self.draw_pane_frames {
+ embedded_pane_to_float.set_content_offset(Offset::default());
+ }
embedded_pane_to_float.set_geom(new_pane_geom);
resize_pty!(embedded_pane_to_float, self.os_api).with_context(err_context)?;
embedded_pane_to_float.set_active_at(Instant::now());
diff --git a/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__embed_floating_pane_without_pane_frames.snap b/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__embed_floating_pane_without_pane_frames.snap
new file mode 100644
index 000000000..c6cf9b8e9
--- /dev/null
+++ b/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__embed_floating_pane_without_pane_frames.snap
@@ -0,0 +1,26 @@
+---
+source: zellij-server/src/tab/./unit/tab_integration_tests.rs
+assertion_line: 1604
+expression: snapshot
+---
+00 (C): │
+01 (C): │
+02 (C): │
+03 (C): │ I am scratch terminal
+04 (C): │
+05 (C): │
+06 (C): │
+07 (C): │
+08 (C): │
+09 (C): │
+10 (C): │
+11 (C): │
+12 (C): │
+13 (C): │
+14 (C): │
+15 (C): │
+16 (C): │
+17 (C): │
+18 (C): │
+19 (C): │
+
diff --git a/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__float_embedded_pane_without_pane_frames.snap b/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__float_embedded_pane_without_pane_frames.snap
new file mode 100644
index 000000000..c09b5e9f1
--- /dev/null
+++ b/zellij-server/src/tab/unit/snapshots/zellij_server__tab__tab_integration_tests__float_embedded_pane_without_pane_frames.snap
@@ -0,0 +1,26 @@
+---
+source: zellij-server/src/tab/./unit/tab_integration_tests.rs
+assertion_line: 1632
+expression: snapshot
+---
+00 (C):
+01 (C):
+02 (C):
+03 (C):
+04 (C):
+05 (C): ┌ Pane #2 ─────────────────────────────────────────────────┐
+06 (C): │ │
+07 (C): │ │
+08 (C): │ │
+09 (C): │ I am an embedded pane │
+10 (C): │ │
+11 (C): │ │
+12 (C): │ │
+13 (C): │ │
+14 (C): └──────────────────────────────────────────────────────────┘
+15 (C):
+16 (C):
+17 (C):
+18 (C):
+19 (C):
+
diff --git a/zellij-server/src/tab/unit/tab_integration_tests.rs b/zellij-server/src/tab/unit/tab_integration_tests.rs
index 281da814c..a95452ac7 100644
--- a/zellij-server/src/tab/unit/tab_integration_tests.rs
+++ b/zellij-server/src/tab/unit/tab_integration_tests.rs
@@ -1574,6 +1574,65 @@ fn float_embedded_pane() {
}
#[test]
+fn embed_floating_pane_without_pane_frames() {
+ let size = Size {
+ cols: 121,
+ rows: 20,
+ };
+ let client_id = 1;
+ let mut tab = create_new_tab(size, ModeInfo::default());
+ let new_pane_id = PaneId::Terminal(2);
+ let mut output = Output::default();
+ tab.set_pane_frames(false);
+ tab.toggle_floating_panes(client_id, None).unwrap();
+ tab.new_pane(new_pane_id, None, None, Some(client_id))
+ .unwrap();
+ tab.handle_pty_bytes(
+ 2,
+ Vec::from("\n\n\n I am scratch terminal".as_bytes()),
+ )
+ .unwrap();
+ tab.toggle_pane_embed_or_floating(client_id).unwrap();
+ tab.render(&mut output, None).unwrap();
+ let snapshot = take_snapshot(
+ output.serialize().unwrap().get(&client_id).unwrap(),
+ size.rows,
+ size.cols,
+ Palette::default(),
+ );
+ assert_snapshot!(snapshot);
+}
+
+#[test]
+fn float_embedded_pane_without_pane_frames() {
+ let size = Size {
+ cols: 121,
+ rows: 20,
+ };
+ let client_id = 1;
+ let mut tab = create_new_tab(size, ModeInfo::default());
+ let new_pane_id = PaneId::Terminal(2);
+ let mut output = Output::default();
+ tab.set_pane_frames(false);
+ tab.new_pane(new_pane_id, None, None, Some(client_id))
+ .unwrap();
+ tab.handle_pty_bytes(
+ 2,
+ Vec::from("\n\n\n I am an embedded pane".as_bytes()),
+ )
+ .unwrap();
+ tab.toggle_pane_embed_or_floating(client_id).unwrap();
+ tab.render(&mut output, None).unwrap();
+ let snapshot = take_snapshot(
+ output.serialize().unwrap().get(&client_id).unwrap(),
+ size.rows,
+ size.cols,
+ Palette::default(),
+ );
+ assert_snapshot!(snapshot);
+}
+
+#[test]
fn cannot_float_only_embedded_pane() {
let size = Size {
cols: 121,