aboutsummaryrefslogtreecommitdiff
path: root/input-keys.c
diff options
context:
space:
mode:
Diffstat (limited to 'input-keys.c')
-rw-r--r--input-keys.c31
1 files changed, 23 insertions, 8 deletions
diff --git a/input-keys.c b/input-keys.c
index 78ae91da..038003df 100644
--- a/input-keys.c
+++ b/input-keys.c
@@ -607,19 +607,34 @@ input_key_get_mouse(struct screen *s, struct mouse_event *m, u_int x, u_int y,
len = xsnprintf(buf, sizeof buf, "\033[<%u;%u;%u%c",
m->sgr_b, x + 1, y + 1, m->sgr_type);
} else if (s->mode & MODE_MOUSE_UTF8) {
- if (m->b > 0x7ff - 32 || x > 0x7ff - 33 || y > 0x7ff - 33)
+ if (m->b > MOUSE_PARAM_UTF8_MAX - MOUSE_PARAM_BTN_OFF ||
+ x > MOUSE_PARAM_UTF8_MAX - MOUSE_PARAM_POS_OFF ||
+ y > MOUSE_PARAM_UTF8_MAX - MOUSE_PARAM_POS_OFF)
return (0);
len = xsnprintf(buf, sizeof buf, "\033[M");
- len += input_key_split2(m->b + 32, &buf[len]);
- len += input_key_split2(x + 33, &buf[len]);
- len += input_key_split2(y + 33, &buf[len]);
+ len += input_key_split2(m->b + MOUSE_PARAM_BTN_OFF, &buf[len]);
+ len += input_key_split2(x + MOUSE_PARAM_POS_OFF, &buf[len]);
+ len += input_key_split2(y + MOUSE_PARAM_POS_OFF, &buf[len]);
} else {
- if (m->b > 223)
+ if (m->b + MOUSE_PARAM_BTN_OFF > MOUSE_PARAM_MAX)
return (0);
+
len = xsnprintf(buf, sizeof buf, "\033[M");
- buf[len++] = m->b + 32;
- buf[len++] = x + 33;
- buf[len++] = y + 33;
+ buf[len++] = m->b + MOUSE_PARAM_BTN_OFF;
+
+ /*
+ * The incoming x and y may be out of the range which can be
+ * supported by the "normal" mouse protocol. Clamp the
+ * coordinates to the supported range.
+ */
+ if (x + MOUSE_PARAM_POS_OFF > MOUSE_PARAM_MAX)
+ buf[len++] = MOUSE_PARAM_MAX;
+ else
+ buf[len++] = x + MOUSE_PARAM_POS_OFF;
+ if (y + MOUSE_PARAM_POS_OFF > MOUSE_PARAM_MAX)
+ buf[len++] = MOUSE_PARAM_MAX;
+ else
+ buf[len++] = y + MOUSE_PARAM_POS_OFF;
}
*rbuf = buf;