diff options
author | wm4 <wm4@nowhere> | 2014-11-23 15:08:49 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2014-11-23 15:13:35 +0100 |
commit | ae5df9be98e4193342321f30285655fcf88e7e63 (patch) | |
tree | 3f327acc1c25f3e48bebfc13c0d0061823c282e0 /player/command.c | |
parent | 7b47f12f8f1cae385060741e4e7f758297515225 (diff) | |
download | mpv-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.c | 30 |
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; |