[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