aboutsummaryrefslogtreecommitdiffstats
path: root/libterminput.c
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2021-04-10 13:36:35 +0200
committerMattias Andrée <maandree@kth.se>2021-04-10 13:36:35 +0200
commitdccdf5ff4286ce22b32c18513b3ae53288fcfb5f (patch)
tree489b3cdf83a4b6ab9e03494f54e3f00080a4ccfe /libterminput.c
parentAdd more tests and fixes (diff)
downloadlibterminput-dccdf5ff4286ce22b32c18513b3ae53288fcfb5f.tar.gz
libterminput-dccdf5ff4286ce22b32c18513b3ae53288fcfb5f.tar.bz2
libterminput-dccdf5ff4286ce22b32c18513b3ae53288fcfb5f.tar.xz
Add tests for mouse events
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to '')
-rw-r--r--libterminput.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/libterminput.c b/libterminput.c
index 960967d..5758be0 100644
--- a/libterminput.c
+++ b/libterminput.c
@@ -6,6 +6,7 @@
#include <limits.h>
#include <string.h>
#include <unistd.h>
+#include <stdio.h>
struct input {
@@ -330,7 +331,7 @@ parse_sequence(union libterminput_input *input, struct libterminput_state *ctx)
case 'M':
if (ctx->flags & LIBTERMINPUT_MACRO_ON_CSI_M) {
input->keypress.key = LIBTERMINPUT_MACRO;
- } else if (nnums >= 3) { /* TODO test */
+ } else if (nnums >= 3) {
/* Parsing for \e[?1000;1015h output. */
nums[0] -= 32ULL;
decimal_mouse_tracking_set_press:
@@ -338,15 +339,17 @@ parse_sequence(union libterminput_input *input, struct libterminput_state *ctx)
decimal_mouse_tracking:
input->mouseevent.type = LIBTERMINPUT_MOUSEEVENT;
input->mouseevent.x = (size_t)nums[1] + (size_t)!nums[1];
- input->mouseevent.y = (size_t)nums[2] + (size_t)!nums[3];
+ input->mouseevent.y = (size_t)nums[2] + (size_t)!nums[2];
input->mouseevent.mods = (enum libterminput_mod)((nums[0] >> 2) & 7ULL);
if (nums[0] & 32)
input->mouseevent.event = LIBTERMINPUT_MOTION;
nums[0] = (nums[0] & 3ULL) | ((nums[0] >> 4) & ~3ULL);
if (nums[0] < 4) {
nums[0] = (nums[0] + 1) & 3;
- if (!nums[0] && input->mouseevent.event == LIBTERMINPUT_PRESS)
+ if (!nums[0] && input->mouseevent.event == LIBTERMINPUT_PRESS) {
input->mouseevent.event = LIBTERMINPUT_RELEASE;
+ nums[0] = 1;
+ }
}
input->mouseevent.button = (enum libterminput_button)nums[0];
} else if (!nnums & !(ctx->flags & LIBTERMINPUT_DECSET_1005)) { /* TODO test */
@@ -579,7 +582,7 @@ parse_sequence(union libterminput_input *input, struct libterminput_state *ctx)
case 'D': input->keypress.key = LIBTERMINPUT_F4; break;
case 'E': input->keypress.key = LIBTERMINPUT_F5; break;
default:
- if (ctx->key[1] == '<' && (ctx->key[2] == 'M' || ctx->key[2] == 'm') && nnums >= 3) { /* TODO test */
+ if (ctx->key[1] == '<' && (ctx->key[2] == 'M' || ctx->key[2] == 'm') && nnums >= 3) {
/* Parsing for \e[?1003;1006h output. */
input->mouseevent.event = LIBTERMINPUT_PRESS;
if (ctx->key[2] == 'm')