scrollback: regression: fix rendering of scrollback diffs less than a screen

When doing "small" scrolls (typically done via mouse wheel or
similar), we render the scrolling by emitting a "scroll damage".

A recent commit changed how scroll damage is rendered; only when the
view is at the bottom ("following" the screen output) do we render the
damage.

To fix this, add a new type of scroll damage,
SCROLL_DAMAGE_IN_VIEW and SCROLL_DAMAGE_REVERSE_IN_VIEW.

These signal to the renderer that it should always render the damage.
This commit is contained in:
Daniel Eklöf 2019-10-29 21:09:37 +01:00
parent 89cec15920
commit a42df2434b
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
3 changed files with 23 additions and 14 deletions

View file

@ -530,22 +530,29 @@ grid_render(struct terminal *term)
}
}
if (term->grid->view == term->grid->offset) {
tll_foreach(term->grid->scroll_damage, it) {
switch (it->item.type) {
case DAMAGE_SCROLL:
tll_foreach(term->grid->scroll_damage, it) {
switch (it->item.type) {
case DAMAGE_SCROLL:
if (term->grid->view == term->grid->offset)
grid_render_scroll(term, buf, &it->item);
break;
break;
case DAMAGE_SCROLL_REVERSE:
case DAMAGE_SCROLL_REVERSE:
if (term->grid->view == term->grid->offset)
grid_render_scroll_reverse(term, buf, &it->item);
break;
}
break;
tll_remove(term->grid->scroll_damage, it);
case DAMAGE_SCROLL_IN_VIEW:
grid_render_scroll(term, buf, &it->item);
break;
case DAMAGE_SCROLL_REVERSE_IN_VIEW:
grid_render_scroll_reverse(term, buf, &it->item);
break;
}
} else
tll_free(term->grid->scroll_damage);
tll_remove(term->grid->scroll_damage, it);
}
if (term->render.workers.count > 0) {