summaryrefslogtreecommitdiffstats
path: root/input/input.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-02-19 15:40:04 +0100
committerwm4 <wm4@nowhere>2014-02-19 15:40:04 +0100
commit57c9f5236a43efd9d979b7ee18a25de2d3d88dd5 (patch)
treed0403c586f3a59c33282e5187c8a6c553955e01a /input/input.c
parent8b57e4bc1290fd1d6eba7a379e7fa04fc602c945 (diff)
downloadmpv-57c9f5236a43efd9d979b7ee18a25de2d3d88dd5.tar.bz2
mpv-57c9f5236a43efd9d979b7ee18a25de2d3d88dd5.tar.xz
input, dvdnav: fix osc stealing input from dvdnav
This is a regression introduced from moving Lua scripts (including the OSC) to their own threads. Now OSC and dvdnav can add their bindings at the same time without coordination, which seems to result in the OSC winning most time, and thus overriding the dvdnav menu bindings. Fix this by adding a flag that makes dvdnav menu bindings take priority over all other bindings.
Diffstat (limited to 'input/input.c')
-rw-r--r--input/input.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/input/input.c b/input/input.c
index 41eb794a0e..76cd571a04 100644
--- a/input/input.c
+++ b/input/input.c
@@ -1220,8 +1220,18 @@ void mp_input_enable_section(struct input_ctx *ictx, char *name, int flags)
MP_VERBOSE(ictx, "enable section '%s'\n", name);
if (ictx->num_active_sections < MAX_ACTIVE_SECTIONS) {
- ictx->active_sections[ictx->num_active_sections++] =
- (struct active_section) {name, flags};
+ int top = ictx->num_active_sections;
+ if (!(flags & MP_INPUT_ON_TOP)) {
+ // insert before the first top entry
+ for (top = 0; top < ictx->num_active_sections; top++) {
+ if (ictx->active_sections[top].flags & MP_INPUT_ON_TOP)
+ break;
+ }
+ for (int n = ictx->num_active_sections; n > top; n--)
+ ictx->active_sections[n] = ictx->active_sections[n - 1];
+ }
+ ictx->active_sections[top] = (struct active_section){name, flags};
+ ictx->num_active_sections++;
}
MP_DBG(ictx, "active section stack:\n");