summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--DOCS/man/ipc.rst8
-rw-r--r--input/ipc.c33
2 files changed, 41 insertions, 0 deletions
diff --git a/DOCS/man/ipc.rst b/DOCS/man/ipc.rst
index f1e466a497..d904eeae87 100644
--- a/DOCS/man/ipc.rst
+++ b/DOCS/man/ipc.rst
@@ -156,6 +156,14 @@ extra commands can also be used as part of the protocol:
lead to breakages with future mpv releases. Instead, make a feature request,
and ask for a proper event that returns the information you need.
+``enable_event``, ``disable_event``
+ Enables or disables the named event. Mirrors the ``mpv_request_event`` C
+ API function. If the string ``all`` is used instead of an event name, all
+ events are enabled or disabled.
+
+ By default, most events are enabled, and there is not much use for this
+ command.
+
``suspend``
Suspend the mpv main loop. There is a long-winded explanation of this in
the C API function ``mpv_suspend()``. In short, this prevents the player
diff --git a/input/ipc.c b/input/ipc.c
index 4fd9cf17e1..2ad850e5ed 100644
--- a/input/ipc.c
+++ b/input/ipc.c
@@ -424,6 +424,39 @@ static char *json_execute_command(struct client_arg *arg, void *ta_parent,
} else if (!strcmp("resume", cmd)) {
mpv_resume(arg->client);
rc = MPV_ERROR_SUCCESS;
+ } else if (!strcmp("enable_event", cmd) ||
+ !strcmp("disable_event", cmd))
+ {
+ bool enable = !strcmp("enable_event", cmd);
+
+ if (cmd_node->u.list->num != 2) {
+ rc = MPV_ERROR_INVALID_PARAMETER;
+ goto error;
+ }
+
+ if (cmd_node->u.list->values[1].format != MPV_FORMAT_STRING) {
+ rc = MPV_ERROR_INVALID_PARAMETER;
+ goto error;
+ }
+
+ char *name = cmd_node->u.list->values[1].u.string;
+ if (strcmp(name, "all") == 0) {
+ for (int n = 0; n < 64; n++)
+ mpv_request_event(arg->client, n, enable);
+ rc = MPV_ERROR_SUCCESS;
+ } else {
+ int event = -1;
+ for (int n = 0; n < 64; n++) {
+ const char *evname = mpv_event_name(n);
+ if (evname && strcmp(evname, name) == 0)
+ event = n;
+ }
+ if (event < 0) {
+ rc = MPV_ERROR_INVALID_PARAMETER;
+ goto error;
+ }
+ rc = mpv_request_event(arg->client, event, enable);
+ }
} else {
mpv_node result_node;