input: make combined commands repeatable

Binding multiple commands at once where always considered not
repeatable, because the MP_CMD_COMMAND_LIST wasn't considered
repeatable.

Fixes #807 (probably).
This commit is contained in:
wm4 2014-05-26 21:49:14 +02:00
parent fbe59b23b1
commit 6710527a83
3 changed files with 10 additions and 2 deletions

View File

@ -285,6 +285,12 @@ bool mp_input_is_abort_cmd(struct mp_cmd *cmd)
return false; return false;
} }
bool mp_input_is_repeatable_cmd(struct mp_cmd *cmd)
{
return (cmd->def && cmd->def->allow_auto_repeat) ||
cmd->id == MP_CMD_COMMAND_LIST;
}
void mp_print_cmd_list(struct mp_log *out) void mp_print_cmd_list(struct mp_log *out)
{ {
for (int i = 0; mp_cmds[i].name; i++) { for (int i = 0; mp_cmds[i].name; i++) {

View File

@ -116,6 +116,8 @@ enum mp_command_type {
struct mp_cmd; struct mp_cmd;
bool mp_input_is_abort_cmd(struct mp_cmd *cmd); bool mp_input_is_abort_cmd(struct mp_cmd *cmd);
bool mp_input_is_repeatable_cmd(struct mp_cmd *cmd);
struct bstr; struct bstr;
bool mp_replace_legacy_cmd(void *talloc_ctx, struct bstr *s); bool mp_replace_legacy_cmd(void *talloc_ctx, struct bstr *s);

View File

@ -515,7 +515,7 @@ static void update_mouse_section(struct input_ctx *ictx)
} }
// Called when the currently held-down key is released. This (usually) sends // Called when the currently held-down key is released. This (usually) sends
// the a key-up versiob of the command associated with the keys that were held // the a key-up version of the command associated with the keys that were held
// down. // down.
// If the drop_current parameter is set to true, then don't send the key-up // If the drop_current parameter is set to true, then don't send the key-up
// command. Unless we've already sent a key-down event, in which case the // command. Unless we've already sent a key-down event, in which case the
@ -1112,7 +1112,7 @@ mp_cmd_t *mp_input_get_cmd(struct input_ctx *ictx, int time, int peek_only)
struct mp_cmd *repeated = check_autorepeat(ictx); struct mp_cmd *repeated = check_autorepeat(ictx);
if (repeated) { if (repeated) {
repeated->repeated = true; repeated->repeated = true;
if (repeated->def && repeated->def->allow_auto_repeat) { if (mp_input_is_repeatable_cmd(repeated)) {
queue_add_tail(queue, repeated); queue_add_tail(queue, repeated);
} else { } else {
talloc_free(repeated); talloc_free(repeated);