SF.net SVN: geany: [1254] branches/geany-0.10.1

ntrel at users.sourceforge.net ntrel at xxxxx
Wed Feb 7 12:44:37 UTC 2007


Revision: 1254
          http://svn.sourceforge.net/geany/?rev=1254&view=rev
Author:   ntrel
Date:     2007-02-07 04:44:37 -0800 (Wed, 07 Feb 2007)

Log Message:
-----------
Fixed autocompletion missing tag matches.

Modified Paths:
--------------
    branches/geany-0.10.1/NEWS
    branches/geany-0.10.1/tagmanager/include/tm_tag.h
    branches/geany-0.10.1/tagmanager/tm_tag.c

Modified: branches/geany-0.10.1/NEWS
===================================================================
--- branches/geany-0.10.1/NEWS	2007-02-07 12:28:09 UTC (rev 1253)
+++ branches/geany-0.10.1/NEWS	2007-02-07 12:44:37 UTC (rev 1254)
@@ -3,8 +3,9 @@
 	Bugs fixed:
 	* Wrong tab foreground colour for unmodified documents.
 	* Fixed crashes when closing dialogs by clicking X on some systems.
-	* Fix missing global tags for C files when a C++ source file was
+	* Fixed missing global tags for C files when a C++ source file was
 	  loaded first.
+	* Fixed autocompletion missing tag matches.
 
 
 Geany 0.10 (December 21, 2006)

Modified: branches/geany-0.10.1/tagmanager/include/tm_tag.h
===================================================================
--- branches/geany-0.10.1/tagmanager/include/tm_tag.h	2007-02-07 12:28:09 UTC (rev 1253)
+++ branches/geany-0.10.1/tagmanager/include/tm_tag.h	2007-02-07 12:44:37 UTC (rev 1254)
@@ -281,7 +281,8 @@
  \param name Name of the tag to locate.
  \param partial If TRUE, matches the first part of the name instead of doing exact match.
 */
-TMTag **tm_tags_find(GPtrArray *sorted_tags_array, const char *name, gboolean partial, int * tagCount);
+TMTag **tm_tags_find(const GPtrArray *sorted_tags_array, const char *name,
+		gboolean partial, int * tagCount);
 
 /*!
  Completely frees an array of tags.

Modified: branches/geany-0.10.1/tagmanager/tm_tag.c
===================================================================
--- branches/geany-0.10.1/tagmanager/tm_tag.c	2007-02-07 12:28:09 UTC (rev 1253)
+++ branches/geany-0.10.1/tagmanager/tm_tag.c	2007-02-07 12:44:37 UTC (rev 1254)
@@ -562,7 +562,8 @@
 	}
 }
 
-TMTag **tm_tags_find(GPtrArray *sorted_tags_array, const char *name, gboolean partial, int * tagCount)
+TMTag **tm_tags_find(const GPtrArray *sorted_tags_array, const char *name,
+		gboolean partial, int * tagCount)
 {
 	static TMTag *tag = NULL;
 	TMTag **result;
@@ -578,15 +579,30 @@
 	s_partial = partial;
 	result = (TMTag **) bsearch(&tag, sorted_tags_array->pdata, sorted_tags_array->len
 	  , sizeof(gpointer), tm_tag_compare);
+	// there can be matches on both sides of result
 	if (result)
 	{
-		for (; result >= (TMTag **) sorted_tags_array->pdata; -- result) {
+		TMTag **last = (TMTag **) &sorted_tags_array->pdata[sorted_tags_array->len - 1];
+		TMTag **adv;
+
+		// First look for any matches after result
+		adv = result;
+		adv++;
+		for (; *adv && adv <= last; ++ adv)
+		{
+			if (0 != tm_tag_compare(&tag, adv))
+				break;
+			++tagMatches;
+		}
+		// Now look for matches from result and below
+		for (; result >= (TMTag **) sorted_tags_array->pdata; -- result)
+		{
 			if (0 != tm_tag_compare(&tag, (TMTag **) result))
 				break;
 			++tagMatches;
 		}
 		*tagCount=tagMatches;
-		++ result;
+		++ result;	// correct address for the last successful match
 	}
 	s_partial = FALSE;
 	return (TMTag **) result;


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