From 893bb9f4db481d9c3e20a57f97522e73100637d3 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Wed, 14 Dec 2016 17:39:00 +0000 Subject: Fix up winlink lists after swap-window. --- usr.bin/tmux/cmd-swap-window.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'usr.bin/tmux/cmd-swap-window.c') diff --git a/usr.bin/tmux/cmd-swap-window.c b/usr.bin/tmux/cmd-swap-window.c index cf6ee4ca3a4..5172028efce 100644 --- a/usr.bin/tmux/cmd-swap-window.c +++ b/usr.bin/tmux/cmd-swap-window.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cmd-swap-window.c,v 1.20 2016/10/16 19:04:05 nicm Exp $ */ +/* $OpenBSD: cmd-swap-window.c,v 1.21 2016/12/14 17:38:59 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -48,7 +48,7 @@ cmd_swap_window_exec(struct cmd *self, struct cmdq_item *item) struct session *src, *dst; struct session_group *sg_src, *sg_dst; struct winlink *wl_src, *wl_dst; - struct window *w; + struct window *w_src, *w_dst; wl_src = item->state.sflag.wl; src = item->state.sflag.s; @@ -67,9 +67,15 @@ cmd_swap_window_exec(struct cmd *self, struct cmdq_item *item) if (wl_dst->window == wl_src->window) return (CMD_RETURN_NORMAL); - w = wl_dst->window; - wl_dst->window = wl_src->window; - wl_src->window = w; + w_dst = wl_dst->window; + TAILQ_REMOVE(&w_dst->winlinks, wl_dst, wentry); + w_src = wl_src->window; + TAILQ_REMOVE(&w_src->winlinks, wl_src, wentry); + + wl_dst->window = w_src; + TAILQ_INSERT_TAIL(&w_src->winlinks, wl_dst, wentry); + wl_src->window = w_dst; + TAILQ_INSERT_TAIL(&w_dst->winlinks, wl_src, wentry); if (!args_has(self->args, 'd')) { session_select(dst, wl_dst->idx); -- cgit v1.2.3