Revision: 2614 http://geany.svn.sourceforge.net/geany/?rev=2614&view=rev Author: ntrel Date: 2008-05-26 07:17:41 -0700 (Mon, 26 May 2008)
Log Message: ----------- Move all symbol lookups except plugin_set_info() into plugin_init(). Add debug message for missing init() function in a plugin.
Modified Paths: -------------- trunk/ChangeLog trunk/src/plugins.c
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2008-05-25 19:40:56 UTC (rev 2613) +++ trunk/ChangeLog 2008-05-26 14:17:41 UTC (rev 2614) @@ -1,3 +1,10 @@ +2008-05-26 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com> + + * src/plugins.c: + Move all symbol lookups except plugin_set_info() into plugin_init(). + Add debug message for missing init() function in a plugin. + + 2008-05-23 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
* src/plugindata.h, src/plugins.c, doc/plugin-symbols.c,
Modified: trunk/src/plugins.c =================================================================== --- trunk/src/plugins.c 2008-05-25 19:40:56 UTC (rev 2613) +++ trunk/src/plugins.c 2008-05-26 14:17:41 UTC (rev 2614) @@ -431,19 +431,45 @@ PluginCallback *callbacks; PluginInfo **p_info;
- if (plugin->init) + /* set these symbols before init() is called */ + g_module_symbol(plugin->module, "plugin_info", (void *) &p_info); + if (p_info) + *p_info = &plugin->info; + g_module_symbol(module, "geany_data", (void *) &p_geany_data); + if (p_geany_data) + *p_geany_data = &geany_data; + g_module_symbol(module, "geany_functions", (void *) &p_geany_functions); + if (p_geany_functions) + *p_geany_functions = &geany_functions; + g_module_symbol(module, "plugin_fields", (void *) &plugin_fields); + if (plugin_fields) + *plugin_fields = &plugin->fields; + + /* start the plugin */ + g_module_symbol(module, "init", (void *) &plugin->init); + if (plugin->init != NULL) plugin->init(&geany_data); + else + geany_debug("Plugin '%s' has no init() function!", plugin->info.name);
+ /* store some function pointers for later use */ + g_module_symbol(module, "configure", (void *) &plugin->configure); + g_module_symbol(module, "cleanup", (void *) &plugin->cleanup); + if (plugin->init != NULL && plugin->cleanup == NULL) + { + if (app->debug_mode) + g_warning("Plugin '%s' has no cleanup() function - there may be memory leaks!", + plugin->info.name); + } + + /* now read any plugin-owned data that might have been set in init() */ + if (plugin->fields.flags & PLUGIN_IS_DOCUMENT_SENSITIVE) { gboolean enable = gtk_notebook_get_n_pages(GTK_NOTEBOOK(main_widgets.notebook)) ? TRUE : FALSE; gtk_widget_set_sensitive(plugin->fields.menu_item, enable); }
- g_module_symbol(plugin->module, "plugin_info", (void *) &p_info); - if (p_info) - *p_info = &plugin->info; - g_module_symbol(plugin->module, "plugin_callbacks", (void *) &callbacks); if (callbacks) add_callbacks(plugin, callbacks); @@ -453,6 +479,7 @@ if (plugin->key_group) add_kb_group(plugin);
+ /* remember which plugins are active */ active_plugin_list = g_list_append(active_plugin_list, plugin);
geany_debug("Loaded: %s (%s)", plugin->filename, @@ -546,26 +573,6 @@ plugin->filename = g_strdup(fname); plugin->module = module;
- g_module_symbol(module, "geany_data", (void *) &p_geany_data); - if (p_geany_data) - *p_geany_data = &geany_data; - g_module_symbol(module, "geany_functions", (void *) &p_geany_functions); - if (p_geany_functions) - *p_geany_functions = &geany_functions; - g_module_symbol(module, "plugin_fields", (void *) &plugin_fields); - if (plugin_fields) - *plugin_fields = &plugin->fields; - - g_module_symbol(module, "init", (void *) &plugin->init); - g_module_symbol(module, "configure", (void *) &plugin->configure); - g_module_symbol(module, "cleanup", (void *) &plugin->cleanup); - if (plugin->init != NULL && plugin->cleanup == NULL) - { - if (app->debug_mode) - g_warning("Plugin '%s' has no cleanup() function - there may be memory leaks!", - plugin->info.name); - } - if (init_plugin) plugin_init(plugin);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.