Thu, 01 Aug 2013 03:19:58 +0530
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); + /*@}*/ /**************************************************************************/