0
0
mirror of https://github.com/mpv-player/mpv.git synced 2024-09-20 03:52:22 +02:00

input: allow window dragging even if mouse is in a mouse area

If the input section is enabled with MP_INPUT_ALLOW_VO_DRAGGING, then
the  VO will be allowed to drag the window with mouse button down +
mouse move even if the mouse is inside the section's mouse area.
This commit is contained in:
wm4 2013-08-31 21:59:37 +02:00
parent 0c7978cf9c
commit 6a55fa6793
2 changed files with 13 additions and 4 deletions

View File

@ -2143,13 +2143,15 @@ void mp_input_set_section_mouse_area(struct input_ctx *ictx, char *name,
input_unlock(ictx);
}
bool mp_input_test_mouse_active(struct input_ctx *ictx, int x, int y)
static bool test_mouse(struct input_ctx *ictx, int x, int y, int rej_flags)
{
input_lock(ictx);
bool res = false;
for (int i = 0; i < ictx->num_active_sections; i++) {
char *name = ictx->active_sections[i].name;
struct cmd_bind_section *s = get_bind_section(ictx, bstr0(name));
struct active_section *as = &ictx->active_sections[i];
if (as->flags & rej_flags)
continue;
struct cmd_bind_section *s = get_bind_section(ictx, bstr0(as->name));
if (s->mouse_area_set && test_rect(&s->mouse_area, x, y)) {
res = true;
break;
@ -2159,9 +2161,14 @@ bool mp_input_test_mouse_active(struct input_ctx *ictx, int x, int y)
return res;
}
bool mp_input_test_mouse_active(struct input_ctx *ictx, int x, int y)
{
return test_mouse(ictx, x, y, 0);
}
bool mp_input_test_dragging(struct input_ctx *ictx, int x, int y)
{
return mp_input_test_mouse_active(ictx, x, y);
return test_mouse(ictx, x, y, MP_INPUT_ALLOW_VO_DRAGGING);
}
// builtin: if true, remove all builtin binds, else remove all user binds

View File

@ -116,6 +116,8 @@ 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,
// Let mp_input_test_dragging() return true, even if inside the mouse area.
MP_INPUT_ALLOW_VO_DRAGGING = 2,
};
struct input_ctx;