Revision: 2397 http://geany.svn.sourceforge.net/geany/?rev=2397&view=rev Author: ntrel Date: 2008-03-24 09:44:43 -0700 (Mon, 24 Mar 2008)
Log Message: ----------- Make Go to Tag commands look for the tag in the current document before searching the workspace.
Modified Paths: -------------- trunk/ChangeLog trunk/src/symbols.c
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2008-03-24 16:11:52 UTC (rev 2396) +++ trunk/ChangeLog 2008-03-24 16:44:43 UTC (rev 2397) @@ -8,6 +8,9 @@ Undo unnecessary ABI change. * src/plugindata.h: Redo ABI change (it was for r2389 editor.h change, oops). + * src/symbols.c: + Make Go to Tag commands look for the tag in the current document + before searching the workspace.
2008-03-23 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
Modified: trunk/src/symbols.c =================================================================== --- trunk/src/symbols.c 2008-03-24 16:11:52 UTC (rev 2396) +++ trunk/src/symbols.c 2008-03-24 16:44:43 UTC (rev 2397) @@ -294,21 +294,46 @@ }
-static TMTag *find_workspace_tag(const gchar *tag_name, gint type) +static TMTag *find_work_object_tag(const TMWorkObject *workobj, + const gchar *tag_name, gint type) { - guint j; const GPtrArray *tags; TMTag *tmtag;
- if (app->tm_workspace != NULL && app->tm_workspace->work_objects != NULL) + if (workobj != NULL) { - for (j = 0; j < app->tm_workspace->work_objects->len; j++) + tags = tm_tags_extract(workobj->tags_array, type); + if (tags != NULL) { - tags = tm_tags_extract( - TM_WORK_OBJECT(app->tm_workspace->work_objects->pdata[j])->tags_array, - type); - if (tags == NULL) continue; + tmtag = symbols_find_tm_tag(tags, tag_name); + if (tmtag != NULL) + return tmtag; + } + } + return NULL; /* not found */ +}
+ +static TMTag *find_workspace_tag(const gchar *tag_name, gint type) +{ + guint j; + const GPtrArray *work_objects; + + if (app->tm_workspace != NULL) + work_objects = app->tm_workspace->work_objects; + + if (work_objects != NULL) + { + for (j = 0; j < work_objects->len; j++) + { + TMWorkObject *workobj = TM_WORK_OBJECT(work_objects->pdata[j]); + const GPtrArray *tags; + TMTag *tmtag; + + tags = tm_tags_extract(workobj->tags_array, type); + if (tags == NULL) + continue; + tmtag = symbols_find_tm_tag(tags, tag_name); if (tmtag != NULL) return tmtag; @@ -1147,14 +1172,20 @@ { const gint forward_types = tm_tag_prototype_t | tm_tag_externvar_t; gint type; - TMTag *tmtag; - + TMTag *tmtag = NULL; gint old_idx = document_get_cur_idx();
/* goto tag definition: all except prototypes / forward declarations / externs */ type = (definition) ? tm_tag_max_t - forward_types : forward_types;
- tmtag = find_workspace_tag(name, type); + /* first look in the current document */ + if (doc_list[old_idx].tm_file) + tmtag = find_work_object_tag(doc_list[old_idx].tm_file, name, type); + + /* if not found, look in the workspace */ + if (tmtag == NULL) + tmtag = find_workspace_tag(name, type); + if (tmtag != NULL) { gint new_idx = document_find_by_filename(
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.