SF.net SVN: geany: [2547] branches/custom-filetypes

ntrel at users.sourceforge.net ntrel at xxxxx
Thu May 1 17:25:20 UTC 2008


Revision: 2547
          http://geany.svn.sourceforge.net/geany/?rev=2547&view=rev
Author:   ntrel
Date:     2008-05-01 10:25:18 -0700 (Thu, 01 May 2008)

Log Message:
-----------
Add filetypes_array to GeanyData for plugins to access a dynamic
array of filetype pointers.

Modified Paths:
--------------
    branches/custom-filetypes/ChangeLog
    branches/custom-filetypes/src/filetypes.c
    branches/custom-filetypes/src/filetypes.h
    branches/custom-filetypes/src/plugindata.h
    branches/custom-filetypes/src/plugins.c

Modified: branches/custom-filetypes/ChangeLog
===================================================================
--- branches/custom-filetypes/ChangeLog	2008-05-01 17:01:32 UTC (rev 2546)
+++ branches/custom-filetypes/ChangeLog	2008-05-01 17:25:18 UTC (rev 2547)
@@ -14,6 +14,9 @@
    Remove filetypes_find(), which will be replaced with a dynamic array
    of filetype pointers (more flexible and backwards compatible with
    existing code).
+ * src/plugindata.h, src/filetypes.c, src/filetypes.h, src/plugins.c:
+   Add filetypes_array to GeanyData for plugins to access a dynamic
+   array of filetype pointers.
 
 
 2008-04-29  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>

Modified: branches/custom-filetypes/src/filetypes.c
===================================================================
--- branches/custom-filetypes/src/filetypes.c	2008-05-01 17:01:32 UTC (rev 2546)
+++ branches/custom-filetypes/src/filetypes.c	2008-05-01 17:25:18 UTC (rev 2547)
@@ -40,10 +40,10 @@
 #include "ui_utils.h"
 
 
+GPtrArray *filetypes_array = NULL;	/* Dynamic array of filetype pointers */
+
 GHashTable *filetypes_hash = NULL;	/* Hash of filetype pointers based on name keys */
 
-/* built-in filetypes only */
-filetype *built_in_filetypes[GEANY_MAX_BUILT_IN_FILETYPES] = {NULL};
 
 static GtkWidget *radio_items[GEANY_MAX_FILE_TYPES];
 
@@ -420,13 +420,15 @@
 }
 
 
-/* Create the filetype array and fill it with the known filetypes. */
+/* Create the filetypes array and fill it with the known filetypes. */
 void filetypes_init_types()
 {
 	filetype_id ft_id;
 
+	g_return_if_fail(filetypes_array == NULL);
 	g_return_if_fail(filetypes_hash == NULL);
 
+	filetypes_array = g_ptr_array_sized_new(GEANY_MAX_BUILT_IN_FILETYPES);
 	filetypes_hash = g_hash_table_new(g_str_hash, g_str_equal);
 
 	/* Create built-in filetypes */
@@ -436,7 +438,7 @@
 	}
 	init_builtin_filetypes();
 
-	/* Add built-in filetypes to the hash */
+	/* Add built-in filetypes to the hash now the name fields are set */
 	for (ft_id = 0; ft_id < GEANY_MAX_BUILT_IN_FILETYPES; ft_id++)
 	{
 		filetypes_add(filetypes[ft_id]);
@@ -725,10 +727,9 @@
 }
 
 
-static void free_filetype(G_GNUC_UNUSED gpointer key, gpointer value,
-		G_GNUC_UNUSED gpointer user_data)
+static void free_filetype(gpointer data, G_GNUC_UNUSED gpointer user_data)
 {
-	filetype *ft = value;
+	filetype *ft = data;
 
 	g_return_if_fail(ft != NULL);
 
@@ -753,9 +754,11 @@
 /* frees the array and all related pointers */
 void filetypes_free_types()
 {
+	g_return_if_fail(filetypes_array != NULL);
 	g_return_if_fail(filetypes_hash != NULL);
 
-	g_hash_table_foreach(filetypes_hash, free_filetype, NULL);
+	g_ptr_array_foreach(filetypes_array, free_filetype, NULL);
+	g_ptr_array_free(filetypes_array, TRUE);
 	g_hash_table_destroy(filetypes_hash);
 }
 
@@ -1012,6 +1015,7 @@
 	g_return_if_fail(ft);
 	g_return_if_fail(ft->name);
 
+	g_ptr_array_add(filetypes_array, ft);
 	g_hash_table_insert(filetypes_hash, ft->name, ft);
 }
 
