diff --git a/cmd-join-pane.c b/cmd-join-pane.c index 8790db297..8f4033855 100644 --- a/cmd-join-pane.c +++ b/cmd-join-pane.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cmd-join-pane.c,v 1.74 2026/08/03 20:29:52 nicm Exp $ */ +/* $OpenBSD: cmd-join-pane.c,v 1.75 2026/09/21 10:33:16 nicm Exp $ */ /* * Copyright (c) 2011 George Nachman @@ -134,7 +134,7 @@ cmd_join_pane_place(struct cmdq_item *item, struct winlink *wl, } else if (strcmp(position, "back") == 0) { TAILQ_REMOVE(&w->z_index, wp, zentry); TAILQ_FOREACH(owp, &w->z_index, zentry) { - if (!window_pane_is_floating(owp)) + if (!window_pane_is_floating_with_hidden(owp)) break; } if (owp != NULL) @@ -143,24 +143,30 @@ cmd_join_pane_place(struct cmdq_item *item, struct winlink *wl, TAILQ_INSERT_TAIL(&w->z_index, wp, zentry); } else if (strcmp(position, "forward") == 0) { owp = TAILQ_PREV(wp, window_panes_zindex, zentry); + while (owp != NULL && owp->layout_cell == NULL) + owp = TAILQ_PREV(owp, window_panes_zindex, zentry); if (owp != NULL) { TAILQ_REMOVE(&w->z_index, wp, zentry); TAILQ_INSERT_BEFORE(owp, wp, zentry); } } else if (strcmp(position, "backward") == 0) { owp = TAILQ_NEXT(wp, zentry); + while (owp != NULL && owp->layout_cell == NULL) + owp = TAILQ_NEXT(owp, zentry); if (owp != NULL && window_pane_is_floating(owp)) { TAILQ_REMOVE(&w->z_index, wp, zentry); TAILQ_INSERT_AFTER(&w->z_index, owp, wp, zentry); } } else if (strcmp(position, "forward-loop") == 0) { owp = TAILQ_PREV(wp, window_panes_zindex, zentry); + while (owp != NULL && owp->layout_cell == NULL) + owp = TAILQ_PREV(owp, window_panes_zindex, zentry); TAILQ_REMOVE(&w->z_index, wp, zentry); if (owp != NULL) TAILQ_INSERT_BEFORE(owp, wp, zentry); else { TAILQ_FOREACH(owp, &w->z_index, zentry) { - if (!window_pane_is_floating(owp)) + if (!window_pane_is_floating_with_hidden(owp)) break; } if (owp != NULL) @@ -170,6 +176,8 @@ cmd_join_pane_place(struct cmdq_item *item, struct winlink *wl, } } else if (strcmp(position, "backward-loop") == 0) { owp = TAILQ_NEXT(wp, zentry); + while (owp != NULL && owp->layout_cell == NULL) + owp = TAILQ_NEXT(owp, zentry); if (owp != NULL && window_pane_is_floating(owp)) { TAILQ_REMOVE(&w->z_index, wp, zentry); TAILQ_INSERT_AFTER(&w->z_index, owp, wp, zentry); @@ -348,8 +356,10 @@ cmd_join_pane_zindex(struct cmdq_item *item, struct winlink *wl, n = 0; TAILQ_FOREACH(owp, &w->z_index, zentry) { - if (!window_pane_is_floating(owp)) + if (!window_pane_is_floating_with_hidden(owp)) break; + if (owp->layout_cell == NULL) + continue; if (n >= z) break; n++; @@ -444,7 +454,6 @@ cmd_join_pane_exec(struct cmd *self, struct cmdq_item *item) cmdq_error(item, "pane is not floating"); return (CMD_RETURN_ERROR); } - server_unzoom_window(dst_w); if ((s = args_get(args, 'P')) != NULL) return (cmd_join_pane_place(item, dst_wl, dst_wp, s)); if ((s = args_get(args, 'z')) != NULL) diff --git a/cmd-resize-pane.c b/cmd-resize-pane.c index fc5062ab4..c644dd783 100644 --- a/cmd-resize-pane.c +++ b/cmd-resize-pane.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cmd-resize-pane.c,v 1.68 2026/08/31 07:44:39 nicm Exp $ */ +/* $OpenBSD: cmd-resize-pane.c,v 1.69 2026/09/21 10:33:16 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott @@ -91,7 +91,8 @@ cmd_resize_pane_exec(struct cmd *self, struct cmdq_item *item) server_redraw_window(w); return (CMD_RETURN_NORMAL); } - server_unzoom_window(w); + if (!window_pane_is_floating(wp)) + server_unzoom_window(w); lc = wp->layout_cell; /* may have been replaced by unzoom */ if (args_has(args, 'x')) { diff --git a/tmux.h b/tmux.h index 1ca23d83f..eb25fb80d 100644 --- a/tmux.h +++ b/tmux.h @@ -1,4 +1,4 @@ -/* $OpenBSD: tmux.h,v 1.1442 2026/09/21 10:22:31 nicm Exp $ */ +/* $OpenBSD: tmux.h,v 1.1443 2026/09/21 10:33:16 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -3754,6 +3754,7 @@ int window_pane_get_pane_status(struct window_pane *); struct style_range *window_pane_status_get_range(struct window_pane *, u_int, u_int); int window_pane_is_floating(struct window_pane *); +int window_pane_is_floating_with_hidden(struct window_pane *); /* window-border.c */ void window_set_fill_cells(struct window *); diff --git a/window.c b/window.c index 2b97b186a..afb841267 100644 --- a/window.c +++ b/window.c @@ -1,4 +1,4 @@ -/* $OpenBSD: window.c,v 1.376 2026/09/21 10:22:31 nicm Exp $ */ +/* $OpenBSD: window.c,v 1.377 2026/09/21 10:33:16 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -2902,3 +2902,15 @@ window_pane_is_floating(struct window_pane *wp) return (0); return (1); } + +int +window_pane_is_floating_with_hidden(struct window_pane *wp) +{ + struct layout_cell *lc = wp->layout_cell; + + if (lc == NULL) + lc = wp->saved_layout_cell; + if (lc == NULL || (lc->flags & LAYOUT_CELL_FLOATING) == 0) + return (0); + return (1); +}