- 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;
- if( p_dialog->i_flags & DIALOG_OK_CANCEL )
- p_dialog->i_return = DIALOG_CANCELLED;
-
- // 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 );
- }