Zoomed panes are now like full screen floating panes.

This commit is contained in:
Michael Grant
2026-09-30 23:10:40 +01:00
parent 5a820e63b7
commit 7810f8abf3
29 changed files with 752 additions and 621 deletions

View File

@@ -68,7 +68,7 @@ cmd_swap_pane_exec(struct cmd *self, struct cmdq_item *item)
struct window_pane *tmp_wp, *src_wp, *dst_wp;
struct layout_cell *src_lc, *dst_lc;
u_int sx, sy, xoff, yoff;
int src_idx, dst_idx;
int src_idx, dst_idx, src_zoomed, dst_zoomed;
dst_w = target->wl->window;
dst_wp = target->wp;
@@ -82,8 +82,7 @@ cmd_swap_pane_exec(struct cmd *self, struct cmdq_item *item)
return (CMD_RETURN_ERROR);
}
if (window_push_zoom(dst_w, 0, args_has(args, 'Z')))
server_redraw_window(dst_w);
dst_zoomed = (args_has(args, 'Z') && (dst_w->flags & WINDOW_ZOOMED));
if (args_has(args, 'D')) {
if (window_pane_is_floating(dst_wp)) {
@@ -111,8 +110,7 @@ cmd_swap_pane_exec(struct cmd *self, struct cmdq_item *item)
}
}
if (src_w != dst_w && window_push_zoom(src_w, 0, args_has(args, 'Z')))
server_redraw_window(src_w);
src_zoomed = (args_has(args, 'Z') && (src_w->flags & WINDOW_ZOOMED));
if (src_wp == dst_wp)
goto out;
@@ -140,6 +138,12 @@ cmd_swap_pane_exec(struct cmd *self, struct cmdq_item *item)
else
TAILQ_INSERT_AFTER(&dst_w->z_index, tmp_wp, src_wp, zentry);
/* Zoom belongs to the position in the window, like the cell. */
if ((src_wp->flags ^ dst_wp->flags) & PANE_ZOOMED) {
src_wp->flags ^= PANE_ZOOMED;
dst_wp->flags ^= PANE_ZOOMED;
}
src_lc = src_wp->layout_cell;
dst_lc = dst_wp->layout_cell;
src_lc->wp = dst_wp;
@@ -197,9 +201,16 @@ cmd_swap_pane_exec(struct cmd *self, struct cmdq_item *item)
events_fire_window("window-layout-changed", dst_w);
out:
if (window_pop_zoom(src_w))
server_redraw_window(src_w);
if (src_w != dst_w && window_pop_zoom(dst_w))
server_redraw_window(dst_w);
/* With -Z, leave the active pane zoomed if the window was. */
if (src_zoomed) {
window_unzoom(src_w, 1);
if (src_w->active != NULL)
window_zoom(src_w->active);
}
if (src_w != dst_w && dst_zoomed) {
window_unzoom(dst_w, 1);
if (dst_w->active != NULL)
window_zoom(dst_w->active);
}
return (CMD_RETURN_NORMAL);
}