diff options
author | Jesse Luehrs <doy@tozt.net> | 2014-04-21 00:55:57 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2014-04-21 00:55:57 -0400 |
commit | e2ffcc4228f248f584e28945f2198860338c5e6f (patch) | |
tree | a26aa17d78ffb65f1a88051143db7651fef89b5f /src/window-xlib.c | |
parent | e92508954a910d703f1cc1d9c99e866b012afb25 (diff) | |
download | runes-e2ffcc4228f248f584e28945f2198860338c5e6f.tar.gz runes-e2ffcc4228f248f584e28945f2198860338c5e6f.zip |
support basic mouse events
Diffstat (limited to 'src/window-xlib.c')
-rw-r--r-- | src/window-xlib.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/window-xlib.c b/src/window-xlib.c index b747915..4873545 100644 --- a/src/window-xlib.c +++ b/src/window-xlib.c @@ -402,6 +402,65 @@ static void runes_window_backend_process_event(uv_work_t *req, int status) free(buf); break; } + case ButtonPress: + case ButtonRelease: + if (t->mouse_reporting_press_release) { + char response[7]; + char status = 0; + + if (e->type == ButtonPress || e->xbutton.button <= 3) { + if (e->type == ButtonRelease) { + status = 3; + } + else { + switch (e->xbutton.button) { + case Button1: + status = 0; + break; + case Button2: + status = 1; + break; + case Button3: + status = 2; + break; + case Button4: + status = 64; + break; + case Button5: + status = 65; + break; + } + } + + if (e->xbutton.state & ShiftMask) { + status |= 4; + } + if (e->xbutton.state & Mod1Mask) { + status |= 8; + } + if (e->xbutton.state & ControlMask) { + status |= 16; + } + + sprintf( + response, "\e[M%c%c%c", + ' ' + (status), + ' ' + (e->xbutton.x / t->fontx + 1), + ' ' + (e->xbutton.y / t->fonty + 1)); + runes_pty_backend_write(t, response, 6); + } + } + else if (t->mouse_reporting_press && e->type == ButtonPress) { + char response[7]; + + sprintf( + response, "\e[M%c%c%c", + ' ' + (e->xbutton.button - 1), + ' ' + (e->xbutton.x / t->fontx + 1), + ' ' + (e->xbutton.y / t->fonty + 1)); + runes_pty_backend_write(t, response, 6); + } + break; case Expose: runes_window_backend_flush(t); break; |