summaryrefslogtreecommitdiffstats
path: root/input
diff options
context:
space:
mode:
authorUoti Urpala <uau@mplayer2.org>2011-04-25 14:12:04 +0300
committerUoti Urpala <uau@mplayer2.org>2011-05-02 00:44:21 +0300
commitb9eaafe1ed4f38efcd08d113d9e51e9ebb034f6e (patch)
treefd70a279e23af0e61b98f3bb66382005f18ca3c4 /input
parent325926f9f87070615521747646c47012f1434e15 (diff)
downloadmpv-b9eaafe1ed4f38efcd08d113d9e51e9ebb034f6e.tar.bz2
mpv-b9eaafe1ed4f38efcd08d113d9e51e9ebb034f6e.tar.xz
input: modify interpretation of doubleclick events
The code combining button presses into multibutton commands prevented single click commands from triggering if a doubleclick event had been generated from the same button press. As a result using the mouse wheel to seek worked very badly. Special-case doubleclick events in the event interpretation code to avoid this issue. This changes the sequence of generated "keys" for press-release-press-release from MOUSE_BTN0 MOUSE_BTN0-MOUSE_BTN0_DBL MOUSE_BTN0_DBL to MOUSE_BTN0 MOUSE_BTN0_DBL MOUSE_BTN0. "Keys" like MOUSE_BTN0-MOUSE_BTN0_DBL will never be generated now; any existing configuration files using those need to be changed.
Diffstat (limited to 'input')
-rw-r--r--input/input.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/input/input.c b/input/input.c
index ccce08e450..4c69d00400 100644
--- a/input/input.c
+++ b/input/input.c
@@ -1184,6 +1184,15 @@ static mp_cmd_t *interpret_key(struct input_ctx *ictx, int code)
if (ictx->key_down[j] == code)
break;
}
+ bool doubleclick = code >= MOUSE_BTN0_DBL && code < MOUSE_BTN_DBL_END;
+ if (doubleclick) {
+ int btn = code - MOUSE_BTN0_DBL + MOUSE_BTN0;
+ if (!ictx->num_key_down
+ || ictx->key_down[ictx->num_key_down - 1] != btn)
+ return NULL;
+ j = ictx->num_key_down - 1;
+ ictx->key_down[j] = code;
+ }
if (j == ictx->num_key_down) { // was not already down; add temporarily
if (ictx->num_key_down > MP_MAX_KEY_DOWN) {
mp_tmsg(MSGT_INPUT, MSGL_ERR, "Too many key down events "
@@ -1198,6 +1207,10 @@ static mp_cmd_t *interpret_key(struct input_ctx *ictx, int code)
ret = ictx->last_key_down ?
get_cmd_from_keys(ictx, ictx->num_key_down, ictx->key_down)
: NULL;
+ if (doubleclick) {
+ ictx->key_down[j] = code - MOUSE_BTN0_DBL + MOUSE_BTN0;
+ return ret;
+ }
// Remove the key
if (j + 1 < ictx->num_key_down)
memmove(&ictx->key_down[j], &ictx->key_down[j + 1],