Revision: 2164 http://geany.svn.sourceforge.net/geany/?rev=2164&view=rev Author: ntrel Date: 2008-01-11 09:09:23 -0800 (Fri, 11 Jan 2008)
Log Message: ----------- Apply patch from Yura Siamashka to speed up removing several workspace object's tags without updating the workspace until necessary (thanks).
Modified Paths: -------------- trunk/ChangeLog trunk/src/dialogs.c trunk/src/document.c trunk/src/plugindata.h trunk/tagmanager/include/tm_workspace.h trunk/tagmanager/tm_project.c trunk/tagmanager/tm_workspace.c
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2008-01-11 16:53:25 UTC (rev 2163) +++ trunk/ChangeLog 2008-01-11 17:09:23 UTC (rev 2164) @@ -4,6 +4,12 @@ doc/geany.html: Add 'Make in base path' project file preference, on by default. Add project_get_base_path(), separated from project_get_make_dir(). + * src/dialogs.c, src/plugindata.h, src/document.c, + tagmanager/tm_project.c, tagmanager/tm_workspace.c, + tagmanager/include/tm_workspace.h: + Apply patch from Yura Siamashka to speed up removing several + workspace object's tags without updating the workspace until + necessary (thanks).
2008-01-11 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
Modified: trunk/src/dialogs.c =================================================================== --- trunk/src/dialogs.c 2008-01-11 16:53:25 UTC (rev 2163) +++ trunk/src/dialogs.c 2008-01-11 17:09:23 UTC (rev 2164) @@ -426,7 +426,7 @@ g_free(old_filename); } // create a new tm_source_file object otherwise tagmanager won't work correctly - tm_workspace_remove_object(doc_list[idx].tm_file, TRUE); + tm_workspace_remove_object(doc_list[idx].tm_file, TRUE, TRUE); doc_list[idx].tm_file = NULL; g_free(doc_list[idx].file_name); }
Modified: trunk/src/document.c =================================================================== --- trunk/src/document.c 2008-01-11 16:53:25 UTC (rev 2163) +++ trunk/src/document.c 2008-01-11 17:09:23 UTC (rev 2164) @@ -494,7 +494,7 @@ g_free(doc_list[idx].encoding); g_free(doc_list[idx].saved_encoding.encoding); g_free(doc_list[idx].file_name); - tm_workspace_remove_object(doc_list[idx].tm_file, TRUE); + tm_workspace_remove_object(doc_list[idx].tm_file, TRUE, TRUE);
doc_list[idx].is_valid = FALSE; doc_list[idx].sci = NULL; @@ -1943,7 +1943,7 @@ // delete tm file object to force creation of a new one if (doc_list[idx].tm_file != NULL) { - tm_workspace_remove_object(doc_list[idx].tm_file, TRUE); + tm_workspace_remove_object(doc_list[idx].tm_file, TRUE, TRUE); doc_list[idx].tm_file = NULL; } highlighting_set_styles(doc_list[idx].sci, type->id);
Modified: trunk/src/plugindata.h =================================================================== --- trunk/src/plugindata.h 2008-01-11 16:53:25 UTC (rev 2163) +++ trunk/src/plugindata.h 2008-01-11 17:09:23 UTC (rev 2164) @@ -93,12 +93,12 @@
/* The API version should be incremented whenever any plugin data types below are * modified or appended to. */ -static const gint api_version = 37; +static const gint api_version = 38;
/* The ABI version should be incremented whenever existing fields in the plugin * data types below have to be changed or reordered. It should stay the same if fields * are only appended, as this doesn't affect existing fields. */ -static const gint abi_version = 19; +static const gint abi_version = 20;
/* This performs runtime checks that try to ensure: * 1. Geany ABI data types are compatible with this plugin. @@ -373,7 +373,7 @@ gboolean (*source_file_update) (TMWorkObject *source_file, gboolean force, gboolean recurse, gboolean update_parent); void (*work_object_free) (gpointer work_object); - gboolean (*workspace_remove_object) (TMWorkObject *w, gboolean do_free); + gboolean (*workspace_remove_object) (TMWorkObject *w, gboolean do_free, gboolean update); } TagManagerFuncs;
Modified: trunk/tagmanager/include/tm_workspace.h =================================================================== --- trunk/tagmanager/include/tm_workspace.h 2008-01-11 16:53:25 UTC (rev 2163) +++ trunk/tagmanager/include/tm_workspace.h 2008-01-11 17:09:23 UTC (rev 2164) @@ -79,9 +79,10 @@ /*! Removes a member object from the workspace if it exists. \param work_object Pointer to the work object to be removed. \param free Whether the work object is to be freed as well. + \param update Whether to update workspace objects. \return TRUE on success, FALSE on failure (e.g. the work object does not exist). */ -gboolean tm_workspace_remove_object(TMWorkObject *work_object, gboolean free); +gboolean tm_workspace_remove_object(TMWorkObject *work_object, gboolean free, gboolean update);
/*! Loads the global tag list from the specified file. The global tag list should have been first created using tm_workspace_create_global_tags().
Modified: trunk/tagmanager/tm_project.c =================================================================== --- trunk/tagmanager/tm_project.c 2008-01-11 16:53:25 UTC (rev 2163) +++ trunk/tagmanager/tm_project.c 2008-01-11 17:09:23 UTC (rev 2164) @@ -139,7 +139,7 @@ tm_source_file_free(project->file_list->pdata[i]); g_ptr_array_free(project->file_list, TRUE); } - tm_workspace_remove_object(TM_WORK_OBJECT(project), FALSE); + tm_workspace_remove_object(TM_WORK_OBJECT(project), FALSE, TRUE); g_free(project->dir); tm_work_object_destroy(&(project->work_object)); } @@ -175,7 +175,7 @@ #ifdef TM_DEBUG g_message("%s moved from workspace to project", path); #endif - tm_workspace_remove_object(source_file, FALSE); + tm_workspace_remove_object(source_file, FALSE, TRUE); } else if (TM_WORK_OBJECT(project) == source_file->parent) {
Modified: trunk/tagmanager/tm_workspace.c =================================================================== --- trunk/tagmanager/tm_workspace.c 2008-01-11 16:53:25 UTC (rev 2163) +++ trunk/tagmanager/tm_workspace.c 2008-01-11 17:09:23 UTC (rev 2164) @@ -98,12 +98,14 @@ return TRUE; }
-gboolean tm_workspace_remove_object(TMWorkObject *w, gboolean do_free) +gboolean tm_workspace_remove_object(TMWorkObject *w, gboolean do_free, gboolean update) { guint i; if ((NULL == theWorkspace) || (NULL == theWorkspace->work_objects) || (NULL == w)) return FALSE; + + for (i=0; i < theWorkspace->work_objects->len; ++i) { if (theWorkspace->work_objects->pdata[i] == w) @@ -111,10 +113,12 @@ if (do_free) tm_work_object_free(w); g_ptr_array_remove_index_fast(theWorkspace->work_objects, i); - tm_workspace_update(TM_WORK_OBJECT(theWorkspace), TRUE, FALSE, FALSE); + if (update) + tm_workspace_update(TM_WORK_OBJECT(theWorkspace), TRUE, FALSE, FALSE); return TRUE; } } + return FALSE; }
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.