X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fcontrol%2Fhotkeys.c;h=83428d09ae3b9d04096cfa8ec8c02ffe4939c09c;hb=015ae8d010ef34de4876b17d0eb323534f1510be;hp=f3a25c88ca3a9e2c91222f3753b3126c805e49f7;hpb=81c5ac29fa2e80426c1b1dfcc941a1aabe8bc808;p=vlc diff --git a/modules/control/hotkeys.c b/modules/control/hotkeys.c index f3a25c88ca..83428d09ae 100644 --- a/modules/control/hotkeys.c +++ b/modules/control/hotkeys.c @@ -26,6 +26,10 @@ * Preamble *****************************************************************************/ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + #include #include #include @@ -154,7 +158,7 @@ static void Run( intf_thread_t *p_intf ) var_Set( p_intf->p_libvlc, p_hotkeys[i].psz_action, val ); } - while( !intf_ShouldDie( p_intf ) ) + for( vlc_bool_t b_quit = VLC_FALSE ; !b_quit; ) { int i_key, i_action; int i_times = 0; @@ -204,11 +208,8 @@ static void Run( intf_thread_t *p_intf ) if( !i_action ) { - vlc_mutex_lock( &p_intf->object_lock ); - vlc_cond_wait( &p_intf->object_wait, &p_intf->object_lock ); - vlc_mutex_unlock( &p_intf->object_lock ); + b_quit = vlc_object_lock_and_wait( p_intf ); /* No key pressed, sleep a bit more */ -// msleep( INTF_IDLE_SLEEP ); continue; } @@ -235,7 +236,10 @@ static void Run( intf_thread_t *p_intf ) if( i_action == ACTIONID_QUIT ) { + if( p_playlist ) + playlist_Stop( p_playlist ); vlc_object_kill( p_intf->p_libvlc ); + vlc_object_kill( p_intf ); ClearChannels( p_intf, p_vout ); vout_OSDMessage( p_intf, DEFAULT_CHAN, _( "Quit" ) ); if( p_vout ) @@ -348,6 +352,24 @@ static void Run( intf_thread_t *p_intf ) val.b_bool = !val.b_bool; var_Set( p_playlist, "random", val ); } + else if( i_action == ACTIONID_ZOOM_QUARTER || + i_action == ACTIONID_ZOOM_HALF || + i_action == ACTIONID_ZOOM_ORIGINAL || + i_action == ACTIONID_ZOOM_DOUBLE ) + { + if( p_vout ) + { + if( i_action == ACTIONID_ZOOM_QUARTER ) + val.f_float = 0.25; + if( i_action == ACTIONID_ZOOM_HALF ) + val.f_float = 0.5; + if( i_action == ACTIONID_ZOOM_ORIGINAL ) + val.f_float = 1; + if( i_action == ACTIONID_ZOOM_DOUBLE ) + val.f_float = 2; + var_Set( p_vout, "zoom", val ); + } + } else if( i_action == ACTIONID_PLAY_PAUSE ) { val.i_int = PLAYING_S; @@ -482,6 +504,54 @@ static void Run( intf_thread_t *p_intf ) _("Audio track: %s"), list2.p_list->p_values[i].psz_string ); } + else if( i_action == ACTIONID_AUDIODEVICE_CYCLE && p_vout) + { + vlc_value_t val, list, list2; + int i_count, i; + aout_instance_t *p_aout = vlc_object_find( p_intf, VLC_OBJECT_AOUT, FIND_ANYWHERE ); + var_Get( p_aout, "audio-device", &val ); + var_Change( p_aout, "audio-device", VLC_VAR_GETCHOICES,&list, &list2 ); + i_count = list.p_list->i_count; + if( i_count <= 1 ) + { + continue; + } + + for( i = 0; i < i_count; i++ ) + { + if( val.i_int == list.p_list->p_values[i].i_int ) + { + break; + } + } + if( i == i_count ) + { + msg_Warn( p_aout, + "invalid current audio device, selecting 0" ); + var_Set( p_aout, "audio-device", + list.p_list->p_values[0] ); + i = 0; + + } + else if( i == i_count -1 ) + { + var_Set( p_aout, "audio-device", + list.p_list->p_values[0] ); + i = 0; + + } + else + { + var_Set( p_aout, "audio-device", + list.p_list->p_values[i+1] ); + i++; + } + vout_OSDMessage( VLC_OBJECT(p_input), + DEFAULT_CHAN, + _("Audio Device: %s"), + list2.p_list->p_values[i].psz_string); + vlc_object_release( p_aout ); + } else if( i_action == ACTIONID_SUBTITLE_TRACK ) { vlc_value_t val, list, list2; @@ -787,6 +857,7 @@ static void Run( intf_thread_t *p_intf ) { osd_MenuActivate( VLC_OBJECT(p_intf) ); } + } if( p_vout ) vlc_object_release( p_vout ); @@ -824,6 +895,7 @@ static int GetKey( intf_thread_t *p_intf) static int KeyEvent( vlc_object_t *p_this, char const *psz_var, vlc_value_t oldval, vlc_value_t newval, void *p_data ) { + VLC_UNUSED(psz_var); VLC_UNUSED(oldval); intf_thread_t *p_intf = (intf_thread_t *)p_data; if ( !newval.i_int ) { @@ -853,6 +925,7 @@ static int KeyEvent( vlc_object_t *p_this, char const *psz_var, static int ActionKeyCB( vlc_object_t *p_this, char const *psz_var, vlc_value_t oldval, vlc_value_t newval, void *p_data ) { + VLC_UNUSED(oldval); VLC_UNUSED(p_data); libvlc_int_t *p_libvlc = (libvlc_int_t *)p_this; struct hotkey *p_hotkeys = p_libvlc->p_hotkeys; mtime_t i_date; @@ -890,12 +963,16 @@ static void PlayBookmark( intf_thread_t *p_intf, int i_num ) char *psz_bookmark = strdup( val.psz_string ); PL_LOCK; FOREACH_ARRAY( playlist_item_t *p_item, p_playlist->items ) - if( !strcmp( psz_bookmark, p_item->p_input->psz_uri ) ) + char *psz_uri = input_item_GetURI( p_item->p_input ); + if( !strcmp( psz_bookmark, psz_uri ) ) { + free( psz_uri ); playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, VLC_TRUE, NULL, p_item ); break; } + else + free( psz_uri ); FOREACH_END(); PL_UNLOCK; vlc_object_release( p_playlist ); @@ -910,10 +987,10 @@ static void SetBookmark( intf_thread_t *p_intf, int i_num ) VLC_VAR_STRING|VLC_VAR_DOINHERIT ); if( p_playlist->status.p_item ) { - config_PutPsz( p_intf, psz_bookmark_name, - p_playlist->status.p_item->p_input->psz_uri); - msg_Info( p_intf, "setting playlist bookmark %i to %s", i_num, - p_playlist->status.p_item->p_input->psz_uri); + char *psz_uri = input_item_GetURI( p_playlist->status.p_item->p_input ); + config_PutPsz( p_intf, psz_bookmark_name, psz_uri); + msg_Info( p_intf, "setting playlist bookmark %i to %s", i_num, psz_uri); + free( psz_uri ); config_SaveConfigFile( p_intf, "hotkeys" ); } pl_Release( p_intf );