From e2646c08a5ef38e24780213626e4ece263b3de4c Mon Sep 17 00:00:00 2001 From: Luflosi Date: Tue, 13 Oct 2020 21:40:03 +0200 Subject: [PATCH] Fix upwards selection not being cleared when lines change When selecting text by dragging upwards, the "end" of the selection is above the "start". This causes the `selection_has_screen_line()` to never return `true` in this case. In practice this bug causes the selection to not be cleared when the screen contents under the selection change if it was made by dragging upwards. --- kitty/screen.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/kitty/screen.c b/kitty/screen.c index ac87c12c0..11f01fc12 100644 --- a/kitty/screen.c +++ b/kitty/screen.c @@ -373,8 +373,10 @@ selection_has_screen_line(const Selections *selections, const int y) { for (size_t i = 0; i < selections->count; i++) { const Selection *s = selections->items + i; if (!is_selection_empty(s)) { - int top = (int)s->start.y - s->start_scrolled_by; - int bottom = (int)s->end.y - s->end_scrolled_by; + int start = (int)s->start.y - s->start_scrolled_by; + int end = (int)s->end.y - s->end_scrolled_by; + int top = MIN(start, end); + int bottom = MAX(start, end); if (top <= y && y <= bottom) return true; } }