X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Finterface%2Finteraction.c;h=1a991ce018ea170d205a67e1107d136f03d56f71;hb=cc3bd152f5d2166087b9e19b962e3ace06bd12ea;hp=395ecebf8a296cca63045f5eb0bdab164e10a3fe;hpb=7a57427bbc9487342e333ce2c63f237c55f4d66e;p=vlc diff --git a/src/interface/interaction.c b/src/interface/interaction.c index 395ecebf8a..1a991ce018 100644 --- a/src/interface/interaction.c +++ b/src/interface/interaction.c @@ -37,12 +37,9 @@ #include /* FILE */ #include /* strerror() */ -#include -#include - -#include "vlc_interaction.h" -#include "vlc_interface.h" -#include "vlc_playlist.h" +#include +#include +#include "interface.h" /***************************************************************************** * Local prototypes @@ -102,19 +99,13 @@ void intf_InteractionManage( playlist_t *p_playlist ) // Pretend we have hidden and destroyed it if( p_dialog->i_status == HIDDEN_DIALOG ) - { p_dialog->i_status = DESTROYED_DIALOG; - } else - { p_dialog->i_status = HIDING_DIALOG; - } } } else - { vlc_object_yield( p_interaction->p_intf ); - } for( i_index = 0 ; i_index < p_interaction->i_dialogs; i_index ++ ) { @@ -367,16 +358,19 @@ int __intf_UserLoginPassword( vlc_object_t *p_this, p_new->i_type = INTERACT_DIALOG_TWOWAY; p_new->psz_title = strdup( psz_title ); p_new->psz_description = strdup( psz_description ); + p_new->psz_default_button = strdup( _("Ok" ) ); + p_new->psz_alternate_button = strdup( _("Cancel" ) ); p_new->i_flags = DIALOG_LOGIN_PW_OK_CANCEL; i_ret = DialogSend( p_this, p_new ); - if( i_ret != DIALOG_CANCELLED ) + if( i_ret != DIALOG_CANCELLED && i_ret != VLC_EGENERIC ) { - assert( p_new->psz_returned[0] && p_new->psz_returned[1] ); - *ppsz_login = strdup( p_new->psz_returned[0] ); - *ppsz_password = strdup( p_new->psz_returned[1] ); + *ppsz_login = p_new->psz_returned[0]? + strdup( p_new->psz_returned[0] ) : NULL; + *ppsz_password = p_new->psz_returned[1]? + strdup( p_new->psz_returned[1] ) : NULL; } return i_ret; } @@ -395,6 +389,7 @@ int __intf_UserStringInput( vlc_object_t *p_this, { int i_ret; DIALOG_INIT( TWOWAY ); + p_new->i_type = INTERACT_DIALOG_TWOWAY; p_new->psz_title = strdup( psz_title ); p_new->psz_description = strdup( psz_description ); @@ -404,8 +399,8 @@ int __intf_UserStringInput( vlc_object_t *p_this, if( i_ret != DIALOG_CANCELLED ) { - assert( p_new->psz_returned[0] ); - *ppsz_usersString = strdup( p_new->psz_returned[0] ); + *ppsz_usersString = p_new->psz_returned[0]? + strdup( p_new->psz_returned[0] ) : NULL; } return i_ret; } @@ -442,20 +437,17 @@ void __intf_UserHide( vlc_object_t *p_this, int i_id ) /* Get the interaction object. Create it if needed */ static interaction_t * InteractionGet( vlc_object_t *p_this ) { - playlist_t *p_playlist; interaction_t *p_interaction; + playlist_t *p_playlist = pl_Yield( p_this ); - p_playlist = (playlist_t*) vlc_object_find( p_this, VLC_OBJECT_PLAYLIST, - FIND_ANYWHERE ); - if( !p_playlist ) - return NULL; - + PL_LOCK; if( p_playlist->p_interaction == NULL ) InteractionInit( p_playlist ); p_interaction = p_playlist->p_interaction; + PL_UNLOCK; - vlc_object_release( p_playlist ); + pl_Release( p_this ); return p_interaction; } @@ -473,10 +465,9 @@ static void InteractionInit( playlist_t *p_playlist ) p_interaction->i_dialogs = 0; p_interaction->pp_dialogs = NULL; p_interaction->p_intf = NULL; - p_interaction->i_last_id = DIALOG_LAST_PREDEFINED + 1; + p_interaction->i_last_id = 0; vlc_mutex_init( p_interaction , &p_interaction->object_lock ); - p_playlist->p_interaction = p_interaction; } @@ -524,11 +515,11 @@ static interaction_dialog_t *DialogGetById( interaction_t *p_interaction, /* Destroy a dialog */ static void DialogDestroy( interaction_dialog_t *p_dialog ) { - FREENULL( p_dialog->psz_title ); - FREENULL( p_dialog->psz_description ); - FREENULL( p_dialog->psz_default_button ); - FREENULL( p_dialog->psz_alternate_button ); - FREENULL( p_dialog->psz_other_button ); + free( p_dialog->psz_title ); + free( p_dialog->psz_description ); + free( p_dialog->psz_default_button ); + free( p_dialog->psz_alternate_button ); + free( p_dialog->psz_other_button ); free( p_dialog ); } @@ -574,6 +565,7 @@ static int DialogSend( vlc_object_t *p_this, interaction_dialog_t *p_dialog ) if( p_dialog->i_type == INTERACT_DIALOG_TWOWAY ) // Wait for answer { + playlist_Signal( pl_Get(p_this) ); while( p_dialog->i_status != ANSWERED_DIALOG && p_dialog->i_status != HIDING_DIALOG && p_dialog->i_status != HIDDEN_DIALOG && @@ -590,6 +582,7 @@ static int DialogSend( vlc_object_t *p_this, interaction_dialog_t *p_dialog ) } p_dialog->i_flags |= DIALOG_GOT_ANSWER; vlc_mutex_unlock( &p_interaction->object_lock ); + playlist_Signal( pl_Get(p_this) ); return p_dialog->i_return; } else @@ -597,6 +590,7 @@ static int DialogSend( vlc_object_t *p_this, interaction_dialog_t *p_dialog ) // Pretend we already retrieved the "answer" p_dialog->i_flags |= DIALOG_GOT_ANSWER; vlc_mutex_unlock( &p_interaction->object_lock ); + playlist_Signal( pl_Get(p_this) ); return VLC_SUCCESS; } }