X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fcontrol%2Fshowintf.c;h=4ec461b1d3bf17607f77f92cd367a78eaf9c4bff;hb=cc321882c23496f30bed3fb3cec2975f86a0d784;hp=8df0a5901a558ed978476db0753ac2114f677482;hpb=449fd28aaf007c6411251dae9d0dbfdc65b135d1;p=vlc diff --git a/modules/control/showintf.c b/modules/control/showintf.c index 8df0a5901a..4ec461b1d3 100644 --- a/modules/control/showintf.c +++ b/modules/control/showintf.c @@ -29,7 +29,8 @@ # include "config.h" #endif -#include +#include +#include #include #include #include @@ -43,19 +44,19 @@ *****************************************************************************/ struct intf_sys_t { - vlc_object_t * p_vout; - bool b_button_pressed; - bool b_triggered; - int i_threshold; + vlc_mutex_t lock; + vlc_object_t *p_vout; + bool b_button_pressed; + bool b_triggered; + int i_threshold; }; /***************************************************************************** * Local prototypes. *****************************************************************************/ -int E_(Open) ( vlc_object_t * ); -void E_(Close)( vlc_object_t * ); +int Open ( vlc_object_t * ); +void Close( vlc_object_t * ); static void RunIntf( intf_thread_t *p_intf ); -static int InitThread( intf_thread_t *p_intf ); static int MouseEvent( vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void * ); @@ -65,42 +66,47 @@ static int MouseEvent( vlc_object_t *, char const *, #define THRESHOLD_TEXT N_( "Threshold" ) #define THRESHOLD_LONGTEXT N_( "Height of the zone triggering the interface." ) -vlc_module_begin(); - set_shortname( "Showintf" ); - add_integer( "showintf-threshold", 10, NULL, THRESHOLD_TEXT, THRESHOLD_LONGTEXT, true ); - set_description( _("Show interface with mouse") ); +vlc_module_begin () + set_shortname( "Showintf" ) + add_integer( "showintf-threshold", 10, NULL, THRESHOLD_TEXT, THRESHOLD_LONGTEXT, true ) + set_description( N_("Show interface with mouse") ) - set_capability( "interface", 0 ); - set_callbacks( E_(Open), E_(Close) ); -vlc_module_end(); + set_capability( "interface", 0 ) + set_callbacks( Open, Close ) +vlc_module_end () /***************************************************************************** * Open: initialize interface *****************************************************************************/ -int E_(Open)( vlc_object_t *p_this ) +int Open( vlc_object_t *p_this ) { intf_thread_t *p_intf = (intf_thread_t *)p_this; /* Allocate instance and initialize some members */ - p_intf->p_sys = malloc( sizeof( intf_sys_t ) ); - if( p_intf->p_sys == NULL ) - { - return( 1 ); - }; + intf_sys_t *p_sys = p_intf->p_sys = malloc( sizeof( intf_sys_t ) ); + if( p_sys == NULL ) + return VLC_ENOMEM; + + vlc_mutex_init( &p_sys->lock ); + p_sys->p_vout = NULL; + p_sys->b_button_pressed = false; + p_sys->b_triggered = false; + p_sys->i_threshold = config_GetInt( p_intf, "showintf-threshold" ); p_intf->pf_run = RunIntf; - return( 0 ); + return VLC_SUCCESS; } /***************************************************************************** * Close: destroy interface *****************************************************************************/ -void E_(Close)( vlc_object_t *p_this ) +void Close( vlc_object_t *p_this ) { intf_thread_t *p_intf = (intf_thread_t *)p_this; /* Destroy structure */ + vlc_mutex_destroy( &p_intf->p_sys->lock ); free( p_intf->p_sys ); } @@ -110,33 +116,25 @@ void E_(Close)( vlc_object_t *p_this ) *****************************************************************************/ static void RunIntf( intf_thread_t *p_intf ) { - p_intf->p_sys->p_vout = NULL; - - if( InitThread( p_intf ) < 0 ) - { - msg_Err( p_intf, "cannot initialize interface" ); - return; - } + int canc = vlc_savecancel( ); /* Main loop */ - while( !intf_ShouldDie( p_intf ) ) + while( vlc_object_alive( p_intf ) ) { - vlc_mutex_lock( &p_intf->change_lock ); + vlc_mutex_lock( &p_intf->p_sys->lock ); /* Notify the interfaces */ if( p_intf->p_sys->b_triggered ) { - playlist_t *p_playlist = pl_Yield( p_intf ); - var_SetBool( p_playlist, "intf-show", true ); - vlc_object_release( p_playlist ); + var_SetBool( p_intf->p_libvlc, "intf-show", true ); p_intf->p_sys->b_triggered = false; } - vlc_mutex_unlock( &p_intf->change_lock ); + vlc_mutex_unlock( &p_intf->p_sys->lock ); /* Take care of the video output */ - if( p_intf->p_sys->p_vout && p_intf->p_sys->p_vout->b_die ) + if( p_intf->p_sys->p_vout && !vlc_object_alive (p_intf->p_sys->p_vout) ) { var_DelCallback( p_intf->p_sys->p_vout, "mouse-moved", MouseEvent, p_intf ); @@ -171,30 +169,7 @@ static void RunIntf( intf_thread_t *p_intf ) MouseEvent, p_intf ); vlc_object_release( p_intf->p_sys->p_vout ); } -} - -/***************************************************************************** - * InitThread: - *****************************************************************************/ -static int InitThread( intf_thread_t * p_intf ) -{ - if( !intf_ShouldDie( p_intf ) ) - { - vlc_mutex_lock( &p_intf->change_lock ); - - p_intf->p_sys->b_triggered = false; - p_intf->p_sys->b_button_pressed = false; - p_intf->p_sys->i_threshold = - config_GetInt( p_intf, "showintf-threshold" ); - - vlc_mutex_unlock( &p_intf->change_lock ); - - return 0; - } - else - { - return -1; - } + vlc_restorecancel( canc ); } /***************************************************************************** @@ -204,7 +179,6 @@ static int MouseEvent( vlc_object_t *p_this, char const *psz_var, vlc_value_t oldval, vlc_value_t newval, void *p_data ) { VLC_UNUSED(p_this); VLC_UNUSED(oldval); VLC_UNUSED(newval); - vlc_value_t val; int i_mouse_x, i_mouse_y; intf_thread_t *p_intf = (intf_thread_t *)p_data; @@ -214,17 +188,14 @@ static int MouseEvent( vlc_object_t *p_this, char const *psz_var, return VLC_SUCCESS; /* Nothing to do when not in fullscreen mode */ - var_Get( p_intf->p_sys->p_vout, "fullscreen", &val ); - if( !val.i_int ) + if( !var_GetBool( p_intf->p_sys->p_vout, "fullscreen" ) ) return VLC_SUCCESS; - vlc_mutex_lock( &p_intf->change_lock ); + vlc_mutex_lock( &p_intf->p_sys->lock ); if( !strcmp( psz_var, "mouse-moved" ) && !p_intf->p_sys->b_button_pressed ) { - var_Get( p_intf->p_sys->p_vout, "mouse-x", &val ); - i_mouse_x = val.i_int; - var_Get( p_intf->p_sys->p_vout, "mouse-y", &val ); - i_mouse_y = val.i_int; + i_mouse_x = var_GetInteger( p_intf->p_sys->p_vout, "mouse-x" ); + i_mouse_y = var_GetInteger( p_intf->p_sys->p_vout, "mouse-y" ); /* Very basic test, we even ignore the x value :) */ if ( i_mouse_y < p_intf->p_sys->i_threshold ) @@ -247,7 +218,7 @@ static int MouseEvent( vlc_object_t *p_this, char const *psz_var, p_intf->p_sys->b_button_pressed = false; } - vlc_mutex_unlock( &p_intf->change_lock ); + vlc_mutex_unlock( &p_intf->p_sys->lock ); return VLC_SUCCESS; }