@@ -1021,6 +1025,8 @@
 {
 	g_return_if_fail(ft);
 
+	g_ptr_array_remove(filetypes_array, ft);
+
 	if (!g_hash_table_remove(filetypes_hash, ft))
 		g_warning("Could not remove filetype %p!", ft);
 }

Modified: branches/custom-filetypes/src/filetypes.h
===================================================================
--- branches/custom-filetypes/src/filetypes.h	2008-05-01 17:01:32 UTC (rev 2546)
+++ branches/custom-filetypes/src/filetypes.h	2008-05-01 17:25:18 UTC (rev 2547)
@@ -121,10 +121,13 @@
 	struct build_actions	*actions;
 };
 
-#define filetypes	built_in_filetypes
-extern filetype *built_in_filetypes[GEANY_MAX_BUILT_IN_FILETYPES];
+extern GPtrArray *filetypes_array;
 
+/* Wrap filetypes_array so it can be used with C array syntax.
+ * Example: filetypes[GEANY_FILETYPES_C]->name = ...; */
+#define filetypes	((filetype **)filetypes_array->pdata)
 
+
 void filetypes_add(filetype *ft);
 
 void filetypes_remove(filetype *ft);

Modified: branches/custom-filetypes/src/plugindata.h
===================================================================
--- branches/custom-filetypes/src/plugindata.h	2008-05-01 17:01:32 UTC (rev 2546)
+++ branches/custom-filetypes/src/plugindata.h	2008-05-01 17:25:18 UTC (rev 2547)
@@ -30,17 +30,17 @@
  **/
 
 
-#ifndef PLUGIN_H
-#define PLUGIN_H
+#ifndef PLUGINDATA_H
+#define PLUGINDATA_H
 
 /* The API version should be incremented whenever any plugin data types below are
  * modified or appended to. */
-static const gint api_version = 55;
+static const gint api_version = 56;
 
 /* 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
  * are only appended, as this doesn't affect existing fields. */
-static const gint abi_version = 26;
+static const gint abi_version = 27;
 
 /** Check the plugin can be loaded by Geany.
  * This performs runtime checks that try to ensure:
@@ -156,6 +156,7 @@
 	GeanyApp	*app;					/**< Geany application data fields */
 	GtkWidget	*tools_menu;			/**< Most plugins should add menu items to the Tools menu only */
 	GArray		*doc_array;				/**< Dynamic array of document structs */
+	GPtrArray	*filetypes_array;		/**< Dynamic array of filetype pointers */
 	struct GeanyPrefs	*prefs;			/* Note: this will be split up in future versions */
 	struct EditorPrefs	*editor_prefs;	/**< Editor settings */
 	struct BuildInfo	*build_info;	/**< Current build information */

Modified: branches/custom-filetypes/src/plugins.c
===================================================================
--- branches/custom-filetypes/src/plugins.c	2008-05-01 17:01:32 UTC (rev 2546)
+++ branches/custom-filetypes/src/plugins.c	2008-05-01 17:25:18 UTC (rev 2547)
@@ -241,6 +241,7 @@
 	NULL,
 	NULL,
 	NULL,
+	NULL,
 
 	&doc_funcs,
 	&sci_funcs,
@@ -266,6 +267,7 @@
 	geany_data.app = app;
 	geany_data.tools_menu = lookup_widget(app->window, "tools1_menu");
 	geany_data.doc_array = doc_array;
+	geany_data.filetypes_array = filetypes_array;
 	geany_data.prefs = &prefs;
 	geany_data.editor_prefs = &editor_prefs;
 	geany_data.build_info = &build_info;


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