From 89cec15920d680c76e4d7177b158f9105a989a96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Mon, 28 Oct 2019 17:58:44 +0100 Subject: [PATCH] render: regression: don't apply scroll damage when view is in scrollback When user has scrolled back in the output history, new output should not trigger scrolling. This was true for normal cell rendering, which renders the cells *in view*, not caring where the "front" of the output is. However, we still applied scroll damage. I.e. we memmoved part of the screen. The fix is simple; only apply scroll damage when the view is at the front of the output. --- render.c | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/render.c b/render.c index ff05d501..de5c2246 100644 --- a/render.c +++ b/render.c @@ -528,22 +528,25 @@ grid_render(struct terminal *term) * by the cursor, since only the final cell matters. */ all_clean = false; } - } - - tll_foreach(term->grid->scroll_damage, it) { - switch (it->item.type) { - case DAMAGE_SCROLL: - grid_render_scroll(term, buf, &it->item); - break; - - case DAMAGE_SCROLL_REVERSE: - grid_render_scroll_reverse(term, buf, &it->item); - break; - } - - tll_remove(term->grid->scroll_damage, it); } + if (term->grid->view == term->grid->offset) { + tll_foreach(term->grid->scroll_damage, it) { + switch (it->item.type) { + case DAMAGE_SCROLL: + grid_render_scroll(term, buf, &it->item); + break; + + case DAMAGE_SCROLL_REVERSE: + grid_render_scroll_reverse(term, buf, &it->item); + break; + } + + tll_remove(term->grid->scroll_damage, it); + } + } else + tll_free(term->grid->scroll_damage); + if (term->render.workers.count > 0) { term->render.workers.buf = buf;