[anjuta/sdb-core-trans: 78/80] symbol-db: implemented all packages ifaces. Removed dead code from prefs.



commit f87f5901aa557efef4a6d172235113c84c673e19
Author: Massimo Corà <mcora src gnome org>
Date:   Sat Aug 14 17:09:09 2010 +0200

    symbol-db: implemented all packages ifaces. Removed dead code from prefs.

 plugins/symbol-db/plugin.c                |  315 +++++++++++++++------
 plugins/symbol-db/plugin.h                |    2 +-
 plugins/symbol-db/symbol-db-engine-core.c |   93 +++++--
 plugins/symbol-db/symbol-db-engine-core.h |    3 +-
 plugins/symbol-db/symbol-db-prefs.c       |  451 +----------------------------
 plugins/symbol-db/symbol-db-prefs.h       |    3 +-
 plugins/symbol-db/symbol-db-system.c      |    7 +-
 plugins/symbol-db/symbol-db-system.h      |    4 +-
 8 files changed, 314 insertions(+), 564 deletions(-)
---
diff --git a/plugins/symbol-db/plugin.c b/plugins/symbol-db/plugin.c
index 0e01419..2677907 100644
--- a/plugins/symbol-db/plugin.c
+++ b/plugins/symbol-db/plugin.c
@@ -1262,23 +1262,15 @@ do_import_project_sources (AnjutaPlugin *plugin, IAnjutaProjectManager *pm,
 	g_list_free (prj_elements_list);
 }
 
+/**
+ * This function will call do_import_project_sources_after_abort ().
+ * The list of files for sysstem packages enqueued on the first scan aren't 
+ * persisted on session for later retrieval. So we can only rely
+ * on fixing the zero-symbols file.
+ */
 static void
 do_import_system_sources (SymbolDBPlugin *sdb_plugin)
 {	
-	/* system's packages management */				
-	GList *item = sdb_plugin->session_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;
-	}	
-
 	/* the resume thing */
 	GPtrArray *sys_src_array = NULL;
 	sys_src_array = 
@@ -1457,20 +1449,98 @@ do_check_offline_files_changed (SymbolDBPlugin *sdb_plugin)
 	return real_added > 0 ? TRUE : FALSE;	
 }
 
+/**
+ * Session saved string will have the form:
+ * pkg_name1:version1:version2:version3
+ */
+static GList * 
+save_session_packages (SymbolDBPlugin *sdb_plugin)
+{
+	GHashTableIter iter;
+	gpointer key, versions;
+	GList *pkg_list;
+
+	pkg_list = NULL;
+
+	g_hash_table_iter_init (&iter, sdb_plugin->session_packages);
+	while (g_hash_table_iter_next (&iter, &key, &versions)) 
+  	{
+    	GList *node;
+		GString *result;
+
+		result = g_string_new (key);
+				  
+		node = versions;
+		while (node != NULL)
+		{
+			result = g_string_append (result, ":");
+			result = g_string_append (result, node->data);
+			
+			node = g_list_next (node);
+		}
+
+		pkg_list = g_list_prepend (pkg_list, g_strdup (result->str));
+		g_string_free (result, TRUE);
+  	}	
+
+	return pkg_list;
+}
+
 static void
 on_session_save (AnjutaShell *shell, AnjutaSessionPhase phase,
 				 AnjutaSession *session,
 				 SymbolDBPlugin *sdb_plugin)
 {
+	GList *pkgs;
 	if (phase != ANJUTA_SESSION_PHASE_NORMAL)
 		return;
 
 	DEBUG_PRINT ("%s", "SymbolDB: session_save");
 
+	pkgs = save_session_packages (sdb_plugin);
+	
 	anjuta_session_set_string_list (session, 
 									SESSION_SECTION, 
 									SESSION_KEY,
-									sdb_plugin->session_packages);	
+									pkgs);	
+}
+
+static void 
+load_session_packages (SymbolDBPlugin *sdb_plugin, GList *hash_glist)
+{
+	GList *node;
+
+	node = hash_glist;
+	while (node != NULL)
+	{
+		if (node->data != NULL)
+		{
+			gchar **split;
+			gint i;
+			gint len;
+			GList *versions;
+			split = g_strsplit (node->data, ":", 0);
+
+			len = g_strv_length (split);
+			if (len <= 1)
+			{
+				g_strfreev(split);
+				continue;
+			}
+
+			/* add items to glist, skipping first splitted item (the pkg name) */
+			for (i = 1; i < len; i++)
+			{
+				versions = g_list_prepend (versions, strdup (split[i]));
+			}
+
+			/* finally add key and value to hash table */
+			g_hash_table_insert (sdb_plugin->session_packages, 
+			    g_strdup (split[0]), versions);
+		}			
+		
+		node = g_list_next (node);
+	}
 }
 
 static void
@@ -1484,26 +1554,18 @@ on_session_load (AnjutaShell *shell, AnjutaSessionPhase phase,
 	
 	if (phase == ANJUTA_SESSION_PHASE_START)
 	{
-		sdb_plugin->session_packages = anjuta_session_get_string_list (session, 
-																	   SESSION_SECTION, 
-																	   SESSION_KEY);
+		GList *hash_glist = anjuta_session_get_string_list (session, 
+														   SESSION_SECTION, 
+														   SESSION_KEY);
+
+		load_session_packages (sdb_plugin, hash_glist);
+
+		anjuta_util_glist_strings_free (hash_glist);
 	
 		DEBUG_PRINT ("SymbolDB: session_loading started. Getting info from %s",
 					 anjuta_session_get_session_directory (session));
 		sdb_plugin->session_loading = TRUE;
 		
-		if (sdb_plugin->session_packages == NULL)
-		{
-			/* hey, does user want to import system sources for this project? */
-			gboolean automatic_scan = anjuta_preferences_get_bool (sdb_plugin->prefs, 
-																  PROJECT_AUTOSCAN);
-			
-			if (automatic_scan == TRUE)
-			{
-				sdb_plugin->session_packages = ianjuta_project_manager_get_packages (pm, NULL);
-			}
-		}
-		
 		/* get preferences about the parallel scan */
 		gboolean parallel_scan = anjuta_preferences_get_bool (sdb_plugin->prefs, 
 															 PARALLEL_SCAN); 
@@ -1920,10 +1982,11 @@ symbol_db_activate (AnjutaPlugin *plugin)
 		ctags_path = g_strdup (CTAGS_PATH);
 	}
 	
-	/* initialize the session packages to NULL. We'll store there the user 
+	/* initialize the session packages. We'll store there the user 
 	 * preferences for the session about global-system packages 
 	 */
-	sdb_plugin->session_packages = NULL;
+	sdb_plugin->session_packages = g_hash_table_new_full (g_str_hash, 
+						g_str_equal, g_free, (GDestroyNotify)anjuta_util_glist_strings_free);
 	
 	sdb_plugin->buf_update_timeout_id = 0;
 	sdb_plugin->need_symbols_update = FALSE;
@@ -2250,8 +2313,7 @@ symbol_db_deactivate (AnjutaPlugin *plugin)
 		
 	if (sdb_plugin->session_packages)
 	{
-		g_list_foreach (sdb_plugin->session_packages, (GFunc)g_free, NULL);
-		g_list_free (sdb_plugin->session_packages);
+		g_hash_table_destroy (sdb_plugin->session_packages);
 		sdb_plugin->session_packages = NULL;
 	}
 	
@@ -2345,48 +2407,6 @@ symbol_db_class_init (GObjectClass *klass)
 						g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);	
 }
 
