|
|
|
@ -46,12 +46,7 @@ ActionsManager::ActionsManager( intf_thread_t * _p_i ) |
|
|
|
ActionsManager::~ActionsManager() |
|
|
|
{ |
|
|
|
if ( p_rd != NULL ) |
|
|
|
{ |
|
|
|
vlc_event_manager_t *em = vlc_rd_event_manager( p_rd ); |
|
|
|
vlc_event_detach( em, vlc_RendererDiscoveryItemAdded, renderer_event_received, p_intf); |
|
|
|
vlc_event_detach( em, vlc_RendererDiscoveryItemRemoved, renderer_event_received, p_intf); |
|
|
|
vlc_rd_release( p_rd ); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void ActionsManager::doAction( int id_action ) |
|
|
|
@ -238,52 +233,54 @@ bool ActionsManager::isItemSout( QVariant & m_obj, const char *psz_sout, bool as |
|
|
|
return QString::compare( hash["sout"].toString(), renderer, Qt::CaseInsensitive) == 0; |
|
|
|
} |
|
|
|
|
|
|
|
void ActionsManager::renderer_event_received( const vlc_event_t * p_event, void * user_data ) |
|
|
|
void ActionsManager::renderer_event_item_added( |
|
|
|
vlc_renderer_discovery_t *rd, vlc_renderer_item_t *p_item ) |
|
|
|
{ |
|
|
|
intf_thread_t *p_intf = reinterpret_cast<intf_thread_t*>(user_data); |
|
|
|
intf_thread_t *p_intf = reinterpret_cast<intf_thread_t*>(rd->owner.sys); |
|
|
|
QAction *firstSeparator = NULL; |
|
|
|
|
|
|
|
if ( p_event->type == vlc_RendererDiscoveryItemAdded ) |
|
|
|
foreach (QAction* action, VLCMenuBar::rendererMenu->actions()) |
|
|
|
{ |
|
|
|
vlc_renderer_item_t *p_item = p_event->u.renderer_discovery_item_added.p_new_item; |
|
|
|
|
|
|
|
QAction *firstSeparator = NULL; |
|
|
|
foreach (QAction* action, VLCMenuBar::rendererMenu->actions()) |
|
|
|
if (action->isSeparator()) |
|
|
|
{ |
|
|
|
if (action->isSeparator()) |
|
|
|
{ |
|
|
|
firstSeparator = action; |
|
|
|
break; |
|
|
|
} |
|
|
|
QVariant v = action->data(); |
|
|
|
if ( isItemSout( v, vlc_renderer_item_sout( p_item ), false ) ) |
|
|
|
return; /* we already have this item */ |
|
|
|
firstSeparator = action; |
|
|
|
break; |
|
|
|
} |
|
|
|
QVariant v = action->data(); |
|
|
|
if ( isItemSout( v, vlc_renderer_item_sout( p_item ), false ) ) |
|
|
|
return; /* we already have this item */ |
|
|
|
} |
|
|
|
|
|
|
|
QHash<QString,QVariant> itemData; |
|
|
|
itemData.insert("sout", vlc_renderer_item_sout( p_item )); |
|
|
|
itemData.insert("filter", vlc_renderer_item_demux_filter( p_item )); |
|
|
|
QVariant data(itemData); |
|
|
|
QHash<QString,QVariant> itemData; |
|
|
|
itemData.insert("sout", vlc_renderer_item_sout( p_item )); |
|
|
|
itemData.insert("filter", vlc_renderer_item_demux_filter( p_item )); |
|
|
|
QVariant data(itemData); |
|
|
|
|
|
|
|
QAction *action = new QAction( vlc_renderer_item_flags(p_item) & VLC_RENDERER_CAN_VIDEO ? QIcon( ":/sidebar/movie" ) : QIcon( ":/sidebar/music" ), |
|
|
|
vlc_renderer_item_name(p_item), VLCMenuBar::rendererMenu ); |
|
|
|
action->setCheckable(true); |
|
|
|
action->setData(data); |
|
|
|
if (firstSeparator != NULL) |
|
|
|
{ |
|
|
|
VLCMenuBar::rendererMenu->insertAction( firstSeparator, action ); |
|
|
|
VLCMenuBar::rendererGroup->addAction(action); |
|
|
|
} |
|
|
|
QAction *action = new QAction( vlc_renderer_item_flags(p_item) & VLC_RENDERER_CAN_VIDEO ? QIcon( ":/sidebar/movie" ) : QIcon( ":/sidebar/music" ), |
|
|
|
vlc_renderer_item_name(p_item), VLCMenuBar::rendererMenu ); |
|
|
|
action->setCheckable(true); |
|
|
|
action->setData(data); |
|
|
|
if (firstSeparator != NULL) |
|
|
|
{ |
|
|
|
VLCMenuBar::rendererMenu->insertAction( firstSeparator, action ); |
|
|
|
VLCMenuBar::rendererGroup->addAction(action); |
|
|
|
} |
|
|
|
|
|
|
|
char *psz_renderer = var_InheritString( THEPL, "sout" ); |
|
|
|
if ( psz_renderer != NULL ) |
|
|
|
{ |
|
|
|
if ( isItemSout( data, psz_renderer, true ) ) |
|
|
|
action->setChecked( true ); |
|
|
|
free( psz_renderer ); |
|
|
|
} |
|
|
|
char *psz_renderer = var_InheritString( THEPL, "sout" ); |
|
|
|
if ( psz_renderer != NULL ) |
|
|
|
{ |
|
|
|
if ( isItemSout( data, psz_renderer, true ) ) |
|
|
|
action->setChecked( true ); |
|
|
|
free( psz_renderer ); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void ActionsManager::renderer_event_item_removed( |
|
|
|
vlc_renderer_discovery_t *rd, vlc_renderer_item_t *p_item ) |
|
|
|
{ |
|
|
|
(void) rd; (void) p_item; |
|
|
|
} |
|
|
|
|
|
|
|
void ActionsManager::ScanRendererAction(bool checked) |
|
|
|
{ |
|
|
|
if (checked == (p_rd != NULL)) |
|
|
|
@ -320,6 +317,13 @@ void ActionsManager::ScanRendererAction(bool checked) |
|
|
|
if( vlc_rd_get_names( THEPL, &ppsz_names, &ppsz_longnames ) != VLC_SUCCESS ) |
|
|
|
return; |
|
|
|
|
|
|
|
struct vlc_renderer_discovery_owner owner = |
|
|
|
{ |
|
|
|
p_intf, |
|
|
|
renderer_event_item_added, |
|
|
|
renderer_event_item_removed, |
|
|
|
}; |
|
|
|
|
|
|
|
char **ppsz_name = ppsz_names, **ppsz_longname = ppsz_longnames; |
|
|
|
for( ; *ppsz_name; ppsz_name++, ppsz_longname++ ) |
|
|
|
{ |
|
|
|
@ -327,7 +331,7 @@ void ActionsManager::ScanRendererAction(bool checked) |
|
|
|
msg_Dbg( p_intf, "starting renderer discovery service %s", *ppsz_longname ); |
|
|
|
if ( p_rd == NULL ) |
|
|
|
{ |
|
|
|
p_rd = vlc_rd_new( VLC_OBJECT(p_intf), *ppsz_name ); |
|
|
|
p_rd = vlc_rd_new( VLC_OBJECT(p_intf), *ppsz_name, &owner ); |
|
|
|
if( !p_rd ) |
|
|
|
msg_Err( p_intf, "Could not start renderer discovery services" ); |
|
|
|
} |
|
|
|
@ -338,14 +342,8 @@ void ActionsManager::ScanRendererAction(bool checked) |
|
|
|
|
|
|
|
if ( p_rd != NULL ) |
|
|
|
{ |
|
|
|
vlc_event_manager_t *em = vlc_rd_event_manager( p_rd ); |
|
|
|
vlc_event_attach( em, vlc_RendererDiscoveryItemAdded, renderer_event_received, p_intf); |
|
|
|
vlc_event_attach( em, vlc_RendererDiscoveryItemRemoved, renderer_event_received, p_intf); |
|
|
|
|
|
|
|
if( vlc_rd_start( p_rd ) != VLC_SUCCESS ) |
|
|
|
{ |
|
|
|
vlc_event_detach( em, vlc_RendererDiscoveryItemAdded, renderer_event_received, p_intf); |
|
|
|
vlc_event_detach( em, vlc_RendererDiscoveryItemRemoved, renderer_event_received, p_intf); |
|
|
|
vlc_rd_release( p_rd ); |
|
|
|
p_rd = NULL; |
|
|
|
} |
|
|
|
@ -355,10 +353,6 @@ void ActionsManager::ScanRendererAction(bool checked) |
|
|
|
{ |
|
|
|
if ( p_rd != NULL ) |
|
|
|
{ |
|
|
|
vlc_event_manager_t *em = vlc_rd_event_manager( p_rd ); |
|
|
|
vlc_event_detach( em, vlc_RendererDiscoveryItemAdded, renderer_event_received, p_intf); |
|
|
|
vlc_event_detach( em, vlc_RendererDiscoveryItemRemoved, renderer_event_received, p_intf); |
|
|
|
|
|
|
|
vlc_rd_release( p_rd ); |
|
|
|
p_rd = NULL; |
|
|
|
} |
|
|
|
|