]> git.sesse.net Git - vlc/commitdiff
skins2: solve minor problem when opening skin dialog box
authorErwan Tulou <brezhoneg1@yahoo.fr>
Fri, 20 Mar 2009 14:21:01 +0000 (15:21 +0100)
committerJean-Baptiste Kempf <jb@videolan.org>
Wed, 25 Mar 2009 08:49:35 +0000 (09:49 +0100)
(could not be opened twice in a row)

Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
modules/gui/qt4/menus.cpp
modules/gui/skins2/src/theme_repository.cpp
modules/gui/skins2/src/theme_repository.hpp

index 51b12d9ec4f14fc504b0e1f20a87c6891ff06e72..d9231d9160b3e8420d8a461605f90dd8f2fd80d3 100644 (file)
@@ -956,15 +956,21 @@ void QVLCMenu::PopupMenu( intf_thread_t *p_intf, bool show )
         /* In skins interface, append some items */
         if( !mi )
         {
-            objects.clear(); varnames.clear();
 
             vlc_object_t *p_object = ( vlc_object_t* )
                 vlc_object_find_name( p_intf, "skins2", FIND_PARENT );
             if( p_object )
             {
+                objects.clear(); varnames.clear();
                 objects.push_back( p_object );
                 varnames.push_back( "intf-skins" );
                 Populate( p_intf, submenu, varnames, objects );
+                objects.clear(); varnames.clear();
+                objects.push_back( p_object );
+                varnames.push_back( "intf-skins-interactive" );
+                Populate( p_intf, submenu, varnames, objects );
+              
                 vlc_object_release( p_object );
             }
             else
index 8aef4e60f971598e1f80d67b8851dfe29a9babac..04fc44e8c200e9952d9f494df8dcfb7c40c92c4f 100644 (file)
@@ -35,8 +35,6 @@
 #endif
 
 
-const char *ThemeRepository::kOpenDialog = "{openSkin}";
-
 
 ThemeRepository *ThemeRepository::instance( intf_thread_t *pIntf )
 {
@@ -78,14 +76,19 @@ ThemeRepository::ThemeRepository( intf_thread_t *pIntf ): SkinObject( pIntf )
         parseDirectory( *it );
     }
 
-    // Add an entry for the "open skin" dialog
-    val.psz_string = (char*)kOpenDialog;
-    text.psz_string = _("Open skin...");
-    var_Change( getIntf(), "intf-skins", VLC_VAR_ADDCHOICE, &val,
-                &text );
-
     // Set the callback
     var_AddCallback( pIntf, "intf-skins", changeSkin, this );
+
+
+    // variable for opening a dialog box to change skins
+    var_Create( pIntf, "intf-skins-interactive", VLC_VAR_VOID |
+                VLC_VAR_ISCOMMAND );
+    text.psz_string = _("Open skin ...");
+    var_Change( pIntf, "intf-skins-interactive", VLC_VAR_SETTEXT, &text, NULL );
+
+    // Set the callback
+    var_AddCallback( pIntf, "intf-skins-interactive", changeSkin, this );
+
 }
 
 
@@ -147,19 +150,18 @@ void ThemeRepository::parseDirectory( const string &rDir_locale )
 
 
 
-int ThemeRepository::changeSkin( vlc_object_t *pIntf, char const *pCmd,
+int ThemeRepository::changeSkin( vlc_object_t *pIntf, char const *pVariable,
                                  vlc_value_t oldval, vlc_value_t newval,
                                  void *pData )
 {
     ThemeRepository *pThis = (ThemeRepository*)(pData);
 
-    // Special menu entry for the open skin dialog
-    if( !strcmp( newval.psz_string, kOpenDialog ) )
+    if( !strcmp( pVariable, "intf-skins-interactive" ) )
     {
         CmdDlgChangeSkin cmd( pThis->getIntf() );
         cmd.execute();
     }
-    else
+    else if( !strcmp( pVariable, "intf-skins" ) )
     {
         // Try to load the new skin
         CmdChangeSkin *pCmd = new CmdChangeSkin( pThis->getIntf(),
index 23f0d8d4cb77304f7c2891b91a7f43b5c021ab46..c374bb58f5475bb075009d70f7e04d9449f6c225 100644 (file)
@@ -44,14 +44,12 @@ class ThemeRepository: public SkinObject
         virtual ~ThemeRepository();
 
     private:
-        /// Identifier for the special menu entry
-        static const char *kOpenDialog;
 
-       /// Look for themes in a directory
+        /// Look for themes in a directory
         void parseDirectory( const string &rDir );
 
         /// Callback for menu item selection
-        static int changeSkin( vlc_object_t *pThis, char const *pCmd,
+        static int changeSkin( vlc_object_t *pThis, char const *pVariable,
                                vlc_value_t oldval, vlc_value_t newval,
                                void *pData );
 };