aboutsummaryrefslogtreecommitdiffstats
path: root/src/display.c
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2017-02-11 13:28:56 -0500
committerJesse Luehrs <doy@tozt.net>2017-02-11 13:28:56 -0500
commit1bacad0c4ae2cfac6bca888569e73bc18bf9268a (patch)
tree16d66b028cef21b76121779f680db5a9bcd689eb /src/display.c
parent6fe0eaf08492e5c99d6b1a457b41db6667c933c5 (diff)
downloadrunes-1bacad0c4ae2cfac6bca888569e73bc18bf9268a.tar.gz
runes-1bacad0c4ae2cfac6bca888569e73bc18bf9268a.zip
only clear the selection if the contents changed
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);