mirror of
https://github.com/tmux/tmux.git
synced 2026-03-26 13:16:37 +00:00
Prohibit swapping 2 floating panes, that doesn't make sense.
This commit is contained in:
@@ -79,6 +79,11 @@ cmd_swap_pane_exec(struct cmd *self, struct cmdq_item *item)
|
|||||||
if (src_wp == dst_wp)
|
if (src_wp == dst_wp)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
if ((src_wp->flags & PANE_FLOATING) && (dst_wp->flags & PANE_FLOATING)) {
|
||||||
|
cmdq_error(item, "cannot swap two floating panes");
|
||||||
|
return (CMD_RETURN_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
server_client_remove_pane(src_wp);
|
server_client_remove_pane(src_wp);
|
||||||
server_client_remove_pane(dst_wp);
|
server_client_remove_pane(dst_wp);
|
||||||
|
|
||||||
@@ -99,6 +104,13 @@ cmd_swap_pane_exec(struct cmd *self, struct cmdq_item *item)
|
|||||||
dst_lc->wp = src_wp;
|
dst_lc->wp = src_wp;
|
||||||
src_wp->layout_cell = dst_lc;
|
src_wp->layout_cell = dst_lc;
|
||||||
|
|
||||||
|
/* Swap PANE_FLOATING flag to keep each pane consistent with its new
|
||||||
|
* layout cell (floating cells have parent == NULL). */
|
||||||
|
if ((src_wp->flags ^ dst_wp->flags) & PANE_FLOATING) {
|
||||||
|
src_wp->flags ^= PANE_FLOATING;
|
||||||
|
dst_wp->flags ^= PANE_FLOATING;
|
||||||
|
}
|
||||||
|
|
||||||
src_wp->window = dst_w;
|
src_wp->window = dst_w;
|
||||||
options_set_parent(src_wp->options, dst_w->options);
|
options_set_parent(src_wp->options, dst_w->options);
|
||||||
src_wp->flags |= (PANE_STYLECHANGED|PANE_THEMECHANGED);
|
src_wp->flags |= (PANE_STYLECHANGED|PANE_THEMECHANGED);
|
||||||
|
|||||||
4
layout.c
4
layout.c
@@ -301,6 +301,8 @@ layout_cell_is_top(struct window *w, struct layout_cell *lc)
|
|||||||
|
|
||||||
while (lc != w->layout_root) {
|
while (lc != w->layout_root) {
|
||||||
next = lc->parent;
|
next = lc->parent;
|
||||||
|
if (next == NULL)
|
||||||
|
return (0);
|
||||||
if (next->type == LAYOUT_TOPBOTTOM &&
|
if (next->type == LAYOUT_TOPBOTTOM &&
|
||||||
lc != TAILQ_FIRST(&next->cells))
|
lc != TAILQ_FIRST(&next->cells))
|
||||||
return (0);
|
return (0);
|
||||||
@@ -317,6 +319,8 @@ layout_cell_is_bottom(struct window *w, struct layout_cell *lc)
|
|||||||
|
|
||||||
while (lc != w->layout_root) {
|
while (lc != w->layout_root) {
|
||||||
next = lc->parent;
|
next = lc->parent;
|
||||||
|
if (next == NULL)
|
||||||
|
return (0);
|
||||||
if (next->type == LAYOUT_TOPBOTTOM &&
|
if (next->type == LAYOUT_TOPBOTTOM &&
|
||||||
lc != TAILQ_LAST(&next->cells, layout_cells))
|
lc != TAILQ_LAST(&next->cells, layout_cells))
|
||||||
return (0);
|
return (0);
|
||||||
|
|||||||
Reference in New Issue
Block a user