mirror of
https://github.com/mpv-player/mpv
synced 2024-12-24 07:42:17 +00:00
input: make key binds order-independent again
This is for the sake of multi-key commands again. This could break: SPACE ignore SPACE-SPACE command while this worked: SPACE-SPACE command SPACE ignore The reason being that if the shorter command was first in the list, it would obviously match, and searching was stopped.
This commit is contained in:
parent
d910677937
commit
14421f732b
@ -393,10 +393,14 @@ static struct cmd_bind *find_bind_for_key_section(struct input_ctx *ictx,
|
||||
memcpy(keys, ictx->key_history, sizeof(keys));
|
||||
key_buf_add(keys, code);
|
||||
|
||||
struct cmd_bind *best = NULL;
|
||||
|
||||
// Prefer user-defined keys over builtin bindings
|
||||
for (int builtin = 0; builtin < 2; builtin++) {
|
||||
if (builtin && !ictx->default_bindings)
|
||||
break;
|
||||
if (best)
|
||||
break;
|
||||
for (int n = 0; n < bs->num_binds; n++) {
|
||||
if (bs->binds[n].is_builtin == (bool)builtin) {
|
||||
struct cmd_bind *b = &bs->binds[n];
|
||||
@ -406,12 +410,13 @@ static struct cmd_bind *find_bind_for_key_section(struct input_ctx *ictx,
|
||||
if (b->keys[i] != keys[b->num_keys - 1 - i])
|
||||
goto skip;
|
||||
}
|
||||
return b;
|
||||
if (!best || b->num_keys >= best->num_keys)
|
||||
best = b;
|
||||
skip: ;
|
||||
}
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
return best;
|
||||
}
|
||||
|
||||
static struct cmd_bind *find_any_bind_for_key(struct input_ctx *ictx,
|
||||
|
Loading…
Reference in New Issue
Block a user