SF.net SVN: geany: [1749] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Fri Jul 27 10:37:22 UTC 2007


Revision: 1749
          http://geany.svn.sourceforge.net/geany/?rev=1749&view=rev
Author:   ntrel
Date:     2007-07-27 03:37:22 -0700 (Fri, 27 Jul 2007)

Log Message:
-----------
Add GeanyData* geany_data symbol for plugins so they don't have to
keep a copy of the init() argument.
Rename PluginData GeanyData (but use a typedef for backward
compatibility).
Update plugins to use newer API symbols.

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/plugins/classbuilder.c
    trunk/plugins/demoplugin.c
    trunk/plugins/htmlchars.c
    trunk/src/plugindata.h
    trunk/src/plugins.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2007-07-26 12:12:54 UTC (rev 1748)
+++ trunk/ChangeLog	2007-07-27 10:37:22 UTC (rev 1749)
@@ -1,3 +1,14 @@
+2007-07-27  Nick Treleaven  <nick.treleaven at btinternet.com>
+
+ * plugins/demoplugin.c, plugins/htmlchars.c, plugins/classbuilder.c,
+   src/plugindata.h, src/plugins.c:
+   Add GeanyData* geany_data symbol for plugins so they don't have to
+   keep a copy of the init() argument.
+   Rename PluginData GeanyData (but use a typedef for backward
+   compatibility).
+   Update plugins to use newer API symbols.
+
+
 2007-07-26  Nick Treleaven  <nick.treleaven at btinternet.com>
 
  * src/highlighting.c:

Modified: trunk/plugins/classbuilder.c
===================================================================
--- trunk/plugins/classbuilder.c	2007-07-26 12:12:54 UTC (rev 1748)
+++ trunk/plugins/classbuilder.c	2007-07-27 10:37:22 UTC (rev 1749)
@@ -32,26 +32,20 @@
 #include "document.h"
 
 
-static PluginData *plugin_data;
+PluginFields	*plugin_fields;
+GeanyData		*geany_data;
 
-#define doc_array	plugin_data->doc_array
+#define doc_array	geany_data->doc_array
 // can't use document as a macro because it's currently a typename
-#define documents	plugin_data->document
-#define scintilla	plugin_data->sci
-#define templates	plugin_data->templates
-#define utils		plugin_data->utils
-#define ui			plugin_data->ui
+#define documents	geany_data->document
+#define scintilla	geany_data->sci
+#define templates	geany_data->templates
+#define utils		geany_data->utils
+#define ui			geany_data->ui
 
 
-static struct
-{
-	GtkWidget *menu_item;
-}
-local_data;
+VERSION_CHECK(7)
 
-
-VERSION_CHECK(4)
-
 PLUGIN_INFO(_("Class Builder"), _("Creates source files for new class types."))
 
 
@@ -369,7 +363,7 @@
 	cc_dlg->class_type = type;
 
 	cc_dlg->dialog = gtk_dialog_new_with_buttons(_("Create Class"),
-			GTK_WINDOW(plugin_data->app->window),
+			GTK_WINDOW(geany_data->app->window),
 			GTK_DIALOG_MODAL,
 			GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
 			GTK_STOCK_OK, GTK_RESPONSE_OK,
@@ -783,7 +777,7 @@
 }
 
 
-void init(PluginData *data)
+void init(GeanyData *data)
 {
 	GtkWidget *menu_create_class1;
 	GtkWidget *image1861;
@@ -791,8 +785,6 @@
 	GtkWidget *menu_create_cpp_class;
 	GtkWidget *menu_create_gtk_class;
 
-	plugin_data = data;
-
 	menu_create_class1 = gtk_image_menu_item_new_with_mnemonic (_("Create Cla_ss"));
 	gtk_container_add (GTK_CONTAINER (data->tools_menu), menu_create_class1);
 
@@ -817,11 +809,11 @@
 
 	gtk_widget_show_all(menu_create_class1);
 
-	local_data.menu_item = menu_create_class1;
+	plugin_fields->menu_item = menu_create_class1;
 }
 
 
 void cleanup()
 {
-	gtk_widget_destroy(local_data.menu_item);
+	gtk_widget_destroy(plugin_fields->menu_item);
 }

