aboutsummaryrefslogtreecommitdiffstats
path: root/src/display.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/display.c')
-rw-r--r--src/display.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/display.c b/src/display.c
index f3b14de..7246819 100644
--- a/src/display.c
+++ b/src/display.c
@@ -69,7 +69,7 @@ void runes_display_draw_screen(RunesTerm *t)
if (t->scr->dirty || display->dirty) {
if (t->scr->dirty) {
- display->has_selection = 0;
+ runes_display_maybe_clear_selection(t);
}
cairo_push_group(display->cr);
@@ -202,6 +202,21 @@ void runes_display_set_selection(
t->display->dirty = 1;
}
+void runes_display_maybe_clear_selection(RunesTerm *t)
+{
+ RunesDisplay *display = t->display;
+ char *contents;
+ size_t len;
+
+ vt100_screen_get_string_plaintext(
+ t->scr, &display->selection_start, &display->selection_end,
+ &contents, &len);
+ if (len != display->selection_len
+ || memcmp(contents, display->selection_contents, len)) {
+ display->has_selection = 0;
+ }
+}
+
void runes_display_delete(RunesDisplay *display)
{
cairo_pattern_destroy(display->buffer);