From d0e0b6da7c5988cfbe21c95ec03bfe6ae64ea9e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Thu, 11 Jul 2019 11:10:12 +0200 Subject: [PATCH] selection: invalidate *all* affected lines when updating selection --- selection.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/selection.c b/selection.c index 374575f3..ad88f93a 100644 --- a/selection.c +++ b/selection.c @@ -38,13 +38,23 @@ selection_update(struct terminal *term, int col, int row) term->selection.end.row, term->selection.end.col, row, col); + int start_row = term->selection.start.row; + int old_end_row = term->selection.end.row; + int new_end_row = term->grid->view + row; + + assert(start_row != -1); + assert(new_end_row != -1); + + if (old_end_row == -1) + old_end_row = new_end_row; + + int from = min(start_row, min(old_end_row, new_end_row)); + int to = max(start_row, max(old_end_row, new_end_row)); + term->selection.end = (struct coord){col, term->grid->view + row}; assert(term->selection.start.row != -1 && term->selection.end.row != -1); - term_damage_rows_in_view( - term, - min(term->selection.start.row, term->selection.end.row) - term->grid->view, - max(term->selection.start.row, term->selection.end.row) - term->grid->view); + term_damage_rows_in_view(term, from - term->grid->view, to - term->grid->view); if (term->frame_callback == NULL) grid_render(term);