Branch: refs/heads/master Author: Jiří Techet techet@gmail.com Committer: Jiří Techet techet@gmail.com Date: Sat, 08 Nov 2014 19:09:09 UTC Commit: c466fba9c1ce79ee8812292393ffb8f3bc32a2fa https://github.com/geany/geany-plugins/commit/c466fba9c1ce79ee8812292393ffb8...
Log Message: ----------- gproject: Update to the latest Geany tagmanager API
Modified Paths: -------------- gproject/src/gproject-main.c gproject/src/gproject-project.c gproject/src/gproject-project.h
Modified: gproject/src/gproject-main.c 2 lines changed, 1 insertions(+), 1 deletions(-) =================================================================== @@ -32,7 +32,7 @@ #include "gproject-sidebar.h" #include "gproject-menu.h"
-PLUGIN_VERSION_CHECK(214) +PLUGIN_VERSION_CHECK(221) PLUGIN_SET_INFO(_("GProject"), _("Glob-pattern-based project management plugin for Geany."), VERSION,
Modified: gproject/src/gproject-project.c 115 lines changed, 76 insertions(+), 39 deletions(-) =================================================================== @@ -72,48 +72,29 @@ static void deferred_op_queue_clean(void) }
-static void workspace_add_tag(gchar *filename, TagObject *obj, gpointer foo) -{ - TMWorkObject *tm_obj = NULL; - - if (!document_find_by_filename(filename)) - { - gchar *locale_filename; - - locale_filename = utils_get_locale_from_utf8(filename); - tm_obj = tm_source_file_new(locale_filename, FALSE, filetypes_detect_from_file(filename)->name); - g_free(locale_filename); - - if (tm_obj) - { - tm_workspace_add_object(tm_obj); - tm_source_file_update(tm_obj, TRUE, FALSE, TRUE); - } - } - - if (obj->tag) - tm_workspace_remove_object(obj->tag, TRUE, TRUE); - - obj->tag = tm_obj; -} - - static void workspace_add_file_tag(gchar *filename) { TagObject *obj;
obj = g_hash_table_lookup(g_prj->file_tag_table, filename); if (obj) - workspace_add_tag(filename, obj, NULL); -} + { + TMSourceFile *tm_obj = NULL; + + if (!document_find_by_filename(filename)) + { + tm_obj = tm_source_file_new(filename, filetypes_detect_from_file(filename)->name); + if (tm_obj) + tm_workspace_add_source_file(tm_obj); + }
+ if (obj->tag) + { + tm_workspace_remove_source_file(obj->tag); + tm_source_file_free(obj->tag); + }
-static void workspace_remove_tag(gchar *filename, TagObject *obj, gpointer foo) -{ - if (obj->tag) - { - tm_workspace_remove_object(obj->tag, TRUE, TRUE); - obj->tag = NULL; + obj->tag = tm_obj; } }
@@ -123,8 +104,12 @@ static void workspace_remove_file_tag(gchar *filename) TagObject *obj;
obj = g_hash_table_lookup(g_prj->file_tag_table, filename); - if (obj) - workspace_remove_tag(filename, obj, NULL); + if (obj && obj->tag) + { + tm_workspace_remove_source_file(obj->tag); + tm_source_file_free(obj->tag); + obj->tag = NULL; + } }
@@ -217,6 +202,58 @@ static GSList *get_file_list(const gchar * path, GSList *patterns, GSList *ignor }
+static void remove_all_tags() +{ + GPtrArray *to_update; + GHashTableIter iter; + gpointer key, value; + + g_hash_table_iter_init (&iter, g_prj->file_tag_table); + to_update = g_ptr_array_new(); + while (g_hash_table_iter_next (&iter, &key, &value)) + { + TagObject *obj = value; + + g_ptr_array_add(to_update, obj->tag); + obj->tag = NULL; + } + + tm_workspace_remove_source_files(to_update); + g_ptr_array_foreach(to_update, (GFunc)tm_source_file_free, NULL); + g_ptr_array_free(to_update, TRUE); +} + + +static void add_all_tags() +{ + GPtrArray *to_update; + GHashTableIter iter; + gpointer key, value; + + g_hash_table_iter_init (&iter, g_prj->file_tag_table); + to_update = g_ptr_array_new(); + while (g_hash_table_iter_next (&iter, &key, &value)) + { + TagObject *obj = value; + gchar *filename = key; + TMSourceFile *tm_obj = NULL; + + if (!document_find_by_filename(filename)) + { + tm_obj = tm_source_file_new(filename, filetypes_detect_from_file(filename)->name); + + if (tm_obj) + g_ptr_array_add(to_update, tm_obj); + } + + obj->tag = tm_obj; + } + + tm_workspace_add_source_files(to_update); + g_ptr_array_free(to_update, TRUE); +} + + void gprj_project_rescan(void) { GSList *pattern_list = NULL; @@ -228,7 +265,7 @@ void gprj_project_rescan(void) return;
if (g_prj->generate_tags) - g_hash_table_foreach(g_prj->file_tag_table, (GHFunc)workspace_remove_tag, NULL); + remove_all_tags(); g_hash_table_destroy(g_prj->file_tag_table); g_prj->file_tag_table = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
@@ -257,7 +294,7 @@ void gprj_project_rescan(void) }
if (g_prj->generate_tags) - g_hash_table_foreach(g_prj->file_tag_table, (GHFunc)workspace_add_tag, NULL); + add_all_tags();
g_slist_foreach(lst, (GFunc) g_free, NULL); g_slist_free(lst); @@ -470,7 +507,7 @@ void gprj_project_close(void) return; /* can happen on plugin reload */
if (g_prj->generate_tags) - g_hash_table_foreach(g_prj->file_tag_table, (GHFunc)workspace_remove_tag, NULL); + remove_all_tags();
deferred_op_queue_clean();
Modified: gproject/src/gproject-project.h 2 lines changed, 1 insertions(+), 1 deletions(-) =================================================================== @@ -22,7 +22,7 @@
typedef struct { - TMWorkObject *tag; + TMSourceFile *tag; } TagObject;
-------------- This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).