aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2017-06-01 03:29:51 -0400
committerJesse Luehrs <doy@tozt.net>2017-06-01 03:29:51 -0400
commit6603b76db73adc5769dbaf3fef7806f282d12eb7 (patch)
treee505c4d0f3c89c37c75fb0e9c232f561be7ce5b6
parent7a2cdd042e446d81894dda95560e4fedf13bdb6c (diff)
downloadrunes-6603b76db73adc5769dbaf3fef7806f282d12eb7.tar.gz
runes-6603b76db73adc5769dbaf3fef7806f282d12eb7.zip
refactor mouse reporting
-rw-r--r--src/window-xlib.c44
1 files changed, 25 insertions, 19 deletions
diff --git a/src/window-xlib.c b/src/window-xlib.c
index 9aaaca2..0f1b78e 100644
--- a/src/window-xlib.c
+++ b/src/window-xlib.c
@@ -804,15 +804,26 @@ static void runes_window_handle_button_event(RunesTerm *t, XButtonEvent *e)
}
}
- if (t->scr->mouse_reporting_press_release) {
+ if ((e->type == ButtonPress
+ && vt100_screen_mouse_reporting_wants_button_press(t->scr))
+ || (e->type == ButtonRelease
+ && vt100_screen_mouse_reporting_wants_button_release(t->scr))) {
char response[7];
char status = 0;
struct vt100_loc loc;
+ /* ignore scroll wheel button up events */
if (e->type == ButtonRelease && e->button > 3) {
return;
}
+ /* x10 mouse reporting only cares about buttons 1, 2, and 3 */
+ if (e->type == ButtonPress
+ && !vt100_screen_mouse_reporting_wants_button_release(t->scr)
+ && e->button > 3) {
+ return;
+ }
+
if (e->type == ButtonRelease) {
status = 3;
}
@@ -833,17 +844,22 @@ static void runes_window_handle_button_event(RunesTerm *t, XButtonEvent *e)
case Button5:
status = 65;
break;
+ default:
+ return;
}
}
- if (e->state & ShiftMask) {
- status |= 4;
- }
- if (e->state & Mod1Mask) {
- status |= 8;
- }
- if (e->state & ControlMask) {
- status |= 16;
+ /* x10 mouse reporting doesn't care about modifiers */
+ if (vt100_screen_mouse_reporting_wants_button_release(t->scr)) {
+ if (e->state & ShiftMask) {
+ status |= 4;
+ }
+ if (e->state & Mod1Mask) {
+ status |= 8;
+ }
+ if (e->state & ControlMask) {
+ status |= 16;
+ }
}
loc = runes_window_get_mouse_position(t, e->x, e->y);
@@ -853,16 +869,6 @@ static void runes_window_handle_button_event(RunesTerm *t, XButtonEvent *e)
' ' + (status), ' ' + loc.col + 1, ' ' + loc.row + 1);
runes_window_write_to_pty(t, response, 6);
}
- else if (t->scr->mouse_reporting_press && e->type == ButtonPress) {
- char response[7];
- struct vt100_loc loc;
-
- loc = runes_window_get_mouse_position(t, e->x, e->y);
- sprintf(
- response, "\033[M%c%c%c",
- ' ' + (e->button - 1), ' ' + loc.col + 1, ' ' + loc.row + 1);
- runes_window_write_to_pty(t, response, 6);
- }
else {
runes_window_handle_builtin_button_press(t, e);
}