[Xfce4-commits] <parole:master> Make it possible to disable/enable plugins when running parole without plugins this will be just if needed to disable a plugin causing a crash or so.

Ali Abdallah noreply at xfce.org
Sun Nov 15 01:04:01 CET 2009


Updating branch refs/heads/master
         to eeab30d63eca6e1bd128154b675f7b98801e7144 (commit)
       from 26a1d454264eff1cf214a30108971eaacdb75dd4 (commit)

commit eeab30d63eca6e1bd128154b675f7b98801e7144
Author: Ali Abdallah <ali at ali-xfce.org>
Date:   Thu Nov 12 18:20:42 2009 +0100

    Make it possible to disable/enable plugins when running parole without plugins
    this will be just if needed to disable a plugin causing a crash or so.

 parole/main.c                   |   14 ++----
 parole/parole-plugin.c          |    2 +-
 parole/parole-plugins-manager.c |   79 ++++++++++++++++++++++++++++++++++++--
 parole/parole-plugins-manager.h |    2 +-
 4 files changed, 81 insertions(+), 16 deletions(-)

diff --git a/parole/main.c b/parole/main.c
index 01343cd..80ee5b7 100644
--- a/parole/main.c
+++ b/parole/main.c
@@ -177,13 +177,13 @@ int main (int argc, char **argv)
     gboolean raise_volume = FALSE;
     gboolean lower_volume = FALSE;
     gboolean mute = FALSE;
-    gboolean load_plugins = TRUE;
+    gboolean no_plugins = FALSE;
     gchar    *client_id = NULL;
     
     GOptionEntry option_entries[] = 
     {
 	{ "new-instance", 'i', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &new_instance, N_("Open a new instance"), NULL },
-	{ "no-plugins", 'n', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &load_plugins, N_("Do not load plugins"), NULL },
+	{ "no-plugins", 'n', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &no_plugins, N_("Do not load plugins"), NULL },
 	{ "play", 'p', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &play, N_("Play or pause if already playing"), NULL },
 	{ "stop", 's', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &stop, N_("Stop playing"), NULL },
 	{ "next-track", 'N', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &next_track, N_("Next track"), NULL },
@@ -308,19 +308,15 @@ int main (int argc, char **argv)
 	    g_error_free (error);
 	}
 
-	if ( load_plugins )
-	{
-	    plugins = parole_plugins_manager_new ();
-	    parole_plugins_manager_load_plugins (plugins);
-	}
+	plugins = parole_plugins_manager_get (!no_plugins);
+	parole_plugins_manager_load_plugins (plugins);
 	g_object_unref (builder);
 	
 	gdk_notify_startup_complete ();
 	gtk_main ();
 	
 	parole_dbus_release_name (PAROLE_DBUS_NAME);
-	if ( load_plugins)
-	    g_object_unref (plugins);
+	g_object_unref (plugins);
 	g_object_unref (session);
     }
 
diff --git a/parole/parole-plugin.c b/parole/parole-plugin.c
index b78cb2d..bd2fc6a 100644
--- a/parole/parole-plugin.c
+++ b/parole/parole-plugin.c
@@ -515,7 +515,7 @@ void parole_plugin_pack_widget (ParolePlugin *plugin, GtkWidget *widget, ParoleP
     
     g_return_if_fail (priv->packed == FALSE);
     
-    manager = parole_plugins_manager_new ();
+    manager = parole_plugins_manager_get (TRUE);
 
     parole_plugins_manager_pack (manager, plugin, widget, container);
 
diff --git a/parole/parole-plugins-manager.c b/parole/parole-plugins-manager.c
index c5b16ab..3b10375 100644
--- a/parole/parole-plugins-manager.c
+++ b/parole/parole-plugins-manager.c
@@ -68,7 +68,11 @@ void parole_plugins_manager_show_configure		(GtkButton *button,
 void parole_plugins_manager_show_about			(GtkButton *button,
 							 PrefData *pref);
 
-static void parole_plugins_manager_finalize   (GObject *object);
+static void parole_plugins_manager_finalize     (GObject *object);
+static void parole_plugins_manager_set_property (GObject *object,
+						 guint prop_id,
+						 const GValue *value,
+						 GParamSpec *pspec);
 
 #define PAROLE_PLUGINS_MANAGER_GET_PRIVATE(o) \
 (G_TYPE_INSTANCE_GET_PRIVATE ((o), PAROLE_TYPE_PLUGINS_MANAGER, ParolePluginsManagerPrivate))
@@ -79,6 +83,8 @@ struct ParolePluginsManagerPrivate
     GtkWidget *main_nt;
     
     GPtrArray *array;
+    
+    gboolean   load_plugins;
 };
 
 G_DEFINE_TYPE (ParolePluginsManager, parole_plugins_manager, G_TYPE_OBJECT)
@@ -90,6 +96,12 @@ enum
     COL_DATA
 };
 
