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@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.