SF.net SVN: geany: [516] trunk
ntrel at users.sourceforge.net
ntrel at xxxxx
Sat Jul 1 13:16:59 UTC 2006
Revision: 516
Author: ntrel
Date: 2006-07-01 06:16:52 -0700 (Sat, 01 Jul 2006)
ViewCVS: http://svn.sourceforge.net/geany/?rev=516&view=rev
Log Message:
-----------
Fix a segfault on Go to tag defn/decl if no files have tags. Add utils_find_tm_tag
Modified Paths:
--------------
trunk/ChangeLog
trunk/src/callbacks.c
trunk/src/utils.c
trunk/src/utils.h
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2006-07-01 12:02:30 UTC (rev 515)
+++ trunk/ChangeLog 2006-07-01 13:16:52 UTC (rev 516)
@@ -5,6 +5,9 @@
* src/callbacks.c: Prevent a segfault if the VTE has not been loaded.
* src/utils.c, src/utils.h, src/msgwindow.c:
Add utils_get_current_time_string and fix getting the time string.
+ * src/utils.c, src/utils.h, src/callbacks.c:
+ Fix a segfault on Go to tag defn/decl if no files have tags.
+ Add utils_find_tm_tag.
2006-06-30 Enrico Tröger <enrico.troeger at uvena.de>
Modified: trunk/src/callbacks.c
===================================================================
--- trunk/src/callbacks.c 2006-07-01 12:02:30 UTC (rev 515)
+++ trunk/src/callbacks.c 2006-07-01 13:16:52 UTC (rev 516)
@@ -1340,39 +1340,40 @@
gpointer user_data)
{
gint type;
- guint i, j;
+ guint j;
const GPtrArray *tags;
+ TMTag *tmtag;
if (menuitem == GTK_MENU_ITEM(lookup_widget(app->popup_menu, "goto_tag_definition1")))
type = tm_tag_function_t;
else
type = tm_tag_prototype_t;
- for (j = 0; j < app->tm_workspace->work_objects->len; j++)
+ if (app->tm_workspace->work_objects != NULL)
{
- tags = tm_tags_extract(TM_WORK_OBJECT(app->tm_workspace->work_objects->pdata[j])->tags_array, type);
- if (tags)
+ for (j = 0; j < app->tm_workspace->work_objects->len; j++)
{
- for (i = 0; i < tags->len; ++i)
+ tags = tm_tags_extract(
+ TM_WORK_OBJECT(app->tm_workspace->work_objects->pdata[j])->tags_array,
+ type);
+ if (tags == NULL) continue;
+
+ tmtag = utils_find_tm_tag(tags, current_word);
+ if (tmtag != NULL)
{
- if (utils_strcmp(TM_TAG(tags->pdata[i])->name, current_word))
- {
- if (! utils_goto_file_line(
- TM_TAG(tags->pdata[i])->atts.entry.file->work_object.file_name,
- TRUE,
- TM_TAG(tags->pdata[i])->atts.entry.line))
- {
- utils_beep();
- msgwin_status_add(_("Declaration or definition of \"%s()\" not found"), current_word);
- }
- return;
- }
+ if (! utils_goto_file_line(
+ tmtag->atts.entry.file->work_object.file_name,
+ TRUE, tmtag->atts.entry.line)) break;
+ return;
}
}
}
// if we are here, there was no match and we are beeping ;-)
utils_beep();
- msgwin_status_add(_("Declaration or definition of \"%s()\" not found"), current_word);
+ if (type == tm_tag_prototype_t)
+ msgwin_status_add(_("Declaration of \"%s()\" not found"), current_word);
+ else
+ msgwin_status_add(_("Definition of \"%s()\" not found"), current_word);
}
Modified: trunk/src/utils.c
===================================================================
--- trunk/src/utils.c 2006-07-01 12:02:30 UTC (rev 515)
+++ trunk/src/utils.c 2006-07-01 13:16:52 UTC (rev 516)
@@ -2496,3 +2496,17 @@
}
+TMTag *utils_find_tm_tag(const GPtrArray *tags, const gchar *tag_name)
+{
+ guint i;
+ g_return_val_if_fail(tags != NULL, NULL);
+
+ for (i = 0; i < tags->len; ++i)
+ {
+ if (utils_strcmp(TM_TAG(tags->pdata[i])->name, tag_name))
+ return TM_TAG(tags->pdata[i]);
+ }
+ return NULL;
+}
+
+
Modified: trunk/src/utils.h
===================================================================
--- trunk/src/utils.h 2006-07-01 12:02:30 UTC (rev 515)
+++ trunk/src/utils.h 2006-07-01 13:16:52 UTC (rev 516)
@@ -220,4 +220,6 @@
// returned string must be freed.
gchar *utils_get_current_time_string();
+TMTag *utils_find_tm_tag(const GPtrArray *tags, const gchar *tag_name);
+
#endif
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