mirror of
https://github.com/zellij-org/zellij.git
synced 2026-10-11 22:50:07 +00:00
fix: do not redraw on read-only actions (#5682)
This commit is contained in:
@@ -2350,13 +2350,16 @@ impl Tab {
|
||||
None
|
||||
};
|
||||
}
|
||||
let was_dimmed = self.dimmed_clients.contains(&client_id);
|
||||
self.mode_info.borrow_mut().remove(&client_id);
|
||||
self.connected_clients.borrow_mut().remove(&client_id);
|
||||
self.mouse_help_text_visible.remove(&client_id);
|
||||
self.mouse_last_pane_id.remove(&client_id);
|
||||
self.last_mouse_activity_time.remove(&client_id);
|
||||
self.set_client_dimmed(client_id, false);
|
||||
self.set_force_render();
|
||||
if is_connected_to_this_tab || was_dimmed {
|
||||
self.set_client_dimmed(client_id, false);
|
||||
self.set_force_render();
|
||||
}
|
||||
}
|
||||
pub fn drain_connected_clients(
|
||||
&mut self,
|
||||
|
||||
@@ -894,6 +894,62 @@ pub fn cannot_split_panes_horizontally_when_active_pane_is_too_small() {
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
pub fn removing_a_client_not_connected_to_the_tab_does_not_force_render() {
|
||||
let size = Size {
|
||||
cols: 121,
|
||||
rows: 20,
|
||||
};
|
||||
let stacked_resize = true;
|
||||
let mut tab = create_new_tab(size, stacked_resize);
|
||||
for pane in tab.tiled_panes.panes.values_mut() {
|
||||
pane.set_should_render(false);
|
||||
}
|
||||
tab.remove_client(99);
|
||||
assert!(
|
||||
tab.tiled_panes.panes.values().all(|p| !p.should_render()),
|
||||
"removing a client that never viewed this tab must not trigger a full re-render"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
pub fn removing_a_client_not_connected_to_the_tab_clears_its_dimming() {
|
||||
let size = Size {
|
||||
cols: 121,
|
||||
rows: 20,
|
||||
};
|
||||
let stacked_resize = true;
|
||||
let mut tab = create_new_tab(size, stacked_resize);
|
||||
tab.set_client_dimmed(99, true);
|
||||
for pane in tab.tiled_panes.panes.values_mut() {
|
||||
pane.set_should_render(false);
|
||||
}
|
||||
tab.remove_client(99);
|
||||
assert!(!tab.dimmed_clients.contains(&99));
|
||||
assert!(
|
||||
tab.tiled_panes.panes.values().all(|p| p.should_render()),
|
||||
"removing a dimmed client must re-render to clear the dimming"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
pub fn removing_a_client_connected_to_the_tab_forces_render() {
|
||||
let size = Size {
|
||||
cols: 121,
|
||||
rows: 20,
|
||||
};
|
||||
let stacked_resize = true;
|
||||
let mut tab = create_new_tab(size, stacked_resize);
|
||||
for pane in tab.tiled_panes.panes.values_mut() {
|
||||
pane.set_should_render(false);
|
||||
}
|
||||
tab.remove_client(1);
|
||||
assert!(
|
||||
tab.tiled_panes.panes.values().all(|p| p.should_render()),
|
||||
"removing a client that was viewing this tab must re-render it for the remaining clients"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
pub fn split_in_direction_without_a_connected_client_still_creates_the_pane() {
|
||||
let size = Size {
|
||||
|
||||
Reference in New Issue
Block a user