+enum
+{
+    PROP_0,
+    PROP_LOAD_PLUGIN
+};
+
 void parole_plugins_manager_pref_response_cb		(GtkDialog *dialog,
 							 gint reponse_id,
 							 PrefData *pref)
@@ -195,7 +207,8 @@ parole_plugins_manager_cell_toggled_cb (GtkCellRendererToggle *cell_renderer,
     
     active ^= 1;
     
-    parole_module_set_active (module, active);
+    if ( pref->manager->priv->load_plugins )
+	parole_module_set_active (module, active);
     
     gtk_list_store_set (GTK_LIST_STORE (pref->store), &iter, 
 			COL_ACTIVE, active,
@@ -363,12 +376,64 @@ parole_plugins_manager_page_removed_cb (GtkContainer *container, GtkWidget *widg
     parole_plugins_manager_set_show_tabs (GTK_NOTEBOOK (container));
 }
 
+static void parole_plugins_manager_set_property (GObject *object,
+						 guint prop_id,
+						 const GValue *value,
+						 GParamSpec *pspec)
+{
+    ParolePluginsManager *manager;
+    
+    manager = PAROLE_PLUGINS_MANAGER (object);
+    
+    switch (prop_id)
+    {
+	case PROP_LOAD_PLUGIN:
+	    manager->priv->load_plugins = g_value_get_boolean (value);
+	    break;
+	default:
+           G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+           break;
+    }
+}
+
+static void parole_plugins_manager_get_property (GObject *object,
+						 guint prop_id,
+						 GValue *value,
+						 GParamSpec *pspec)
+{
+    ParolePluginsManager *manager;
+    
+    manager = PAROLE_PLUGINS_MANAGER (object);
+    
+    switch (prop_id)
+    {
+	case PROP_LOAD_PLUGIN:
+	    g_value_set_boolean (value, manager->priv->load_plugins);
+	    break;
+	default:
+           G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+           break;
+    }
+}
+
 static void
 parole_plugins_manager_class_init (ParolePluginsManagerClass *klass)
 {
     GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
     object_class->finalize = parole_plugins_manager_finalize;
+    
+    object_class->set_property = parole_plugins_manager_set_property;
+    object_class->get_property = parole_plugins_manager_get_property;
+    
+    
+    g_object_class_install_property (object_class,
+                                     PROP_LOAD_PLUGIN,
+                                     g_param_spec_boolean ("load-plugins",
+                                                           NULL, NULL,
+                                                           TRUE,
+                                                           G_PARAM_CONSTRUCT_ONLY|
+							   G_PARAM_READWRITE));
 
     g_type_class_add_private (klass, sizeof (ParolePluginsManagerPrivate));
 }
@@ -384,6 +449,8 @@ parole_plugins_manager_init (ParolePluginsManager *manager)
     
     builder = parole_builder_get_main_interface ();
     
+    manager->priv->load_plugins = TRUE;
+    
     manager->priv->list_nt = GTK_WIDGET (gtk_builder_get_object (builder, "notebook-playlist"));
     manager->priv->main_nt = GTK_WIDGET (gtk_builder_get_object (builder, "main-notebook"));
     
@@ -423,7 +490,7 @@ parole_plugins_manager_finalize (GObject *object)
 }
 
 ParolePluginsManager *
-parole_plugins_manager_new (void)
+parole_plugins_manager_get (gboolean load_plugins)
 {
     static gpointer parole_plugins_manager_object = NULL;
     
@@ -433,7 +500,9 @@ parole_plugins_manager_new (void)
     }
     else
     {
-	parole_plugins_manager_object = g_object_new (PAROLE_TYPE_PLUGINS_MANAGER, NULL);
+	parole_plugins_manager_object = g_object_new (PAROLE_TYPE_PLUGINS_MANAGER, 
+						      "load-plugins", load_plugins, 
+						      NULL);
 	g_object_add_weak_pointer (parole_plugins_manager_object, &parole_plugins_manager_object);
     }
     
@@ -480,7 +549,7 @@ parole_plugins_manager_load_plugins (ParolePluginsManager *manager)
 		
 		for ( i = 0; i < len; i++)
 		{
-		    if ( !g_strcmp0 (plugins_rc[i], path) )
+		    if ( !g_strcmp0 (plugins_rc[i], path) && manager->priv->load_plugins )
 		    {
 			parole_module_set_active (module, TRUE);
 			break;
diff --git a/parole/parole-plugins-manager.h b/parole/parole-plugins-manager.h
index a461837..130ba37 100644
--- a/parole/parole-plugins-manager.h
+++ b/parole/parole-plugins-manager.h
@@ -47,7 +47,7 @@ typedef struct
 
 GType        			    parole_plugins_manager_get_type       (void) G_GNUC_CONST;
 
-ParolePluginsManager               *parole_plugins_manager_new            (void);
+ParolePluginsManager               *parole_plugins_manager_get            (gboolean load_plugins);
 
 void				    parole_plugins_manager_load_plugins	  (ParolePluginsManager *manager);
 



More information about the Xfce4-commits mailing list