From d73078838dc9cadb42e0f4762847806076684cc8 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 27 Mar 2023 08:31:32 +0000 Subject: For passthrough, don't write to clients attached to different sessions, based on a fix from Sergei Grechanik. --- tty.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) (limited to 'tty.c') diff --git a/tty.c b/tty.c index c8a2a6ee..62707f2a 100644 --- a/tty.c +++ b/tty.c @@ -34,8 +34,6 @@ static int tty_log_fd = -1; -static int tty_client_ready(struct client *); - static void tty_set_italics(struct tty *); static int tty_try_colour(struct tty *, int, const char *); static void tty_force_cursor_colour(struct tty *, int); @@ -1607,11 +1605,21 @@ tty_sync_end(struct tty *tty) } static int -tty_client_ready(struct client *c) +tty_client_ready(const struct tty_ctx *ctx, struct client *c) { if (c->session == NULL || c->tty.term == NULL) return (0); - if (c->flags & (CLIENT_REDRAWWINDOW|CLIENT_SUSPENDED)) + if (c->flags & CLIENT_SUSPENDED) + return (0); + + /* + * If invisible panes are allowed (used for passthrough), don't care if + * redrawing or frozen. + */ + if (ctx->allow_invisible_panes) + return (1); + + if (c->flags & CLIENT_REDRAWWINDOW) return (0); if (c->tty.flags & TTY_FREEZE) return (0); @@ -1628,21 +1636,14 @@ tty_write(void (*cmdfn)(struct tty *, const struct tty_ctx *), if (ctx->set_client_cb == NULL) return; TAILQ_FOREACH(c, &clients, entry) { - if (ctx->allow_invisible_panes) { - if (c->session == NULL || - c->tty.term == NULL || - c->flags & CLIENT_SUSPENDED) - continue; - } else { - if (!tty_client_ready(c)) - continue; + if (tty_client_ready(ctx, c)) { state = ctx->set_client_cb(ctx, c); if (state == -1) break; if (state == 0) continue; + cmdfn(&c->tty, ctx); } - cmdfn(&c->tty, ctx); } } -- cgit v1.2.3