diff options
author | 2020-04-18 07:32:53 +0000 | |
---|---|---|
committer | 2020-04-18 07:32:53 +0000 | |
commit | cd539c0959406a6f05dfcd091a2d566e0befafa1 (patch) | |
tree | 8f8d2ec761ccd767d2fd3bdf7c81ce2ff0c98a2c /usr.bin/tmux/server-client.c | |
parent | Add formats for pane written/skipped bytes for debugging. (diff) | |
download | wireguard-openbsd-cd539c0959406a6f05dfcd091a2d566e0befafa1.tar.xz wireguard-openbsd-cd539c0959406a6f05dfcd091a2d566e0befafa1.zip |
Bring back previons fix to only redraw panes that need it after a redraw
is deferred, but clear the pane flags when they are actually redrawn
rather than every time.
Diffstat (limited to 'usr.bin/tmux/server-client.c')
-rw-r--r-- | usr.bin/tmux/server-client.c | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/usr.bin/tmux/server-client.c b/usr.bin/tmux/server-client.c index 0017973967d..b9dec44c433 100644 --- a/usr.bin/tmux/server-client.c +++ b/usr.bin/tmux/server-client.c @@ -1,4 +1,4 @@ -/* $OpenBSD: server-client.c,v 1.324 2020/04/18 06:52:36 nicm Exp $ */ +/* $OpenBSD: server-client.c,v 1.325 2020/04/18 07:32:53 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott <nicholas.marriott@gmail.com> @@ -1370,7 +1370,6 @@ server_client_loop(void) if (resize) server_client_check_resize(wp); } - wp->flags &= ~PANE_REDRAW; } check_window_name(w); } @@ -1681,7 +1680,7 @@ server_client_check_redraw(struct client *c) struct session *s = c->session; struct tty *tty = &c->tty; struct window_pane *wp; - int needed, flags, mode = tty->mode; + int needed, flags, mode = tty->mode, new_flags = 0; struct timeval tv = { .tv_usec = 1000 }; static struct event ev; size_t left; @@ -1689,11 +1688,12 @@ server_client_check_redraw(struct client *c) if (c->flags & (CLIENT_CONTROL|CLIENT_SUSPENDED)) return; if (c->flags & CLIENT_ALLREDRAWFLAGS) { - log_debug("%s: redraw%s%s%s%s", c->name, + log_debug("%s: redraw%s%s%s%s%s", c->name, (c->flags & CLIENT_REDRAWWINDOW) ? " window" : "", (c->flags & CLIENT_REDRAWSTATUS) ? " status" : "", (c->flags & CLIENT_REDRAWBORDERS) ? " borders" : "", - (c->flags & CLIENT_REDRAWOVERLAY) ? " overlay" : ""); + (c->flags & CLIENT_REDRAWOVERLAY) ? " overlay" : "", + (c->flags & CLIENT_REDRAWPANES) ? " panes" : ""); } /* @@ -1711,6 +1711,8 @@ server_client_check_redraw(struct client *c) break; } } + if (needed) + new_flags |= CLIENT_REDRAWPANES; } if (needed && (left = EVBUFFER_LENGTH(tty->out)) != 0) { log_debug("%s: redraw deferred (%zu left)", c->name, left); @@ -1720,12 +1722,7 @@ server_client_check_redraw(struct client *c) log_debug("redraw timer started"); evtimer_add(&ev, &tv); } - - /* - * We may have got here for a single pane redraw, but force a - * full redraw next time in case other panes have been updated. - */ - c->flags |= CLIENT_ALLREDRAWFLAGS; + c->flags |= new_flags; return; } else if (needed) log_debug("%s: redraw needed", c->name); @@ -1745,6 +1742,7 @@ server_client_check_redraw(struct client *c) screen_redraw_pane(c, wp); } } + c->flags &= ~CLIENT_REDRAWPANES; } if (c->flags & CLIENT_ALLREDRAWFLAGS) { |