mirror of
https://github.com/tmux/tmux.git
synced 2025-09-02 05:21:10 +00:00
When a redraw is deferred because the terminal hasn't finished reading
the data from the last one, other panes could update while waiting, so we set the flag to redraw them all when the new redraw actually happened. But this means a lot of redrawing panes unnecessarily if they haven't changed - so instead set a flag to say "at least one pane needs to be redrawed" then look at the invidual pane flags to see which ones need it.
This commit is contained in:
16
tty.c
16
tty.c
@ -1438,15 +1438,19 @@ tty_draw_line(struct tty *tty, struct window_pane *wp, struct screen *s,
|
||||
void
|
||||
tty_sync_start(struct tty *tty)
|
||||
{
|
||||
if (tty_get_flags(tty) & TERM_SYNC)
|
||||
if ((~tty->flags & TTY_SYNCING) && (tty_get_flags(tty) & TERM_SYNC)) {
|
||||
tty_puts(tty, "\033P=1s\033\\");
|
||||
tty->flags |= TTY_SYNCING;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
tty_sync_end(struct tty *tty)
|
||||
{
|
||||
if (tty_get_flags(tty) & TERM_SYNC)
|
||||
if (tty_get_flags(tty) & TERM_SYNC) {
|
||||
tty_puts(tty, "\033P=2s\033\\");
|
||||
tty->flags &= ~TTY_SYNCING;
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
@ -1480,6 +1484,14 @@ tty_write(void (*cmdfn)(struct tty *, const struct tty_ctx *),
|
||||
TAILQ_FOREACH(c, &clients, entry) {
|
||||
if (!tty_client_ready(c, wp))
|
||||
continue;
|
||||
if (c->flags & CLIENT_REDRAWPANES) {
|
||||
/*
|
||||
* Redraw is already deferred to redraw another pane -
|
||||
* redraw this one also when that happens.
|
||||
*/
|
||||
wp->flags |= PANE_REDRAW;
|
||||
break;
|
||||
}
|
||||
|
||||
ctx->bigger = tty_window_offset(&c->tty, &ctx->ox, &ctx->oy,
|
||||
&ctx->sx, &ctx->sy);
|
||||
|
Reference in New Issue
Block a user