X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fqt4%2Fextensions_manager.cpp;h=35589c84c7cfd6d35d0cad42461e44d9ec7b28f7;hb=fbc31765a70cf56f1bf74a765e03dc3c7f81c358;hp=bc7911c45198e9c2be9b2bf59b2720a05c537183;hpb=f2596fab9b100bf4392550b9f6596b09e76e2ad3;p=vlc diff --git a/modules/gui/qt4/extensions_manager.cpp b/modules/gui/qt4/extensions_manager.cpp index bc7911c451..35589c84c7 100644 --- a/modules/gui/qt4/extensions_manager.cpp +++ b/modules/gui/qt4/extensions_manager.cpp @@ -47,8 +47,9 @@ ExtensionsManager::ExtensionsManager( intf_thread_t *_p_intf, QObject *parent ) 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(), statusChanged( int ), this, playingChanged( int ) ); + DCONNECT( THEMIM, inputChanged( input_thread_t* ), + this, inputChanged( input_thread_t* ) ); b_unloading = false; b_failed = false; } @@ -117,11 +118,10 @@ void ExtensionsManager::unloadExtensions() 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() @@ -151,7 +151,7 @@ void ExtensionsManager::menu( QMenu *current ) 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; @@ -170,12 +170,15 @@ void ExtensionsManager::menu( QMenu *current ) 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 { @@ -257,8 +260,9 @@ void ExtensionsManager::triggerMenu( int id ) 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; @@ -272,6 +276,24 @@ void ExtensionsManager::inputChanged( input_thread_t* p_input ) 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 ); }