-
-
-static void
-on_prefs_package_add (SymbolDBPrefs *sdbp, const gchar *package, 
-							  gpointer user_data)
-{
-	SymbolDBPlugin *sdb_plugin;
-	
-	g_return_if_fail (package != NULL);
-	
-	DEBUG_PRINT ("%s", "on_prefs_package_add");
-	
-	sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (user_data);
-	
-	sdb_plugin->session_packages = g_list_prepend (sdb_plugin->session_packages,
-												   g_strdup (package));	
-}
-
-static void
-on_prefs_package_remove (SymbolDBPrefs *sdbp, const gchar *package, 
-							  gpointer user_data)
-{
-	SymbolDBPlugin *sdb_plugin;
-	
-	g_return_if_fail (package != NULL);
-	
-	sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (user_data);
-	
-	GList *item;
-	DEBUG_PRINT ("%s", "on_prefs_package_remove");	
-	if ((item = g_list_find_custom (sdb_plugin->session_packages, package, 
-							symbol_db_glist_compare_func)) != NULL)
-	{
-		sdb_plugin->session_packages = g_list_remove_link (sdb_plugin->session_packages,
-														   item);
-		
-		/* ok, now think to the item left alone by its friends... */
-		g_list_foreach (item, (GFunc)g_free, NULL);
-		g_list_free (item);
-	}
-}
-
 static void
 on_prefs_buffer_update_toggled (SymbolDBPrefs *sdbp, guint value, 
 							  gpointer user_data)
@@ -2426,16 +2446,8 @@ ipreferences_merge(IAnjutaPreferences* ipref, AnjutaPreferences* prefs, GError**
 		sdb_plugin->sdbp = symbol_db_prefs_new (sdb_plugin->sdbs, 
 												sdb_plugin->sdbe_project,
 												sdb_plugin->sdbe_globals,
-												prefs,
-												sdb_plugin->session_packages);
+												prefs);
 		
-		/* connect the signals to retrieve package modifications */
-		g_signal_connect (G_OBJECT (sdb_plugin->sdbp), "package-add",
-						  G_CALLBACK (on_prefs_package_add),
-						  sdb_plugin);
-		g_signal_connect (G_OBJECT (sdb_plugin->sdbp), "package-remove",
-						  G_CALLBACK (on_prefs_package_remove),
-						  sdb_plugin);		
 		g_signal_connect (G_OBJECT (sdb_plugin->sdbp), "buffer-update-toggled",
 						  G_CALLBACK (on_prefs_buffer_update_toggled),
 						  sdb_plugin);				
