Revision: 2619 http://geany.svn.sourceforge.net/geany/?rev=2619&view=rev Author: ntrel Date: 2008-05-27 08:10:08 -0700 (Tue, 27 May 2008)
Log Message: ----------- Make plugin_free() act like a destructor only, let pm_dialog_response() call a separate function to only free non-active plugins.
Modified Paths: -------------- trunk/ChangeLog trunk/src/plugins.c
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2008-05-27 14:47:38 UTC (rev 2618) +++ trunk/ChangeLog 2008-05-27 15:10:08 UTC (rev 2619) @@ -2,6 +2,10 @@
* src/plugins.c: Fail to load a plugin if it has no plugin_init() function. + * src/plugins.c: + Make plugin_free() act like a destructor only, let + pm_dialog_response() call a separate function to only free non-active + plugins.
2008-05-26 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
Modified: trunk/src/plugins.c =================================================================== --- trunk/src/plugins.c 2008-05-27 14:47:38 UTC (rev 2618) +++ trunk/src/plugins.c 2008-05-27 15:10:08 UTC (rev 2619) @@ -93,13 +93,6 @@ static void pm_show_dialog(GtkMenuItem *menuitem, gpointer user_data);
-enum -{ - PLUGIN_FREE_NON_ACTIVE, - PLUGIN_FREE_ALL -}; - - static DocumentFuncs doc_funcs = { &document_new_file, &document_get_cur_idx, @@ -651,15 +644,11 @@
static void -plugin_free(Plugin *plugin, gpointer data) +plugin_free(Plugin *plugin) { g_return_if_fail(plugin); g_return_if_fail(plugin->module);
- /* don't do anything when closing the plugin manager and it is an active plugin */ - if (GPOINTER_TO_INT(data) == PLUGIN_FREE_NON_ACTIVE && is_active_plugin(plugin)) - return; - plugin_unload(plugin);
if (plugin->module != NULL && ! g_module_close(plugin->module)) @@ -844,7 +833,7 @@ } if (active_plugin_list != NULL) { - g_list_foreach(active_plugin_list, (GFunc) plugin_free, GINT_TO_POINTER(PLUGIN_FREE_ALL)); + g_list_foreach(active_plugin_list, (GFunc) plugin_free, NULL); g_list_free(active_plugin_list); } g_strfreev(active_plugins_pref); @@ -965,7 +954,7 @@ /* unload plugin module */ if (!state) keybindings_write_to_file(); /* save shortcuts (only need this group, but it doesn't take long) */ - plugin_free(p, GINT_TO_POINTER(PLUGIN_FREE_ALL)); + plugin_free(p);
/* reload plugin module and initialize it if item is checked */ p = plugin_new(file_name, state, TRUE); @@ -1067,12 +1056,25 @@ }
+static void +free_non_active_plugin(gpointer data, gpointer user_data) +{ + Plugin *plugin = data; + + /* don't do anything when closing the plugin manager and it is an active plugin */ + if (is_active_plugin(plugin)) + return; + + plugin_free(plugin); +} + + static void pm_dialog_response(GtkDialog *dialog, gint response, gpointer user_data) { if (plugin_list != NULL) { /* remove all non-active plugins from the list */ - g_list_foreach(plugin_list, (GFunc) plugin_free, GINT_TO_POINTER(PLUGIN_FREE_NON_ACTIVE)); + g_list_foreach(plugin_list, free_non_active_plugin, NULL); g_list_free(plugin_list); plugin_list = NULL; }
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.