Browse Source

vout: stop propagation if mouse event is consumed by a video filter

Adjust the consumer order to prioritize fullscreen toggling before vout_FilterMouse,
ensuring that double-click toggles fullscreen even when interactive video filters
(like puzzle, magnify, etc.) are active.
Remove vlc_mouse_HasMouseFilter and vlc_mouse_SetMouseFilter calls.
pull/180/head
Ayush Dey 11 months ago
committed by Steve Lhomme
parent
commit
9331c7e79c
  1. 3
      src/input/es_out.c
  2. 4
      src/video_output/video_output.c
  3. 9
      src/video_output/video_window.c

3
src/input/es_out.c

@ -340,8 +340,7 @@ static void MouseEventCb(const vlc_mouse_t *newmouse, void *userdata)
if(!p_sys->p_input)
return;
/* player event is disabled when a filter is listening to mouse events */
if(!newmouse || vlc_mouse_HasMouseFilter(newmouse))
if(!newmouse)
{
vlc_mouse_Init(&id->oldmouse);
id->mouse_being_dragged = false;

4
src/video_output/video_output.c

@ -322,10 +322,6 @@ bool vout_FilterMouse(vout_thread_t *vout, vlc_mouse_t *mouse)
m = &tmp[1];
else
event_consumed = true;
bool has_mouse_filter = filter_chain_HasMouseFilter(sys->filter.chain_interactive) ||
filter_chain_HasMouseFilter(sys->filter.chain_static);
vlc_mouse_SetMouseFilter(m, has_mouse_filter);
}
vlc_mutex_unlock(&sys->filter.lock);

9
src/video_output/video_window.c

@ -193,7 +193,12 @@ static void vout_display_window_MouseEvent(vlc_window_t *window,
&state->format, &state->display);
vlc_mutex_unlock(&state->lock);
vout_FilterMouse(vout, &video_mouse);
if (video_mouse.b_double_click && vlc_mouse_IsLeftPressed(&video_mouse))
var_ToggleBool(vout, "fullscreen");
/* Stop propagation if the event was consumed by a video filter */
if (vout_FilterMouse(vout, &video_mouse))
return;
/* Check if the mouse state actually changed and emit events. */
/* NOTE: sys->mouse is only used here, so no need to lock. */
@ -201,8 +206,6 @@ static void vout_display_window_MouseEvent(vlc_window_t *window,
var_SetCoords(vout, "mouse-moved", m->i_x, m->i_y);
if (vlc_mouse_HasButton(&state->mouse.video, &video_mouse))
var_SetInteger(vout, "mouse-button-down", video_mouse.i_pressed);
if (video_mouse.b_double_click && vlc_mouse_IsLeftPressed(&video_mouse))
var_ToggleBool(vout, "fullscreen");
state->mouse.video = video_mouse;

Loading…
Cancel
Save