@@ -2473,6 +2485,9 @@ isymbol_manager_create_query (IAnjutaSymbolManager *isymbol_manager,
 {
 	SymbolDBPlugin *sdb_plugin;
 	SymbolDBQuery *query;
+
+	g_return_val_if_fail (isymbol_manager != NULL, NULL);
+	
 	sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (isymbol_manager);
 	
 	query = symbol_db_query_new (sdb_plugin->sdbe_globals,
@@ -2484,17 +2499,18 @@ static gboolean
 isymbol_manager_add_package (IAnjutaSymbolManager *isymbol_manager,
     						 const gchar* pkg_name, 
     						 const gchar* pkg_version, 
-    						 const GList* files,
+    						 GList* files,
     						 GError *err)
 {
 	SymbolDBPlugin *sdb_plugin;
-	SymbolDBQuery *query;
 	IAnjutaLanguage *lang_manager;
 	GPtrArray *files_array;
 	GList *node;
+
+	g_return_val_if_fail (isymbol_manager != NULL, FALSE);
 	
 	sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (isymbol_manager);
-	lang_manager =anjuta_shell_get_interface (ANJUTA_PLUGIN (sdb_plugin)->shell, IAnjutaLanguage, 
+	lang_manager = anjuta_shell_get_interface (ANJUTA_PLUGIN (sdb_plugin)->shell, IAnjutaLanguage, 
 										NULL);	
 	
 	if (symbol_db_engine_add_new_project (sdb_plugin->sdbe_globals, NULL, pkg_name, 
@@ -2528,6 +2544,92 @@ isymbol_manager_activate_package (IAnjutaSymbolManager *isymbol_manager,
     							  const gchar *pkg_version,
     							  GError *err)
 {
+	SymbolDBPlugin *sdb_plugin;
+	GList *versions;
+
+	g_return_val_if_fail (isymbol_manager != NULL, FALSE);
+	
+	sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (isymbol_manager);
+
+	/* check whether the package already exists in the session packages. */
+	if ((versions = g_hash_table_lookup (sdb_plugin->session_packages, pkg_name)) != NULL)
+	{
+		GList *node;
+		
+		/* if the package is already activated return true */
+		node = versions;
+		while (node != NULL)
+		{
+			if (g_strcmp0 (node->data, pkg_version) == 0)
+				return TRUE;
+
+			node = g_list_next (node);
+		}
+
+		/* check in the db: it may have a different version from the one already activated */
+		if (symbol_db_engine_project_exists (sdb_plugin->sdbe_globals, pkg_name, 
+		    								 pkg_version) == TRUE)
+		{
+			GList *new_versions;
+
+			/* this is a rare case so the performance playing with glist should not be
+			 taken into consideration */			
+			new_versions = anjuta_util_glist_strings_dup (versions);
+			
+			/* ok, the package version exists in db. Append it to the versions glist */
+			new_versions = g_list_prepend (new_versions, g_strdup (pkg_version));
+
+			/* go ahead and insert it, replacing the old one */
+			g_hash_table_insert (sdb_plugin->session_packages, g_strdup (pkg_name), 
+			    new_versions);
+			
+			return TRUE;
+		}
+
+		/* nothing found on db. This is hopeless */
+		return FALSE;
+	}
+
+	if (symbol_db_engine_project_exists (sdb_plugin->sdbe_globals, pkg_name, 
+	    								 pkg_version) == TRUE)
+	{
+		GList *versions = NULL;
+
+		versions = g_list_append (versions, g_strdup (pkg_version));
+		/* ok, package exists in db. Add it to session packages */
+		g_hash_table_insert (sdb_plugin->session_packages, 
+		    				 g_strdup (pkg_name), 
+		    				 versions);
+		return TRUE;
+	}
+
+	/* user should add a package before activating it. */
+	return FALSE;
+}
+
+static gboolean
+isymbol_manager_add_and_activate_package (IAnjutaSymbolManager *isymbol_manager,
+    							  const gchar *pkg_name, 
+    							  const gchar *pkg_version,
+    							  GList *files,
+    							  GError *err)
+{
+	SymbolDBPlugin *sdb_plugin;
+
+	g_return_val_if_fail (isymbol_manager != NULL, FALSE);
+	
+	sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (isymbol_manager);
+
+	if (isymbol_manager_add_package (isymbol_manager, pkg_name, pkg_version, 
+	    files, err) == FALSE)
+		return FALSE;
+	
+	if (isymbol_manager_activate_package (isymbol_manager, pkg_name, pkg_version,
+    							  err) == FALSE)
+	{
+		return FALSE;
+	}
+		
 	return TRUE;
 }
 
@@ -2537,7 +2639,43 @@ isymbol_manager_deactivate_package (IAnjutaSymbolManager *isymbol_manager,
     							  	const gchar *pkg_version,
     							  	GError *err)
 {
+	SymbolDBPlugin *sdb_plugin;
+	GList *versions;
+	GList *node;
 
+	g_return_val_if_fail (isymbol_manager != NULL, FALSE);
+	
+	sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (isymbol_manager);
+
+	if ((versions = g_hash_table_lookup (sdb_plugin->session_packages, pkg_name)) == NULL)
+	    return FALSE;
+
+	/* we can safely remove the whole list if it's composed by just one element */
+	if (g_list_length (versions) == 1)	
+	{
+		g_hash_table_remove (sdb_plugin->session_packages, pkg_name);
+		return TRUE;
+	}
+
+	/* ok, if we reach this point we have a list with more than an element.
+	 * Remove one and replace the item in the hash table.
+	 */
+	node = versions;
+	while (node != NULL)
+	{
+		if (g_strcmp0 (node->data, pkg_version) == 0)
+		{
+			versions = g_list_remove_link (versions, node);
+			g_free (node->data);
+			g_list_free (node);
+
+			node = versions;
+			continue;
+		}
+		
+		node = g_list_next (node);
+    }
+	
 	return TRUE;
 }
 
@@ -2548,6 +2686,7 @@ isymbol_manager_iface_init (IAnjutaSymbolManagerIface *iface)
 	iface->add_package = isymbol_manager_add_package;
 	iface->activate_package = isymbol_manager_activate_package;
 	iface->deactivate_package = isymbol_manager_deactivate_package;
+	iface->add_and_activate_package = isymbol_manager_add_and_activate_package;
 }
 
 ANJUTA_PLUGIN_BEGIN (SymbolDBPlugin, symbol_db);
diff --git a/plugins/symbol-db/plugin.h b/plugins/symbol-db/plugin.h
index 53fcae1..fe6aec8 100644
--- a/plugins/symbol-db/plugin.h
+++ b/plugins/symbol-db/plugin.h
@@ -127,7 +127,7 @@ struct _SymbolDBPlugin {
 	gint files_count_system;
 	gint files_count_system_done;
 	gchar *current_scanned_package;
-	GList *session_packages;
+	GHashTable *session_packages;
 
 	IAnjutaSymbolQuery *search_query;
 	
diff --git a/plugins/symbol-db/symbol-db-engine-core.c b/plugins/symbol-db/symbol-db-engine-core.c
index 703d467..d9eb5f5 100644
--- a/plugins/symbol-db/symbol-db-engine-core.c
+++ b/plugins/symbol-db/symbol-db-engine-core.c
@@ -576,7 +576,7 @@ sdb_engine_get_tuple_id_by_unique_name (SymbolDBEngine * dbe, static_query_type
 
 	gda_holder_set_value (param, param_value, NULL);
 	
-	/* execute the query with parametes just set */
+	/* execute the query with parameters just set */
 	data_model = gda_connection_statement_execute_select (priv->db_connection, 
 														  (GdaStatement*)stmt, 
 														  (GdaSet*)plist, NULL);
@@ -670,7 +670,7 @@ sdb_engine_get_tuple_id_by_unique_name4 (SymbolDBEngine * dbe,
 
 	gda_holder_set_value (param, value4, NULL);	
 			
-	/* execute the query with parametes just set */
+	/* execute the query with parameters just set */
 	data_model = gda_connection_statement_execute_select (priv->db_connection, 
 														  (GdaStatement*)stmt, 
 														  (GdaSet*)plist, NULL);
@@ -1667,7 +1667,9 @@ sdb_engine_init (SymbolDBEngine * object)
 									PREP_QUERY_GET_PROJECT_ID_BY_UNIQUE_NAME, 
 	 	"SELECT project_id FROM project \
 	     WHERE \
-	    	project_name = ## /* name:'prjname' type:gchararray */ LIMIT 1");
+	    	project_name = ## /* name:'prjname' type:gchararray */ AND \
+	    	project_version = ## /* name:'prjversion' type:gchararray */ \
+	     LIMIT 1");
 
 	STATIC_QUERY_POPULATE_INIT_NODE(sdbe->priv->static_query_list, 
 									PREP_QUERY_UPDATE_PROJECT_ANALYSE_TIME, 
@@ -2668,7 +2670,7 @@ symbol_db_engine_add_new_workspace (SymbolDBEngine * dbe,
 	}
 	SDB_PARAM_SET_STRING(param, workspace_name);
 
-	/* execute the query with parametes just set */
+	/* execute the query with parameters just set */
 	if (gda_connection_statement_execute_non_select (priv->db_connection, 
 														  (GdaStatement*)stmt, 
 														  (GdaSet*)plist, NULL, NULL) == -1)
@@ -2683,32 +2685,75 @@ symbol_db_engine_add_new_workspace (SymbolDBEngine * dbe,
 
 /* ~~~ Thread note: this function locks the mutex ~~~ */ 
 gboolean
-symbol_db_engine_project_exists (SymbolDBEngine * dbe,	/*gchar* workspace, */
-							   	const gchar * project_name)
+symbol_db_engine_project_exists (SymbolDBEngine * dbe,
+							   	const gchar * project_name,
+    							const gchar * project_version)
 {
 	SymbolDBEnginePriv *priv;
-	gint prj_id;
 	GValue v = {0};
+	const GdaSet *plist;
+	const GdaStatement *stmt;
+	GdaHolder *param;
+	GdaDataModel *data_model;
 
 	priv = dbe->priv;
 
 	SDB_LOCK(priv);
 	
 	g_return_val_if_fail (priv->db_connection != NULL, FALSE);
-	SDB_GVALUE_SET_STATIC_STRING(v, project_name);
-
+	
 	/* test the existence of the project in db */
-	if ((prj_id = sdb_engine_get_tuple_id_by_unique_name (dbe,
-				PREP_QUERY_GET_PROJECT_ID_BY_UNIQUE_NAME,
-				"prjname",
-				 &v)) <= 0)
+	/* get prepared query */
+	if ((stmt = sdb_engine_get_statement_by_query_id (dbe, 
+	    PREP_QUERY_GET_PROJECT_ID_BY_UNIQUE_NAME)) == NULL)
+	{
+		g_warning ("Query is null");
+		SDB_UNLOCK(priv);
+		return FALSE;
+	}
+
+	plist = sdb_engine_get_query_parameters_list (dbe, 
+	    PREP_QUERY_GET_PROJECT_ID_BY_UNIQUE_NAME);
+	
+	if ((param = gda_set_get_holder ((GdaSet*)plist, "prjname")) == NULL)
+	{
+		g_warning ("sdb_engine_get_tuple_id_by_unique_name: param is NULL "
+				   "from pquery!\n");
+		SDB_UNLOCK(priv);
+		return FALSE;
+	}
+
+	SDB_PARAM_SET_STRING (param, project_name);
+
+	if ((param = gda_set_get_holder ((GdaSet*)plist, "prjversion")) == NULL)
+	{
+		g_warning ("sdb_engine_get_tuple_id_by_unique_name: param is NULL "
+				   "from pquery!\n");
+		SDB_UNLOCK(priv);
+		return FALSE;
+	}
+
+	SDB_PARAM_SET_STRING (param, project_version);
+	    
+	/* execute the query with parameters just set */
+	data_model = gda_connection_statement_execute_select (priv->db_connection, 
+														  (GdaStatement*)stmt, 
+														  (GdaSet*)plist, NULL);
+		
+	if (!GDA_IS_DATA_MODEL (data_model) ||
+		gda_data_model_get_n_rows (GDA_DATA_MODEL (data_model)) <= 0)
 	{
+		if (data_model != NULL)
+			g_object_unref (data_model);
 		SDB_UNLOCK(priv);
 		return FALSE;
 	}
 
+	/* we found it and we can return */
+	g_object_unref (data_model);
+
 	SDB_UNLOCK(priv);
-	/* we found it */
+
 	return TRUE;
 }
 
@@ -2802,7 +2847,7 @@ symbol_db_engine_add_new_project (SymbolDBEngine * dbe, const gchar * workspace,
 
 	SDB_PARAM_SET_STRING(param, workspace_name);
 
-	/* execute the query with parametes just set */
+	/* execute the query with parameters just set */
 	if (gda_connection_statement_execute_non_select (priv->db_connection, 
 														  (GdaStatement*)stmt, 
 														  (GdaSet*)plist, NULL, NULL) == -1)
@@ -2868,7 +2913,7 @@ sdb_engine_add_new_language (SymbolDBEngine * dbe, const gchar *language)
 
 		SDB_PARAM_SET_STRING(param, language);
 				
-		/* execute the query with parametes just set */
+		/* execute the query with parameters just set */
 		if (gda_connection_statement_execute_non_select (priv->db_connection, 
 														 (GdaStatement*)stmt, 
 														 (GdaSet*)plist, &last_inserted,
@@ -2990,7 +3035,7 @@ sdb_engine_add_new_db_file (SymbolDBEngine * dbe, const gchar * project_name,
 
 	SDB_PARAM_SET_INT(param, language_id);
 
-	/* execute the query with parametes just set */
+	/* execute the query with parameters just set */
 	if (gda_connection_statement_execute_non_select (priv->db_connection, 
 													 (GdaStatement*)stmt, 
 													 (GdaSet*)plist, NULL,
@@ -3353,7 +3398,7 @@ sdb_engine_add_new_sym_kind (SymbolDBEngine * dbe, const tagEntry * tag_entry)
 
 		SDB_PARAM_SET_INT (param, is_container);
 
-		/* execute the query with parametes just set */
+		/* execute the query with parameters just set */
 		if (gda_connection_statement_execute_non_select(priv->db_connection, 
 														 (GdaStatement*)stmt, 
 														 (GdaSet*)plist, &last_inserted,
@@ -3442,7 +3487,7 @@ sdb_engine_add_new_sym_access (SymbolDBEngine * dbe, const tagEntry * tag_entry)
 
 		SDB_PARAM_SET_STRING (param, access);
 		
-		/* execute the query with parametes just set */
+		/* execute the query with parameters just set */
 		if (gda_connection_statement_execute_non_select (priv->db_connection, 
 														 (GdaStatement*)stmt, 
 														 (GdaSet*)plist, &last_inserted,
@@ -3527,7 +3572,7 @@ sdb_engine_add_new_sym_implementation (SymbolDBEngine * dbe,
 
 		SDB_PARAM_SET_STRING(param, implementation);
 		
-		/* execute the query with parametes just set */
+		/* execute the query with parameters just set */
 		if (gda_connection_statement_execute_non_select (priv->db_connection, 
 														 (GdaStatement*)stmt, 
 														 (GdaSet*)plist, &last_inserted,
@@ -3593,7 +3638,7 @@ sdb_engine_add_new_heritage (SymbolDBEngine * dbe, gint base_symbol_id,
 
 	SDB_PARAM_SET_INT(param, derived_symbol_id);	
 
-	/* execute the query with parametes just set */
+	/* execute the query with parameters just set */
 	if (gda_connection_statement_execute_non_select (priv->db_connection, 
 													 (GdaStatement*)stmt, 
 													 (GdaSet*)plist, NULL,
@@ -3837,7 +3882,7 @@ sdb_engine_second_pass_update_scope_1 (SymbolDBEngine * dbe,
 
 	SDB_PARAM_SET_INT(param, symbol_referer_id);
 
-	/* execute the query with parametes just set */
+	/* execute the query with parameters just set */
 	gda_connection_statement_execute_non_select (priv->db_connection, 
 													 (GdaStatement*)stmt, 
 													 (GdaSet*)plist, NULL,
@@ -4531,7 +4576,7 @@ sdb_engine_add_new_symbol (SymbolDBEngine * dbe, const tagEntry * tag_entry,
     									 	 access_kind_id, implementation_kind_id,
     									 	 update_flag);
 	
-	/* execute the query with parametes just set */
+	/* execute the query with parameters just set */
 	nrows = gda_connection_statement_execute_non_select (priv->db_connection, 
 													 (GdaStatement*)stmt, 
 													 (GdaSet*)plist, &last_inserted,
@@ -4995,7 +5040,7 @@ symbol_db_engine_update_project_symbols (SymbolDBEngine *dbe,
 
 	SDB_PARAM_SET_STRING(param, project_name);	
 	
-	/* execute the query with parametes just set */
+	/* execute the query with parameters just set */
 	GType gtype_array [6] = {	G_TYPE_INT, 
 								G_TYPE_STRING, 
 								G_TYPE_INT, 
diff --git a/plugins/symbol-db/symbol-db-engine-core.h b/plugins/symbol-db/symbol-db-engine-core.h
index 1d34b97..9f3d685 100644
--- a/plugins/symbol-db/symbol-db-engine-core.h
+++ b/plugins/symbol-db/symbol-db-engine-core.h
@@ -173,7 +173,8 @@ symbol_db_engine_add_new_project (SymbolDBEngine *dbe, const gchar* workspace,
  */
 gboolean 
 symbol_db_engine_project_exists (SymbolDBEngine *dbe, /*gchar* workspace, */
-								  const gchar* project_name);
+								const gchar* project_name,
+    							const gchar* project_version);
 
 
 /** 
diff --git a/plugins/symbol-db/symbol-db-prefs.c b/plugins/symbol-db/symbol-db-prefs.c
index 9e00e82..af766c3 100644
--- a/plugins/symbol-db/symbol-db-prefs.c
+++ b/plugins/symbol-db/symbol-db-prefs.c
@@ -45,8 +45,6 @@ enum {
 
 enum
 {
-	PACKAGE_ADD,
-	PACKAGE_REMOVE,
 	BUFFER_UPDATE_TOGGLED,
 	LAST_SIGNAL
 };
@@ -63,9 +61,6 @@ struct _SymbolDBPrefsPriv {
 	SymbolDBEngine *sdbe_project;
 	SymbolDBEngine *sdbe_globals;
 	
-	GList *pkg_list;
-	GHashTable *enabled_packages_hash;
-
 	gint prefs_notify_id;
 };
 
@@ -87,328 +82,19 @@ destroy_parseable_data (ParseableData *pdata)
 
 G_DEFINE_TYPE (SymbolDBPrefs, sdb_prefs, G_TYPE_OBJECT);
 
-#if 0
-static void 
-on_prefs_executable_changed (/*GtkFileChooser *chooser,*/ GtkComboBox *chooser,
-                             gpointer user_data)
-{
-	const gchar *new_file;
-	SymbolDBPrefs *sdbp;
-	SymbolDBPrefsPriv *priv;
-	
-	sdbp = SYMBOL_DB_PREFS (user_data);
-	priv = sdbp->priv;
-	
-/*	new_file = gtk_file_chooser_get_filename (chooser);*/
-	new_file = gtk_entry_get_text  (GTK_ENTRY (chooser));
-		
-	DEBUG_PRINT ("on_prefs_executable_changed (): new executable selected %s", 
-				 new_file);
-	if (new_file != NULL) 
-	{
-		GtkWidget *fchooser;
-		fchooser = 	GTK_WIDGET (gtk_builder_get_object (priv->prefs_bxml, CTAGS_PREFS));	
-		/*gtk_widget_set_sensitive (fchooser, TRUE);*/
-		
-		anjuta_preferences_set (priv->prefs, CTAGS_PREFS_KEY,
-							new_file);
-	
-		/* remember to set the new ctags path into various symbol engines */
-		symbol_db_engine_set_ctags_path (priv->sdbe_project, new_file);
-		symbol_db_engine_set_ctags_path (priv->sdbe_globals, new_file);
-	}
-}
-
-
-static void
-on_notify_prefs (AnjutaPreferences* prefs, const gchar* key,
-                 const gchar* value, gpointer user_data)
-{
-	DEBUG_PRINT ("%s", "on_notify_prefs ()");
-}
-#endif
-
-static void
-on_listall_output (AnjutaLauncher * launcher,
-					AnjutaLauncherOutputType output_type,
-					const gchar * chars, gpointer user_data)
-{
-	gchar **lines;
-	const gchar *curr_line;
-	gint i = 0;
-	SymbolDBPrefs *sdbp;
-	SymbolDBPrefsPriv *priv;
-	GtkListStore *store;
-
-	if (output_type == ANJUTA_LAUNCHER_OUTPUT_STDERR)
-	{
-		/* no way. We don't like errors on stderr... */
-		return;
-	}
-	
-	sdbp = SYMBOL_DB_PREFS (user_data);
-	priv = sdbp->priv;
-	
-	store = priv->prefs_list_store;	
-	lines = g_strsplit (chars, "\n", -1);
-	
-	while ((curr_line = lines[i++]) != NULL)
-	{
-		gchar **pkgs;
-		
-		pkgs = g_strsplit (curr_line, " ", -1);
-		
-		/* just take the first token as it's the package-name */
-		if (pkgs == NULL)
-			return;		
-		
-		if (pkgs[0] == NULL) {
-			g_strfreev (pkgs);
-			continue;
-		}
-		priv->pkg_list = g_list_prepend (priv->pkg_list, g_strdup (pkgs[0]));
-		g_strfreev (pkgs);
-	}
-
-	g_strfreev (lines);	
-}
-
-static void
-on_listall_exit (AnjutaLauncher * launcher, int child_pid,
-				   int exit_status, gulong time_taken_in_seconds,
-				   gpointer user_data)
-{	
-	SymbolDBPrefs *sdbp;
-	SymbolDBPrefsPriv *priv;	
-	GtkListStore *store;
-	GList *item;
-	GtkWidget *treeview;
-	
-	sdbp = SYMBOL_DB_PREFS (user_data);
-	priv = sdbp->priv;
-	store = priv->prefs_list_store;
-	
-	DEBUG_PRINT ("%s", "on_listall_exit ()");
-
-	g_signal_handlers_disconnect_by_func (launcher, on_listall_exit,
-										  user_data);	
-
-	treeview = GTK_WIDGET (gtk_builder_get_object (priv->prefs_bxml, "tags_treeview"));
-	gtk_widget_set_sensitive (treeview, TRUE);
-	
-	/* we should have pkg_list filled with packages names 
-	 * 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 (priv->pkg_list == NULL)
-	{
-		g_warning ("No packages found");
-		return;
-	}
-
-	priv->pkg_list = g_list_sort (priv->pkg_list, symbol_db_glist_compare_func);
-	item = priv->pkg_list;
-	
-	while (item != NULL)
-	{
-		GtkTreeIter iter;
-		gboolean enabled = FALSE;
-		/* that's good. We can add the package to the GtkListStore */
-		gtk_list_store_append (GTK_LIST_STORE (store), &iter);
-		
-		/* check if we should enable or not the checkbox */
-		if (g_hash_table_lookup (priv->enabled_packages_hash, item->data) == NULL) 		
-			enabled = FALSE;
-		else
-			enabled = TRUE;		
-		
-		gtk_list_store_set (store, &iter, COLUMN_LOAD, enabled,
-									COLUMN_NAME, g_strdup (item->data), -1);
-		
-		item = item->next;
-	}	
-}
-
-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;
-	SymbolDBPrefs *sdbp;
-	SymbolDBPrefsPriv *priv;
-	const gchar *path_str;
-	GtkTreeIter iter;
-	GtkTreePath *path;		
-	GtkListStore *store;
-	gboolean enabled;
-	gchar *curr_package_name;
-	
-	pdata = (ParseableData *)user_data;
-	path_str = pdata->path_str;
-	sdbp = pdata->sdbp;
-	priv = sdbp->priv;
-	
-	DEBUG_PRINT ("on_tag_load_toggled_parseable_cb %d", is_parseable);
-	prefs_window = GTK_WINDOW (gtk_builder_get_object (priv->prefs_bxml, "symbol_db_pref_window"));
-	treeview = GTK_WIDGET (gtk_builder_get_object (priv->prefs_bxml, "tags_treeview"));
-	prefs_progressbar = GTK_WIDGET (gtk_builder_get_object (priv->prefs_bxml, "prefs_progressbar"));
-
-	store = priv->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);
-	
-	if (is_parseable == FALSE)
-	{
-		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);
-		
-		/* we for sure don't want this package on list next time */
-		gtk_list_store_set (store, &iter, COLUMN_LOAD, FALSE, -1);
-		
-		/* emit the package-remove signal */
-		g_signal_emit (sdbp, signals[PACKAGE_REMOVE], 0, curr_package_name); 		
-	}
-	else
-	{
-		/* we have a good parseable package. Let's mark the check enabled/disabled */
-		enabled = !enabled;
-		gtk_list_store_set (store, &iter, COLUMN_LOAD, enabled, -1);
-		
-		/* good, should we scan the packages? */
-		if (enabled == TRUE)
-		{			
-			symbol_db_system_scan_package (priv->sdbs, curr_package_name);
-			
-			/* emit the package-add signal */
-			g_signal_emit (sdbp, signals[PACKAGE_ADD], 0, curr_package_name);
-		}
-		else 
-		{
-			/* emit the package-remove signal */
-			g_signal_emit (sdbp, signals[PACKAGE_REMOVE], 0, curr_package_name); 
-		}
-	}
-	
-	gtk_widget_set_sensitive (treeview, TRUE);
-	gtk_widget_hide (prefs_progressbar);	
-	gtk_tree_path_free (path);
-	
-	destroy_parseable_data (pdata);
-}
-				  
-static void
-on_tag_load_toggled (GtkCellRendererToggle *cell, char *path_str,
-					 SymbolDBPrefs *sdbp)
-{
-	GtkTreeIter iter;
-	GtkTreePath *path;
-	gchar *curr_package_name;
-	GtkListStore *store;
-	GtkWidget *prefs_progressbar;
-	GtkWidget *	treeview;
-	ParseableData *pdata;
-	SymbolDBPrefsPriv *priv;	
-	
-	priv = sdbp->priv;
-	
-	DEBUG_PRINT ("%s", "on_tag_load_toggled ()");
-	
-	store = priv->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_NAME, &curr_package_name,
-						-1);
-	gtk_tree_path_free (path);
-	
-	prefs_progressbar = GTK_WIDGET (gtk_builder_get_object (priv->prefs_bxml, "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));
-	
-	treeview = GTK_WIDGET (gtk_builder_get_object (priv->prefs_bxml, "tags_treeview"));
-	gtk_widget_set_sensitive (treeview, FALSE);
-	
-	pdata = g_new0 (ParseableData, 1);
-	pdata->sdbp = sdbp;
-	pdata->path_str = g_strdup (path_str);
-	
-	symbol_db_system_is_package_parseable (priv->sdbs, curr_package_name, 
-										   on_tag_load_toggled_parseable_cb,
-										   pdata);
-}
 
 static void
 sdb_prefs_init1 (SymbolDBPrefs *sdbp)
 {
 	SymbolDBPrefsPriv *priv;
-/*	GtkWidget *fchooser;*/
-/*	gchar *ctags_value;*/
 
 	priv = sdbp->priv;
 
-#if 0	
-	fchooser = 	GTK_WIDGET (gtk_builder_get_object (priv->prefs_bxml, CTAGS_PREFS));
-#endif	
-	/* we will reactivate it after the listall has been finished */
-	/*gtk_widget_set_sensitive (fchooser, FALSE);*/
-			
 	anjuta_preferences_add_from_builder (priv->prefs, 
 									 priv->prefs_bxml, 
 									 BUILDER_ROOT, 
 									 _("Symbol Database"),  
 									 ICON_FILE);
-#if 0	
-	ctags_value = anjuta_preferences_get (priv->prefs, CTAGS_PREFS_KEY);
-	
-	if (ctags_value == NULL || strlen (ctags_value) <= 0) 
-	{
-		ctags_value = g_strdup (CTAGS_PATH);
-	}
-	
-	DEBUG_PRINT ("select ->%s<-", ctags_value);	
-	
-	/*
-	 * GtkFileChooser support disabled here because it was too slow.
-	 * Bug #551384 has been filed. Let's see what happens...
-	 * 
-	 */
-	
-
-	/* FIXME: wtf?! */
-	gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (fchooser), ctags_value);
-	gtk_file_chooser_select_filename (GTK_FILE_CHOOSER (fchooser), ctags_value);
-	
-	g_signal_connect (G_OBJECT (fchooser), "selection-changed",
-					  G_CALLBACK (on_prefs_executable_changed), sdbp);
-
-	
-	g_signal_connect (G_OBJECT (fchooser), "changed",
-					  G_CALLBACK (on_prefs_executable_changed), sdbp);	
-
-
-	priv->prefs_notify_id = anjuta_preferences_notify_add_string (priv->prefs, 
-	                                                              CTAGS_PREFS_KEY, 
-	                                                              on_notify_prefs, 
-	                                                              priv->prefs, NULL);
-	g_free (ctags_value);
-#endif		
-	
 }
 
 static void
@@ -416,19 +102,16 @@ sdb_prefs_init (SymbolDBPrefs *object)
 {
 	SymbolDBPrefs *sdbp;
 	SymbolDBPrefsPriv *priv;
-	GtkWidget *treeview;
-	GtkCellRenderer *renderer;
-	GtkTreeViewColumn *column;
-	gchar* exe_string = NULL;
-	gboolean require_scan = FALSE;		/* scan for packages */
-
+	
 	sdbp = SYMBOL_DB_PREFS (object);
 	sdbp->priv = g_new0 (SymbolDBPrefsPriv, 1);
 	priv = sdbp->priv;
-	
-	priv->pkg_list = NULL;
-	
-	DEBUG_PRINT ("%s", "symbol_db_prefs_init ()");
+
+	anjuta_preferences_add_from_builder (priv->prefs, 
+									 priv->prefs_bxml, 
+									 BUILDER_ROOT, 
+									 _("Symbol Database"),  
+									 ICON_FILE);
 	
 	if (priv->prefs_bxml == NULL)
 	{
@@ -440,71 +123,7 @@ sdb_prefs_init (SymbolDBPrefs *object)
 			g_warning ("Couldn't load builder file: %s", error->message);
 			g_error_free(error);
 		}		
-	}		
-
-	/* init GtkListStore */
-	if (priv->prefs_list_store == NULL) 
-	{
-		priv->prefs_list_store = gtk_list_store_new (COLUMN_MAX, G_TYPE_BOOLEAN, 
-													   G_TYPE_STRING);
-		require_scan = TRUE;
 	}
-	
-	treeview = GTK_WIDGET (gtk_builder_get_object (priv->prefs_bxml, "tags_treeview"));
-	/* on_listall_exit will reactivate this */
-	gtk_widget_set_sensitive (treeview, FALSE);
-	gtk_tree_view_set_model (GTK_TREE_VIEW (treeview),
-							 GTK_TREE_MODEL (priv->prefs_list_store));	
-
-	/* Add the column for stock treeview */
-	renderer = gtk_cell_renderer_toggle_new ();
-	g_signal_connect (G_OBJECT (renderer), "toggled",
-					  G_CALLBACK (on_tag_load_toggled), sdbp);
-	column = gtk_tree_view_column_new_with_attributes (_("Load"),
-													   renderer,
-													   "active",
-													   COLUMN_LOAD,
-													   NULL);
-	gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
-	
-	renderer = gtk_cell_renderer_text_new ();
-	column = gtk_tree_view_column_new_with_attributes (_("API Tags"),
-													  renderer, "text",
-													  COLUMN_NAME,
-													  NULL);
-	gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
-	gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-	gtk_tree_view_set_search_column (GTK_TREE_VIEW (treeview),
-									 COLUMN_NAME);
-	
-	/* frame3 show all */
-	GtkWidget *frame3;
-	frame3 = GTK_WIDGET (gtk_builder_get_object (priv->prefs_bxml, "frame3"));
-	gtk_widget_show_all (frame3);
-	GtkWidget *prefs_progressbar = GTK_WIDGET (gtk_builder_get_object (priv->prefs_bxml, 
-														 "prefs_progressbar"));
-	gtk_widget_hide (prefs_progressbar);	
-	
-	/* listall launcher thing */
-	if (require_scan == TRUE) 
-	{
-		priv->pkg_config_launcher = anjuta_launcher_new ();
-
-		anjuta_launcher_set_check_passwd_prompt (priv->pkg_config_launcher,
-												 FALSE);
-
-		g_signal_connect (G_OBJECT (priv->pkg_config_launcher), "child-exited",
-					  	G_CALLBACK (on_listall_exit), sdbp);	
-	
-		exe_string = g_strdup ("pkg-config --list-all");
-	
-		anjuta_launcher_execute (priv->pkg_config_launcher,
-							 	exe_string, on_listall_output,
-							 	sdbp);
-	}	
-		
-	/* unrefs unused memory objects */
-	g_free (exe_string);
 }
 
 static void
@@ -516,31 +135,12 @@ sdb_prefs_finalize (GObject *object)
 	sdbp = SYMBOL_DB_PREFS (object);
 	priv = sdbp->priv;
 	
-	DEBUG_PRINT ("%s", "symbol_db_prefs_finalize ()");
-	
 	anjuta_preferences_notify_remove(priv->prefs, priv->prefs_notify_id);
 	anjuta_preferences_remove_page(priv->prefs, _("Symbol Database"));
 
-	if (priv->pkg_config_launcher != NULL)
-		g_object_unref (priv->pkg_config_launcher);
-	priv->pkg_config_launcher = NULL;
-	
-	/* free pkg_list */
-	g_list_foreach (priv->pkg_list, (GFunc)g_free, NULL);
-	g_list_free (priv->pkg_list);
-	priv->pkg_list = NULL;
-
 	if (priv->prefs_bxml != NULL)
 		g_object_unref (priv->prefs_bxml);
 
-	if (priv->prefs_list_store != NULL)
-		g_object_unref (priv->prefs_list_store);
-	
-	if (priv->enabled_packages_hash)
-	{
-		g_hash_table_destroy (priv->enabled_packages_hash);
-	}
-	
 	G_OBJECT_CLASS (sdb_prefs_parent_class)->finalize (object);
 }
 
@@ -549,26 +149,6 @@ sdb_prefs_class_init (SymbolDBPrefsClass *klass)
 {
 	GObjectClass* object_class = G_OBJECT_CLASS (klass);
 
-	signals[PACKAGE_ADD]
-		= g_signal_new ("package-add",
-						G_OBJECT_CLASS_TYPE (object_class),
-						G_SIGNAL_RUN_FIRST,
-						G_STRUCT_OFFSET (SymbolDBPrefsClass, package_add),
-						NULL, NULL,
-						g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 
-						1,
-						G_TYPE_STRING);
-
-	signals[PACKAGE_REMOVE]
-		= g_signal_new ("package-remove",
-						G_OBJECT_CLASS_TYPE (object_class),
-						G_SIGNAL_RUN_FIRST,
-						G_STRUCT_OFFSET (SymbolDBPrefsClass, package_remove),
-						NULL, NULL,
-						g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 
-						1,
-						G_TYPE_STRING);	
-	
 	signals[BUFFER_UPDATE_TOGGLED]
 		= g_signal_new ("buffer-update-toggled",
 						G_OBJECT_CLASS_TYPE (object_class),
@@ -584,8 +164,7 @@ sdb_prefs_class_init (SymbolDBPrefsClass *klass)
 
 SymbolDBPrefs *
 symbol_db_prefs_new (SymbolDBSystem *sdbs, SymbolDBEngine *sdbe_project,
-					 SymbolDBEngine *sdbe_globals, AnjutaPreferences *prefs,
-					 GList *enabled_packages)
+					 SymbolDBEngine *sdbe_globals, AnjutaPreferences *prefs)
 {
 	SymbolDBPrefs *sdbp;
 	SymbolDBPrefsPriv *priv;
@@ -598,21 +177,7 @@ symbol_db_prefs_new (SymbolDBSystem *sdbs, SymbolDBEngine *sdbe_project,
 	priv->prefs = prefs;
 	priv->sdbe_project = sdbe_project;
 	priv->sdbe_globals = sdbe_globals;
-	priv->enabled_packages_hash = g_hash_table_new_full (g_str_hash, g_str_equal, 
-													g_free, NULL);
 
-	/* we'll convert the list of strings in input into an hash table, so that
-	 * a lookup there will be done quicker
-	 */
-	GList *item = enabled_packages;
-	while (item != NULL)
-	{
-		g_hash_table_insert (priv->enabled_packages_hash, (gpointer)g_strdup (item->data), 
-							 GINT_TO_POINTER (TRUE));
-		item = item->next;
-	}	
-	
-	sdb_prefs_init1 (sdbp);	
 	return sdbp;
 }
 
diff --git a/plugins/symbol-db/symbol-db-prefs.h b/plugins/symbol-db/symbol-db-prefs.h
index 5188e4f..54ae886 100644
--- a/plugins/symbol-db/symbol-db-prefs.h
+++ b/plugins/symbol-db/symbol-db-prefs.h
@@ -68,8 +68,7 @@ GType sdb_prefs_get_type (void) G_GNUC_CONST;
 
 SymbolDBPrefs *
 symbol_db_prefs_new (SymbolDBSystem *sdbs, SymbolDBEngine *sdbe_project,
-					 SymbolDBEngine *sdbe_globals, AnjutaPreferences *prefs,
-					 GList *enabled_packages);
+					 SymbolDBEngine *sdbe_globals, AnjutaPreferences *prefs);
 
 
 G_END_DECLS
diff --git a/plugins/symbol-db/symbol-db-system.c b/plugins/symbol-db/symbol-db-system.c
index 913e9c0..dc9f2e0 100644
--- a/plugins/symbol-db/symbol-db-system.c
+++ b/plugins/symbol-db/symbol-db-system.c
@@ -282,7 +282,8 @@ symbol_db_system_new (SymbolDBPlugin *sdb_plugin,
  */
 gboolean
 symbol_db_system_is_package_parsed (SymbolDBSystem *sdbs, 
-								   const gchar * package_name)
+								   	const gchar * package_name, 
+    								const gchar * package_version)
 {
 	SymbolDBSystemPriv *priv;
 		
@@ -292,7 +293,7 @@ symbol_db_system_is_package_parsed (SymbolDBSystem *sdbs,
 	priv = sdbs->priv;
 	
 	return symbol_db_engine_project_exists (priv->sdbe_globals, 
-											package_name);
+											package_name, package_version);
 }
 
 static void
@@ -718,7 +719,7 @@ symbol_db_system_scan_package (SymbolDBSystem *sdbs,
 	priv = sdbs->priv;
 	
 	/* does is already exist on db? */
-	if (symbol_db_system_is_package_parsed (sdbs, package_name) == TRUE)
+	if (symbol_db_system_is_package_parsed (sdbs, package_name, "1.0") == TRUE)
 	{
 		DEBUG_PRINT ("symbol_db_system_scan_package (): no need to scan %s",
 					 package_name);
diff --git a/plugins/symbol-db/symbol-db-system.h b/plugins/symbol-db/symbol-db-system.h
index 3896b89..ab457e9 100644
--- a/plugins/symbol-db/symbol-db-system.h
+++ b/plugins/symbol-db/symbol-db-system.h
@@ -76,8 +76,8 @@ symbol_db_system_new (SymbolDBPlugin *sdb_plugin,
  */
 gboolean 
 symbol_db_system_is_package_parsed (SymbolDBSystem *sdbs, 
-								   const gchar * package_name);
-
+								   	const gchar * package_name, 
+    								const gchar * package_version);
 /**
  * Test whether the package has a good cflags output, i.e. it's parseable.
  * This function does not tell us anything about the db. It could be that 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]