-void intf_InteractionManage( playlist_t *p_playlist )
-{
- vlc_value_t val;
- int i_index;
- interaction_t *p_interaction;
-
- p_interaction = p_playlist->p_interaction;
-
- // Nothing to do
- if( p_interaction->i_dialogs == 0 ) return;
-
- vlc_mutex_lock( &p_interaction->object_lock );
-
- intf_InteractionSearchInterface( p_interaction );
-
- if( !p_interaction->p_intf )
- {
- // We mark all dialogs as answered with their "default" answer
- for( i_index = 0 ; i_index < p_interaction->i_dialogs; i_index ++ )
- {
- interaction_dialog_t *p_dialog = p_interaction->pp_dialogs[i_index];
-
- // Give default answer
- p_dialog->i_return = DIALOG_DEFAULT;
-
- // 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 ++ )
- {
- interaction_dialog_t *p_dialog = p_interaction->pp_dialogs[i_index];
- switch( p_dialog->i_status )
- {
- case ANSWERED_DIALOG:
- // Ask interface to hide it
- p_dialog->i_action = INTERACT_HIDE;
- val.p_address = p_dialog;
- if( p_interaction->p_intf )
- var_Set( p_interaction->p_intf, "interaction", val );
- p_dialog->i_status = HIDING_DIALOG;
- break;
- case UPDATED_DIALOG:
- p_dialog->i_action = INTERACT_UPDATE;
- val.p_address = p_dialog;
- if( p_interaction->p_intf )
- var_Set( p_interaction->p_intf, "interaction", val );
- p_dialog->i_status = SENT_DIALOG;
- break;
- case HIDDEN_DIALOG:
- if( !(p_dialog->i_flags & DIALOG_GOT_ANSWER) ) break;
- if( !(p_dialog->i_flags & DIALOG_REUSABLE) )
- {
- p_dialog->i_action = INTERACT_DESTROY;
- val.p_address = p_dialog;
- if( p_interaction->p_intf )
- var_Set( p_interaction->p_intf, "interaction", val );
- }
- break;
- case DESTROYED_DIALOG:
- // Interface has now destroyed it, remove it
- REMOVE_ELEM( p_interaction->pp_dialogs, p_interaction->i_dialogs,
- i_index);
- i_index--;
- intf_InteractionDialogDestroy( p_dialog );
- break;
- case NEW_DIALOG:
- // This is truly a new dialog, send it.
- p_dialog->i_action = INTERACT_NEW;
- val.p_address = p_dialog;
- if( p_interaction->p_intf )
- var_Set( p_interaction->p_intf, "interaction", val );
- p_dialog->i_status = SENT_DIALOG;
- break;
- }
- }
-
- if( p_interaction->p_intf )
- {
- vlc_object_release( p_interaction->p_intf );
- }
-
- vlc_mutex_unlock( &p_playlist->p_interaction->object_lock );
-}
-
-
-#define INTERACT_INIT( new ) \
- new = (interaction_dialog_t*)malloc( \
- sizeof( interaction_dialog_t ) ); \
- new->psz_title = NULL; \
- new->psz_description = NULL; \
- new->psz_defaultButton = NULL; \
- new->psz_alternateButton = NULL; \
- new->psz_otherButton = NULL; \
- new->i_timeToGo = 0; \
- new->b_cancelled = VLC_FALSE; \
- new->p_private = NULL; \
- new->i_id = 0; \
- new->i_flags = 0; \
- new->i_status = NEW_DIALOG;
-
-#define INTERACT_FREE( new ) \
- if( new->psz_title ) free( new->psz_title ); \
- if( new->psz_description ) free( new->psz_description );
-
-/** Helper function to send an error message, both in a blocking and non-blocking way
- * \param p_this Parent vlc_object
- * \param b_blocking Is this dialog blocking or not?
- * \param psz_title Title for the dialog
- * \param psz_format The message to display
- * */
-void __intf_UserFatal( vlc_object_t *p_this,
- vlc_bool_t b_blocking,