anjuta r4059 - in trunk: . libanjuta plugins/language-support-cpp-java plugins/symbol-db plugins/symbol-db/test plugins/valgrind
- From: jhs svn gnome org
- To: svn-commits-list gnome org
- Subject: anjuta r4059 - in trunk: . libanjuta plugins/language-support-cpp-java plugins/symbol-db plugins/symbol-db/test plugins/valgrind
- Date: Sat, 5 Jul 2008 18:15:33 +0000 (UTC)
Author: jhs
Date: Sat Jul 5 18:15:33 2008
New Revision: 4059
URL: http://svn.gnome.org/viewvc/anjuta?rev=4059&view=rev
Log:
2008-07-05 Massimo Cora\' <maxcvs email it>
* libanjuta/anjuta-utils.c (anjuta_util_parse_args_from_string):
fixed a little mem-leak.
* plugins/symbol-db/Makefile.am:
* plugins/symbol-db/anjuta-symbol-db.glade:
* plugins/symbol-db/plugin.c (on_editor_update_ui),
(on_char_added), (on_project_element_added),
(on_project_element_removed), (on_system_scan_package_start),
(on_system_scan_package_end), (on_system_single_file_scan_end),
(on_project_single_file_scan_end), (on_importing_project_end),
(do_import_sources_after_abort), (do_import_sources),
(on_project_root_added), (on_project_root_removed),
(symbol_db_activate), (symbol_db_deactivate),
(symbol_db_instance_init), (isymbol_manager_search):
* plugins/symbol-db/plugin.h:
* plugins/symbol-db/symbol-db-engine.c
(sdb_engine_disconnect_from_db), (sdb_engine_populate_db_by_tags),
(sdb_engine_ctags_output_thread), (sdb_engine_scan_files_1),
(symbol_db_engine_new), (sdb_engine_create_db_tables),
(symbol_db_engine_db_exists), (symbol_db_engine_file_exists),
(symbol_db_engine_project_exists),
(symbol_db_engine_add_new_project), (sdb_engine_add_new_file),
(symbol_db_engine_add_new_files), (sdb_engine_add_new_sym_type),
(sdb_engine_add_new_sym_kind), (sdb_engine_add_new_sym_access),
(sdb_engine_add_new_sym_implementation),
(sdb_engine_add_new_scope_definition),
(sdb_engine_add_new_tmp_heritage_scope),
(sdb_engine_add_new_symbol),
(symbol_db_engine_update_project_symbols),
(on_scan_update_buffer_end),
(symbol_db_engine_update_buffer_symbols),
(symbol_db_engine_get_full_local_path),
(symbol_db_engine_get_file_db_path),
(symbol_db_engine_get_files_with_zero_symbols),
(symbol_db_engine_get_file_symbols),
(symbol_db_engine_find_symbol_by_name_pattern_filtered):
* plugins/symbol-db/symbol-db-engine.h:
* plugins/symbol-db/symbol-db-prefs.c (destroy_parseable_data),
(on_listall_output), (on_listall_exit),
(on_tag_load_toggled_parseable_cb), (on_tag_load_toggled),
(symbol_db_prefs_init), (symbol_db_prefs_finalize):
* plugins/symbol-db/symbol-db-prefs.h:
* plugins/symbol-db/symbol-db-system.c (destroy_single_scan_data),
(destroy_engine_scan_data), (sdb_system_init),
(sdb_system_finalize), (sdb_system_class_init),
(sdb_system_get_normalized_cflags),
(on_engine_package_single_file_scan_end), (symbol_db_system_new),
(symbol_db_system_is_package_parsed), (on_pkg_config_output),
(sdb_system_files_visit_dir), (prepare_files_to_be_scanned),
(on_engine_package_scan_end), (sdb_system_do_scan_package_1),
(sdb_system_do_scan_next_package),
(sdb_system_do_scan_new_package), (on_pkg_config_exit),
(symbol_db_system_scan_package),
(symbol_db_system_is_package_parseable):
* plugins/symbol-db/symbol-db-system.h:
* plugins/symbol-db/symbol-db-view.h:
* plugins/symbol-db/test/Makefile.am:
* plugins/symbol-db/test/benchmark.c (on_scan_end), (main):
* plugins/symbol-db/test/main.c (add_new_files):
brand-new system tags population system. It\'s still not completed. It crashes
with libgda svn 3174: probably there\'s some thread bug on this library and
must be fixed. The crash happens when system tags and project tags are scanned
concurrently. It\'s a random crash, so it\'s not possible to find a point.
Preferences page now support check-box toggle population. Anyway it\'s still
missing a save-on-session method... to be implemented soon.
* plugins/valgrind/preferences.c (build_general_prefs):
be sure to set the correct executable path.
Modified:
trunk/ChangeLog
trunk/libanjuta/anjuta-utils.c
trunk/plugins/language-support-cpp-java/cpp-java-assist.c
trunk/plugins/symbol-db/Makefile.am
trunk/plugins/symbol-db/anjuta-symbol-db.glade
trunk/plugins/symbol-db/plugin.c
trunk/plugins/symbol-db/plugin.h
trunk/plugins/symbol-db/symbol-db-engine.c
trunk/plugins/symbol-db/symbol-db-engine.h
trunk/plugins/symbol-db/symbol-db-prefs.c
trunk/plugins/symbol-db/symbol-db-prefs.h
trunk/plugins/symbol-db/symbol-db-view.h
trunk/plugins/symbol-db/test/Makefile.am
trunk/plugins/symbol-db/test/benchmark.c
trunk/plugins/symbol-db/test/main.c
trunk/plugins/valgrind/preferences.c
Modified: trunk/libanjuta/anjuta-utils.c
==============================================================================
--- trunk/libanjuta/anjuta-utils.c (original)
+++ trunk/libanjuta/anjuta-utils.c Sat Jul 5 18:15:33 2008
@@ -995,6 +995,7 @@
if (is_quote) {
g_warning ("Unclosed quotation encountered at the end of parsing");
}
+ g_free (buffer);
return args;
}
Modified: trunk/plugins/language-support-cpp-java/cpp-java-assist.c
==============================================================================
--- trunk/plugins/language-support-cpp-java/cpp-java-assist.c (original)
+++ trunk/plugins/language-support-cpp-java/cpp-java-assist.c Sat Jul 5 18:15:33 2008
@@ -300,7 +300,7 @@
{
g_free (assist->priv->scope_context_cache);
assist->priv->scope_context_cache = NULL;
- }
+ }
if (assist->priv->completion_cache)
{
GList* items = assist->priv->completion_cache->items;
Modified: trunk/plugins/symbol-db/Makefile.am
==============================================================================
--- trunk/plugins/symbol-db/Makefile.am (original)
+++ trunk/plugins/symbol-db/Makefile.am Sat Jul 5 18:15:33 2008
@@ -1,6 +1,6 @@
if HAVE_PLUGIN_SYMBOL_DB
-SUBDIRS = test
+#SUBDIRS = test
symbol_db_datadir = $(anjuta_data_dir)
symbol_db_data_DATA = tables.sql
@@ -54,10 +54,11 @@
symbol-db-view-locals.h \
symbol-db-view-search.h \
symbol-db-view-search.c \
- symbol-db-engine-iterator-node.h \
+ symbol-db-engine-iterator-node.h \
symbol-db-engine-iterator-node.c \
symbol-db-prefs.c \
- symbol-db-prefs.h
+ symbol-db-prefs.h symbol-db-system.h \
+ symbol-db-system.c
libanjuta_symbol_db_la_LDFLAGS = $(ANJUTA_PLUGIN_LDFLAGS)
Modified: trunk/plugins/symbol-db/anjuta-symbol-db.glade
==============================================================================
--- trunk/plugins/symbol-db/anjuta-symbol-db.glade (original)
+++ trunk/plugins/symbol-db/anjuta-symbol-db.glade Sat Jul 5 18:15:33 2008
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
-<!--Generated with glade3 3.2.2 on Tue Feb 19 21:47:46 2008 by pescio darkslack-->
+<!--Generated with glade3 3.4.4 on Tue Jul 1 00:29:01 2008 -->
<glade-interface>
<widget class="GtkWindow" id="symbol_db_pref_window">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
@@ -12,6 +12,7 @@
<widget class="GtkFrame" id="frame1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label_xalign">0</property>
<property name="shadow_type">GTK_SHADOW_NONE</property>
<child>
<widget class="GtkAlignment" id="alignment1">
@@ -38,8 +39,8 @@
<widget class="GtkFileChooserButton" id="preferences_folder:text:/:0:symboldb.root">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="preview_widget_active">False</property>
<property name="use_preview_label">False</property>
+ <property name="preview_widget_active">False</property>
<property name="title" translatable="yes">Choose Ctags executable</property>
</widget>
<packing>
@@ -73,6 +74,7 @@
<widget class="GtkFrame" id="frame2">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label_xalign">0</property>
<property name="shadow_type">GTK_SHADOW_NONE</property>
<child>
<widget class="GtkAlignment" id="alignment2">
@@ -165,6 +167,44 @@
<property name="position">1</property>
</packing>
</child>
+ <child>
+ <widget class="GtkFrame" id="frame3">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkAlignment" id="alignment3">
+ <property name="visible">True</property>
+ <property name="left_padding">12</property>
+ <child>
+ <widget class="GtkHBox" id="hbox3">
+ <property name="visible">True</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <widget class="GtkProgressBar" id="prefs_progressbar">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="show_text">True</property>
+ <property name="text" translatable="yes">Checking if package is parseable...</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_END</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <placeholder/>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
</widget>
</child>
</widget>
Modified: trunk/plugins/symbol-db/plugin.c
==============================================================================
--- trunk/plugins/symbol-db/plugin.c (original)
+++ trunk/plugins/symbol-db/plugin.c Sat Jul 5 18:15:33 2008
@@ -57,6 +57,7 @@
#define CHOOSER_WIDGET "preferences_folder:text:/:0:symboldb.root"
#define LOCAL_ANJUTA_GLOBAL_DB_DIRECTORY "/.anjuta"
+#define PROJECT_GLOBALS "/"
static gpointer parent_class;
@@ -199,42 +200,12 @@
{
g_timer_reset (timer);
}
-
-#if 0
- gint lineno = ianjuta_editor_get_lineno (editor, NULL);
-
- GtkTreeModel* model = anjuta_symbol_view_get_file_symbol_model
- (ANJUTA_SYMBOL_VIEW(sv_plugin->sv_tree));
- GtkTreeIter iter;
- gboolean found = FALSE;
-
- if (sv_plugin->locals_line_number == lineno)
- return;
- sv_plugin->locals_line_number = lineno;
-
- if (!gtk_tree_model_get_iter_first (model, &iter))
- return;
- while (!found && lineno >= 0)
- {
- gtk_tree_model_get_iter_first (model, &iter);
- do
- {
- found = iter_matches (sv_plugin, &iter, model, lineno);
- if (found)
- break;
- }
- while (gtk_tree_model_iter_next (model, &iter));
- lineno--;
- }
-#endif
}
static void
on_char_added (IAnjutaEditor *editor, IAnjutaIterable *position, gchar ch,
SymbolDBPlugin *sdb_plugin)
{
- DEBUG_PRINT ("char added: %c [int %d]", ch, ch);
-
if (timer == NULL)
{
/* creates and start a new timer. */
@@ -663,10 +634,6 @@
g_ptr_array_add (files_array, filename);
g_ptr_array_add (languages_array, g_strdup (lang));
- DEBUG_PRINT ("gonna opening %s",
- filename + strlen(sdb_plugin->project_root_dir) );
- DEBUG_PRINT ("project_root_dir %s", sdb_plugin->project_root_dir );
-
symbol_db_engine_add_new_files (sdb_plugin->sdbe_project,
sdb_plugin->project_opened, files_array, languages_array, TRUE);
@@ -675,17 +642,16 @@
g_ptr_array_foreach (languages_array, (GFunc)g_free, NULL);
g_ptr_array_free (languages_array, TRUE);
-
}
}
static void
on_project_element_removed (IAnjutaProjectManager *pm, const gchar *uri,
- SymbolDBPlugin *sv_plugin)
+ SymbolDBPlugin *sdb_plugin)
{
gchar *filename;
- if (!sv_plugin->project_root_uri)
+ if (!sdb_plugin->project_root_uri)
return;
filename = gnome_vfs_get_local_path_from_uri (uri);
@@ -693,10 +659,10 @@
{
DEBUG_PRINT ("on_project_element_removed");
DEBUG_PRINT ("gonna removing %s",
- filename + strlen(sv_plugin->project_root_dir));
- DEBUG_PRINT ("project_root_dir %s", sv_plugin->project_root_dir );
- symbol_db_engine_remove_file (sv_plugin->sdbe_project,
- sv_plugin->project_root_dir, filename);
+ filename + strlen(sdb_plugin->project_root_dir));
+ DEBUG_PRINT ("project_root_dir %s", sdb_plugin->project_root_dir );
+ symbol_db_engine_remove_file (sdb_plugin->sdbe_project,
+ sdb_plugin->project_root_dir, filename);
g_free (filename);
}
@@ -710,8 +676,80 @@
g_ptr_array_free (sources, TRUE);
}
+
+static void
+on_system_scan_package_start (SymbolDBEngine *dbe, guint num_files,
+ const gchar *package, gpointer user_data)
+{
+ SymbolDBPlugin *sdb_plugin;
+ sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (user_data);
+
+ sdb_plugin->files_count_system_done = 0;
+ sdb_plugin->files_count_system = num_files;
+
+ DEBUG_PRINT ("on_system_scan_package_start () [%s]", package);
+
+ /* show the global bar */
+ gtk_widget_show (sdb_plugin->progress_bar_system);
+
+ if (sdb_plugin->current_scanned_package != NULL)
+ g_free (sdb_plugin->current_scanned_package);
+ sdb_plugin->current_scanned_package = g_strdup (package);
+}
+
+static void
+on_system_scan_package_end (SymbolDBEngine *dbe, const gchar *package,
+ gpointer user_data)
+{
+ SymbolDBPlugin *sdb_plugin;
+ sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (user_data);
+
+ DEBUG_PRINT ("on_system_scan_package_end () [%s]", package);
+
+ /* hide the progress bar */
+ gtk_widget_hide (sdb_plugin->progress_bar_system);
+
+ sdb_plugin->files_count_system_done = 0;
+ sdb_plugin->files_count_system = 0;
+}
+
+static void
+on_system_single_file_scan_end (SymbolDBEngine *dbe, gpointer data)
+{
+ AnjutaPlugin *plugin;
+ SymbolDBPlugin *sdb_plugin;
+ gchar *message;
+ gdouble fraction = 0;
+
+ plugin = ANJUTA_PLUGIN (data);
+ sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (plugin);
+
+ DEBUG_PRINT ("on_system_single_file_scan_end ()");
+
+ sdb_plugin->files_count_system_done++;
+ if (sdb_plugin->files_count_system_done >= sdb_plugin->files_count_system)
+ message = g_strdup_printf (_("%s: Generating inheritances..."),
+ sdb_plugin->current_scanned_package);
+ else
+ message = g_strdup_printf (_("%s: %d files scanned out of %d"),
+ sdb_plugin->current_scanned_package,
+ sdb_plugin->files_count_system_done,
+ sdb_plugin->files_count_system);
+
+ if (sdb_plugin->files_count_system > 0)
+ {
+ fraction = (gdouble) sdb_plugin->files_count_system_done /
+ (gdouble) sdb_plugin->files_count_system;
+ }
+ gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (sdb_plugin->progress_bar_system),
+ fraction);
+ gtk_progress_bar_set_text (GTK_PROGRESS_BAR (sdb_plugin->progress_bar_system), message);
+ gtk_widget_show (sdb_plugin->progress_bar_system);
+ g_free (message);
+}
+
static void
-on_single_file_scan_end (SymbolDBEngine *dbe, gpointer data)
+on_project_single_file_scan_end (SymbolDBEngine *dbe, gpointer data)
{
AnjutaPlugin *plugin;
SymbolDBPlugin *sdb_plugin;
@@ -721,24 +759,22 @@
plugin = ANJUTA_PLUGIN (data);
sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (plugin);
- sdb_plugin->files_count_done++;
- if (sdb_plugin->files_count_done >= sdb_plugin->files_count)
+ sdb_plugin->files_count_project_done++;
+ if (sdb_plugin->files_count_project_done >= sdb_plugin->files_count_project)
message = g_strdup_printf (_("Generating inheritances..."));
else
message = g_strdup_printf (_("%d files scanned out of %d"),
- sdb_plugin->files_count_done, sdb_plugin->files_count);
+ sdb_plugin->files_count_project_done, sdb_plugin->files_count_project);
- DEBUG_PRINT ("on_single_file_scan_end (): %d out of %d", sdb_plugin->files_count_done,
- sdb_plugin->files_count);
- if (sdb_plugin->files_count > 0)
+ if (sdb_plugin->files_count_project > 0)
{
- fraction = (gdouble) sdb_plugin->files_count_done /
- (gdouble) sdb_plugin->files_count;
+ fraction = (gdouble) sdb_plugin->files_count_project_done /
+ (gdouble) sdb_plugin->files_count_project;
}
- gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (sdb_plugin->progress_bar),
+ gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (sdb_plugin->progress_bar_project),
fraction);
- gtk_progress_bar_set_text (GTK_PROGRESS_BAR (sdb_plugin->progress_bar), message);
- gtk_widget_show (sdb_plugin->progress_bar);
+ gtk_progress_bar_set_text (GTK_PROGRESS_BAR (sdb_plugin->progress_bar_project), message);
+ gtk_widget_show (sdb_plugin->progress_bar_project);
g_free (message);
}
@@ -753,7 +789,8 @@
DEBUG_PRINT ("on_importing_project_end ()");
- gtk_widget_hide (sdb_plugin->progress_bar);
+ /* hide the progress bar */
+ gtk_widget_hide (sdb_plugin->progress_bar_project);
/* re-enable signals receiving on local-view */
symbol_db_view_locals_recv_signals_from_engine (
@@ -768,13 +805,13 @@
symbol_db_view_open (SYMBOL_DB_VIEW (sdb_plugin->dbv_view_tree), sdb_plugin->sdbe_project);
/* disconnect this coz it's not important after the process of importing */
- g_signal_handlers_disconnect_by_func (dbe, on_single_file_scan_end, data);
+ g_signal_handlers_disconnect_by_func (dbe, on_project_single_file_scan_end, data);
/* disconnect it as we don't need it anymore. */
g_signal_handlers_disconnect_by_func (dbe, on_importing_project_end, data);
- sdb_plugin->files_count_done = 0;
- sdb_plugin->files_count = 0;
+ sdb_plugin->files_count_project_done = 0;
+ sdb_plugin->files_count_project = 0;
}
/* we assume that sources_array has already unique elements */
@@ -846,7 +883,7 @@
continue;
}
- sdb_plugin->files_count++;
+ sdb_plugin->files_count_project++;
g_ptr_array_add (languages_array, g_strdup (lang));
g_ptr_array_add (to_scan_array, g_strdup (local_filename));
}
@@ -855,7 +892,7 @@
* update a status bar notifying the user about the status
*/
g_signal_connect (G_OBJECT (sdb_plugin->sdbe_project), "single-file-scan-end",
- G_CALLBACK (on_single_file_scan_end), plugin);
+ G_CALLBACK (on_project_single_file_scan_end), plugin);
symbol_db_engine_add_new_files (sdb_plugin->sdbe_project, sdb_plugin->project_opened,
sources_array, languages_array, TRUE);
@@ -973,7 +1010,7 @@
if (!languages_array)
languages_array = g_ptr_array_new ();
- sdb_plugin->files_count++;
+ sdb_plugin->files_count_project++;
g_ptr_array_add (sources_array, local_filename);
g_ptr_array_add (languages_array, g_strdup (lang));
}
@@ -985,7 +1022,7 @@
* update a status bar notifying the user about the status
*/
g_signal_connect (G_OBJECT (sdb_plugin->sdbe_project), "single-file-scan-end",
- G_CALLBACK (on_single_file_scan_end), plugin);
+ G_CALLBACK (on_project_single_file_scan_end), plugin);
symbol_db_engine_add_new_files (sdb_plugin->sdbe_project, sdb_plugin->project_opened,
sources_array, languages_array, TRUE);
@@ -1001,7 +1038,7 @@
/* add a new project */
static void
-project_root_added (AnjutaPlugin *plugin, const gchar *name,
+on_project_root_added (AnjutaPlugin *plugin, const gchar *name,
const GValue *value, gpointer user_data)
{
IAnjutaProjectManager *pm;
@@ -1011,8 +1048,7 @@
sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (plugin);
pm = anjuta_shell_get_interface (ANJUTA_PLUGIN (sdb_plugin)->shell,
- IAnjutaProjectManager, NULL);
-
+ IAnjutaProjectManager, NULL);
g_free (sdb_plugin->project_root_uri);
sdb_plugin->project_root_uri = NULL;
@@ -1090,15 +1126,16 @@
/* Update the symbols */
symbol_db_engine_update_project_symbols (sdb_plugin->sdbe_project, root_dir);
}
- gtk_progress_bar_set_text (GTK_PROGRESS_BAR (sdb_plugin->progress_bar),
+ gtk_progress_bar_set_text (GTK_PROGRESS_BAR (sdb_plugin->progress_bar_project),
_("Populating symbols' db..."));
- id = g_idle_add ((GSourceFunc) gtk_progress_bar_pulse, sdb_plugin->progress_bar);
- gtk_widget_show (sdb_plugin->progress_bar);
+ id = g_idle_add ((GSourceFunc) gtk_progress_bar_pulse,
+ sdb_plugin->progress_bar_project);
+ gtk_widget_show (sdb_plugin->progress_bar_project);
symbol_db_view_open (SYMBOL_DB_VIEW (sdb_plugin->dbv_view_tree),
sdb_plugin->sdbe_project);
g_source_remove (id);
- gtk_widget_hide (sdb_plugin->progress_bar);
+ gtk_widget_hide (sdb_plugin->progress_bar_project);
/* root dir */
sdb_plugin->project_root_dir = root_dir;
@@ -1113,10 +1150,29 @@
G_CALLBACK (on_project_element_added), sdb_plugin);
g_signal_connect (G_OBJECT (pm), "element_removed",
G_CALLBACK (on_project_element_removed), sdb_plugin);
+
+ gtk_widget_hide (sdb_plugin->progress_bar_system);
+#if 0
+//FIXME libgda thread bug.
+ /* system's packages management */
+ GList* packages = ianjuta_project_manager_get_packages (pm, NULL);
+ GList *item = packages;
+ while (item != NULL)
+ {
+ /* the function will take care of checking if the package is already
+ * scanned and present on db
+ */
+ DEBUG_PRINT ("ianjuta_project_manager_get_packages: package required: %s",
+ (gchar*)item->data);
+ symbol_db_system_scan_package (sdb_plugin->sdbs, item->data);
+
+ item = item->next;
+ }
+#endif
}
static void
-project_root_removed (AnjutaPlugin *plugin, const gchar *name,
+on_project_root_removed (AnjutaPlugin *plugin, const gchar *name,
gpointer user_data)
{
IAnjutaProjectManager *pm;
@@ -1175,6 +1231,9 @@
symbol_db->prefs_list_store = NULL;
symbol_db->pkg_config_launcher = NULL;
symbol_db->project_opened = NULL;
+
+ /* create mutex. Without this libgda'll crash on multithread environment */
+/* symbol_db->engine_mutex = g_mutex_new ();*/
/* create SymbolDBEngine(s) */
symbol_db->sdbe_project = symbol_db_engine_new ();
@@ -1185,20 +1244,37 @@
home_anjuta_dir = g_strdup_printf ("%s%s", g_get_home_dir(),
LOCAL_ANJUTA_GLOBAL_DB_DIRECTORY);
symbol_db_engine_open_db (symbol_db->sdbe_globals,
- home_anjuta_dir, "/");
+ home_anjuta_dir,
+ PROJECT_GLOBALS);
g_free (home_anjuta_dir);
+ /* create the object that'll manage the globals population */
+ symbol_db->sdbs = symbol_db_system_new (symbol_db, symbol_db->sdbe_globals);
+
+ g_signal_connect (G_OBJECT (symbol_db->sdbs), "scan-package-start",
+ G_CALLBACK (on_system_scan_package_start), plugin);
+
+ g_signal_connect (G_OBJECT (symbol_db->sdbs), "scan-package-end",
+ G_CALLBACK (on_system_scan_package_end), plugin);
+
+ g_signal_connect (G_OBJECT (symbol_db->sdbs), "single-file-scan-end",
+ G_CALLBACK (on_system_single_file_scan_end), plugin);
/* Create widgets */
symbol_db->dbv_main = gtk_vbox_new(FALSE, 5);
symbol_db->dbv_notebook = gtk_notebook_new();
- symbol_db->progress_bar = gtk_progress_bar_new();
- g_object_ref (symbol_db->progress_bar);
+ symbol_db->progress_bar_project = gtk_progress_bar_new();
+ g_object_ref (symbol_db->progress_bar_project);
+ symbol_db->progress_bar_system = gtk_progress_bar_new();
+ g_object_ref (symbol_db->progress_bar_system);
+
gtk_box_pack_start (GTK_BOX (symbol_db->dbv_main), symbol_db->dbv_notebook,
TRUE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (symbol_db->dbv_main), symbol_db->progress_bar,
+ gtk_box_pack_start (GTK_BOX (symbol_db->dbv_main), symbol_db->progress_bar_project,
FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (symbol_db->dbv_main), symbol_db->progress_bar_system,
+ FALSE, FALSE, 0);
gtk_widget_show_all (symbol_db->dbv_main);
/* Local symbols */
@@ -1298,8 +1374,8 @@
/* set up project directory watch */
symbol_db->root_watch_id = anjuta_plugin_add_watch (plugin,
IANJUTA_PROJECT_MANAGER_PROJECT_ROOT_URI,
- project_root_added,
- project_root_removed, NULL);
+ on_project_root_added,
+ on_project_root_removed, NULL);
/* Determine session state */
@@ -1323,6 +1399,11 @@
DEBUG_PRINT ("SymbolDBPlugin: destroying engine ...");
g_object_unref (sdb_plugin->sdbe_project);
sdb_plugin->sdbe_project = NULL;
+
+ /* this must be done *bedore* destroying sdbe_globals */
+ g_object_unref (sdb_plugin->sdbs);
+ sdb_plugin->sdbs = NULL;
+ g_free (sdb_plugin->current_scanned_package);
g_object_unref (sdb_plugin->sdbe_globals);
sdb_plugin->sdbe_globals = NULL;
@@ -1352,8 +1433,8 @@
{
g_object_unref (sdb_plugin->pkg_config_launcher);
sdb_plugin->pkg_config_launcher = NULL;
- }
-
+ }
+
if (sdb_plugin->prefs_list_store)
{
g_object_unref (sdb_plugin->prefs_list_store);
@@ -1365,9 +1446,13 @@
anjuta_plugin_remove_watch (plugin, sdb_plugin->editor_watch_id, TRUE);
/* Remove widgets: Widgets will be destroyed when dbv_main is removed */
- g_object_unref (sdb_plugin->progress_bar);
+ g_object_unref (sdb_plugin->progress_bar_project);
+ g_object_unref (sdb_plugin->progress_bar_system);
anjuta_shell_remove_widget (plugin->shell, sdb_plugin->dbv_main, NULL);
+ /* delete mutexes */
+/* g_mutex_free (sdb_plugin->engine_mutex);*/
+
sdb_plugin->root_watch_id = 0;
sdb_plugin->editor_watch_id = 0;
sdb_plugin->dbv_notebook = NULL;
@@ -1379,7 +1464,8 @@
sdb_plugin->dbv_view_locals_tab_label = NULL;
sdb_plugin->dbv_view_tree_search = NULL;
sdb_plugin->dbv_view_search_tab_label = NULL;
- sdb_plugin->progress_bar = NULL;
+ sdb_plugin->progress_bar_project = NULL;
+ sdb_plugin->progress_bar_system = NULL;
return TRUE;
}
@@ -1403,8 +1489,12 @@
{
SymbolDBPlugin *plugin = (SymbolDBPlugin*)obj;
- plugin->files_count_done = 0;
- plugin->files_count = 0;
+ plugin->files_count_project_done = 0;
+ plugin->files_count_project = 0;
+
+ plugin->files_count_system_done = 0;
+ plugin->files_count_system = 0;
+ plugin->current_scanned_package = NULL;
}
static void
@@ -1475,13 +1565,6 @@
/* global_tags scan */
/* the only parameters to change is the engine, dbe_globals */
DEBUG_PRINT ("global_tags scan ");
- gint i;
-
- /* FIXME REMOVE ME */
- for (i = 0; i < filter_array->len; i++)
- {
- DEBUG_PRINT ("filter%d = %s", i, g_ptr_array_index (filter_array, i));
- }
iterator =
symbol_db_engine_find_symbol_by_name_pattern_filtered (dbe_globals,
Modified: trunk/plugins/symbol-db/plugin.h
==============================================================================
--- trunk/plugins/symbol-db/plugin.h (original)
+++ trunk/plugins/symbol-db/plugin.h Sat Jul 5 18:15:33 2008
@@ -30,6 +30,7 @@
#include "symbol-db-engine.h"
#include "symbol-db-engine-iterator.h"
+
G_BEGIN_DECLS
extern GType symbol_db_get_type (GTypeModule *module);
@@ -44,6 +45,9 @@
typedef struct _SymbolDBPlugin SymbolDBPlugin;
typedef struct _SymbolDBPluginClass SymbolDBPluginClass;
+
+#include "symbol-db-system.h"
+
struct _SymbolDBPlugin{
AnjutaPlugin parent;
AnjutaUI *ui;
@@ -67,6 +71,7 @@
/* global's one */
SymbolDBEngine *sdbe_globals;
+ SymbolDBSystem *sdbs;
GtkWidget *dbv_main; /* symbol main window [gtk_box] */
GtkWidget *dbv_notebook; /* main notebook */
@@ -74,7 +79,8 @@
symbols */
GtkWidget *scrolled_locals;
GtkWidget *scrolled_search;
- GtkWidget *progress_bar; /* symbol db progress bar */
+ GtkWidget *progress_bar_project; /* symbol db progress bar - project */
+ GtkWidget *progress_bar_system; /* symbol db progress bar - system (globals) */
GtkWidget *dbv_view_tree; /* symbol_db_view */
GtkWidget *dbv_view_tab_label;
@@ -94,8 +100,14 @@
/* In session loading? */
gboolean session_loading;
- gint files_count;
- gint files_count_done;
+ gint files_count_project;
+ gint files_count_project_done;
+
+ gint files_count_system;
+ gint files_count_system_done;
+ gchar *current_scanned_package;
+
+/* GMutex* engine_mutex;*/
};
struct _SymbolDBPluginClass{
@@ -103,6 +115,7 @@
};
+
G_END_DECLS
#endif
Modified: trunk/plugins/symbol-db/symbol-db-engine.c
==============================================================================
--- trunk/plugins/symbol-db/symbol-db-engine.c (original)
+++ trunk/plugins/symbol-db/symbol-db-engine.c Sat Jul 5 18:15:33 2008
@@ -742,7 +742,7 @@
static void
sdb_engine_second_pass_do (SymbolDBEngine * dbe);
static gint
-sdb_engine_add_new_symbol (SymbolDBEngine * dbe, tagEntry * tag_entry,
+sdb_engine_add_new_symbol (SymbolDBEngine * dbe, const tagEntry * tag_entry,
int file_defined_id,
gboolean sym_update);
@@ -1173,7 +1173,6 @@
}
}
-
static gboolean
sdb_engine_disconnect_from_db (SymbolDBEngine * dbe)
{
@@ -1182,7 +1181,8 @@
g_return_val_if_fail (dbe != NULL, FALSE);
priv = dbe->priv;
- gda_connection_close (priv->db_connection);
+ if (priv->db_connection != NULL)
+ gda_connection_close (priv->db_connection);
priv->db_connection = NULL;
if (priv->sql_parser != NULL)
@@ -1528,7 +1528,6 @@
DEBUG_PRINT ("elapsed: %f for (%d) [%f per symbol]", elapsed_DEBUG,
tags_total_DEBUG, elapsed_DEBUG / tags_total_DEBUG);
- DEBUG_PRINT ("EMITTING single-file-scan-end");
/* notify listeners that another file has been scanned */
g_async_queue_push (priv->signals_queue, (gpointer)(SINGLE_FILE_SCAN_END +1));
}
@@ -1574,7 +1573,6 @@
{
gint scan_flag;
gchar *real_file;
- DEBUG_PRINT ("found marker!");
/* set the length of the string parsed */
tmp_str_length = marker_ptr - chars_ptr;
@@ -1954,8 +1952,25 @@
if (priv->shared_mem_file == 0)
{
gchar *temp_file;
- temp_file = g_strdup_printf ("/anjuta-%d_%ld.tags", getpid (),
- time (NULL));
+ while (TRUE)
+ {
+ temp_file = g_strdup_printf ("/anjuta-%d_%ld.tags", getpid (),
+ time (NULL));
+ gchar *test;
+ test = g_strconcat (SHARED_MEMORY_PREFIX, temp_file, NULL);
+ if (g_file_test (test, G_FILE_TEST_EXISTS) == TRUE)
+ {
+ DEBUG_PRINT ("file %s already exists... retrying", test);
+ g_free (test);
+ g_free (temp_file);
+ continue;
+ }
+ else
+ {
+ g_free (test);
+ break;
+ }
+ }
priv->shared_mem_str = temp_file;
@@ -1974,8 +1989,6 @@
priv->scanning_status = TRUE;
- DEBUG_PRINT ("sdb_engine_scan_files_1 (): PUSHING files_list->len %d to scan",
- files_list->len);
for (i = 0; i < files_list->len; i++)
{
gchar *node = (gchar *) g_ptr_array_index (files_list, i);
@@ -2314,11 +2327,15 @@
}
SymbolDBEngine *
-symbol_db_engine_new (void)
+symbol_db_engine_new ()
{
SymbolDBEngine *sdbe;
+ SymbolDBEnginePriv *priv;
sdbe = g_object_new (SYMBOL_TYPE_DB_ENGINE, NULL);
+
+ priv = sdbe->priv;
+ priv->mutex = g_mutex_new ();
return sdbe;
}
@@ -2418,13 +2435,6 @@
sdb_engine_execute_non_select_sql (dbe, contents);
- /*
- command = gda_command_new (contents, GDA_COMMAND_TYPE_SQL,
- GDA_COMMAND_OPTION_STOP_ON_ERRORS);
- gda_connection_execute_non_select_command (priv->db_connection, command,
- NULL, NULL);
- gda_command_free (command);
-*/
g_free (contents);
return TRUE;
}
@@ -2451,13 +2461,61 @@
g_free (tmp_file);
return FALSE;
}
-
- DEBUG_PRINT ("db %s does exist", tmp_file);
- g_free (tmp_file);
+ g_free (tmp_file);
return TRUE;
}
+/**
+ * Check if a file is already present [and scanned] in db.
+ */
+gboolean
+symbol_db_engine_file_exists (SymbolDBEngine * dbe, const gchar * abs_file_path)
+{
+ SymbolDBEnginePriv *priv;
+ gchar *relative;
+ gint file_defined_id;
+ GValue *value;
+
+ g_return_val_if_fail (dbe != NULL, FALSE);
+ g_return_val_if_fail (abs_file_path != NULL, FALSE);
+
+ priv = dbe->priv;
+
+ if (priv->mutex)
+ {
+ g_mutex_lock (priv->mutex);
+ }
+
+ relative = symbol_db_engine_get_file_db_path (dbe, abs_file_path);
+ if (relative == NULL)
+ {
+ if (priv->mutex)
+ g_mutex_unlock (priv->mutex);
+ return FALSE;
+ }
+ value = gda_value_new (G_TYPE_STRING);
+ g_value_set_string (value, relative);
+
+ if ((file_defined_id = sdb_engine_get_tuple_id_by_unique_name (dbe,
+ PREP_QUERY_GET_FILE_ID_BY_UNIQUE_NAME,
+ "filepath",
+ value)) < 0)
+ {
+ g_free (relative);
+ gda_value_free (value);
+ if (priv->mutex)
+ g_mutex_unlock (priv->mutex);
+ return FALSE;
+ }
+
+ g_free (relative);
+ gda_value_free (value);
+ if (priv->mutex)
+ g_mutex_unlock (priv->mutex);
+ return TRUE;
+}
+
gboolean
symbol_db_engine_close_db (SymbolDBEngine *dbe)
{
@@ -2598,7 +2656,8 @@
"prjname",
value)) <= 0)
{
- DEBUG_PRINT ("symbol_db_engine_open_project (): no project name found");
+ DEBUG_PRINT ("symbol_db_engine_project_exists (): no project named %s found",
+ project_name);
gda_value_free (value);
return FALSE;
}
@@ -2649,7 +2708,7 @@
PREP_QUERY_GET_WORKSPACE_ID_BY_UNIQUE_NAME,
"wsname",
value)) <= 0)
- {
+ {
if (symbol_db_engine_add_new_workspace (dbe, workspace_name) == FALSE)
{
gda_value_free (value);
@@ -2708,12 +2767,10 @@
gda_holder_set_value (param, value);
/* execute the query with parametes just set */
- GError *err = NULL;
if (gda_connection_statement_execute_non_select (priv->db_connection,
(GdaStatement*)stmt,
- (GdaSet*)plist, NULL, &err) == -1)
+ (GdaSet*)plist, NULL, NULL) == -1)
{
- DEBUG_PRINT ("Error: %s", err->message);
gda_value_free (value);
return FALSE;
}
@@ -2825,8 +2882,8 @@
if (strstr (local_filepath, priv->project_directory) == NULL)
return FALSE;
- DEBUG_PRINT ("sdb_engine_add_new_file project_name %s local_filepath %s language %s",
- project_name, local_filepath, language);
+/* DEBUG_PRINT ("sdb_engine_add_new_file project_name %s local_filepath %s language %s",
+ project_name, local_filepath, language);*/
value = gda_value_new (G_TYPE_STRING);
g_value_set_string (value, project_name);
@@ -2846,9 +2903,14 @@
value = gda_value_new (G_TYPE_STRING);
/* we're gonna set the file relative to the project folder, not the full one.
* e.g.: we have a file on disk: "/tmp/foo/src/file.c" and a db_directory located on
- * "/tmp/foo/". The entry on db will be "/src/file.c"
+ * "/tmp/foo/". The entry on db will be "src/file.c"
*/
- g_value_set_string (value, local_filepath + strlen (priv->project_directory));
+ gchar *relative_path = symbol_db_engine_get_file_db_path (dbe, local_filepath);
+ if (relative_path == NULL)
+ {
+ return FALSE;
+ }
+ g_value_set_string (value, relative_path);
if ((file_id = sdb_engine_get_tuple_id_by_unique_name (dbe,
PREP_QUERY_GET_FILE_ID_BY_UNIQUE_NAME,
@@ -2867,6 +2929,7 @@
== NULL)
{
g_warning ("query is null");
+ g_free (relative_path);
return FALSE;
}
@@ -2876,15 +2939,17 @@
if ((param = gda_set_get_holder ((GdaSet*)plist, "filepath")) == NULL)
{
g_warning ("param langname is NULL from pquery!");
+ g_free (relative_path);
return FALSE;
}
- gda_holder_set_value_str (param, NULL, local_filepath +
- strlen(priv->project_directory));
+
+ gda_holder_set_value_str (param, NULL, relative_path);
/* project id parameter */
if ((param = gda_set_get_holder ((GdaSet*)plist, "prjid")) == NULL)
{
g_warning ("param prjid is NULL from pquery!");
+ g_free (relative_path);
return FALSE;
}
value = gda_value_new (G_TYPE_INT);
@@ -2895,6 +2960,7 @@
if ((param = gda_set_get_holder ((GdaSet*)plist, "langid")) == NULL)
{
g_warning ("param langid is NULL from pquery!");
+ g_free (relative_path);
return FALSE;
}
@@ -2904,17 +2970,17 @@
gda_value_free (value);
/* execute the query with parametes just set */
- GError *err = NULL;
if (gda_connection_statement_execute_non_select (priv->db_connection,
(GdaStatement*)stmt,
(GdaSet*)plist, NULL,
- &err) == -1)
+ NULL) == -1)
{
- DEBUG_PRINT ("Error: %s", err->message);
+ g_free (relative_path);
return FALSE;
}
}
gda_value_free (value);
+ g_free (relative_path);
return TRUE;
}
@@ -2924,11 +2990,13 @@
const gchar * project_name,
const GPtrArray * files_path,
const GPtrArray * languages,
- gboolean scan_symbols)
+ gboolean force_scan)
{
gint i;
SymbolDBEnginePriv *priv;
-
+ GPtrArray * filtered_files_path;
+ GPtrArray * filtered_languages;
+ gboolean ret_code;
g_return_val_if_fail (dbe != NULL, FALSE);
priv = dbe->priv;
@@ -2937,42 +3005,57 @@
g_return_val_if_fail (files_path->len > 0, FALSE);
g_return_val_if_fail (languages->len > 0, FALSE);
+ filtered_files_path = g_ptr_array_new ();
+ filtered_languages = g_ptr_array_new ();
+
for (i = 0; i < files_path->len; i++)
{
- gchar *node = (gchar *) g_ptr_array_index (files_path, i);
+ gchar *node_file = (gchar *) g_ptr_array_index (files_path, i);
gchar *node_lang = (gchar *) g_ptr_array_index (languages, i);
/* test the existance of node file */
- if (g_file_test (node, G_FILE_TEST_EXISTS) == FALSE)
+ if (g_file_test (node_file, G_FILE_TEST_EXISTS) == FALSE)
{
- g_warning ("File %s does NOT exist", node);
+ g_warning ("File %s does NOT exist", node_file);
continue;
}
-
- if (sdb_engine_add_new_file (dbe, project_name, node,
+
+ if (force_scan == FALSE)
+ {
+ if (symbol_db_engine_file_exists (dbe, node_file) == TRUE)
+ /* we don't want to touch the already present file... within
+ * its symbols
+ */
+ continue;
+ }
+
+ if (sdb_engine_add_new_file (dbe, project_name, node_file,
node_lang) == FALSE)
{
g_warning ("Error processing file %s, db_directory %s, project_name %s, "
- "project_directory %s", node,
+ "project_directory %s", node_file,
priv->db_directory, project_name, priv->project_directory);
return FALSE;
}
+
+ /* note: we don't use g_strdup () here because we'll free the filtered_files_path
+ * before returning from this function.
+ */
+ g_ptr_array_add (filtered_files_path, node_file);
}
/* perform the scan of files. It will spawn a fork() process with
* AnjutaLauncher and ctags in server mode. After the ctags cmd has been
* executed, the populating process'll take place.
*/
-
- if (scan_symbols)
- return sdb_engine_scan_files_1 (dbe, files_path, NULL, FALSE);
-
- return TRUE;
+ ret_code = sdb_engine_scan_files_1 (dbe, filtered_files_path, NULL, FALSE);
+ g_ptr_array_free (filtered_files_path, TRUE);
+ return ret_code;
}
static gint
-sdb_engine_add_new_sym_type (SymbolDBEngine * dbe, tagEntry * tag_entry)
+sdb_engine_add_new_sym_type (SymbolDBEngine * dbe, const tagEntry * tag_entry)
{
/*
CREATE TABLE sym_type (type_id integer PRIMARY KEY AUTOINCREMENT,
@@ -3058,7 +3141,7 @@
}
static gint
-sdb_engine_add_new_sym_kind (SymbolDBEngine * dbe, tagEntry * tag_entry)
+sdb_engine_add_new_sym_kind (SymbolDBEngine * dbe, const tagEntry * tag_entry)
{
/*
CREATE TABLE sym_kind (sym_kind_id integer PRIMARY KEY AUTOINCREMENT,
@@ -3141,7 +3224,7 @@
}
static gint
-sdb_engine_add_new_sym_access (SymbolDBEngine * dbe, tagEntry * tag_entry)
+sdb_engine_add_new_sym_access (SymbolDBEngine * dbe, const tagEntry * tag_entry)
{
/*
CREATE TABLE sym_access (access_kind_id integer PRIMARY KEY AUTOINCREMENT,
@@ -3227,7 +3310,7 @@
static gint
sdb_engine_add_new_sym_implementation (SymbolDBEngine * dbe,
- tagEntry * tag_entry)
+ const tagEntry * tag_entry)
{
/*
CREATE TABLE sym_implementation (sym_impl_id integer PRIMARY KEY AUTOINCREMENT,
@@ -3372,7 +3455,7 @@
static gint
-sdb_engine_add_new_scope_definition (SymbolDBEngine * dbe, tagEntry * tag_entry,
+sdb_engine_add_new_scope_definition (SymbolDBEngine * dbe, const tagEntry * tag_entry,
gint type_table_id)
{
/*
@@ -3483,7 +3566,7 @@
*/
static gint
sdb_engine_add_new_tmp_heritage_scope (SymbolDBEngine * dbe,
- tagEntry * tag_entry,
+ const tagEntry * tag_entry,
gint symbol_referer_id)
{
/*
@@ -4213,7 +4296,7 @@
* fake_file is real_path of file on disk
*/
static gint
-sdb_engine_add_new_symbol (SymbolDBEngine * dbe, tagEntry * tag_entry,
+sdb_engine_add_new_symbol (SymbolDBEngine * dbe, const tagEntry * tag_entry,
gint file_defined_id,
gboolean sym_update)
{
@@ -5098,7 +5181,7 @@
/* build abs path. */
file_name = g_value_get_string (value);
- if (priv->db_directory != NULL)
+ if (priv->project_directory != NULL)
{
/* FIXME */
abs_vfs_path = g_strdup_printf ("file://%s%s", priv->project_directory,
@@ -5252,17 +5335,23 @@
for (i = 0; i < files_to_scan->len; i++)
{
gchar *node = (gchar *) g_ptr_array_index (files_to_scan, i);
-
+
+ /* FIXME remove DEBUG_PRINT */
DEBUG_PRINT ("processing updating for file [on disk] %s, "
"passed to on_scan_update_buffer_end (): %s",
node, node + strlen (priv->db_directory));
- /* will be emitted removed signals */
- if (sdb_engine_update_file (dbe, node+
- strlen (priv->db_directory)) == FALSE)
+ gchar *relative_path = symbol_db_engine_get_file_db_path (dbe, node);
+ if (relative_path != NULL)
{
- g_warning ("Error processing file %s", node);
- return;
+ /* will be emitted removed signals */
+ if (sdb_engine_update_file (dbe, relative_path) == FALSE)
+ {
+ g_warning ("Error processing file %s", node);
+ g_free (relative_path);
+ return;
+ }
+ g_free (relative_path);
}
g_free (node);
}
@@ -5271,10 +5360,8 @@
files_to_scan);
/* free the GPtrArray. */
- DEBUG_PRINT ("free the files_to_scan");
g_ptr_array_free (files_to_scan, TRUE);
data = files_to_scan = NULL;
- DEBUG_PRINT ("done");
}
/* Update symbols of a file by a memory-buffer to perform a real-time updating
@@ -5311,10 +5398,15 @@
/* obtain a GPtrArray with real_files on database */
for (i=0; i < real_files_list->len; i++)
{
- gchar *new_node = (gchar*)g_ptr_array_index (real_files_list, i)
- + strlen (priv->db_directory);
-
- g_ptr_array_add (real_files_on_db, g_strdup (new_node));
+ gchar *relative_path = symbol_db_engine_get_file_db_path (dbe,
+ g_ptr_array_index (real_files_list, i));
+ if (relative_path == NULL)
+ {
+ g_warning ("symbol_db_engine_update_buffer_symbols (): "
+ "relative_path is NULL");
+ return FALSE;
+ }
+ g_ptr_array_add (real_files_on_db, relative_path);
}
/* create a temporary file for each buffer */
@@ -5361,8 +5453,7 @@
/* check if we already have an entry stored in the hash table, else
* insert it
- */
-
+ */
if (g_hash_table_lookup (priv->garbage_shared_mem_files, shared_temp_file)
== NULL)
{
@@ -5399,8 +5490,6 @@
g_free (g_ptr_array_index (real_files_on_db, i));
g_ptr_array_free (real_files_on_db, TRUE);
-
-
return TRUE;
}
@@ -5425,7 +5514,7 @@
g_return_val_if_fail (dbe != NULL, NULL);
priv = dbe->priv;
- full_path = g_strdup_printf ("%s%s", priv->db_directory, file);
+ full_path = g_strdup_printf ("%s%s", priv->project_directory, file);
return full_path;
}
@@ -5442,12 +5531,12 @@
if (priv->db_directory == NULL)
return NULL;
- if (strlen (priv->db_directory) >= strlen (full_local_file_path))
+ if (strlen (priv->project_directory) >= strlen (full_local_file_path))
{
return NULL;
}
- tmp = full_local_file_path + strlen (priv->db_directory);
+ tmp = full_local_file_path + strlen (priv->project_directory);
relative_path = strdup (tmp);
return relative_path;
@@ -5617,7 +5706,7 @@
file_name = g_value_get_string (value);
if (priv->db_directory != NULL)
{
- file_abs_path = g_strdup_printf ("%s%s", priv->db_directory,
+ file_abs_path = g_strdup_printf ("%s%s", priv->project_directory,
file_name);
}
g_ptr_array_add (files_to_scan, file_abs_path);
@@ -7035,16 +7124,17 @@
return NULL;
}
- if (strlen (file_path) < strlen(priv->db_directory))
+ gchar *relative_path = symbol_db_engine_get_file_db_path (dbe, file_path);
+ if (relative_path == NULL)
{
- DEBUG_PRINT ("strlen (file_path) < strlen(priv->db_directory)");
if (priv->mutex)
- g_mutex_unlock (priv->mutex);
+ g_mutex_unlock (priv->mutex);
return NULL;
}
-
- gda_holder_set_value_str (param, NULL, file_path + strlen(priv->db_directory));
-
+
+ gda_holder_set_value_str (param, NULL, relative_path);
+ g_free (relative_path);
+
/* execute the query with parametes just set */
data = gda_connection_statement_execute_select (priv->db_connection,
(GdaStatement*)dyn_node->stmt,
@@ -7844,9 +7934,8 @@
gda_holder_set_value_str (param, NULL, pattern);
-
- DEBUG_PRINT ("symbol_db_engine_find_symbol_by_name_pattern_filtered query: %s",
- dyn_node->query_str);
+/* DEBUG_PRINT ("symbol_db_engine_find_symbol_by_name_pattern_filtered query: %s",
+ dyn_node->query_str);*/
/* execute the query with parametes just set */
data = gda_connection_statement_execute_select (priv->db_connection,
Modified: trunk/plugins/symbol-db/symbol-db-engine.h
==============================================================================
--- trunk/plugins/symbol-db/symbol-db-engine.h (original)
+++ trunk/plugins/symbol-db/symbol-db-engine.h Sat Jul 5 18:15:33 2008
@@ -48,8 +48,8 @@
GObjectClass parent_class;
/* signals */
- void (* single_file_scan_end) ();
- void (* scan_end) ();
+ void (* single_file_scan_end) ();
+ void (* scan_end) ();
void (* symbol_inserted) (gint symbol_id);
void (* symbol_updated) (gint symbol_id);
void (* symbol_scope_updated) (gint symbol_id); /* never emitted. */
@@ -82,7 +82,7 @@
GType sdb_engine_get_type (void) G_GNUC_CONST;
-SymbolDBEngine* symbol_db_engine_new (void);
+SymbolDBEngine* symbol_db_engine_new ();
/**
@@ -115,13 +115,18 @@
gboolean
symbol_db_engine_close_db (SymbolDBEngine *dbe);
-
/**
* Check if the database already exists into the db_directory
*/
gboolean
symbol_db_engine_db_exists (SymbolDBEngine * dbe, const gchar * db_directory);
+/**
+ * Check if a file is already present [and scanned] in db.
+ */
+gboolean
+symbol_db_engine_file_exists (SymbolDBEngine * dbe, const gchar * abs_file_path);
+
/** Add a new workspace to an opened database. */
gboolean
symbol_db_engine_add_new_workspace (SymbolDBEngine *dbe, const gchar* workspace);
@@ -161,6 +166,8 @@
* elments that files_path has. It should be populated like this: "C", "C++",
* "Java"
* This is done to be uniform to the language-manager plugin.
+ * @param force_scan If FALSE a check on db will be done to see
+ * whether the file is already present or not.
* @return true is insertion is successful.
*/
gboolean
@@ -168,7 +175,7 @@
const gchar * project_name,
const GPtrArray *files_path,
const GPtrArray *languages,
- gboolean scan_symbols);
+ gboolean force_scan);
/**
* Update symbols of the whole project. It scans all file symbols etc.
@@ -397,4 +404,3 @@
#endif /* _SYMBOL_DB_ENGINE_H_ */
-
Modified: trunk/plugins/symbol-db/symbol-db-prefs.c
==============================================================================
--- trunk/plugins/symbol-db/symbol-db-prefs.c (original)
+++ trunk/plugins/symbol-db/symbol-db-prefs.c Sat Jul 5 18:15:33 2008
@@ -22,6 +22,7 @@
* Boston, MA 02110-1301, USA.
*/
+#include <glib.h>
#include <config.h>
#include <ctype.h>
#include <sys/types.h>
@@ -30,7 +31,6 @@
#include <string.h>
#include <gtk/gtktreeview.h>
#include <gtk/gtkliststore.h>
-#include <libgnomevfs/gnome-vfs.h>
#include <libanjuta/anjuta-debug.h>
#include <libanjuta/anjuta-launcher.h>
#include <libanjuta/interfaces/ianjuta-language.h>
@@ -49,18 +49,29 @@
static GList *pkg_list = NULL;
static gboolean initialized = FALSE;
+/* FIXME move away */
+static GladeXML *gxml;
+
enum
{
COLUMN_LOAD,
COLUMN_NAME,
- COLUMN_FLAGS_LIST,
COLUMN_MAX
};
-typedef struct _CflagsData {
+typedef struct _ParseableData {
SymbolDBPlugin *sdb_plugin;
- GList *item;
-} CflagsData;
+ gchar *path_str;
+
+} ParseableData;
+
+
+static void
+destroy_parseable_data (ParseableData *pdata)
+{
+ g_free (pdata->path_str);
+ g_free (pdata);
+}
static void
on_prefs_executable_changed (GtkFileChooser *chooser,
@@ -90,140 +101,24 @@
return strcmp ((const gchar*)a, (const gchar*)b);
}
+
static void
-on_cflags_output (AnjutaLauncher * launcher,
+on_listall_output (AnjutaLauncher * launcher,
AnjutaLauncherOutputType output_type,
const gchar * chars, gpointer user_data)
{
+ gchar **lines;
+ const gchar *curr_line;
+ gint i = 0;
SymbolDBPlugin *sdb_plugin;
GtkListStore *store;
- GList *item;
- CflagsData *cdata;
- gchar **flags;
- const gchar *curr_flag;
- gint i;
- GList *good_flags;
-
- cdata = (CflagsData*)user_data;
- item = cdata->item;
- sdb_plugin = cdata->sdb_plugin;
- store = sdb_plugin->prefs_list_store;
-
-/* DEBUG_PRINT ("on_cflags_output for item %s ->%s<-", item->data, chars);*/
-
+
if (output_type == ANJUTA_LAUNCHER_OUTPUT_STDERR)
{
/* no way. We don't like errors on stderr... */
return;
}
- /* We should receive here something like
- * '-I/usr/include/gimp-2.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include'.
- * Split up the chars and take a decision if we like it or not.
- */
- flags = g_strsplit (chars, " ", -1);
-
- i = 0;
- /* if, after the while loop, good_flags is != NULL that means that we found
- * some good flags to include for a future scan
- */
- good_flags = NULL;
- while ((curr_flag = flags[i++]) != NULL)
- {
- /* '-I/usr/include/gimp-2.0' would be good, but '/usr/include/' wouldn't. */
- if (g_regex_match_simple ("\\.*/usr/include/\\w+", curr_flag, 0, 0) == TRUE)
- {
- /* FIXME the +2. It's to skip the -I */
- DEBUG_PRINT ("adding %s to good_flags", curr_flag +2);
- /* FIXME the +2. It's to skip the -I */
- good_flags = g_list_prepend (good_flags, g_strdup (curr_flag + 2));
- }
- }
-
- g_strfreev (flags);
-
- if (good_flags != NULL)
- {
- GtkTreeIter iter;
- /* that's good. We can add the package to the GtkListStore */
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter, COLUMN_LOAD, FALSE,
- COLUMN_NAME, g_strdup (item->data),
- COLUMN_FLAGS_LIST, good_flags, -1);
- }
-}
-
-static void
-on_cflags_exit (AnjutaLauncher * launcher, int child_pid,
- int exit_status, gulong time_taken_in_seconds,
- gpointer user_data)
-{
- CflagsData *cdata;
- GList *item;
- gchar *exe_string;
- SymbolDBPlugin *sdb_plugin;
-
- cdata = (CflagsData*)user_data;
- item = cdata->item;
- sdb_plugin = cdata->sdb_plugin;
-
- /* select next item in the list. If it's null then free everything */
- item = item->next;
- if (item == NULL)
- {
- g_object_unref (cflags_launcher);
- cflags_launcher = NULL;
- g_free (cdata);
- DEBUG_PRINT ("reached end of packages list");
- return;
- }
-
- if (cflags_launcher)
- {
- /* recreate anjuta_launcher because.. well.. it closes stdout pipe
- * and stderr. There's no way to reactivate them
- */
- g_object_unref (cflags_launcher);
- cflags_launcher = anjuta_launcher_new ();
- }
-
-
- DEBUG_PRINT ("package for CFLAGS %s", (gchar*)item->data);
-
-
- /* reuse CflagsData object to store the new glist pointer */
- cdata->item = item;
- /* sdb_plugin remains the same */
-
- g_signal_connect (G_OBJECT (cflags_launcher), "child-exited",
- G_CALLBACK (on_cflags_exit), cdata);
-
- exe_string = g_strdup_printf ("pkg-config --cflags %s", (gchar*)item->data);
- DEBUG_PRINT ("launching exe_string %s", exe_string );
-
- anjuta_launcher_execute (cflags_launcher,
- exe_string, on_cflags_output,
- cdata);
-
- g_free (exe_string);
-}
-
-static void
-on_listall_output (AnjutaLauncher * launcher,
- AnjutaLauncherOutputType output_type,
- const gchar * chars, gpointer user_data)
-{
- if (output_type == ANJUTA_LAUNCHER_OUTPUT_STDERR)
- return;
-
- /* there's no way to avoid getting stderr here. */
- DEBUG_PRINT ("chars %s", chars);
- gchar **lines;
- const gchar *curr_line;
- gint i = 0;
- SymbolDBPlugin *sdb_plugin;
- GtkListStore *store;
-
sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (user_data);
store = sdb_plugin->prefs_list_store;
@@ -236,7 +131,7 @@
pkgs = g_strsplit (curr_line, " ", -1);
- /* just take the first one as it's the package-name */
+ /* just take the first token as it's the package-name */
if (pkgs == NULL)
return;
@@ -244,13 +139,6 @@
g_strfreev (pkgs);
continue;
}
- DEBUG_PRINT ("pkg inserted into pkg_list is %s", pkgs[0]);
-/*
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter, COLUMN_LOAD, FALSE,
- COLUMN_NAME, pkgs[0],
- COLUMN_FLAGS_LIST, NULL, -1);
-*/
pkg_list = g_list_prepend (pkg_list, g_strdup (pkgs[0]));
g_strfreev (pkgs);
}
@@ -264,19 +152,20 @@
gpointer user_data)
{
SymbolDBPlugin *sdb_plugin;
- CflagsData *cdata;
- gchar *exe_string;
+ GtkListStore *store;
+ GList *item;
sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (user_data);
+ store = sdb_plugin->prefs_list_store;
-
- DEBUG_PRINT ("launcher ended");
/* we should have pkg_list filled with packages names
- * It's not enough anyway: we have to 1. sort alphabetically the list first
- * then 2. check for Iflags [pkg-config --cflags] if the regex returns void
- * then kill the package from the list
- */
-
+ * It's not enough anyway: we have to sort alphabetically the list.
+ * The implementation done before required the single scan of every package,
+ * for instance 'pkg-config --cflags pkg_name', but this was really
+ * unefficent when a lot of packages were found on /usr/lib/pkg-config.
+ * Let then the user click on the toggle checkbox. We'll notify her whether
+ * there are no good cflags for that package.
+ */
if (pkg_list == NULL)
{
g_warning ("No packages found");
@@ -285,260 +174,128 @@
pkg_list = g_list_sort (pkg_list, pkg_list_compare);
- if (cflags_launcher == NULL)
- cflags_launcher = anjuta_launcher_new ();
-
- cdata = g_new0 (CflagsData, 1);
-
- cdata->sdb_plugin = sdb_plugin;
- cdata->item = pkg_list;
-
- DEBUG_PRINT ("package for CFLAGS %s", (gchar*)pkg_list->data);
-
- g_signal_connect (G_OBJECT (cflags_launcher), "child-exited",
- G_CALLBACK (on_cflags_exit), cdata);
- exe_string = g_strdup_printf ("pkg-config --cflags %s", (gchar*)pkg_list->data);
+ item = pkg_list;
- anjuta_launcher_execute (cflags_launcher,
- exe_string, on_cflags_output,
- cdata);
+ while (item != NULL)
+ {
+ GtkTreeIter iter;
+ /* that's good. We can add the package to the GtkListStore */
+ gtk_list_store_append (GTK_LIST_STORE (store), &iter);
+ gtk_list_store_set (store, &iter, COLUMN_LOAD, FALSE,
+ COLUMN_NAME, g_strdup (item->data), -1);
- g_free (exe_string);
+ item = item->next;
+ }
}
-static GList **
-files_visit_dir (GList **files_list, const gchar* uri)
+static void
+on_tag_load_toggled_parseable_cb (SymbolDBSystem *sdbs,
+ gboolean is_parseable,
+ gpointer user_data)
{
+ GtkWidget *treeview, *prefs_progressbar;
+ GtkWindow *prefs_window;
+ ParseableData *pdata;
+ SymbolDBPlugin *sdb_plugin;
+ const gchar *path_str;
+
+ pdata = (ParseableData *)user_data;
+ path_str = pdata->path_str;
+ sdb_plugin = pdata->sdb_plugin;
- GList *files_in_curr_dir = NULL;
+ DEBUG_PRINT ("on_tag_load_toggled_parseable_cb %d", is_parseable);
+ prefs_window = GTK_WINDOW (glade_xml_get_widget (gxml, "symbol_db_pref_window"));
+ treeview = glade_xml_get_widget (gxml, "tags_treeview");
+ prefs_progressbar = glade_xml_get_widget (gxml, "prefs_progressbar");
- if (gnome_vfs_directory_list_load (&files_in_curr_dir, uri,
- GNOME_VFS_FILE_INFO_GET_MIME_TYPE) == GNOME_VFS_OK)
+ if (is_parseable == FALSE)
{
- GList *node;
- node = files_in_curr_dir;
- do {
- GnomeVFSFileInfo* info;
-
- info = node->data;
-
- if (info->type == GNOME_VFS_FILE_TYPE_DIRECTORY) {
-
- if (strcmp (info->name, ".") == 0 ||
- strcmp (info->name, "..") == 0)
- continue;
-
- g_message ("node [DIRECTORY]: %s", info->name);
- gchar *tmp = g_strdup_printf ("%s/%s", uri, info->name);
-
- g_message ("recursing for: %s", tmp);
- /* recurse */
- files_list = files_visit_dir (files_list, tmp);
-
- g_free (tmp);
- }
- else {
- gchar *local_path;
- gchar *tmp = g_strdup_printf ("%s/%s",
- uri, info->name);
-
- g_message ("prepending %s", tmp);
- local_path = gnome_vfs_get_local_path_from_uri (tmp);
- *files_list = g_list_prepend (*files_list, local_path);
- g_free (tmp);
- }
- } while ((node = node->next) != NULL);
- }
+ GtkWidget *wid = gtk_message_dialog_new (prefs_window, GTK_DIALOG_MODAL,
+ GTK_MESSAGE_WARNING,
+ GTK_BUTTONS_OK, _("Package is not parseable"));
+ gtk_dialog_run (GTK_DIALOG (wid));
+ gtk_widget_destroy (wid);
+ }
+ else
+ {
+ GtkTreeIter iter;
+ GtkTreePath *path;
+ GtkListStore *store;
+ gboolean enabled;
+ gchar *curr_package_name;
+
+ /* we have a good parseable package. Let's mark the check enabled/disabled */
+
+ store = sdb_plugin->prefs_list_store;
+ path = gtk_tree_path_new_from_string (path_str);
+ gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, path);
+ gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
+ COLUMN_LOAD, &enabled,
+ COLUMN_NAME, &curr_package_name,
+ -1);
+ enabled = !enabled;
+ gtk_list_store_set (store, &iter, COLUMN_LOAD, enabled, -1);
+ gtk_tree_path_free (path);
+
+ /* good, should we scan the packages? */
+ if (enabled == TRUE)
+ {
+ symbol_db_system_scan_package (sdb_plugin->sdbs, curr_package_name);
+ }
+ }
+
+ gtk_widget_set_sensitive (treeview, TRUE);
+ gtk_widget_hide (prefs_progressbar);
- return files_list;
+ destroy_parseable_data (pdata);
}
+
static void
on_tag_load_toggled (GtkCellRendererToggle *cell, char *path_str,
SymbolDBPlugin *sdb_plugin)
{
GtkTreeIter iter;
GtkTreePath *path;
- gboolean enabled;
- GList *enabled_packages;
gchar *curr_package_name;
GtkListStore *store;
- AnjutaStatus *status;
- GList * node;
- GPtrArray *files_to_scan_array;
- GPtrArray *languages_array;
- IAnjutaLanguage* lang_manager;
+ GtkWidget *prefs_progressbar;
+ GtkWidget * treeview;
+ ParseableData *pdata;
DEBUG_PRINT ("on_tag_load_toggled ()");
- lang_manager = anjuta_shell_get_interface (ANJUTA_PLUGIN(sdb_plugin)->shell,
- IAnjutaLanguage, NULL);
-
- status = anjuta_shell_get_status (ANJUTA_PLUGIN (sdb_plugin)->shell, NULL);
store = sdb_plugin->prefs_list_store;
-
- anjuta_status_busy_push (status);
-
path = gtk_tree_path_new_from_string (path_str);
gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, path);
gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
- COLUMN_LOAD, &enabled,
COLUMN_NAME, &curr_package_name,
- COLUMN_FLAGS_LIST, &enabled_packages,
-1);
- enabled = !enabled;
- gtk_list_store_set (store, &iter, COLUMN_LOAD, enabled, -1);
gtk_tree_path_free (path);
-
- node = enabled_packages;
- /* if we have some packages then initialize the array that will be passed to
- * the engine */
- if (node != NULL)
- {
- files_to_scan_array = g_ptr_array_new ();
- languages_array = g_ptr_array_new();
- }
- else
- return;
-
- do {
- GList *files_tmp_list = NULL;
- gchar *uri;
-/* g_message ("package %s has node : %s", curr_package_name, node->data);*/
-
- uri = gnome_vfs_get_uri_from_local_path (node->data);
-
- /* files_tmp_list needs to be freed */
- files_visit_dir (&files_tmp_list, uri);
- g_free (uri);
-
- if (files_tmp_list != NULL)
- {
- /* last loop here. With files_visit_dir we'll retrieve all files nodes
- * under the passed directory
- */
- GList *tmp_node;
- tmp_node = files_tmp_list;
- do {
- const gchar* file_mime;
- IAnjutaLanguageId lang_id;
- const gchar* lang;
- file_mime = gnome_vfs_get_mime_type_for_name (tmp_node->data);
-
- lang_id = ianjuta_language_get_from_mime_type (lang_manager, file_mime,
- NULL);
-
- /* No supported language... */
- if (!lang_id)
- {
- continue;
- }
-
- lang = ianjuta_language_get_name (lang_manager, lang_id, NULL);
-
- g_ptr_array_add (languages_array, g_strdup (lang));
- g_ptr_array_add (files_to_scan_array, g_strdup (tmp_node->data));
- } while ((tmp_node = tmp_node->next) != NULL);
-
- /* free the tmp files list */
- g_list_foreach (files_tmp_list, (GFunc)g_free, NULL);
- g_list_free (files_tmp_list);
- }
-
- /* great. Launch the population, if we had something on files_to_scan_array */
- if (files_to_scan_array != NULL)
- {
- DEBUG_PRINT ("adding new project to db_plugin->sdbe_globals %s ",
- curr_package_name);
- symbol_db_engine_add_new_project (sdb_plugin->sdbe_globals,
- NULL,
- curr_package_name);
-
- symbol_db_engine_add_new_files (sdb_plugin->sdbe_globals,
- curr_package_name,
- files_to_scan_array,
- languages_array,
- TRUE);
- }
-
- } while ((node = node->next) != NULL);
+ prefs_progressbar = glade_xml_get_widget (gxml, "prefs_progressbar");
+ gtk_widget_show_all (prefs_progressbar);
+ gtk_progress_bar_set_pulse_step (GTK_PROGRESS_BAR (prefs_progressbar), 1.0);
+ gtk_progress_bar_pulse (GTK_PROGRESS_BAR (prefs_progressbar));
-#if 0
- enabled_paths = NULL;
- if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter))
- {
- do
- {
- gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
- COLUMN_LOAD, &enabled,
- COLUMN_PATH, &tag_path,
- -1);
- if (enabled)
- enabled_paths = g_list_prepend (enabled_paths, tag_path);
-
- }
- while (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter));
- }
+ treeview = glade_xml_get_widget (gxml, "tags_treeview");
+ gtk_widget_set_sensitive (treeview, FALSE);
- if (enabled_paths)
- {
- GList *node;
- GString *str;
- gboolean first;
- gchar *final_str;
-
- enabled_paths = g_list_sort (enabled_paths, (GCompareFunc)strcmp);
- node = enabled_paths;
- str = g_string_new ("");
- first = TRUE;
- while (node)
- {
- if (first)
- {
- first = FALSE;
- str = g_string_append (str, (const gchar*) node->data);
- }
- else
- {
- str = g_string_append (str, ":");
- str = g_string_append (str, (const gchar*) node->data);
- }
- node = g_list_next (node);
- }
-
- /* Update preferences */
- final_str = g_string_free (str, FALSE);
- anjuta_preferences_set (prefs, SYMBOL_BROWSER_TAGS, final_str);
-
- /* Update system tags cache */
- if (enabled)
- {
- update_system_tags_only_add (tag_path);
- }
- else
- {
- update_system_tags (enabled_paths);
- g_free (final_str);
- }
- }
- else
- {
- /* Unset key and clear all tags */
- anjuta_preferences_set (prefs, SYMBOL_BROWSER_TAGS, "");
- }
- g_list_foreach (enabled_paths, (GFunc)g_free, NULL);
- g_list_free (enabled_paths);
- anjuta_status_busy_pop (status);
-#endif
+ pdata = g_new0 (ParseableData, 1);
+ pdata->sdb_plugin = sdb_plugin;
+ pdata->path_str = g_strdup (path_str);
+
+ symbol_db_system_is_package_parseable (sdb_plugin->sdbs, curr_package_name,
+ on_tag_load_toggled_parseable_cb,
+ pdata);
}
void
symbol_db_prefs_init (SymbolDBPlugin *sdb_plugin, AnjutaPreferences *prefs)
{
- GladeXML *gxml;
+
GtkWidget *fchooser, *treeview;
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
@@ -561,15 +318,17 @@
ICON_FILE);
ctags_value = anjuta_preferences_get (prefs, CTAGS_PREFS_KEY);
- if (ctags_value == NULL)
+ if (ctags_value == NULL || strlen (ctags_value) <= 0)
{
ctags_value = g_strdup (CTAGS_PATH);
}
- if (gtk_file_chooser_select_filename (GTK_FILE_CHOOSER (fchooser), ctags_value)
+ DEBUG_PRINT ("trying to set ->%s<-", ctags_value);
+ if (gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (fchooser), ctags_value)
== FALSE )
{
DEBUG_PRINT ("error: could not select file uri with gtk_file_chooser_select_filename ()");
+ return;
}
g_signal_connect (G_OBJECT (fchooser), "selection-changed",
@@ -583,12 +342,12 @@
if (sdb_plugin->prefs_list_store == NULL)
{
sdb_plugin->prefs_list_store = gtk_list_store_new (COLUMN_MAX, G_TYPE_BOOLEAN,
- G_TYPE_STRING, G_TYPE_POINTER);
+ G_TYPE_STRING);
require_scan = TRUE;
}
treeview = glade_xml_get_widget (gxml, "tags_treeview");
gtk_tree_view_set_model (GTK_TREE_VIEW (treeview),
- GTK_TREE_MODEL (sdb_plugin->prefs_list_store));
+ GTK_TREE_MODEL (sdb_plugin->prefs_list_store));
/* Add the column for stock treeview */
renderer = gtk_cell_renderer_toggle_new ();
@@ -611,12 +370,24 @@
gtk_tree_view_set_search_column (GTK_TREE_VIEW (treeview),
COLUMN_NAME);
+ /* frame3 show all */
+ GtkWidget *frame3;
+ frame3 = glade_xml_get_widget (gxml, "frame3");
+ gtk_widget_show_all (frame3);
+ GtkWidget *prefs_progressbar = glade_xml_get_widget (gxml, "prefs_progressbar");
+ gtk_widget_hide (prefs_progressbar);
+
+
/* listall launcher thing */
if (require_scan == TRUE)
{
sdb_plugin->pkg_config_launcher = anjuta_launcher_new ();
- anjuta_launcher_set_check_passwd_prompt (sdb_plugin->pkg_config_launcher, FALSE);
+ anjuta_launcher_set_check_passwd_prompt (sdb_plugin->pkg_config_launcher,
+ FALSE);
+ /* the on_listall_exit callback will continue calling the launcher to process
+ * every entry received
+ */
g_signal_connect (G_OBJECT (sdb_plugin->pkg_config_launcher), "child-exited",
G_CALLBACK (on_listall_exit), sdb_plugin);
@@ -627,13 +398,12 @@
sdb_plugin);
}
+
/* unrefs unused memory objects */
- g_object_unref (gxml);
g_free (ctags_value);
g_free (exe_string);
- /* pkg_tmp_file will be released on launcher_exit */
-
+ /* pkg_tmp_file will be released on launcher_exit */
initialized = TRUE;
}
@@ -644,7 +414,8 @@
anjuta_preferences_notify_remove(prefs, sdb_plugin->prefs_notify_id);
anjuta_preferences_remove_page(prefs, _("Symbol Database"));
- g_object_unref (cflags_launcher);
+ if (cflags_launcher != NULL)
+ g_object_unref (cflags_launcher);
cflags_launcher = NULL;
/* free pkg_list */
@@ -652,5 +423,10 @@
g_list_free (pkg_list);
pkg_list = NULL;
+ if (gxml != NULL)
+ g_object_unref (gxml);
+
+ /* FIXME: disconnect signals */
+
initialized = FALSE;
}
Modified: trunk/plugins/symbol-db/symbol-db-prefs.h
==============================================================================
--- trunk/plugins/symbol-db/symbol-db-prefs.h (original)
+++ trunk/plugins/symbol-db/symbol-db-prefs.h Sat Jul 5 18:15:33 2008
@@ -29,6 +29,7 @@
void symbol_db_prefs_init (SymbolDBPlugin *plugin, AnjutaPreferences *prefs);
void symbol_db_prefs_finalize (SymbolDBPlugin *plugin, AnjutaPreferences *prefs);
+
/*
void symbol_db_load_global_tags (gpointer plugin);
*/
Modified: trunk/plugins/symbol-db/symbol-db-view.h
==============================================================================
--- trunk/plugins/symbol-db/symbol-db-view.h (original)
+++ trunk/plugins/symbol-db/symbol-db-view.h Sat Jul 5 18:15:33 2008
@@ -28,7 +28,7 @@
#include <glib-object.h>
#include <gtk/gtk.h>
#include "symbol-db-engine.h"
-#include "plugin.h"
+
G_BEGIN_DECLS
Modified: trunk/plugins/symbol-db/test/Makefile.am
==============================================================================
--- trunk/plugins/symbol-db/test/Makefile.am (original)
+++ trunk/plugins/symbol-db/test/Makefile.am Sat Jul 5 18:15:33 2008
@@ -1,7 +1,7 @@
bin_PROGRAMS = \
- benchmark \
- test_symbol_db
+ benchmark
+
AM_CPPFLAGS = \
-DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \
Modified: trunk/plugins/symbol-db/test/benchmark.c
==============================================================================
--- trunk/plugins/symbol-db/test/benchmark.c (original)
+++ trunk/plugins/symbol-db/test/benchmark.c Sat Jul 5 18:15:33 2008
@@ -45,7 +45,9 @@
static void
on_scan_end (SymbolDBEngine* engine, gpointer user_data)
{
- exit(0);
+ g_message ("on_scan_end ()");
+ g_object_unref (engine);
+ exit(0);
}
int main (int argc, char** argv)
@@ -67,8 +69,9 @@
}
root_dir = argv[1];
- engine = symbol_db_engine_new ();
- g_signal_connect (engine, "scan-end", G_CALLBACK (on_scan_end), NULL);
+ GMutex *mutex = g_mutex_new ();
+ engine = symbol_db_engine_new (mutex);
+
if (!symbol_db_engine_open_db (engine, root_dir, root_dir))
{
@@ -82,6 +85,7 @@
for (i = 0; i < files->len; i++)
g_ptr_array_add (languages, "C");
+ g_signal_connect (engine, "scan-end", G_CALLBACK (on_scan_end), NULL);
g_signal_connect (G_OBJECT (engine), "single-file-scan-end",
G_CALLBACK (on_single_file_scan_end), files);
Modified: trunk/plugins/symbol-db/test/main.c
==============================================================================
--- trunk/plugins/symbol-db/test/main.c (original)
+++ trunk/plugins/symbol-db/test/main.c Sat Jul 5 18:15:33 2008
@@ -94,7 +94,7 @@
files_array = g_ptr_array_new();
g_ptr_array_add (files_array, g_strdup("/home/pescio/svnroot/libgda/providers/sqlite/sqlite-src/sqlite3.c"));
- symbol_db_engine_add_new_files (dbe, "foo_project", files_array, "C", TRUE);
+// symbol_db_engine_add_new_files (dbe, "foo_project", files_array, "C", TRUE);
}
static void
Modified: trunk/plugins/valgrind/preferences.c
==============================================================================
--- trunk/plugins/valgrind/preferences.c (original)
+++ trunk/plugins/valgrind/preferences.c Sat Jul 5 18:15:33 2008
@@ -132,7 +132,7 @@
str_file = gconf_client_get_string (gconf, EXE_PATH, &err);
- if (str_file == NULL || err != NULL) {
+ if (str_file == NULL || err != NULL || strlen (str_file) <= 0) {
str_file = g_strdup (VALGRIND_DEFAULT_BIN);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]