Modified: trunk/plugins/demoplugin.c
===================================================================
--- trunk/plugins/demoplugin.c	2007-07-26 12:12:54 UTC (rev 1748)
+++ trunk/plugins/demoplugin.c	2007-07-27 10:37:22 UTC (rev 1749)
@@ -29,18 +29,13 @@
 #include "plugindata.h"
 
 
-static PluginData *plugin_data;
+PluginFields	*plugin_fields;
+GeanyData		*geany_data;
 
-static struct
-{
-	GtkWidget *menu_item;
-}
-local_data;
 
-
 /* Check that Geany supports plugin API version 2 or later, and check
  * for binary compatibility. */
-VERSION_CHECK(2)
+VERSION_CHECK(7)
 
 /* All plugins must set name and description */
 PLUGIN_INFO(_("Demo"), _("Example plugin."))
@@ -53,7 +48,7 @@
 	GtkWidget *dialog;
 
 	dialog = gtk_message_dialog_new(
-		GTK_WINDOW(plugin_data->app->window),
+		GTK_WINDOW(geany_data->app->window),
 		GTK_DIALOG_DESTROY_WITH_PARENT,
 		GTK_MESSAGE_INFO,
 		GTK_BUTTONS_OK,
@@ -67,20 +62,18 @@
 
 
 /* Called by Geany to initialize the plugin */
-void init(PluginData *data)
+void init(GeanyData *data)
 {
 	GtkWidget *demo_item;
 
-	plugin_data = data;	// keep a pointer to the main application fields & functions
-
 	// Add an item to the Tools menu
 	demo_item = gtk_menu_item_new_with_mnemonic(_("_Demo Plugin"));
 	gtk_widget_show(demo_item);
-	gtk_container_add(GTK_CONTAINER(plugin_data->tools_menu), demo_item);
+	gtk_container_add(GTK_CONTAINER(geany_data->tools_menu), demo_item);
 	g_signal_connect(G_OBJECT(demo_item), "activate", G_CALLBACK(item_activate), NULL);
 
 	// keep a pointer to the menu item, so we can remove it when the plugin is unloaded
-	local_data.menu_item = demo_item;
+	plugin_fields->menu_item = demo_item;
 }
 
 
@@ -89,5 +82,5 @@
 void cleanup()
 {
 	// remove the menu item added in init()
-	gtk_widget_destroy(local_data.menu_item);
+	gtk_widget_destroy(plugin_fields->menu_item);
 }

Modified: trunk/plugins/htmlchars.c
===================================================================
--- trunk/plugins/htmlchars.c	2007-07-26 12:12:54 UTC (rev 1748)
+++ trunk/plugins/htmlchars.c	2007-07-27 10:37:22 UTC (rev 1749)
@@ -30,18 +30,17 @@
 #include "document.h"
 
 
-PluginFields *plugin_fields;
+PluginFields	*plugin_fields;
+GeanyData		*geany_data;
 
-static PluginData *plugin_data;
-
-#define doc_array	plugin_data->doc_array
+#define doc_array	geany_data->doc_array
 // can't use document as a macro because it's currently a typename
-#define documents	plugin_data->document
-#define scintilla	plugin_data->sci
-#define ui			plugin_data->ui
+#define documents	geany_data->document
+#define scintilla	geany_data->sci
+#define ui			geany_data->ui
 
 
-VERSION_CHECK(5)
+VERSION_CHECK(7)
 
 PLUGIN_INFO(_("HTML Characters"), _("Inserts HTML character entities like '&'."))
 
@@ -76,7 +75,7 @@
 		GtkWidget *swin, *vbox, *label;
 
 		sc_dialog = gtk_dialog_new_with_buttons(
-					_("Special Characters"), GTK_WINDOW(plugin_data->app->window),
+					_("Special Characters"), GTK_WINDOW(geany_data->app->window),
 					GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
 					_("_Insert"), GTK_RESPONSE_OK, NULL);
 		vbox = ui->dialog_vbox_new(GTK_DIALOG(sc_dialog));
@@ -509,16 +508,14 @@
 
 
 /* Called by Geany to initialize the plugin */
-void init(PluginData *data)
+void init(GeanyData *data)
 {
 	GtkWidget *demo_item;
 
-	plugin_data = data;	// keep a pointer to the main application fields & functions
-
 	// Add an item to the Tools menu
 	demo_item = gtk_menu_item_new_with_mnemonic(_("_Insert Special HTML Characters"));
 	gtk_widget_show(demo_item);
-	gtk_container_add(GTK_CONTAINER(plugin_data->tools_menu), demo_item);
+	gtk_container_add(GTK_CONTAINER(geany_data->tools_menu), demo_item);
 	g_signal_connect(G_OBJECT(demo_item), "activate", G_CALLBACK(item_activate), NULL);
 
 	// disable menu_item when there are no documents open

Modified: trunk/src/plugindata.h
===================================================================
--- trunk/src/plugindata.h	2007-07-26 12:12:54 UTC (rev 1748)
+++ trunk/src/plugindata.h	2007-07-27 10:37:22 UTC (rev 1749)
@@ -34,11 +34,14 @@
  * PluginInfo* info()
  * 	Use PLUGIN_INFO() macro to define it. Required by Geany.
  *
+ * GeanyData* geany_data
+ * 	Geany owned fields and functions.
+ *
  * PluginFields* plugin_fields
  * 	Plugin owned fields, including flags.
  *
- * void init(PluginData *data)
- * 	Called after loading the plugin.
+ * void init(GeanyData *data)
+ * 	Called after loading the plugin. data is the same as geany_data.
  *
  * void cleanup()
  * 	Called before unloading the plugin. Required for normal plugins - it should undo
@@ -48,7 +51,7 @@
 
 /* The API version should be incremented whenever any plugin data types below are
  * modified. */
-static const gint api_version = 6;
+static const gint api_version = 7;
 
 /* The ABI version should be incremented whenever existing fields in the plugin
  * data types below have to be changed or reordered. It should stay the same if fields
@@ -95,7 +98,9 @@
 }
 PluginFlags;
 
-/* Fields set and owned by the plugin */
+/* Fields set and owned by the plugin.
+ * Note: Remember to increment api_version (and abi_version if necessary) when
+ * making changes. */
 typedef struct PluginFields
 {
 	PluginFlags	flags;
@@ -111,10 +116,10 @@
 typedef struct UIUtilsFuncs		UIUtilsFuncs;
 
 /* These are fields and functions owned by Geany.
- * Fields will be appended when needed by plugin authors.
+ * Fields and functions will be appended when needed by plugin authors.
  * Note: Remember to increment api_version (and abi_version if necessary) when
  * making changes. */
-typedef struct PluginData
+typedef struct GeanyData
 {
 	MyApp		*app;	// Geany application data fields
 	GtkWidget	*tools_menu;	// Almost all plugins should add menu items to the Tools menu only
@@ -126,11 +131,13 @@
 	UtilsFuncs		*utils;
 	UIUtilsFuncs	*ui;
 }
-PluginData;
+GeanyData;
 
+typedef GeanyData PluginData;	// for compatibility with API < 7
 
+
 /* For more info about these functions, see the main source code.
- * E.g. for PluginData::document->new_file(), see document_new_file() in document.[hc]. */
+ * E.g. for GeanyData::document->new_file(), see document_new_file() in document.[hc]. */
 
 struct filetype;
 

Modified: trunk/src/plugins.c
===================================================================
--- trunk/src/plugins.c	2007-07-26 12:12:54 UTC (rev 1748)
+++ trunk/src/plugins.c	2007-07-27 10:37:22 UTC (rev 1749)
@@ -45,7 +45,7 @@
 	PluginFields	fields;
 
 	PluginInfo*	(*info) ();	/* Returns plugin name, description */
-	void	(*init) (PluginData *data);	/* Called when the plugin is enabled */
+	void	(*init) (GeanyData *data);	/* Called when the plugin is enabled */
 	void	(*cleanup) ();		/* Called when the plugin is disabled or when Geany exits */
 }
 Plugin;
@@ -85,7 +85,8 @@
 	&ui_frame_new_with_alignment
 };
 
-static PluginData geany_data = {
+
+static GeanyData geany_data = {
 	NULL,
 	NULL,
 	NULL,
@@ -162,6 +163,7 @@
 	GModule *module;
 	PluginInfo* (*info)();
 	PluginFields **plugin_fields;
+	GeanyData **p_geany_data;
 
 	g_return_val_if_fail(fname, NULL);
 	g_return_val_if_fail(g_module_supported(), NULL);
@@ -211,6 +213,9 @@
 	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, "plugin_fields", (void *) &plugin_fields);
 	if (plugin_fields)
 		*plugin_fields = &plugin->fields;


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