SF.net SVN: geany: [1474] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Mon Apr 23 15:15:13 UTC 2007


Revision: 1474
          http://svn.sourceforge.net/geany/?rev=1474&view=rev
Author:   ntrel
Date:     2007-04-23 08:15:13 -0700 (Mon, 23 Apr 2007)

Log Message:
-----------
Sort symbol list tags also by line number (fixes #1703575).

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/src/symbols.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2007-04-23 12:55:37 UTC (rev 1473)
+++ trunk/ChangeLog	2007-04-23 15:15:13 UTC (rev 1474)
@@ -3,6 +3,8 @@
  * src/build.c:
    When linking (or using Make Custom), remove error indicators in all
    documents (should fix #1705374).
+ * src/symbols.c:
+   Sort symbol list tags also by line number (fixes #1703575).
 
 
 2007-04-21  Nick Treleaven  <nick.treleaven at btinternet.com>

Modified: trunk/src/symbols.c
===================================================================
--- trunk/src/symbols.c	2007-04-23 12:55:37 UTC (rev 1473)
+++ trunk/src/symbols.c	2007-04-23 15:15:13 UTC (rev 1474)
@@ -300,9 +300,16 @@
 /* wrapper function to let strcmp work with GeanySymbol struct */
 static gint compare_symbol(const GeanySymbol *a, const GeanySymbol *b)
 {
+	gint ret;
+
 	if (a == NULL || b == NULL) return 0;
 
-	return strcmp(a->str, b->str);
+	ret = strcmp(a->str, b->str);
+	if (ret == 0)
+	{
+		return a->line - b->line;
+	}
+	return ret;
 }
 
 
@@ -348,23 +355,20 @@
 				if (! doc_is_utf8) utf8_name = encodings_convert_to_utf8_from_charset(tag->name,
 															-1, doc_list[idx].encoding, TRUE);
 				else utf8_name = tag->name;
+
+				symbol = g_new0(GeanySymbol, 1);
 				if ((tag->atts.entry.scope != NULL) && isalpha(tag->atts.entry.scope[0]))
 				{
-					symbol = g_new0(GeanySymbol, 1);
-					symbol->str = g_strdup_printf("%s%s%s [%ld]", tag->atts.entry.scope, cosep,
-																utf8_name, tag->atts.entry.line);
-					symbol->type = tag->type;
-					symbol->line = tag->atts.entry.line;
-					tag_names = g_list_prepend(tag_names, symbol);
+					symbol->str = g_strconcat(tag->atts.entry.scope, cosep, utf8_name, NULL);
 				}
 				else
 				{
-					symbol = g_new0(GeanySymbol, 1);
-					symbol->str = g_strdup_printf("%s [%ld]", utf8_name, tag->atts.entry.line);
-					symbol->type = tag->type;
-					symbol->line = tag->atts.entry.line;
-					tag_names = g_list_prepend(tag_names, symbol);
+					symbol->str = g_strdup(utf8_name);
 				}
+				symbol->type = tag->type;
+				symbol->line = tag->atts.entry.line;
+				tag_names = g_list_prepend(tag_names, symbol);
+
 				if (! doc_is_utf8) g_free(utf8_name);
 			}
 		}
@@ -620,8 +624,11 @@
 	init_tag_list(idx);
 	for (tmp = (GList*)tags; tmp; tmp = g_list_next(tmp))
 	{
+		gchar buf[100];
 		const GeanySymbol *symbol = (GeanySymbol*)tmp->data;
 
+		g_snprintf(buf, sizeof(buf), "%s [%d]", symbol->str, symbol->line);
+
 		switch (symbol->type)
 		{
 			case tm_tag_prototype_t:
@@ -630,7 +637,7 @@
 			{
 				if (tv_iters.tag_function.stamp == -1) break;
 				gtk_tree_store_append(doc_list[idx].tag_store, &iter, &(tv_iters.tag_function));
-				gtk_tree_store_set(doc_list[idx].tag_store, &iter, 0, symbol->str, -1);
+				gtk_tree_store_set(doc_list[idx].tag_store, &iter, 0, buf, -1);
 				break;
 			}
 			case tm_tag_macro_t:
@@ -638,14 +645,14 @@
 			{
 				if (tv_iters.tag_macro.stamp == -1) break;
 				gtk_tree_store_append(doc_list[idx].tag_store, &iter, &(tv_iters.tag_macro));
-				gtk_tree_store_set(doc_list[idx].tag_store, &iter, 0, symbol->str, -1);
+				gtk_tree_store_set(doc_list[idx].tag_store, &iter, 0, buf, -1);
 				break;
 			}
 			case tm_tag_class_t:
 			{
 				if (tv_iters.tag_class.stamp == -1) break;
 				gtk_tree_store_append(doc_list[idx].tag_store, &iter, &(tv_iters.tag_class));
-				gtk_tree_store_set(doc_list[idx].tag_store, &iter, 0, symbol->str, -1);
+				gtk_tree_store_set(doc_list[idx].tag_store, &iter, 0, buf, -1);
 				break;
 			}
 			case tm_tag_member_t:
@@ -653,7 +660,7 @@
 			{
 				if (tv_iters.tag_member.stamp == -1) break;
 				gtk_tree_store_append(doc_list[idx].tag_store, &iter, &(tv_iters.tag_member));
-				gtk_tree_store_set(doc_list[idx].tag_store, &iter, 0, symbol->str, -1);
+				gtk_tree_store_set(doc_list[idx].tag_store, &iter, 0, buf, -1);
 				break;
 			}
 			case tm_tag_typedef_t:
@@ -664,14 +671,14 @@
 			{
 				if (tv_iters.tag_struct.stamp == -1) break;
 				gtk_tree_store_append(doc_list[idx].tag_store, &iter, &(tv_iters.tag_struct));
-				gtk_tree_store_set(doc_list[idx].tag_store, &iter, 0, symbol->str, -1);
+				gtk_tree_store_set(doc_list[idx].tag_store, &iter, 0, buf, -1);
 				break;
 			}
 			case tm_tag_variable_t:
 			{
 				if (tv_iters.tag_variable.stamp == -1) break;
 				gtk_tree_store_append(doc_list[idx].tag_store, &iter, &(tv_iters.tag_variable));
-				gtk_tree_store_set(doc_list[idx].tag_store, &iter, 0, symbol->str, -1);
+				gtk_tree_store_set(doc_list[idx].tag_store, &iter, 0, buf, -1);
 				break;
 			}
 			case tm_tag_namespace_t:
@@ -679,14 +686,14 @@
 			{
 				if (tv_iters.tag_namespace.stamp == -1) break;
 				gtk_tree_store_append(doc_list[idx].tag_store, &iter, &(tv_iters.tag_namespace));
-				gtk_tree_store_set(doc_list[idx].tag_store, &iter, 0, symbol->str, -1);
+				gtk_tree_store_set(doc_list[idx].tag_store, &iter, 0, buf, -1);
 				break;
 			}
 			default:
 			{
 				if (tv_iters.tag_other.stamp == -1) break;
 				gtk_tree_store_append(doc_list[idx].tag_store, &iter, &(tv_iters.tag_other));
-				gtk_tree_store_set(doc_list[idx].tag_store, &iter, 0, symbol->str, -1);
+				gtk_tree_store_set(doc_list[idx].tag_store, &iter, 0, buf, -1);
 			}
 		}
 	}


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