summaryrefslogtreecommitdiffstats
path: root/server-fn.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@openbsd.org>2013-07-05 14:52:33 +0000
committerNicholas Marriott <nicm@openbsd.org>2013-07-05 14:52:33 +0000
commit064124cc5f3df250f0f866ae1df7bc4cd19bf833 (patch)
treedf2d156542b23175d1b0eaab0250dbd9f6eb9da9 /server-fn.c
parent7af5fec0387008c71bf29ad1e394871873acaf40 (diff)
When the session option renumber-window is used, ensure we iterate over
all sessions in that group when the winlinks are reordered, otherwise the winlink lists are out of sync with one another. From Thomas Adam.
Diffstat (limited to 'server-fn.c')
-rw-r--r--server-fn.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/server-fn.c b/server-fn.c
index d92754e1..efb95acd 100644
--- a/server-fn.c
+++ b/server-fn.c
@@ -262,8 +262,9 @@ server_lock_client(struct client *c)
void
server_kill_window(struct window *w)
{
- struct session *s, *next_s;
- struct winlink *wl;
+ struct session *s, *next_s, *target_s;
+ struct session_group *sg;
+ struct winlink *wl;
next_s = RB_MIN(sessions, &sessions);
while (next_s != NULL) {
@@ -280,8 +281,13 @@ server_kill_window(struct window *w)
server_redraw_session_group(s);
}
- if (options_get_number(&s->options, "renumber-windows"))
- session_renumber_windows(s);
+ if (options_get_number(&s->options, "renumber-windows")) {
+ if ((sg = session_group_find(s)) != NULL) {
+ TAILQ_FOREACH(target_s, &sg->sessions, gentry)
+ session_renumber_windows(target_s);
+ } else
+ session_renumber_windows(s);
+ }
}
recalculate_sizes();
}