1
0
mirror of https://github.com/mpv-player/mpv synced 2025-03-23 03:37:27 +00:00

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.
This commit is contained in:
wm4 2014-02-19 15:40:04 +01:00
parent 8b57e4bc12
commit 57c9f5236a
3 changed files with 18 additions and 5 deletions

View File

@ -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");

View File

@ -57,10 +57,12 @@ enum mp_input_section_flags {
// other sections for it (like the default section). Instead, an unbound
// key warning will be printed.
MP_INPUT_EXCLUSIVE = 1,
// Prefer it to other sections.
MP_INPUT_ON_TOP = 2,
// Let mp_input_test_dragging() return true, even if inside the mouse area.
MP_INPUT_ALLOW_VO_DRAGGING = 2,
MP_INPUT_ALLOW_VO_DRAGGING = 4,
// Don't force mouse pointer visible, even if inside the mouse area.
MP_INPUT_ALLOW_HIDE_CURSOR = 4,
MP_INPUT_ALLOW_HIDE_CURSOR = 8,
};
struct input_ctx;

View File

@ -164,7 +164,8 @@ void mp_handle_nav(struct MPContext *mpctx)
case MP_NAV_EVENT_MENU_MODE:
nav->nav_menu = ev->u.menu_mode.enable;
if (nav->nav_menu) {
mp_input_enable_section(mpctx->input, "dvdnav-menu", 0);
mp_input_enable_section(mpctx->input, "dvdnav-menu",
MP_INPUT_ON_TOP);
} else {
mp_input_disable_section(mpctx->input, "dvdnav-menu");
}