diff options
author | Thomas Adam <thomas@xteddy.org> | 2020-07-04 16:01:20 +0100 |
---|---|---|
committer | Thomas Adam <thomas@xteddy.org> | 2020-07-04 16:01:20 +0100 |
commit | c0d9eaff9bd8c2a87dd95a860ed659f472a9ddf4 (patch) | |
tree | d84ac5b63dcf05c0a83f55d1bfbacc524aed27eb /server-fn.c | |
parent | a109e839d1275f9e3b593c87f4b84f1d277a84e5 (diff) | |
parent | 1e426896611f81dd6306263cb337e7ea7d80238e (diff) | |
download | rtmux-c0d9eaff9bd8c2a87dd95a860ed659f472a9ddf4.tar.gz rtmux-c0d9eaff9bd8c2a87dd95a860ed659f472a9ddf4.tar.bz2 rtmux-c0d9eaff9bd8c2a87dd95a860ed659f472a9ddf4.zip |
Merge branch 'obsd-master'
Diffstat (limited to 'server-fn.c')
-rw-r--r-- | server-fn.c | 50 |
1 files changed, 32 insertions, 18 deletions
diff --git a/server-fn.c b/server-fn.c index df222d7e..d5e7cbd7 100644 --- a/server-fn.c +++ b/server-fn.c @@ -181,7 +181,7 @@ server_kill_pane(struct window_pane *wp) struct window *w = wp->window; if (window_count_panes(w) == 1) { - server_kill_window(w); + server_kill_window(w, 1); recalculate_sizes(); } else { server_unzoom_window(w); @@ -193,19 +193,15 @@ server_kill_pane(struct window_pane *wp) } void -server_kill_window(struct window *w) +server_kill_window(struct window *w, int renumber) { - struct session *s, *next_s, *target_s; - struct session_group *sg; - struct winlink *wl; - - next_s = RB_MIN(sessions, &sessions); - while (next_s != NULL) { - s = next_s; - next_s = RB_NEXT(sessions, &sessions, s); + struct session *s, *s1; + struct winlink *wl; + RB_FOREACH_SAFE(s, sessions, &sessions, s1) { if (!session_has(s, w)) continue; + server_unzoom_window(w); while ((wl = winlink_find_by_window(&s->windows, w)) != NULL) { if (session_detach(s, wl)) { @@ -215,17 +211,35 @@ server_kill_window(struct window *w) server_redraw_session_group(s); } - if (options_get_number(s->options, "renumber-windows")) { - if ((sg = session_group_contains(s)) != NULL) { - TAILQ_FOREACH(target_s, &sg->sessions, gentry) - session_renumber_windows(target_s); - } else - session_renumber_windows(s); - } + if (renumber) + server_renumber_session(s); } recalculate_sizes(); } +void +server_renumber_session(struct session *s) +{ + struct session_group *sg; + + if (options_get_number(s->options, "renumber-windows")) { + if ((sg = session_group_contains(s)) != NULL) { + TAILQ_FOREACH(s, &sg->sessions, gentry) + session_renumber_windows(s); + } else + session_renumber_windows(s); + } +} + +void +server_renumber_all(void) +{ + struct session *s; + + RB_FOREACH(s, sessions, &sessions) + server_renumber_session(s); +} + int server_link_window(struct session *src, struct winlink *srcwl, struct session *dst, int dstidx, int killflag, int selectflag, @@ -355,7 +369,7 @@ server_destroy_pane(struct window_pane *wp, int notify) window_remove_pane(w, wp); if (TAILQ_EMPTY(&w->panes)) - server_kill_window(w); + server_kill_window(w, 1); else server_redraw_window(w); } |