summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--input/input.c15
-rw-r--r--input/input.h9
-rw-r--r--mplayer.c4
3 files changed, 20 insertions, 8 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);
diff --git a/mplayer.c b/mplayer.c
index 48758b2967..2ed4a3d257 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -3613,10 +3613,10 @@ goto_enable_cache:
mpctx->sh_video->fps, mpctx->sh_video->frametime);
}
- mp_input_set_section(mpctx->input, NULL);
+ mp_input_set_section(mpctx->input, NULL, 0);
//TODO: add desired (stream-based) sections here
if (mpctx->stream->type == STREAMTYPE_TV)
- mp_input_set_section(mpctx->input, "tv");
+ mp_input_set_section(mpctx->input, "tv", 0);
//==================== START PLAYING =======================