Revision: 2561 http://geany.svn.sourceforge.net/geany/?rev=2561&view=rev Author: ntrel Date: 2008-05-08 07:16:35 -0700 (Thu, 08 May 2008)
Log Message: ----------- Fix C headers getting detected as C++ files (iterate through filetypes_array, not filetypes_hash as the order is not consistent with the filetype_id enum). Add static function filetypes_find_source().
Modified Paths: -------------- trunk/ChangeLog trunk/src/filetypes.c
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2008-05-07 16:32:23 UTC (rev 2560) +++ trunk/ChangeLog 2008-05-08 14:16:35 UTC (rev 2561) @@ -1,3 +1,12 @@ +2008-05-08 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com> + + * src/filetypes.c: + Fix C headers getting detected as C++ files (iterate through + filetypes_array, not filetypes_hash as the order is not consistent + with the filetype_id enum). + Add static function filetypes_find_source(). + + 2008-05-07 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
* src/templates.c, src/build.c, src/utils.c, src/win32.c,
Modified: trunk/src/filetypes.c =================================================================== --- trunk/src/filetypes.c 2008-05-07 16:32:23 UTC (rev 2560) +++ trunk/src/filetypes.c 2008-05-08 14:16:35 UTC (rev 2561) @@ -537,17 +537,34 @@ }
-static gboolean match_basename(G_GNUC_UNUSED gpointer key, gpointer value, gpointer user_data) +typedef gboolean FileTypesPredicate(filetype *ft, gpointer user_data); + +/* Find a filetype that predicate returns TRUE for, otherwise return NULL. + * Only search source file filetypes. */ +static filetype *filetypes_find_source(FileTypesPredicate predicate, gpointer user_data) { - filetype *ft = value; + guint i; + + for (i = 0; i < filetypes_array->len; i++) + { + filetype *ft = filetypes[i]; + + if (i == GEANY_FILETYPES_NONE) + continue; /* None is not for source files */ + + if (predicate(ft, user_data)) + return ft; + } + return NULL; +} + + +static gboolean match_basename(filetype *ft, gpointer user_data) +{ const gchar *base_filename = user_data; gint j; gboolean ret = FALSE;
- /* Don't match '*' because it comes before any custom filetypes */ - if (ft->id == GEANY_FILETYPES_NONE) - return FALSE; - for (j = 0; ft->pattern[j] != NULL; j++) { GPatternSpec *pattern = g_pattern_spec_new(ft->pattern[j]); @@ -578,7 +595,7 @@ setptr(base_filename, g_utf8_strdown(base_filename, -1)); #endif
- ft = g_hash_table_find(filetypes_hash, match_basename, base_filename); + ft = filetypes_find_source(match_basename, base_filename); if (ft == NULL) ft = filetypes[GEANY_FILETYPES_NONE];
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.