diff options
author | nicm <nicm> | 2014-12-15 10:02:55 +0000 |
---|---|---|
committer | nicm <nicm> | 2014-12-15 10:02:55 +0000 |
commit | d88c381ce912dfc48fc2d53ed020bf2016f4b509 (patch) | |
tree | 3a895cf65e87d5e048aecb47f1edb761795eca2d /window-copy.c | |
parent | 7a0c94b28ab96d32dcbd98cfad54662f67875332 (diff) | |
download | rtmux-d88c381ce912dfc48fc2d53ed020bf2016f4b509.tar.gz rtmux-d88c381ce912dfc48fc2d53ed020bf2016f4b509.tar.bz2 rtmux-d88c381ce912dfc48fc2d53ed020bf2016f4b509.zip |
Only redraw affected lines when selection changes with mouse. From
Michael Graczyk.
Diffstat (limited to 'window-copy.c')
-rw-r--r-- | window-copy.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/window-copy.c b/window-copy.c index f5973322..8aae09be 100644 --- a/window-copy.c +++ b/window-copy.c @@ -33,6 +33,7 @@ int window_copy_key_numeric_prefix(struct window_pane *, int); void window_copy_mouse(struct window_pane *, struct session *, struct mouse_event *); +void window_copy_redraw_selection(struct window_pane *, u_int); void window_copy_redraw_lines(struct window_pane *, u_int, u_int); void window_copy_redraw_screen(struct window_pane *); void window_copy_write_line(struct window_pane *, struct screen_write_ctx *, @@ -874,7 +875,7 @@ window_copy_mouse(struct window_pane *wp, struct session *sess, { struct window_copy_mode_data *data = wp->modedata; struct screen *s = &data->screen; - u_int i; + u_int i, old_cy; if (m->x >= screen_size_x(s)) return; @@ -907,9 +908,10 @@ window_copy_mouse(struct window_pane *wp, struct session *sess, */ if (s->mode & MODE_MOUSE_BUTTON) { if (~m->event & MOUSE_EVENT_UP) { + old_cy = data->cy; window_copy_update_cursor(wp, m->x, m->y); if (window_copy_update_selection(wp, 1)) - window_copy_redraw_screen(wp); + window_copy_redraw_selection(wp, old_cy); return; } goto reset_mode; @@ -1246,6 +1248,23 @@ window_copy_write_lines(struct window_pane *wp, struct screen_write_ctx *ctx, } void +window_copy_redraw_selection(struct window_pane *wp, u_int old_y) +{ + struct window_copy_mode_data *data = wp->modedata; + u_int new_y, start, end; + + new_y = data->cy; + if (old_y <= new_y) { + start = old_y; + end = new_y; + } else { + start = new_y; + end = old_y; + } + window_copy_redraw_lines(wp, start, end - start + 1); +} + +void window_copy_redraw_lines(struct window_pane *wp, u_int py, u_int ny) { struct window_copy_mode_data *data = wp->modedata; |