Commit 7b2d398a authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont
Browse files

Do not propagate fullscreen status up the filter chain

This is fundamentally a lock inversion between the parent and child
object variables locks. Interfaces (hotkeys and others) use downward
propagation, so we keep that direction and remove the other direction.
parent 49334e07
......@@ -86,9 +86,9 @@ static inline int ForwardEvent( vlc_object_t *p_this, char const *psz_var,
* Install/remove all callbacks needed for proper event handling inside
* a vout-filter.
*/
static inline void vout_filter_SetupChild( vout_thread_t *p_parent, vout_thread_t *p_child,
static inline void vout_filter_SetupChild( vout_thread_t *p_parent,
vout_thread_t *p_child,
vlc_callback_t pf_mouse_event,
vlc_callback_t pf_fullscreen_up,
vlc_callback_t pf_fullscreen_down,
bool b_init )
{
......@@ -115,14 +115,11 @@ static inline void vout_filter_SetupChild( vout_thread_t *p_parent, vout_thread_
pf_execute( VLC_OBJECT(p_parent), "crop", ForwardEvent, p_child );
/* */
if( !pf_fullscreen_up )
pf_fullscreen_up = ForwardEvent;
if( !pf_fullscreen_down )
pf_fullscreen_down = ForwardEvent;
pf_execute( VLC_OBJECT(p_child), "fullscreen", pf_fullscreen_up, p_parent );
pf_execute( VLC_OBJECT(p_parent), "fullscreen", pf_fullscreen_down, p_child );
}
#define vout_filter_AddChild( a, b, c ) vout_filter_SetupChild( a, b, c, NULL, NULL, true )
#define vout_filter_DelChild( a, b, c ) vout_filter_SetupChild( a, b, c, NULL, NULL, false )
#define vout_filter_AddChild( a, b, c ) vout_filter_SetupChild( a, b, c, NULL, true )
#define vout_filter_DelChild( a, b, c ) vout_filter_SetupChild( a, b, c, NULL, false )
......@@ -117,8 +117,6 @@ static int FilterAllocationInit ( filter_t *, void * );
static void FilterAllocationClean( filter_t * );
/* */
static int FullscreenEventUp( vlc_object_t *, char const *,
vlc_value_t, vlc_value_t, void * );
static int FullscreenEventDown( vlc_object_t *, char const *,
vlc_value_t, vlc_value_t, void * );
static int SplitterPictureNew( video_splitter_t *, picture_t *pp_picture[] );
......@@ -310,11 +308,11 @@ static int Init( vout_thread_t *p_vout )
}
}
/* Attach once pp_vout is completly field to avoid race conditions */
/* Attach once pp_vout is completly filed to avoid race conditions */
for( int i = 0; i < p_splitter->i_output; i++ )
vout_filter_SetupChild( p_vout, p_sys->pp_vout[i],
MouseEvent,
FullscreenEventUp, FullscreenEventDown, true );
FullscreenEventDown, true );
/* Restore settings */
var_SetInteger( p_vout, "align", i_org_align );
var_SetInteger( p_vout, "video-x", i_org_x );
......@@ -398,7 +396,7 @@ static void VoutsClean( vout_thread_t *p_vout, int i_count )
else
vout_filter_SetupChild( p_vout, p_sys->pp_vout[i],
MouseEvent,
FullscreenEventUp, FullscreenEventDown, false );
FullscreenEventDown, false );
}
for( int i = 0; i < i_count; i++ )
......@@ -555,15 +553,6 @@ static bool IsFullscreenActive( vout_thread_t *p_vout )
}
return false;
}
static int FullscreenEventUp( vlc_object_t *p_this, char const *psz_var,
vlc_value_t oldval, vlc_value_t newval, void *p_data )
{
vout_thread_t *p_vout = p_data;
VLC_UNUSED(oldval); VLC_UNUSED(p_this); VLC_UNUSED(psz_var); VLC_UNUSED(newval);
const bool b_fullscreen = IsFullscreenActive( p_vout );
return var_SetBool( p_vout, "fullscreen", b_fullscreen );
}
static int FullscreenEventDown( vlc_object_t *p_this, char const *psz_var,
vlc_value_t oldval, vlc_value_t newval, void *p_data )
{
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment