summaryrefslogtreecommitdiffstats
path: root/player/command.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-11-23 15:08:49 +0100
committerwm4 <wm4@nowhere>2014-11-23 15:13:35 +0100
commitae5df9be98e4193342321f30285655fcf88e7e63 (patch)
tree3f327acc1c25f3e48bebfc13c0d0061823c282e0 /player/command.c
parent7b47f12f8f1cae385060741e4e7f758297515225 (diff)
downloadmpv-ae5df9be98e4193342321f30285655fcf88e7e63.tar.bz2
mpv-ae5df9be98e4193342321f30285655fcf88e7e63.tar.xz
input, lua: redo input handling
Much of it is the same, but now there's the possibility to distinguish key down/up events in the Lua API.
Diffstat (limited to 'player/command.c')
-rw-r--r--player/command.c30
1 files changed, 21 insertions, 9 deletions
diff --git a/player/command.c b/player/command.c
index 30768e9b71..0042d8dee7 100644
--- a/player/command.c
+++ b/player/command.c
@@ -4471,17 +4471,29 @@ int run_command(MPContext *mpctx, mp_cmd_t *cmd)
return edit_filters_osd(mpctx, STREAM_VIDEO, cmd->args[0].v.s,
cmd->args[1].v.s, msg_osd);
- case MP_CMD_SCRIPT_DISPATCH: {
- mpv_event_script_input_dispatch *event = talloc_ptrtype(NULL, event);
- *event = (mpv_event_script_input_dispatch){
- .arg0 = cmd->args[1].v.i,
- .type = cmd->key_up_follows ? "keyup_follows" : "press",
- };
- if (mp_client_send_event(mpctx, cmd->args[0].v.s,
- MPV_EVENT_SCRIPT_INPUT_DISPATCH, event) < 0)
+ case MP_CMD_SCRIPT_BINDING: {
+ mpv_event_client_message event = {0};
+ char *name = cmd->args[0].v.s;
+ if (!name || !name[0])
+ return -1;
+ char *sep = strchr(name, '/');
+ char *target = NULL;
+ char space[MAX_CLIENT_NAME];
+ if (name) {
+ snprintf(space, sizeof(space), "%.*s", (int)(sep - name), name);
+ target = space;
+ name = sep + 1;
+ }
+ char state[3] = {'p', cmd->is_mouse_button ? 'm' : '-'};
+ if (cmd->is_up_down)
+ state[0] = cmd->repeated ? 'r' : (cmd->is_up ? 'u' : 'd');
+ event.num_args = 3;
+ event.args = (const char*[3]){"key-binding", name, state};
+ if (mp_client_send_event_dup(mpctx, target,
+ MPV_EVENT_CLIENT_MESSAGE, &event) < 0)
{
MP_VERBOSE(mpctx, "Can't find script '%s' when handling input.\n",
- cmd->args[0].v.s);
+ target ? target : "-");
return -1;
}
break;