Added purple_plugin_disable() soc.2013.gobjectification.plugins

Thu, 01 Aug 2013 03:19:58 +0530

author
Ankit Vani <a@nevitus.org>
date
Thu, 01 Aug 2013 03:19:58 +0530
branch
soc.2013.gobjectification.plugins
changeset 36397
4ae45b445bb9
parent 36396
add1d5e2314c
child 36398
8a349ab2993c

Added purple_plugin_disable()

libpurple/plugins.c file | annotate | diff | comparison | revisions
libpurple/plugins.h file | annotate | diff | comparison | revisions
--- a/libpurple/plugins.c	Thu Aug 01 03:11:31 2013 +0530
+++ b/libpurple/plugins.c	Thu Aug 01 03:19:58 2013 +0530
@@ -52,7 +52,8 @@
 /**************************************************************************
  * Globals
  **************************************************************************/
-static GList *loaded_plugins = NULL;
+static GList *loaded_plugins     = NULL;
+static GList *plugins_to_disable = NULL;
 
 /**************************************************************************
  * Plugin API
@@ -105,7 +106,8 @@
 
 	purple_signals_disconnect_by_handle(plugin);
 
-	loaded_plugins = g_list_remove(loaded_plugins, plugin);
+	loaded_plugins     = g_list_remove(loaded_plugins, plugin);
+	plugins_to_disable = g_list_remove(plugins_to_disable, plugin);
 
 	purple_signal_emit(purple_plugins_get_handle(), "plugin-unload", plugin);
 
@@ -147,6 +149,15 @@
 	g_object_unref(plugin_info);
 }
 
+void
+purple_plugin_disable(GPluginPlugin *plugin)
+{
+	g_return_if_fail(plugin != NULL);
+
+	if (!g_list_find(plugins_to_disable, plugin))
+		plugins_to_disable = g_list_prepend(plugins_to_disable, plugin);
+}
+
 /**************************************************************************
  * GObject code for PurplePluginInfo
  **************************************************************************/
@@ -373,11 +384,13 @@
 
 	for (pl = purple_plugins_get_loaded(); pl != NULL; pl = pl->next) {
 		GPluginPlugin *plugin = GPLUGIN_PLUGIN(pl->data);
-		GPluginPluginInfo *plugin_info = gplugin_plugin_get_info(plugin);
+		if (!g_list_find(plugins_to_disable, plugin)) {
 
-		ids = g_list_append(ids, (gchar *)gplugin_plugin_info_get_id(plugin_info));
+			GPluginPluginInfo *plugin_info = gplugin_plugin_get_info(plugin);
+			ids = g_list_append(ids, (gchar *)gplugin_plugin_info_get_id(plugin_info));
 
-		g_object_unref(plugin_info);
+			g_object_unref(plugin_info);
+		}
 	}
 
 	purple_prefs_set_string_list(key, ids);
--- a/libpurple/plugins.h	Thu Aug 01 03:11:31 2013 +0530
+++ b/libpurple/plugins.h	Thu Aug 01 03:19:58 2013 +0530
@@ -134,6 +134,16 @@
 void purple_plugin_add_action(GPluginPlugin *plugin, const char* label,
                               PurplePluginActionCallback callback);
 
+/**
+ * Disable a plugin.
+ *
+ * This function adds the plugin to a list of plugins to "disable at the next
+ * startup" by excluding said plugins from the list of plugins to save.  The
+ * UI needs to call purple_plugins_save_loaded() after calling this for it
+ * to have any effect.
+ */
+void purple_plugin_disable(GPluginPlugin *plugin);
+
 /*@}*/
 
 /**************************************************************************/

mercurial