X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fcontrol%2Fgestures.c;h=3bb38a5f3809a68745d30e29e7f6d8e88c6465c6;hb=3439c052ecb9de8319e6ff0d3036fadc37d81b72;hp=9d7c24c27d6d50924f609b24ab9f3db637986796;hpb=449fd28aaf007c6411251dae9d0dbfdc65b135d1;p=vlc diff --git a/modules/control/gestures.c b/modules/control/gestures.c index 9d7c24c27d..3bb38a5f38 100644 --- a/modules/control/gestures.c +++ b/modules/control/gestures.c @@ -29,7 +29,8 @@ # include "config.h" #endif -#include +#include +#include #include #include #include @@ -65,8 +66,8 @@ struct intf_sys_t #define NONE 0 #define GESTURE( a, b, c, d ) (a | ( b << 4 ) | ( c << 8 ) | ( d << 12 )) -int E_(Open) ( vlc_object_t * ); -void E_(Close) ( vlc_object_t * ); +int Open ( vlc_object_t * ); +void Close ( vlc_object_t * ); static int InitThread ( intf_thread_t *p_intf ); static void EndThread ( intf_thread_t *p_intf ); static int MouseEvent ( vlc_object_t *, char const *, @@ -86,29 +87,29 @@ static void RunIntf ( intf_thread_t *p_intf ); #define BUTTON_LONGTEXT N_( \ "Trigger button for mouse gestures." ) -static const char *button_list[] = { "left", "middle", "right" }; -static const char *button_list_text[] = +static const char *const button_list[] = { "left", "middle", "right" }; +static const char *const button_list_text[] = { N_("Left"), N_("Middle"), N_("Right") }; -vlc_module_begin(); - set_shortname( _("Gestures")); - set_category( CAT_INTERFACE ); - set_subcategory( SUBCAT_INTERFACE_CONTROL ); +vlc_module_begin () + set_shortname( N_("Gestures")) + set_category( CAT_INTERFACE ) + set_subcategory( SUBCAT_INTERFACE_CONTROL ) add_integer( "gestures-threshold", 30, NULL, - THRESHOLD_TEXT, THRESHOLD_LONGTEXT, true ); + THRESHOLD_TEXT, THRESHOLD_LONGTEXT, true ) add_string( "gestures-button", "right", NULL, - BUTTON_TEXT, BUTTON_LONGTEXT, false ); - change_string_list( button_list, button_list_text, 0 ); - set_description( _("Mouse gestures control interface") ); + BUTTON_TEXT, BUTTON_LONGTEXT, false ) + change_string_list( button_list, button_list_text, 0 ) + set_description( N_("Mouse gestures control interface") ) - set_capability( "interface", 0 ); - set_callbacks( E_(Open), E_(Close) ); -vlc_module_end(); + set_capability( "interface", 0 ) + set_callbacks( Open, Close ) +vlc_module_end () /***************************************************************************** * OpenIntf: 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; @@ -138,21 +139,13 @@ static int gesture( int i_pattern, int i_num ) *****************************************************************************/ static input_thread_t * input_from_playlist ( playlist_t *p_playlist ) { - input_thread_t * p_input; - - PL_LOCK; - p_input = p_playlist->p_input; - if( p_input ) - vlc_object_yield( p_input ); - PL_UNLOCK; - - return p_input; + return playlist_CurrentInput( p_playlist ); } /***************************************************************************** * CloseIntf: destroy dummy 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; @@ -167,6 +160,7 @@ void E_(Close) ( vlc_object_t *p_this ) static void RunIntf( intf_thread_t *p_intf ) { playlist_t * p_playlist = NULL; + int canc = vlc_savecancel(); vlc_mutex_lock( &p_intf->change_lock ); p_intf->p_sys->p_vout = NULL; @@ -180,7 +174,7 @@ static void RunIntf( intf_thread_t *p_intf ) msg_Dbg( p_intf, "interface thread initialized" ); /* Main loop */ - while( !intf_ShouldDie( p_intf ) ) + while( vlc_object_alive( p_intf ) ) { vlc_mutex_lock( &p_intf->change_lock ); @@ -225,11 +219,7 @@ static void RunIntf( intf_thread_t *p_intf ) case GESTURE(RIGHT,LEFT,NONE,NONE): { input_thread_t * p_input; - p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, - FIND_ANYWHERE ); - - if( !p_playlist ) - break; + p_playlist = pl_Hold( p_intf ); p_input = input_from_playlist( p_playlist ); vlc_object_release( p_playlist ); @@ -256,23 +246,13 @@ static void RunIntf( intf_thread_t *p_intf ) } break; case GESTURE(LEFT,DOWN,NONE,NONE): - p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, - FIND_ANYWHERE ); - if( p_playlist == NULL ) - { - break; - } + p_playlist = pl_Hold( p_intf ); playlist_Prev( p_playlist ); vlc_object_release( p_playlist ); break; case GESTURE(RIGHT,DOWN,NONE,NONE): - p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, - FIND_ANYWHERE ); - if( p_playlist == NULL ) - { - break; - } + p_playlist = pl_Hold( p_intf ); playlist_Next( p_playlist ); vlc_object_release( p_playlist ); @@ -305,11 +285,7 @@ static void RunIntf( intf_thread_t *p_intf ) vlc_value_t val, list, list2; int i_count, i; - p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, - FIND_ANYWHERE ); - - if( !p_playlist ) - break; + p_playlist = pl_Hold( p_intf ); p_input = input_from_playlist( p_playlist ); @@ -364,11 +340,7 @@ static void RunIntf( intf_thread_t *p_intf ) vlc_value_t val, list, list2; int i_count, i; - p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, - FIND_ANYWHERE ); - - if( !p_playlist ) - break; + p_playlist = pl_Hold( p_intf ); p_input = input_from_playlist( p_playlist ); vlc_object_release( p_playlist ); @@ -424,7 +396,7 @@ static void RunIntf( intf_thread_t *p_intf ) break; case GESTURE(DOWN,LEFT,NONE,NONE): /* FIXME: Should close the vout!"*/ - vlc_object_kill( p_intf->p_libvlc ); + libvlc_Quit( p_intf->p_libvlc ); break; case GESTURE(DOWN,LEFT,UP,RIGHT): case GESTURE(UP,RIGHT,DOWN,LEFT): @@ -441,7 +413,7 @@ static void RunIntf( intf_thread_t *p_intf ) /* * 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 ); @@ -471,6 +443,7 @@ static void RunIntf( intf_thread_t *p_intf ) } EndThread( p_intf ); + vlc_restorecancel( canc ); } /***************************************************************************** @@ -480,7 +453,7 @@ static int InitThread( intf_thread_t * p_intf ) { char *psz_button; /* we might need some locking here */ - if( !intf_ShouldDie( p_intf ) ) + if( vlc_object_alive( p_intf ) ) { /* p_intf->change_lock locking strategy: * - Every access to p_intf->p_sys are locked threw p_intf->change_lock @@ -506,6 +479,7 @@ static int InitThread( intf_thread_t * p_intf ) { p_intf->p_sys->i_button_mask = 4; } + free( psz_button ); p_intf->p_sys->i_pattern = 0; p_intf->p_sys->i_num_gestures = 0;