diff options
Diffstat (limited to 'input')
-rw-r--r-- | input/input.c | 15 | ||||
-rw-r--r-- | input/input.h | 9 |
2 files changed, 18 insertions, 6 deletions
diff --git a/input/input.c b/input/input.c index 98b135c349..6bf45edf7e 100644 --- a/input/input.c +++ b/input/input.c @@ -452,6 +452,8 @@ struct input_ctx { struct cmd_bind_section *cmd_bind_sections; // Name of currently used command section char *section; + // Bitfield of mp_input_section_flags + int section_flags; // Used to track whether we managed to read something while checking // events sources. If yes, the sources may have more queued. @@ -1023,10 +1025,12 @@ static mp_cmd_t *get_cmd_from_keys(struct input_ctx *ictx, int n, int *keys) cmd = section_find_bind_for_key(ictx, false, ictx->section, n, keys); if (ictx->default_bindings && cmd == NULL) cmd = section_find_bind_for_key(ictx, true, ictx->section, n, keys); - if (cmd == NULL) - cmd = section_find_bind_for_key(ictx, false, "default", n, keys); - if (ictx->default_bindings && cmd == NULL) - cmd = section_find_bind_for_key(ictx, true, "default", n, keys); + if (!(ictx->section_flags & MP_INPUT_NO_DEFAULT_SECTION)) { + if (cmd == NULL) + cmd = section_find_bind_for_key(ictx, false, "default", n, keys); + if (ictx->default_bindings && cmd == NULL) + cmd = section_find_bind_for_key(ictx, true, "default", n, keys); + } if (cmd == NULL) { char *key_buf = get_key_combo_name(keys, n); @@ -1524,10 +1528,11 @@ static int parse_config_file(struct input_ctx *ictx, char *file) return 1; } -void mp_input_set_section(struct input_ctx *ictx, char *name) +void mp_input_set_section(struct input_ctx *ictx, char *name, int flags) { talloc_free(ictx->section); ictx->section = talloc_strdup(ictx, name ? name : "default"); + ictx->section_flags = flags; } char *mp_input_get_section(struct input_ctx *ictx) diff --git a/input/input.h b/input/input.h index 04cefab46e..910561fa9f 100644 --- a/input/input.h +++ b/input/input.h @@ -166,6 +166,12 @@ enum mp_command_type { // Key FIFO was full - release events may be lost, zero button-down status #define MP_INPUT_RELEASE_ALL -5 +enum mp_input_section_flags { + // If a key binding is not defined in the current section, search the + // default section for it ("default" refers to bindings with no section + // specified, not to the default input.conf aka builtin key bindings) + MP_INPUT_NO_DEFAULT_SECTION = 1, +}; struct input_ctx; @@ -246,7 +252,8 @@ void mp_cmd_free(struct mp_cmd *cmd); struct mp_cmd *mp_cmd_clone(struct mp_cmd *cmd); // Set current input section -void mp_input_set_section(struct input_ctx *ictx, char *name); +// flags is a bitfield of enum mp_input_section_flags values +void mp_input_set_section(struct input_ctx *ictx, char *name, int flags); // Get current input section char *mp_input_get_section(struct input_ctx *ictx); |