summaryrefslogtreecommitdiffstats
path: root/input
diff options
context:
space:
mode:
Diffstat (limited to 'input')
-rw-r--r--input/cmd_list.c15
-rw-r--r--input/cmd_list.h3
-rw-r--r--input/cmd_parse.c18
-rw-r--r--input/cmd_parse.h2
-rw-r--r--input/input.c2
5 files changed, 20 insertions, 20 deletions
diff --git a/input/cmd_list.c b/input/cmd_list.c
index 936cef9125..23a5da774e 100644
--- a/input/cmd_list.c
+++ b/input/cmd_list.c
@@ -30,15 +30,11 @@
// 0: no, 1: maybe, 2: sure
static int is_abort_cmd(struct mp_cmd *cmd)
{
- switch (cmd->id) {
- case MP_CMD_QUIT:
- case MP_CMD_QUIT_WATCH_LATER:
- case MP_CMD_STOP:
+ if (cmd->def->is_abort)
return 2;
- case MP_CMD_PLAYLIST_NEXT:
- case MP_CMD_PLAYLIST_PREV:
+ if (cmd->def->is_soft_abort)
return 1;
- case MP_CMD_COMMAND_LIST:;
+ if (cmd->def == &mp_cmd_list) {
int r = 0;
for (struct mp_cmd *sub = cmd->args[0].v.p; sub; sub = sub->queue_next) {
int x = is_abort_cmd(sub);
@@ -61,14 +57,13 @@ bool mp_input_is_abort_cmd(struct mp_cmd *cmd)
bool mp_input_is_repeatable_cmd(struct mp_cmd *cmd)
{
- return (cmd->def && cmd->def->allow_auto_repeat) ||
- cmd->id == MP_CMD_COMMAND_LIST ||
+ return (cmd->def->allow_auto_repeat) || cmd->def == &mp_cmd_list ||
(cmd->flags & MP_ALLOW_REPEAT);
}
bool mp_input_is_scalable_cmd(struct mp_cmd *cmd)
{
- return cmd->def && cmd->def->scalable;
+ return cmd->def->scalable;
}
void mp_print_cmd_list(struct mp_log *out)
diff --git a/input/cmd_list.h b/input/cmd_list.h
index 441410a570..c6d7c66100 100644
--- a/input/cmd_list.h
+++ b/input/cmd_list.h
@@ -33,6 +33,9 @@ struct mp_cmd_def {
bool on_updown; // always emit it on both up and down key events
bool vararg; // last argument can be given 0 to multiple times
bool scalable;
+ bool is_abort;
+ bool is_soft_abort;
+ bool is_ignore;
};
extern const struct mp_cmd_def mp_cmds[];
diff --git a/input/cmd_parse.c b/input/cmd_parse.c
index da595d4963..ae518fdf98 100644
--- a/input/cmd_parse.c
+++ b/input/cmd_parse.c
@@ -28,6 +28,11 @@
#include "libmpv/client.h"
+const struct mp_cmd_def mp_cmd_list = {
+ .id = MP_CMD_COMMAND_LIST,
+ .name = "list",
+};
+
static void destroy_cmd(void *ptr)
{
struct mp_cmd *cmd = ptr;
@@ -314,11 +319,6 @@ error:
return NULL;
}
-static struct mp_cmd_def list_def = {
- .id = MP_CMD_COMMAND_LIST,
- .name = "list",
-};
-
mp_cmd_t *mp_input_parse_cmd_(struct mp_log *log, bstr str, const char *loc)
{
void *tmp = talloc_new(NULL);
@@ -341,9 +341,9 @@ mp_cmd_t *mp_input_parse_cmd_(struct mp_log *log, bstr str, const char *loc)
struct mp_cmd *list = talloc_ptrtype(NULL, list);
talloc_set_destructor(list, destroy_cmd);
*list = (struct mp_cmd) {
- .id = list_def.id,
- .name = (char *)list_def.name,
- .def = &list_def,
+ .id = mp_cmd_list.id,
+ .name = (char *)mp_cmd_list.name,
+ .def = &mp_cmd_list,
.original = bstrdup(list, original),
};
talloc_steal(list, cmd);
@@ -407,7 +407,7 @@ mp_cmd_t *mp_cmd_clone(mp_cmd_t *cmd)
ret->original = bstrdup(ret, cmd->original);
ret->key_name = talloc_strdup(ret, ret->key_name);
- if (cmd->id == MP_CMD_COMMAND_LIST) {
+ if (cmd->def == &mp_cmd_list) {
struct mp_cmd *prev = NULL;
for (struct mp_cmd *sub = cmd->args[0].v.p; sub; sub = sub->queue_next) {
sub = mp_cmd_clone(sub);
diff --git a/input/cmd_parse.h b/input/cmd_parse.h
index 295aa3b2e7..13a055ff13 100644
--- a/input/cmd_parse.h
+++ b/input/cmd_parse.h
@@ -24,6 +24,8 @@ struct mp_log;
struct mp_cmd;
struct mpv_node;
+extern const struct mp_cmd_def mp_cmd_list;
+
// Parse text and return corresponding struct mp_cmd.
// The location parameter is for error messages.
struct mp_cmd *mp_input_parse_cmd_(struct mp_log *log, bstr str, const char *loc);
diff --git a/input/input.c b/input/input.c
index 616ce3450c..03771dc2bb 100644
--- a/input/input.c
+++ b/input/input.c
@@ -547,7 +547,7 @@ static struct mp_cmd *resolve_key(struct input_ctx *ictx, int code)
update_mouse_section(ictx);
struct mp_cmd *cmd = get_cmd_from_keys(ictx, NULL, code);
key_buf_add(ictx->key_history, code);
- if (cmd && cmd->id != MP_CMD_IGNORE && !should_drop_cmd(ictx, cmd))
+ if (cmd && !cmd->def->is_ignore && !should_drop_cmd(ictx, cmd))
return cmd;
talloc_free(cmd);
return NULL;