diff --git a/popup.c b/popup.c index 26b89c613..6cb45951f 100644 --- a/popup.c +++ b/popup.c @@ -244,7 +244,7 @@ popup_check_cb(struct client* c, void *data, u_int px, u_int py, u_int nx) */ for (i = 0; i < mr->used; i++) { server_client_overlay_range(pd->px, pd->py, pd->sx, - pd->sy, r->ranges[i].px, py, r->ranges[i].nx, + pd->sy, mr->ranges[i].px, py, mr->ranges[i].nx, &pd->or[i]); } diff --git a/screen-redraw.c b/screen-redraw.c index b9bd75485..b944bfe72 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -1588,8 +1588,10 @@ redraw_draw(struct client *c, struct window_pane *wp, int flags) struct screen *sl; struct redraw_scene *scene; struct window_pane *loop; - u_int width, i, y, lines; + u_int width, i, y, lines, j; struct redraw_span *first; + struct visible_ranges *r; + struct visible_range *rr; int redraw; if (c->flags & CLIENT_SUSPENDED) @@ -1694,8 +1696,16 @@ redraw_draw(struct client *c, struct window_pane *wp, int flags) else y = c->tty.sy - lines; sl = c->status.active; - for (i = 0; i < lines; i++) - tty_draw_line(tty, sl, 0, i, UINT_MAX, 0, y + i, NULL); + for (i = 0; i < lines; i++) { + r = tty_check_overlay_range(tty, 0, y + i, tty->sx); + for (j = 0; j < r->used; j++) { + rr = &r->ranges[j]; + if (rr->nx == 0) + continue; + tty_draw_line(tty, sl, rr->px, i, rr->nx, + rr->px, y + i, NULL); + } + } } if (c->overlay_draw != NULL && (flags & REDRAW_OVERLAY)) c->overlay_draw(c, c->overlay_data); diff --git a/screen-write.c b/screen-write.c index 977f86829..c198ea226 100644 --- a/screen-write.c +++ b/screen-write.c @@ -3114,7 +3114,13 @@ screen_write_alternateon(struct screen_write_ctx *ctx, struct grid_cell *gc, if (wp != NULL) { window_pane_clear_resizes(wp, NULL); + if (event_initialized(&wp->resize_timer)) + evtimer_del(&wp->resize_timer); layout_fix_panes(wp->window, NULL); + if (!TAILQ_EMPTY(&wp->resize_queue)) { + window_pane_send_resize(wp, wp->sx, wp->sy); + window_pane_clear_resizes(wp, NULL); + } server_redraw_window_borders(wp->window); }