aboutsummaryrefslogtreecommitdiff
path: root/window-copy.c
diff options
context:
space:
mode:
authorTiago Cunha <tcunha@gmx.com>2011-04-25 20:33:42 +0000
committerTiago Cunha <tcunha@gmx.com>2011-04-25 20:33:42 +0000
commit215ee46106bd8d5324cab659d74abeeee1127224 (patch)
treea5adf1cb2a31c2438b5a044f7bc0e81c76916fa5 /window-copy.c
parentd5150484d1ff6be13e4c4c5c399d44b0054755fa (diff)
downloadrtmux-215ee46106bd8d5324cab659d74abeeee1127224.tar.gz
rtmux-215ee46106bd8d5324cab659d74abeeee1127224.tar.bz2
rtmux-215ee46106bd8d5324cab659d74abeeee1127224.zip
Sync OpenBSD patchset 896:
When mode-mouse is on (it is off by default), automatically enter copy mode when the mouse is dragged or the mouse wheel is used. Also exit copy mode when the mouse wheel is scrolled off the bottom. Discussed with and written by hsim at gmx dot li.
Diffstat (limited to 'window-copy.c')
-rw-r--r--window-copy.c29
1 files changed, 18 insertions, 11 deletions
diff --git a/window-copy.c b/window-copy.c
index 6d21d5f0..d31c744b 100644
--- a/window-copy.c
+++ b/window-copy.c
@@ -1,4 +1,4 @@
-/* $Id: window-copy.c,v 1.128 2011-04-06 22:18:56 nicm Exp $ */
+/* $Id: window-copy.c,v 1.129 2011-04-25 20:33:42 tcunha Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -760,11 +760,11 @@ window_copy_key_numeric_prefix(struct window_pane *wp, int key)
/* ARGSUSED */
void
window_copy_mouse(
- struct window_pane *wp, unused struct session *sess, struct mouse_event *m)
+ struct window_pane *wp, struct session *sess, struct mouse_event *m)
{
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;
@@ -777,8 +777,11 @@ window_copy_mouse(
for (i = 0; i < 5; i++)
window_copy_cursor_up(wp, 0);
} else if ((m->b & MOUSE_BUTTON) == MOUSE_2) {
+ old_cy = data->cy;
for (i = 0; i < 5; i++)
window_copy_cursor_down(wp, 0);
+ if (old_cy == data->cy)
+ goto reset_mode;
}
return;
}
@@ -792,15 +795,9 @@ window_copy_mouse(
window_copy_update_cursor(wp, m->x, m->y);
if (window_copy_update_selection(wp))
window_copy_redraw_screen(wp);
- } else {
- s->mode &= ~MODE_MOUSE_ANY;
- s->mode |= MODE_MOUSE_STANDARD;
- if (sess != NULL) {
- window_copy_copy_selection(wp);
- window_pane_reset_mode(wp);
- }
+ return;
}
- return;
+ goto reset_mode;
}
/* Otherwise if other buttons pressed, start selection and motion. */
@@ -812,6 +809,16 @@ window_copy_mouse(
window_copy_start_selection(wp);
window_copy_redraw_screen(wp);
}
+
+ return;
+
+reset_mode:
+ s->mode &= ~MODE_MOUSE_ANY;
+ s->mode |= MODE_MOUSE_STANDARD;
+ if (sess != NULL) {
+ window_copy_copy_selection(wp);
+ window_pane_reset_mode(wp);
+ }
}
void