diff --git a/CHANGELOG.md b/CHANGELOG.md index c3ba4654..8cb6fe1a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,9 @@ descriptor is closed. * Crash on compositors not implementing the _text input_ interface (https://codeberg.org/dnkl/foot/issues/259). +* Erased, overflowing glyphs (when + `tweak.allow-overflowing-double-width-glyphs=yes` - the default) not + properly erasing the cell overflowed **into**. ### Security diff --git a/render.c b/render.c index f66e277e..2951c466 100644 --- a/render.c +++ b/render.c @@ -481,7 +481,16 @@ render_cell(struct terminal *term, pixman_image_t *pix, col < term->cols - 1 && (row->cells[col + 1].wc == 0 || row->cells[col + 1].wc == L' ')) { - cell_cols = min(2, cols_left); + cell_cols = 2; + + /* + * Ensure the cell we’re overflowing into gets re-rendered, to + * ensure it is erased if *this* cell is erased. Note that we + * do *not* mark the row as dirty - we don’t need to re-render + * the cell if nothing else on the row has changed. + */ + row->cells[col].attrs.clean = 0; + row->cells[col + 1].attrs.clean = 0; } pixman_region32_t clip;