Skip to content

Commit

Permalink
fix(floating-panes): when changing coordinates, if a pane is not floa…
Browse files Browse the repository at this point in the history
…ting - make it floating (#3972)

* fix(panes): when changing floating pane coordinates, if the pane is not floating, float it

* style(fmt): rustfmt
  • Loading branch information
imsnif authored Feb 3, 2025
1 parent 3a053de commit af2be7a
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 8 deletions.
5 changes: 3 additions & 2 deletions zellij-server/src/screen.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2067,6 +2067,7 @@ impl Screen {
plugin_pane_to_move_to_active_tab,
pane_id,
None,
true,
)?;
} else {
new_active_tab.hide_floating_panes();
Expand Down Expand Up @@ -2180,7 +2181,7 @@ impl Screen {
let (mut tiled_panes_layout, mut floating_panes_layout) = default_layout.new_tab();
if pane_to_break_is_floating {
tab.show_floating_panes();
tab.add_floating_pane(active_pane, active_pane_id, None)?;
tab.add_floating_pane(active_pane, active_pane_id, None, true)?;
if let Some(already_running_layout) = floating_panes_layout
.iter_mut()
.find(|i| i.run == active_pane_run_instruction)
Expand Down Expand Up @@ -2304,7 +2305,7 @@ impl Screen {

if pane_to_break_is_floating {
new_active_tab.show_floating_panes();
new_active_tab.add_floating_pane(active_pane, active_pane_id, None)?;
new_active_tab.add_floating_pane(active_pane, active_pane_id, None, true)?;
} else {
new_active_tab.hide_floating_panes();
new_active_tab.add_tiled_pane(active_pane, active_pane_id, Some(client_id))?;
Expand Down
28 changes: 22 additions & 6 deletions zellij-server/src/tab/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1026,7 +1026,7 @@ impl Tab {
}
if let Some(embedded_pane_to_float) = self.extract_pane(focused_pane_id, true) {
self.show_floating_panes();
self.add_floating_pane(embedded_pane_to_float, focused_pane_id, None)?;
self.add_floating_pane(embedded_pane_to_float, focused_pane_id, None, true)?;
}
}
Ok(())
Expand Down Expand Up @@ -1058,7 +1058,7 @@ impl Tab {
return Ok(());
}
if let Some(embedded_pane_to_float) = self.extract_pane(pane_id, true) {
self.add_floating_pane(embedded_pane_to_float, pane_id, None)?;
self.add_floating_pane(embedded_pane_to_float, pane_id, None, true)?;
}
}
Ok(())
Expand Down Expand Up @@ -1203,7 +1203,7 @@ impl Tab {
.insert(pid, (is_scrollback_editor, new_pane));
Ok(())
} else if self.floating_panes.panes_are_visible() {
self.add_floating_pane(new_pane, pid, floating_pane_coordinates)
self.add_floating_pane(new_pane, pid, floating_pane_coordinates, true)
} else {
self.add_tiled_pane(new_pane, pid, client_id)
}
Expand Down Expand Up @@ -4177,7 +4177,7 @@ impl Tab {
pane.1.set_selectable(true);
if should_float {
self.show_floating_panes();
self.add_floating_pane(pane.1, pane_id, None)
self.add_floating_pane(pane.1, pane_id, None, true)
} else {
self.hide_floating_panes();
self.add_tiled_pane(pane.1, pane_id, Some(client_id))
Expand All @@ -4190,7 +4190,8 @@ impl Tab {
match self.suppressed_panes.remove(&pane_id) {
Some(pane) => {
self.show_floating_panes();
self.add_floating_pane(pane.1, pane_id, None).non_fatal();
self.add_floating_pane(pane.1, pane_id, None, true)
.non_fatal();
self.floating_panes.focus_pane_for_all_clients(pane_id);
},
None => {
Expand Down Expand Up @@ -4230,6 +4231,7 @@ impl Tab {
mut pane: Box<dyn Pane>,
pane_id: PaneId,
floating_pane_coordinates: Option<FloatingPaneCoordinates>,
should_focus_new_pane: bool,
) -> Result<()> {
let err_context = || format!("failed to add floating pane");
if let Some(mut new_pane_geom) = self.floating_panes.find_room_for_new_pane() {
Expand All @@ -4247,7 +4249,9 @@ impl Tab {
resize_pty!(pane, self.os_api, self.senders, self.character_cell_size)
.with_context(err_context)?;
self.floating_panes.add_pane(pane_id, pane);
self.floating_panes.focus_pane_for_all_clients(pane_id);
if should_focus_new_pane {
self.floating_panes.focus_pane_for_all_clients(pane_id);
}
}
if self.auto_layout && !self.swap_layouts.is_floating_damaged() {
// only do this if we're already in this layout, otherwise it might be
Expand Down Expand Up @@ -4520,6 +4524,18 @@ impl Tab {
pane_id: &PaneId,
floating_pane_coordinates: FloatingPaneCoordinates,
) -> Result<()> {
if !self.floating_panes.panes_contain(pane_id) {
// if these panes are not floating, we make them floating (assuming doing so wouldn't
// be removing the last selectable tiled pane in the tab, which would close it)
if (self.tiled_panes.panes_contain(&pane_id)
&& self.get_selectable_tiled_panes().count() <= 1)
|| self.suppressed_panes.contains_key(pane_id)
{
if let Some(pane) = self.extract_pane(*pane_id, true) {
self.add_floating_pane(pane, *pane_id, None, false)?;
}
}
}
self.floating_panes
.change_pane_coordinates(*pane_id, floating_pane_coordinates)?;
self.set_force_render();
Expand Down

0 comments on commit af2be7a

Please sign in to comment.