From f1205293a70b13f53bfce0a1a9859132b8421443 Mon Sep 17 00:00:00 2001 From: wm4 Date: Thu, 10 Sep 2015 14:15:12 +0200 Subject: [PATCH] command: make "add 0" not change the value The value 0 was treated specially, and effectively forced the increment to 1. Interestingly, passing 0 or no value also does not include the scale (from touchpads etc.), but this is probably an accidental behavior that was never intentionally added. Simplify it and make the default increment 1. 0 now means what it should: the value will not be changed. This is not particularly useful, but on the other hand there is no need for surprising and unintuitive semantics. OARG_CYCLEDIR() failed to apply the default value, because m_option_type_cycle_dir was missing a copy handler - add this too. --- input/cmd_list.c | 2 +- input/cmd_parse.c | 7 +++++++ player/command.c | 6 ++---- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/input/cmd_list.c b/input/cmd_list.c index 3640cce460..2f3bfb994a 100644 --- a/input/cmd_list.c +++ b/input/cmd_list.c @@ -146,7 +146,7 @@ const struct mp_cmd_def mp_cmds[] = { { MP_CMD_RUN, "run", { ARG_STRING, ARG_STRING }, .vararg = true }, { MP_CMD_SET, "set", { ARG_STRING, ARG_STRING } }, - { MP_CMD_ADD, "add", { ARG_STRING, OARG_DOUBLE(0) }, + { MP_CMD_ADD, "add", { ARG_STRING, OARG_DOUBLE(1) }, .allow_auto_repeat = true}, { MP_CMD_CYCLE, "cycle", { ARG_STRING, diff --git a/input/cmd_parse.c b/input/cmd_parse.c index 206bd4171f..ba35cd5e1c 100644 --- a/input/cmd_parse.c +++ b/input/cmd_parse.c @@ -471,8 +471,15 @@ static int parse_cycle_dir(struct mp_log *log, const struct m_option *opt, return 1; } +static void copy_opt(const m_option_t *opt, void *dst, const void *src) +{ + if (dst && src) + memcpy(dst, src, opt->type->size); +} + const struct m_option_type m_option_type_cycle_dir = { .name = "up|down", .parse = parse_cycle_dir, + .copy = copy_opt, .size = sizeof(double), }; diff --git a/player/command.c b/player/command.c index 8514be98f7..19f725ba3a 100644 --- a/player/command.c +++ b/player/command.c @@ -4286,13 +4286,11 @@ int run_command(struct MPContext *mpctx, struct mp_cmd *cmd, struct mpv_node *re case MP_CMD_ADD: case MP_CMD_CYCLE: { + char *property = cmd->args[0].v.s; struct m_property_switch_arg s = { - .inc = 1, + .inc = cmd->args[1].v.d * cmd->scale, .wrap = cmd->id == MP_CMD_CYCLE, }; - if (cmd->args[1].v.d) - s.inc = cmd->args[1].v.d * cmd->scale; - char *property = cmd->args[0].v.s; if (cmd->repeated && !check_property_autorepeat(property, mpctx)) { MP_VERBOSE(mpctx, "Dropping command '%.*s' from auto-repeated key.\n", BSTR_P(cmd->original));