Bugfix floating panes display when off window edge.

This commit is contained in:
Michael Grant 2025-11-02 09:56:57 +01:00
parent 6dd552d689
commit 9a061a2fee
3 changed files with 11 additions and 9 deletions

View File

@ -1084,6 +1084,7 @@ screen_redraw_draw_pane(struct screen_redraw_ctx *ctx, struct window_pane *wp)
continue;
y = top + wp->yoff + j - ctx->oy;
/* xxx i apparenty unneeded now that the vr array returns where in s to read from. */
if (wp->xoff >= ctx->ox &&
wp->xoff + wp->sx <= ctx->ox + ctx->sx) {
/* All visible. */
@ -1120,8 +1121,8 @@ screen_redraw_draw_pane(struct screen_redraw_ctx *ctx, struct window_pane *wp)
continue;
/* i is px of cell, add px of region, sub the
pane offset. If you don't sub offset,
contents of pane shifted. */
tty_draw_line(tty, s, i + vr->px[r] - wp->xoff, j,
contents of pane shifted. note: i apparently unnec. */
tty_draw_line(tty, s, /* i + */ vr->px[r] - wp->xoff, j,
vr->nx[r], vr->px[r], y, &defaults, palette);
}
}

View File

@ -2018,7 +2018,7 @@ screen_write_cell(struct screen_write_ctx *ctx, const struct grid_cell *gc)
struct window *w;
u_int found_self, px, py;
/* early attempt.
if (base_wp != NULL) {
w = base_wp->window;
px = ctx->s->cx;
@ -2035,7 +2035,7 @@ screen_write_cell(struct screen_write_ctx *ctx, const struct grid_cell *gc)
return;
}
}
*/
/* Ignore padding cells. */
if (gc->flags & GRID_FLAG_PADDING)
return;

View File

@ -599,7 +599,8 @@ struct window_pane *
window_get_active_at(struct window *w, u_int x, u_int y)
{
struct window_pane *wp;
u_int xoff, yoff, sx, sy;
int xoff, yoff;
u_int sx, sy;
TAILQ_FOREACH(wp, &w->z_index, zentry) {
if (!window_pane_visible(wp))
@ -608,15 +609,15 @@ window_get_active_at(struct window *w, u_int x, u_int y)
if (wp->layout_cell != NULL) {
/* Tiled, select up to including bottom or
right border. */
if (x < xoff || x > xoff + sx)
if ((int)x < xoff || x > xoff + sx)
continue;
if (y < yoff || y > yoff + sy)
if ((int)y < yoff || y > yoff + sy)
continue;
} else {
/* Floating, include top or or left border. */
if (x < xoff - 1 || x > xoff + sx)
if ((int)x < xoff - 1 || x > xoff + sx)
continue;
if (y < yoff - 1 || y > yoff + sy)
if ((int)y < yoff - 1 || y > yoff + sy)
continue;
}
return (wp);