SF.net SVN: geany: [2614] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Mon May 26 14:17:42 UTC 2008


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.



More information about the Commits mailing list