diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 03:34:56 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 03:34:56 +0000 |
commit | c294c2bf54a3ec56271a78c284f84e75a8119731 (patch) | |
tree | f1fed2d81b80619666e9508fa5051bcfc34fae5f /session.c | |
parent | Releasing progress-linux version 3.3a-5~progress7.99u1. (diff) | |
download | tmux-c294c2bf54a3ec56271a78c284f84e75a8119731.tar.xz tmux-c294c2bf54a3ec56271a78c284f84e75a8119731.zip |
Merging upstream version 3.4.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'session.c')
-rw-r--r-- | session.c | 24 |
1 files changed, 17 insertions, 7 deletions
@@ -365,11 +365,9 @@ session_detach(struct session *s, struct winlink *wl) session_group_synchronize_from(s); - if (RB_EMPTY(&s->windows)) { - session_destroy(s, 1, __func__); + if (RB_EMPTY(&s->windows)) return (1); - } - return (0); + return (0); } /* Return if session has window. */ @@ -687,8 +685,10 @@ session_group_synchronize1(struct session *target, struct session *s) TAILQ_INIT(&s->lastw); TAILQ_FOREACH(wl, &old_lastw, sentry) { wl2 = winlink_find_by_index(&s->windows, wl->idx); - if (wl2 != NULL) + if (wl2 != NULL) { TAILQ_INSERT_TAIL(&s->lastw, wl2, sentry); + wl2->flags |= WINLINK_VISITED; + } } /* Then free the old winlinks list. */ @@ -708,7 +708,7 @@ session_renumber_windows(struct session *s) struct winlink *wl, *wl1, *wl_new; struct winlinks old_wins; struct winlink_stack old_lastw; - int new_idx, new_curw_idx; + int new_idx, new_curw_idx, marked_idx = -1; /* Save and replace old window list. */ memcpy(&old_wins, &s->windows, sizeof old_wins); @@ -725,6 +725,8 @@ session_renumber_windows(struct session *s) winlink_set_window(wl_new, wl->window); wl_new->flags |= wl->flags & WINLINK_ALERTFLAGS; + if (wl == marked_pane.wl) + marked_idx = wl_new->idx; if (wl == s->curw) new_curw_idx = wl_new->idx; @@ -735,12 +737,20 @@ session_renumber_windows(struct session *s) memcpy(&old_lastw, &s->lastw, sizeof old_lastw); TAILQ_INIT(&s->lastw); TAILQ_FOREACH(wl, &old_lastw, sentry) { + wl->flags &= ~WINLINK_VISITED; wl_new = winlink_find_by_window(&s->windows, wl->window); - if (wl_new != NULL) + if (wl_new != NULL) { TAILQ_INSERT_TAIL(&s->lastw, wl_new, sentry); + wl_new->flags |= WINLINK_VISITED; + } } /* Set the current window. */ + if (marked_idx != -1) { + marked_pane.wl = winlink_find_by_index(&s->windows, marked_idx); + if (marked_pane.wl == NULL) + server_clear_marked(); + } s->curw = winlink_find_by_index(&s->windows, new_curw_idx); /* Free the old winlinks (reducing window references too). */ |