* modules/gui/wxwindows/video.cpp, modules/video_output/x11/xcommon.c: in embedded mode, close the vout window if vlc is exiting.
vlc_mutex_lock( &lock );
if( p_vout )
{
- if( vout_Control( p_vout, VOUT_REPARENT ) != VLC_SUCCESS )
- vout_Control( p_vout, VOUT_CLOSE );
+ if( !p_intf->psz_switch_intf )
+ if( vout_Control( p_vout, VOUT_CLOSE ) != VLC_SUCCESS )
+ vout_Control( p_vout, VOUT_REPARENT );
+ else
+ if( vout_Control( p_vout, VOUT_REPARENT ) != VLC_SUCCESS )
+ vout_Control( p_vout, VOUT_CLOSE );
}
p_intf->pf_request_window = NULL;
vlc_mutex_unlock( &p_vout->p_sys->lock );
return VLC_SUCCESS;
+ case VOUT_CLOSE:
+ vlc_mutex_lock( &p_vout->p_sys->lock );
+ XUnmapWindow( p_vout->p_sys->p_display,
+ p_vout->p_sys->p_win->base_window );
+ vlc_mutex_unlock( &p_vout->p_sys->lock );
+ /* Fall through */
+
case VOUT_REPARENT:
vlc_mutex_lock( &p_vout->p_sys->lock );
XReparentWindow( p_vout->p_sys->p_display,
var_Get( p_vout->p_vlc, "drawable", &val );
if( val.i_int ) return (void *)val.i_int;
- /* Find the first interface which supports embedding */
+ /* Find if the main interface supports embedding */
p_list = vlc_list_find( p_vout, VLC_OBJECT_INTF, FIND_ANYWHERE );
if( !p_list ) return NULL;
for( i = 0; i < p_list->i_count; i++ )
{
p_intf = (intf_thread_t *)p_list->p_values[i].p_object;
- if( p_intf->pf_request_window ) break;
+ if( p_intf->b_block && p_intf->pf_request_window ) break;
p_intf = NULL;
}