]> git.sesse.net Git - vlc/blobdiff - modules/gui/qt4/extensions_manager.cpp
Qt4: do not create pref tooltip if there is no text
[vlc] / modules / gui / qt4 / extensions_manager.cpp
index 37888edaa37097c36df85f436c4439e75a1cd70c..98e3b8f9a70372fac83b2a130eb939f6934d0dcf 100644 (file)
@@ -25,6 +25,7 @@
 #include "input_manager.hpp"
 #include "dialogs/extensions.hpp"
 
+#include <vlc_modules.h>
 #include "assert.h"
 
 #include <QMenu>
@@ -47,8 +48,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 +119,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 +152,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 +171,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,6 +261,9 @@ void ExtensionsManager::triggerMenu( int id )
 
 void ExtensionsManager::inputChanged( input_thread_t* 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;
@@ -271,3 +278,23 @@ void ExtensionsManager::inputChanged( input_thread_t* p_input )
 
     vlc_mutex_unlock( &p_extensions_manager->lock );
 }
+
+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 );
+}