mirror of
https://github.com/tmux/tmux.git
synced 2026-03-26 13:16:37 +00:00
Fix issue where popup window gets overwritten by background updates,
from Conor Taylor in GitHub issue 4920.
This commit is contained in:
39
tty.c
39
tty.c
@@ -1157,6 +1157,9 @@ tty_clear_line(struct tty *tty, const struct grid_cell *defaults, u_int py,
|
||||
u_int px, u_int nx, u_int bg)
|
||||
{
|
||||
struct client *c = tty->client;
|
||||
struct visible_ranges *r;
|
||||
struct visible_range *rr;
|
||||
u_int i;
|
||||
|
||||
log_debug("%s: %s, %u at %u,%u", __func__, c->name, nx, px, py);
|
||||
|
||||
@@ -1192,8 +1195,14 @@ tty_clear_line(struct tty *tty, const struct grid_cell *defaults, u_int py,
|
||||
* Couldn't use an escape sequence, use spaces. Clear only the visible
|
||||
* bit if there is an overlay.
|
||||
*/
|
||||
tty_cursor(tty, px, py);
|
||||
tty_repeat_space(tty, nx);
|
||||
r = tty_check_overlay_range(tty, px, py, nx);
|
||||
for (i = 0; i < r->used; i++) {
|
||||
rr = &r->ranges[i];
|
||||
if (rr->nx != 0) {
|
||||
tty_cursor(tty, rr->px, py);
|
||||
tty_repeat_space(tty, rr->nx);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Clear a line, adjusting to visible part of pane. */
|
||||
@@ -1359,18 +1368,34 @@ static void
|
||||
tty_draw_pane(struct tty *tty, const struct tty_ctx *ctx, u_int py)
|
||||
{
|
||||
struct screen *s = ctx->s;
|
||||
u_int nx = ctx->sx, i, x, rx, ry;
|
||||
u_int nx = ctx->sx, i, x, rx, ry, j;
|
||||
struct visible_ranges *r;
|
||||
struct visible_range *rr;
|
||||
|
||||
log_debug("%s: %s %u %d", __func__, tty->client->name, py, ctx->bigger);
|
||||
|
||||
if (!ctx->bigger) {
|
||||
tty_draw_line(tty, s, 0, py, nx, ctx->xoff, ctx->yoff + py,
|
||||
&ctx->defaults, ctx->palette);
|
||||
r = tty_check_overlay_range(tty, ctx->xoff, ctx->yoff + py, nx);
|
||||
for (j = 0; j < r->used; j++) {
|
||||
rr = &r->ranges[j];
|
||||
if (rr->nx != 0) {
|
||||
tty_draw_line(tty, s, rr->px - ctx->xoff, py,
|
||||
rr->nx, rr->px, ctx->yoff + py,
|
||||
&ctx->defaults, ctx->palette);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (tty_clamp_line(tty, ctx, 0, py, nx, &i, &x, &rx, &ry)) {
|
||||
tty_draw_line(tty, s, i, py, rx, x, ry, &ctx->defaults,
|
||||
ctx->palette);
|
||||
r = tty_check_overlay_range(tty, x, ry, rx);
|
||||
for (j = 0; j < r->used; j++) {
|
||||
rr = &r->ranges[j];
|
||||
if (rr->nx != 0) {
|
||||
tty_draw_line(tty, s, i + (rr->px - x), py,
|
||||
rr->nx, rr->px, ry, &ctx->defaults,
|
||||
ctx->palette);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user