diff options
author | nicm <nicm> | 2019-11-01 20:26:21 +0000 |
---|---|---|
committer | nicm <nicm> | 2019-11-01 20:26:21 +0000 |
commit | bad95db8785f4ee6b6e17750500c024642e83134 (patch) | |
tree | 4e24aa4ab2d73df5df2655fe22e5c3575188cbc9 | |
parent | d9c95c900c91e1eed411f587a72e76975d4efda9 (diff) | |
download | rtmux-bad95db8785f4ee6b6e17750500c024642e83134.tar.gz rtmux-bad95db8785f4ee6b6e17750500c024642e83134.tar.bz2 rtmux-bad95db8785f4ee6b6e17750500c024642e83134.zip |
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.
-rw-r--r-- | server-client.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/server-client.c b/server-client.c index 36ebf85b..26b246c1 100644 --- a/server-client.c +++ b/server-client.c @@ -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; |