summaryrefslogtreecommitdiffstats
path: root/zellij-server/src/panes
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2023-03-01 12:25:44 +0100
committerGitHub <noreply@github.com>2023-03-01 12:25:44 +0100
commita8b5bce9d9e6c080f3c57735ef689a74eb2124e5 (patch)
tree0157bf5faf052d8860ce9010b1ab6a80fd3adc2b /zellij-server/src/panes
parentd670c29649307ba575c71e267104f033f8600906 (diff)
fix(sixel): report pixel size in winsize change ioctl (#2212)
* fix(sixel): report pixel size in winsize change ioctl * style(fmt): rustfmt
Diffstat (limited to 'zellij-server/src/panes')
-rw-r--r--zellij-server/src/panes/floating_panes/mod.rs23
-rw-r--r--zellij-server/src/panes/tiled_panes/mod.rs100
2 files changed, 103 insertions, 20 deletions
diff --git a/zellij-server/src/panes/floating_panes/mod.rs b/zellij-server/src/panes/floating_panes/mod.rs
index 399d16c98..765f0196d 100644
--- a/zellij-server/src/panes/floating_panes/mod.rs
+++ b/zellij-server/src/panes/floating_panes/mod.rs
@@ -26,7 +26,7 @@ use zellij_utils::{
errors::prelude::*,
input::command::RunCommand,
input::layout::FloatingPaneLayout,
- pane_size::{Dimension, Offset, PaneGeom, Size, Viewport},
+ pane_size::{Dimension, Offset, PaneGeom, Size, SizeInPixels, Viewport},
};
const RESIZE_INCREMENT_WIDTH: usize = 5;
@@ -39,6 +39,7 @@ pub struct FloatingPanes {
connected_clients: Rc<RefCell<HashSet<ClientId>>>,
connected_clients_in_app: Rc<RefCell<HashSet<ClientId>>>,
mode_info: Rc<RefCell<HashMap<ClientId, ModeInfo>>>,
+ character_cell_size: Rc<RefCell<Option<SizeInPixels>>>,
default_mode_info: ModeInfo,
style: Style,
session_is_mirrored: bool,
@@ -59,6 +60,7 @@ impl FloatingPanes {
connected_clients: Rc<RefCell<HashSet<ClientId>>>,
connected_clients_in_app: Rc<RefCell<HashSet<ClientId>>>,
mode_info: Rc<RefCell<HashMap<ClientId, ModeInfo>>>,
+ character_cell_size: Rc<RefCell<Option<SizeInPixels>>>,
session_is_mirrored: bool,
default_mode_info: ModeInfo,
style: Style,
@@ -72,6 +74,7 @@ impl FloatingPanes {
connected_clients,
connected_clients_in_app,
mode_info,
+ character_cell_size,
session_is_mirrored,
default_mode_info,
style,
@@ -304,7 +307,8 @@ impl FloatingPanes {
} else {
pane.set_content_offset(Offset::default());
}
- resize_pty!(pane, os_api, self.senders).with_context(|| err_context(&pane.pid()))?;
+ resize_pty!(pane, os_api, self.senders, self.character_cell_size)
+ .with_context(|| err_context(&pane.pid()))?;
}
Ok(())
}
@@ -390,7 +394,7 @@ impl FloatingPanes {
pub fn resize_pty_all_panes(&mut self, os_api: &mut Box<dyn ServerOsApi>) -> Result<()> {
for pane in self.panes.values_mut() {
- resize_pty!(pane, os_api, self.senders)
+ resize_pty!(pane, os_api, self.senders, self.character_cell_size)
.with_context(|| format!("failed to resize PTY in pane {:?}", pane.pid()))?;
}
Ok(())
@@ -424,7 +428,8 @@ impl FloatingPanes {
.with_context(err_context)?;
for pane in self.panes.values_mut() {
- resize_pty!(pane, os_api, self.senders).with_context(err_context)?;
+ resize_pty!(pane, os_api, self.senders, self.character_cell_size)
+ .with_context(err_context)?;
}
self.set_force_render();
return Ok(true);
@@ -833,7 +838,7 @@ impl FloatingPanes {
if let Some(geom) = prev_geom_override {
new_position.set_geom_override(geom);
}
- resize_pty!(new_position, os_api, self.senders).unwrap();
+ resize_pty!(new_position, os_api, self.senders, self.character_cell_size).unwrap();
new_position.set_should_render(true);
let current_position = self.panes.get_mut(&active_pane_id).unwrap();
@@ -841,7 +846,13 @@ impl FloatingPanes {
if let Some(geom) = next_geom_override {
current_position.set_geom_override(geom);
}
- resize_pty!(current_position, os_api, self.senders).unwrap();
+ resize_pty!(
+ current_position,
+ os_api,
+ self.senders,
+ self.character_cell_size
+ )
+ .unwrap();
current_position.set_should_render(true);
self.focus_pane_for_all_clients(active_pane_id);
}
diff --git a/zellij-server/src/panes/tiled_panes/mod.rs b/zellij-server/src/panes/tiled_panes/mod.rs
index 28941746e..ac0f8c635 100644
--- a/zellij-server/src/panes/tiled_panes/mod.rs
+++ b/zellij-server/src/panes/tiled_panes/mod.rs
@@ -300,7 +300,7 @@ impl TiledPanes {
}
}
- resize_pty!(pane, self.os_api, self.senders).unwrap();
+ resize_pty!(pane, self.os_api, self.senders, self.character_cell_size).unwrap();
}
self.reset_boundaries();
}
@@ -781,7 +781,7 @@ impl TiledPanes {
}
for pane in self.panes.values_mut() {
- resize_pty!(pane, self.os_api, self.senders).unwrap();
+ resize_pty!(pane, self.os_api, self.senders, self.character_cell_size).unwrap();
}
self.reset_boundaries();
}
@@ -1071,7 +1071,13 @@ impl TiledPanes {
if let Some(geom) = prev_geom_override {
new_position.set_geom_override(geom);
}
- resize_pty!(new_position, self.os_api, self.senders).unwrap();
+ resize_pty!(
+ new_position,
+ self.os_api,
+ self.senders,
+ self.character_cell_size
+ )
+ .unwrap();
new_position.set_should_render(true);
let current_position = self.panes.get_mut(&active_pane_id).unwrap();
@@ -1079,7 +1085,13 @@ impl TiledPanes {
if let Some(geom) = next_geom_override {
current_position.set_geom_override(geom);
}
- resize_pty!(current_position, self.os_api, self.senders).unwrap();
+ resize_pty!(
+ current_position,
+ self.os_api,
+ self.senders,
+ self.character_cell_size
+ )
+ .unwrap();
current_position.set_should_render(true);
self.focus_pane_for_all_clients(active_pane_id);
self.set_pane_frames(self.draw_pane_frames);
@@ -1123,7 +1135,13 @@ impl TiledPanes {
if let Some(geom) = prev_geom_override {
new_position.set_geom_override(geom);
}
- resize_pty!(new_position, self.os_api, self.senders).unwrap();
+ resize_pty!(
+ new_position,
+ self.os_api,
+ self.senders,
+ self.character_cell_size
+ )
+ .unwrap();
new_position.set_should_render(true);
let current_position = self.panes.get_mut(&active_pane_id).unwrap();
@@ -1131,7 +1149,13 @@ impl TiledPanes {
if let Some(geom) = next_geom_override {
current_position.set_geom_override(geom);
}
- resize_pty!(current_position, self.os_api, self.senders).unwrap();
+ resize_pty!(
+ current_position,
+ self.os_api,
+ self.senders,
+ self.character_cell_size
+ )
+ .unwrap();
current_position.set_should_render(true);
self.set_pane_frames(self.draw_pane_frames);
}
@@ -1159,7 +1183,13 @@ impl TiledPanes {
if let Some(geom) = prev_geom_override {
new_position.set_geom_override(geom);
}
- resize_pty!(new_position, self.os_api, self.senders).unwrap();
+ resize_pty!(
+ new_position,
+ self.os_api,
+ self.senders,
+ self.character_cell_size
+ )
+ .unwrap();
new_position.set_should_render(true);
let current_position = self.panes.get_mut(active_pane_id).unwrap();
@@ -1167,7 +1197,13 @@ impl TiledPanes {
if let Some(geom) = next_geom_override {
current_position.set_geom_override(geom);
}
- resize_pty!(current_position, self.os_api, self.senders).unwrap();
+ resize_pty!(
+ current_position,
+ self.os_api,
+ self.senders,
+ self.character_cell_size
+ )
+ .unwrap();
current_position.set_should_render(true);
self.set_pane_frames(self.draw_pane_frames);
}
@@ -1195,7 +1231,13 @@ impl TiledPanes {
if let Some(geom) = prev_geom_override {
new_position.set_geom_override(geom);
}
- resize_pty!(new_position, self.os_api, self.senders).unwrap();
+ resize_pty!(
+ new_position,
+ self.os_api,
+ self.senders,
+ self.character_cell_size
+ )
+ .unwrap();
new_position.set_should_render(true);
let current_position = self.panes.get_mut(active_pane_id).unwrap();
@@ -1203,7 +1245,13 @@ impl TiledPanes {
if let Some(geom) = next_geom_override {
current_position.set_geom_override(geom);
}
- resize_pty!(current_position, self.os_api, self.senders).unwrap();
+ resize_pty!(
+ current_position,
+ self.os_api,
+ self.senders,
+ self.character_cell_size
+ )
+ .unwrap();
current_position.set_should_render(true);
self.set_pane_frames(self.draw_pane_frames);
}
@@ -1231,7 +1279,13 @@ impl TiledPanes {
if let Some(geom) = prev_geom_override {
new_position.set_geom_override(geom);
}
- resize_pty!(new_position, self.os_api, self.senders).unwrap();
+ resize_pty!(
+ new_position,
+ self.os_api,
+ self.senders,
+ self.character_cell_size
+ )
+ .unwrap();
new_position.set_should_render(true);
let current_position = self.panes.get_mut(active_pane_id).unwrap();
@@ -1239,7 +1293,13 @@ impl TiledPanes {
if let Some(geom) = next_geom_override {
current_position.set_geom_override(geom);
}
- resize_pty!(current_position, self.os_api, self.senders).unwrap();
+ resize_pty!(
+ current_position,
+ self.os_api,
+ self.senders,
+ self.character_cell_size
+ )
+ .unwrap();
current_position.set_should_render(true);
self.set_pane_frames(self.draw_pane_frames);
}
@@ -1269,7 +1329,13 @@ impl TiledPanes {
if let Some(geom) = prev_geom_override {
new_position.set_geom_override(geom);
}
- resize_pty!(new_position, self.os_api, self.senders).unwrap();
+ resize_pty!(
+ new_position,
+ self.os_api,
+ self.senders,
+ self.character_cell_size
+ )
+ .unwrap();
new_position.set_should_render(true);
let current_position = self.panes.get_mut(active_pane_id).unwrap();
@@ -1277,7 +1343,13 @@ impl TiledPanes {
if let Some(geom) = next_geom_override {
current_position.set_geom_override(geom);
}
- resize_pty!(current_position, self.os_api, self.senders).unwrap();
+ resize_pty!(
+ current_position,
+ self.os_api,
+ self.senders,
+ self.character_cell_size
+ )
+ .unwrap();
current_position.set_should_render(true);
self.set_pane_frames(self.draw_pane_frames);
}