diff options
author | Jesse Luehrs <doy@tozt.net> | 2017-02-11 13:28:56 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2017-02-11 13:28:56 -0500 |
commit | 1bacad0c4ae2cfac6bca888569e73bc18bf9268a (patch) | |
tree | 16d66b028cef21b76121779f680db5a9bcd689eb /src/display.c | |
parent | 6fe0eaf08492e5c99d6b1a457b41db6667c933c5 (diff) | |
download | runes-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.c | 17 |
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); |