#include "input_manager.hpp"
#include "dialogs/extensions.hpp"
+#include <vlc_modules.h>
#include "assert.h"
#include <QMenu>
menuMapper = new QSignalMapper( this );
CONNECT( menuMapper, mapped( int ), this, triggerMenu( int ) );
- CONNECT( THEMIM, inputChanged( input_thread_t* ),
- this, inputChanged( input_thread_t* ) );
+ CONNECT( THEMIM->getIM(), playingStatusChanged( int ), this, playingChanged( int ) );
+ DCONNECT( THEMIM, inputChanged( input_thread_t* ),
+ this, inputChanged( input_thread_t* ) );
+ CONNECT( THEMIM->getIM(), metaChanged( input_item_t* ),
+ this, metaChanged( input_item_t* ) );
b_unloading = false;
b_failed = false;
}
ExtensionsManager::~ExtensionsManager()
{
+ msg_Dbg( p_intf, "Killing extension dialog provider" );
+ ExtensionsDialogProvider::killInstance();
if( p_extensions_manager )
{
module_unneed( p_extensions_manager, p_extensions_manager->p_module );
emit extensionsUpdated();
return false;
}
- vlc_object_attach( p_extensions_manager, p_intf );
p_extensions_manager->p_module =
module_need( p_extensions_manager, "extension", NULL, false );
if( !p_extensions_manager )
return;
b_unloading = true;
+ ExtensionsDialogProvider::killInstance();
module_unneed( p_extensions_manager, p_extensions_manager->p_module );
vlc_object_release( p_extensions_manager );
p_extensions_manager = NULL;
- emit extensionsUpdated();
- ExtensionsDialogProvider::killInstance();
}
void ExtensionsManager::reloadExtensions()
if( b_Active && extension_HasMenu( p_extensions_manager, p_ext ) )
{
- QMenu *submenu = new QMenu( qfu( p_ext->psz_title ) );
+ QMenu *submenu = new QMenu( qfu( p_ext->psz_title ), current );
char **ppsz_titles = NULL;
uint16_t *pi_ids = NULL;
size_t i_num = 0;
menuMapper->setMapping( action,
MENU_MAP( pi_ids[i], i_ext ) );
CONNECT( action, triggered(), menuMapper, map() );
+ free( ppsz_titles[i] );
}
if( !i_num )
{
action = submenu->addAction( qtr( "Empty" ) );
action->setEnabled( false );
}
+ free( ppsz_titles );
+ free( pi_ids );
}
else
{
void ExtensionsManager::inputChanged( input_thread_t* p_input )
{
- if( p_input )
- vlc_object_hold( p_input );
+ //This is unlikely, but can happen if no extension modules can be loaded.
+ if ( p_extensions_manager == NULL )
+ return ;
vlc_mutex_lock( &p_extensions_manager->lock );
extension_t *p_ext;
FOREACH_END()
vlc_mutex_unlock( &p_extensions_manager->lock );
- if( p_input )
- vlc_object_release( p_input );
+}
+
+void ExtensionsManager::playingChanged( int state )
+{
+ //This is unlikely, but can happen if no extension modules can be loaded.
+ if ( p_extensions_manager == NULL )
+ return ;
+ vlc_mutex_lock( &p_extensions_manager->lock );
+
+ extension_t *p_ext;
+ FOREACH_ARRAY( p_ext, p_extensions_manager->extensions )
+ {
+ if( extension_IsActivated( p_extensions_manager, p_ext ) )
+ {
+ extension_PlayingChanged( p_extensions_manager, p_ext, state );
+ }
+ }
+ FOREACH_END()
+
+ vlc_mutex_unlock( &p_extensions_manager->lock );
+}
+
+void ExtensionsManager::metaChanged( input_item_t* )
+{
+ //This is unlikely, but can happen if no extension modules can be loaded.
+ if ( p_extensions_manager == NULL )
+ return ;
+ vlc_mutex_lock( &p_extensions_manager->lock );
+ extension_t *p_ext;
+ FOREACH_ARRAY( p_ext, p_extensions_manager->extensions )
+ {
+ if( extension_IsActivated( p_extensions_manager, p_ext ) )
+ {
+ extension_MetaChanged( p_extensions_manager, p_ext );
+ }
+ }
+ FOREACH_END()
+ vlc_mutex_unlock( &p_extensions_manager->lock );
}