SF.net SVN: geany:[5560] trunk
colombanw at users.sourceforge.net
colombanw at xxxxx
Sat Mar 5 22:50:04 UTC 2011
Revision: 5560
http://geany.svn.sourceforge.net/geany/?rev=5560&view=rev
Author: colombanw
Date: 2011-03-05 22:50:04 +0000 (Sat, 05 Mar 2011)
Log Message:
-----------
Provide a GType for TMTag and use it
It is a boxed type but uses reference counting behind the scene. This
allow for example the tag store to make sure the tags it holds are
always valid.
Modified Paths:
--------------
trunk/src/sidebar.c
trunk/src/symbols.c
trunk/tagmanager/include/tm_tag.h
trunk/tagmanager/tm_tag.c
Modified: trunk/src/sidebar.c
===================================================================
--- trunk/src/sidebar.c 2011-03-05 22:48:25 UTC (rev 5559)
+++ trunk/src/sidebar.c 2011-03-05 22:50:04 UTC (rev 5560)
@@ -216,7 +216,7 @@
if (doc->priv->tag_tree == NULL)
{
doc->priv->tag_store = gtk_tree_store_new(
- SYMBOLS_N_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_STRING);
+ SYMBOLS_N_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING, TM_TYPE_TAG, G_TYPE_STRING);
doc->priv->tag_tree = gtk_tree_view_new();
prepare_taglist(doc->priv->tag_tree, doc->priv->tag_store);
gtk_widget_show(doc->priv->tag_tree);
@@ -874,6 +874,7 @@
change_focus_to_editor(doc, NULL);
}
}
+ tm_tag_unref(tag);
}
return FALSE;
}
Modified: trunk/src/symbols.c
===================================================================
--- trunk/src/symbols.c 2011-03-05 22:48:25 UTC (rev 5559)
+++ trunk/src/symbols.c 2011-03-05 22:50:04 UTC (rev 5560)
@@ -1224,7 +1224,8 @@
gpointer user_data)
{
gboolean sort_by_name = GPOINTER_TO_INT(user_data);
- const TMTag *tag_a, *tag_b;
+ TMTag *tag_a, *tag_b;
+ gint cmp;
gtk_tree_model_get(model, a, SYMBOLS_COLUMN_TAG, &tag_a, -1);
gtk_tree_model_get(model, b, SYMBOLS_COLUMN_TAG, &tag_b, -1);
@@ -1234,13 +1235,12 @@
if (tag_a && !tag_has_missing_parent(tag_a, GTK_TREE_STORE(model), a) &&
tag_b && !tag_has_missing_parent(tag_b, GTK_TREE_STORE(model), b))
{
- return sort_by_name ? compare_symbol(tag_a, tag_b) :
+ cmp = sort_by_name ? compare_symbol(tag_a, tag_b) :
compare_symbol_lines(tag_a, tag_b);
}
else
{
gchar *astr, *bstr;
- gint cmp;
gtk_tree_model_get(model, a, SYMBOLS_COLUMN_NAME, &astr, -1);
gtk_tree_model_get(model, b, SYMBOLS_COLUMN_NAME, &bstr, -1);
@@ -1254,23 +1254,28 @@
{
/* this is what g_strcmp0() does */
if (! astr)
- return -(astr != bstr);
+ cmp = -(astr != bstr);
if (! bstr)
- return astr != bstr;
+ cmp = astr != bstr;
+ else
+ {
+ cmp = strcmp(astr, bstr);
- cmp = strcmp(astr, bstr);
-
- /* sort duplicate 'ScopeName::OverloadedTagName' items by line as well */
- if (tag_a && tag_b)
- if (!sort_by_name ||
- (utils_str_equal(tag_a->name, tag_b->name) &&
- utils_str_equal(tag_a->atts.entry.scope, tag_b->atts.entry.scope)))
- cmp = compare_symbol_lines(tag_a, tag_b);
+ /* sort duplicate 'ScopeName::OverloadedTagName' items by line as well */
+ if (tag_a && tag_b)
+ if (!sort_by_name ||
+ (utils_str_equal(tag_a->name, tag_b->name) &&
+ utils_str_equal(tag_a->atts.entry.scope, tag_b->atts.entry.scope)))
+ cmp = compare_symbol_lines(tag_a, tag_b);
+ }
}
g_free(astr);
g_free(bstr);
- return cmp;
}
+ tm_tag_unref(tag_a);
+ tm_tag_unref(tag_b);
+
+ return cmp;
}
Modified: trunk/tagmanager/include/tm_tag.h
===================================================================
--- trunk/tagmanager/include/tm_tag.h 2011-03-05 22:48:25 UTC (rev 5559)
+++ trunk/tagmanager/include/tm_tag.h 2011-03-05 22:50:04 UTC (rev 5560)
@@ -30,6 +30,7 @@
*/
#include "tm_source_file.h"
+#include <glib-object.h>
#ifdef __cplusplus
extern "C"
@@ -159,6 +160,12 @@
*/
typedef int (*TMTagCompareFunc) (const void *ptr1, const void *ptr2);
+/*! The GType for a TMTag */
+#define TM_TYPE_TAG (tm_tag_get_type())
+
+/*! Gets the GType for a TMTag */
+GType tm_tag_get_type(void) G_GNUC_CONST;
+
/*!
Initializes a TMTag structure with information from a tagEntryInfo struct
used by the ctags parsers. Note that the TMTag structure must be malloc()ed
Modified: trunk/tagmanager/tm_tag.c
===================================================================
--- trunk/tagmanager/tm_tag.c 2011-03-05 22:48:25 UTC (rev 5559)
+++ trunk/tagmanager/tm_tag.c 2011-03-05 22:50:04 UTC (rev 5560)
@@ -9,6 +9,7 @@
#include <stdlib.h>
#include <string.h>
+#include <glib-object.h>
#include "general.h"
#include "entry.h"
@@ -105,6 +106,17 @@
tm_tag_other_t
};
+GType tm_tag_get_type(void)
+{
+ static GType gtype = 0;
+ if (G_UNLIKELY (gtype == 0))
+ {
+ gtype = g_boxed_type_register_static("TMTag", (GBoxedCopyFunc)tm_tag_ref,
+ (GBoxedFreeFunc)tm_tag_unref);
+ }
+ return gtype;
+}
+
static int get_tag_type(const char *tag_name)
{
unsigned int i;
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