diff options
author | wm4 <wm4@nowhere> | 2015-12-23 19:10:38 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2015-12-23 19:10:48 +0100 |
commit | 3e1aed8f40f0c35f78c74502050630519895c972 (patch) | |
tree | 72a8cd2608e7a841c0efd268ddbb7ff0a687745f /input | |
parent | ff520054c86898613ae58f358b8554760ef30e15 (diff) | |
download | mpv-3e1aed8f40f0c35f78c74502050630519895c972.tar.bz2 mpv-3e1aed8f40f0c35f78c74502050630519895c972.tar.xz |
input: add key name to script-binding command response
The "script-binding" command is used by the Lua scripting wrapper to
register key bindings on the fly. It's also the only way to get fine-
grained information about key events (such as separate key up/down
events). This information is sent via a "key-binding" message when the
state of a key changes.
Extend it to send name of the mapped key itself. Previously, it was
assumed that the user just uses an unique identifier for the binding's
name, so it wasn't needed. With this change, a user can map exactly the
same command to multiple keys, which is useful especially with the next
commit.
Part of #2612.
Diffstat (limited to 'input')
-rw-r--r-- | input/cmd_parse.c | 1 | ||||
-rw-r--r-- | input/input.c | 5 | ||||
-rw-r--r-- | input/input.h | 1 |
3 files changed, 4 insertions, 3 deletions
diff --git a/input/cmd_parse.c b/input/cmd_parse.c index ba35cd5e1c..c2c3270e97 100644 --- a/input/cmd_parse.c +++ b/input/cmd_parse.c @@ -417,6 +417,7 @@ mp_cmd_t *mp_cmd_clone(mp_cmd_t *cmd) m_option_copy(ret->args[i].type, &ret->args[i].v, &cmd->args[i].v); } ret->original = bstrdup(ret, cmd->original); + ret->key_name = talloc_strdup(ret, ret->key_name); if (cmd->id == MP_CMD_COMMAND_LIST) { struct mp_cmd *prev = NULL; diff --git a/input/input.c b/input/input.c index e1dfe2e616..58907ccd50 100644 --- a/input/input.c +++ b/input/input.c @@ -460,11 +460,10 @@ static mp_cmd_t *get_cmd_from_keys(struct input_ctx *ictx, char *force_section, mp_cmd_t *ret = mp_input_parse_cmd(ictx, bstr0(cmd->cmd), cmd->location); if (ret) { ret->input_section = cmd->owner->section; + ret->key_name = talloc_steal(ret, mp_input_get_key_combo_name(&code, 1)); if (mp_msg_test(ictx->log, MSGL_DEBUG)) { - char *keyname = mp_input_get_key_combo_name(&code, 1); MP_DBG(ictx, "key '%s' -> '%s' in '%s'\n", - keyname, cmd->cmd, ret->input_section); - talloc_free(keyname); + ret->key_name, cmd->cmd, ret->input_section); } ret->is_mouse_button = code & MP_KEY_EMIT_ON_UP; } else { diff --git a/input/input.h b/input/input.h index 2b2299d5cc..6462555326 100644 --- a/input/input.h +++ b/input/input.h @@ -86,6 +86,7 @@ typedef struct mp_cmd { double scale; // for scaling numeric arguments const struct mp_cmd_def *def; char *sender; // name of the client API user which sent this + char *key_name; // string representation of the key binding } mp_cmd_t; struct mp_input_src { |