From 9331c7e79ca81fbe474f433f10a8518067f26921 Mon Sep 17 00:00:00 2001 From: Ayush Dey Date: Fri, 16 May 2025 10:53:08 +0530 Subject: [PATCH] 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. --- src/input/es_out.c | 3 +-- src/video_output/video_output.c | 4 ---- src/video_output/video_window.c | 9 ++++++--- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/input/es_out.c b/src/input/es_out.c index 48c615cf64..1cd768845a 100644 --- a/src/input/es_out.c +++ b/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; diff --git a/src/video_output/video_output.c b/src/video_output/video_output.c index 887dfec6b9..f444ce16cf 100644 --- a/src/video_output/video_output.c +++ b/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); diff --git a/src/video_output/video_window.c b/src/video_output/video_window.c index c80a8fecdf..66fcf8b0f0 100644 --- a/src/video_output/video_window.c +++ b/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;