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:
parent
0c7978cf9c
commit
6a55fa6793
@ -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
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user