Limit lazy resize to panes in attached sessions only - those in

unattached are likely to have been resized by something like
split-window where the user probably wants the resize to happen
immediately. GitHub issue 1963.
pull/1964/head
nicm 2019-11-01 20:26:21 +00:00
parent d9c95c900c
commit bad95db878
1 changed files with 17 additions and 3 deletions

View File

@ -1268,7 +1268,7 @@ server_client_loop(void)
struct window_pane *wp;
struct winlink *wl;
struct session *s;
int focus;
int focus, attached, resize;
TAILQ_FOREACH(c, &clients, entry) {
server_client_check_exit(c);
@ -1281,19 +1281,33 @@ server_client_loop(void)
/*
* Any windows will have been redrawn as part of clients, so clear
* their flags now. Also check pane focus and resize.
*
* As an optimization, panes in windows that are in an attached session
* but not the current window are not resized (this reduces the amount
* of work needed when, for example, resizing an X terminal a
* lot). Windows in no attached session are resized immediately since
* that is likely to have come from a command like split-window and be
* what the user wanted.
*/
focus = options_get_number(global_options, "focus-events");
RB_FOREACH(w, windows, &windows) {
attached = resize = 0;
TAILQ_FOREACH(wl, &w->winlinks, wentry) {
s = wl->session;
if (s->attached != 0 && s->curw == wl)
if (s->attached != 0)
attached = 1;
if (s->attached != 0 && s->curw == wl) {
resize = 1;
break;
}
}
if (!attached)
resize = 1;
TAILQ_FOREACH(wp, &w->panes, entry) {
if (wp->fd != -1) {
if (focus)
server_client_check_focus(wp);
if (wl != NULL)
if (resize)
server_client_check_resize(wp);
}
wp->flags &= ~PANE_REDRAW;