diff options
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; |