[anjuta/system-db-refactor] symbol-db: initial work on query to filter global packages.



commit 076f5643f292964e630a8de2f874bd963bf6a769
Author: Massimo Corà <mcora src gnome org>
Date:   Tue Jan 25 23:58:35 2011 +0100

    symbol-db: initial work on query to filter global packages.
    
    Touched also anjuta-utils and anjuta-pkg-config to create shared code.

 libanjuta/anjuta-pkg-config.c              |  128 ++++++++++++++++++++++------
 libanjuta/anjuta-pkg-config.h              |   67 ++++++++++++---
 libanjuta/anjuta-utils.c                   |   62 +++++++++++++
 libanjuta/anjuta-utils.h                   |    8 ++
 libanjuta/interfaces/libanjuta.idl         |    4 +
 plugins/am-project/Makefile.am             |    3 +-
 plugins/am-project/amp-package.c           |   46 +----------
 plugins/symbol-db/plugin.c                 |   34 +++++++-
 plugins/symbol-db/symbol-db-engine-utils.c |    4 +-
 plugins/symbol-db/symbol-db-query.c        |   63 +++++++++++---
 plugins/symbol-db/symbol-db-query.h        |    3 +-
 11 files changed, 320 insertions(+), 102 deletions(-)
---
diff --git a/libanjuta/anjuta-pkg-config.c b/libanjuta/anjuta-pkg-config.c
index a77c48e..69633f9 100644
--- a/libanjuta/anjuta-pkg-config.c
+++ b/libanjuta/anjuta-pkg-config.c
@@ -50,15 +50,7 @@ remove_includes (GList* includes, GList* dependencies)
 	return includes;
 }
 
-/*
- * anjuta_pkg_config_list_dependencies:
- * @pkg_name: Name of the package to get the include directories for
- * @error: Error handling
- * 
- * This does (potentially) blocking, call from a thread if necessary
- * 
- * Returns: a list of packages @pkg depends on
- */
+
 GList*
 anjuta_pkg_config_list_dependencies (const gchar* package, GError** error)
 {
@@ -92,16 +84,105 @@ anjuta_pkg_config_list_dependencies (const gchar* package, GError** error)
 	return deps;
 }
 
-/*
- * anjuta_pkg_config_get_directories:
- * @pkg_name: Name of the package to get the include directories for
- * @no_deps: Don't include directories of the dependencies
- * @error: Error handling
- * 
- * This does (potentially) blocking, call from a thread if necessary
- * 
- * Returns: a list of include directories of the package
- */
+
+static GList **
+sdb_system_files_visit_dir (GList **files_list, GFile *file)
+{
+	GFileEnumerator *enumerator;
+	
+	if ((enumerator = g_file_enumerate_children (file, "standard::name,standard::type",
+												G_FILE_QUERY_INFO_NONE, NULL, NULL)))
+	{
+		GFileInfo *info;
+		
+		info = g_file_enumerator_next_file (enumerator, NULL, NULL);
+		while (info)
+		{
+			GFileType type;
+			GFile *child_file;
+
+			problemi qui.
+			type = g_file_info_get_file_type (info);
+			child_file = g_file_resolve_relative_path (file, g_file_info_get_name (info));
+
+			g_message ("child name %s", g_file_info_get_name (info));
+			if (type == G_FILE_TYPE_DIRECTORY)
+			{
+				/* recurse */
+				files_list = sdb_system_files_visit_dir (files_list, child_file);
+				
+				g_object_unref (child_file);
+			}
+			else
+				*files_list = g_list_prepend (*files_list, child_file);
+			
+			g_object_unref (info);
+			
+			info = g_file_enumerator_next_file (enumerator, NULL, NULL);
+		}
+		
+		g_object_unref (enumerator);
+	}	 
+
+	g_message ("file_list length %d", g_list_length (files_list));
+	
+	return files_list;
+}
+
+GList*		
+anjuta_pkg_config_get_abs_headers (const gchar* pkg_name, gboolean no_deps, GError** error)
+{
+	g_return_val_if_fail (pkg_name != NULL, NULL);
+	GList *directories = NULL;
+	GList *dir_node = NULL;
+	/* a GList list of all headers found */
+	GList *headers = NULL;
+	/* a gchar version of headers list */
+	GList *abs_headers;
+
+	/* get a GList of gchar(s) */
+	directories = anjuta_pkg_config_get_directories (pkg_name, no_deps, error);
+	
+	if (error != NULL)
+		return NULL;
+	
+	dir_node = directories;
+	while (dir_node != NULL)
+	{
+		GList *children = NULL;
+		GFile *file;
+
+		g_message ("creating gfile for %s", dir_node->data);
+		file = g_file_new_for_path (dir_node->data);
+		sdb_system_files_visit_dir (&children, file);
+		g_object_unref (file);
+		
+		if (children != NULL)
+		{
+			GList *foo_node;
+			foo_node = children;
+
+			while (foo_node != NULL)
+			{
+				g_message ("children %s", g_file_get_path (foo_node->data));
+
+				foo_node = g_list_next (foo_node);
+			}
+			
+			headers = g_list_concat (headers, children);
+			g_list_free (children);
+		}
+		dir_node = g_list_next (dir_node);
+	}	
+
+	abs_headers = anjuta_util_convert_gfile_list_to_path_list (headers);
+
+	g_list_foreach (headers, (GFunc) g_object_unref, NULL);
+	g_list_free (headers);	
+	
+	return abs_headers;
+}
+
 GList*
 anjuta_pkg_config_get_directories (const gchar* pkg_name, gboolean no_deps, GError** error)
 {
@@ -152,14 +233,6 @@ anjuta_pkg_config_get_directories (const gchar* pkg_name, gboolean no_deps, GErr
 	return dirs;
 }
 
-/*
- * anjuta_pkg_config_ignore_package:
- * @name: Name of the package to ignore
- * 
- * Returns: TRUE if the package does not contain
- * valid information for the build system and should be
- * ignored.
- */
 gboolean
 anjuta_pkg_config_ignore_package (const gchar* name)
 {
@@ -209,4 +282,3 @@ gchar* anjuta_pkg_config_get_version (const gchar* package)
     return NULL;
   }
 }
-
diff --git a/libanjuta/anjuta-pkg-config.h b/libanjuta/anjuta-pkg-config.h
index 72ab573..2c7da50 100644
--- a/libanjuta/anjuta-pkg-config.h
+++ b/libanjuta/anjuta-pkg-config.h
@@ -16,14 +16,59 @@
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
- 
- #include <glib.h>
- 
-GList* anjuta_pkg_config_list_dependencies (const gchar* package, 
-                                            GError** error);
-GList* anjuta_pkg_config_get_directories (const gchar* pkg_name, 
-                                          gboolean no_deps, 
-                                          GError** error);
-gboolean anjuta_pkg_config_ignore_package (const gchar* name);
-
-gchar* anjuta_pkg_config_get_version (const gchar* package);
\ No newline at end of file
+
+#ifndef __ANJUTA_PKG_CONFIG__
+#define __ANJUTA_PKG_CONFIG__
+
+#include <glib.h>
+
+/**
+ * anjuta_pkg_config_list_dependencies:
+ * @pkg_name: Name of the package to get the include directories for
+ * @error: Error handling
+ * 
+ * This does (potentially) blocking, call from a thread if necessary
+ * 
+ * Returns: a list of packages @pkg depends on
+ */
+GList* 		anjuta_pkg_config_list_dependencies (const gchar* pkg_name, 
+												GError** error);
+
+/**
+ * anjuta_pkg_config_get_abs_headers:
+ * @pkg_name: Name of the package to get the include directories for
+ * @error: Error handling
+ *
+ * Returns a list of absolute path files (gchar*) of the headers of the #pkg_name.
+ */
+GList*		anjuta_pkg_config_get_abs_headers	(const gchar* pkg_name,
+			                                    gboolean no_deps,
+			                                    GError** error);
+/**
+ * anjuta_pkg_config_get_directories:
+ * @pkg_name: Name of the package to get the include directories for
+ * @no_deps: Don't include directories of the dependencies
+ * @error: Error handling
+ * 
+ * This does (potentially) blocking, call from a thread if necessary
+ * 
+ * Returns: a list of include directories (gchar(s)) of the package 
+ */
+GList* 		anjuta_pkg_config_get_directories (const gchar* pkg_name, 
+                                          		gboolean no_deps, 
+	                                          	GError** error);
+
+
+/**
+ * anjuta_pkg_config_ignore_package:
+ * @pkg_name: Name of the package to ignore
+ * 
+ * Returns: TRUE if the package does not contain
+ * valid information for the build system and should be
+ * ignored.
+ */
+gboolean 	anjuta_pkg_config_ignore_package (const gchar* pkg_name);
+
+gchar* anjuta_pkg_config_get_version (const gchar* package);
+
+#endif
diff --git a/libanjuta/anjuta-utils.c b/libanjuta/anjuta-utils.c
index c215ad8..fdd2d43 100644
--- a/libanjuta/anjuta-utils.c
+++ b/libanjuta/anjuta-utils.c
@@ -2462,3 +2462,65 @@ anjuta_util_clone_string_gptrarray (const GPtrArray* source)
 
 	return dest;
 }
+
+void
+anjuta_util_list_all_dir_children (GList **children, GFile *dir)
+{
+	GFileEnumerator *list;
+					
+	list = g_file_enumerate_children (dir,
+	    G_FILE_ATTRIBUTE_STANDARD_NAME,
+	    G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
+	    NULL,
+	    NULL);
+
+	if (list != NULL)
+	{
+		GFileInfo *info;
+		
+		while ((info = g_file_enumerator_next_file (list, NULL, NULL)) != NULL)
+		{
+			const gchar *name;
+			GFile *file;
+
+			name = g_file_info_get_name (info);
+			file = g_file_get_child (dir, name);
+			g_object_unref (info);
+
+			if (g_file_query_file_type (file, G_FILE_QUERY_INFO_NONE, NULL) == G_FILE_TYPE_DIRECTORY)
+			{
+				anjuta_util_list_all_dir_children (children, file);
+				g_object_unref (file);
+			}
+			else
+			{
+				*children = g_list_prepend (*children, file);
+			}
+		}
+		g_file_enumerator_close (list, NULL, NULL);
+		g_object_unref (list);
+	}
+}
+
+GPtrArray * 
+anjuta_util_convert_string_list_to_array (GList *list)
+{
+	GList *node;
+	GPtrArray *res;
+
+	g_return_val_if_fail (list != NULL, NULL);
+	
+	res = g_ptr_array_new_with_free_func (g_free);
+	
+	node = list;
+	while (node != NULL)
+	{
+		g_ptr_array_add (res, g_strdup (node->data));
+
+		node = g_list_next (node);
+	}
+
+	return res;
+}
+
+
diff --git a/libanjuta/anjuta-utils.h b/libanjuta/anjuta-utils.h
index a5531d0..290d4e0 100644
--- a/libanjuta/anjuta-utils.h
+++ b/libanjuta/anjuta-utils.h
@@ -158,6 +158,14 @@ GList *		anjuta_util_convert_gfile_list_to_path_list (GList *list);
 GList *		anjuta_util_convert_gfile_list_to_relative_path_list (GList *list, 
 															 const gchar *parent);
 
+/* the returned GPtrArray should be freed with g_ptr_array_unref (). 
+ * The GPtrArray is created with g_free () destroy function as parameter.
+ */ 
+GPtrArray * anjuta_util_convert_string_list_to_array(GList *list);
+
+/* list all files in a given directory */
+void		anjuta_util_list_all_dir_children	    (GList **children, GFile *dir);
+
 /* Helper functions to load a GtkBuilder file and get widgets */
 GtkBuilder *anjuta_util_builder_new					(const gchar *filename, 
 					                                GError **error);
diff --git a/libanjuta/interfaces/libanjuta.idl b/libanjuta/interfaces/libanjuta.idl
index 16672bd..6e39e34 100644
--- a/libanjuta/interfaces/libanjuta.idl
+++ b/libanjuta/interfaces/libanjuta.idl
@@ -5631,6 +5631,8 @@ interface IAnjutaSymbol
 	 *     Namely, the arguments list of the funtion.
 	 * @IANJUTA_SYMBOL_FIELD_RETURNTYPE: String. Return type of a method, if symbol is a function.
 	 * @IANJUTA_SYMBOL_FIELD_FILE_PATH: String. The relative path to the file where the symbol is found.
+	 * @IANJUTA_SYMBOL_FIELD_PROJECT_NAME: String. The project name to which the symbol belongs to.
+	 * @IANJUTA_SYMBOL_FIELD_PROJECT_VERSION: String. The project version to which the symbol belongs to.
 	 * @IANJUTA_SYMBOL_FIELD_IMPLEMENTATION: String. Implementation attribute of a symbol. It may be
 	 *     "pure virtual", "virtual", etc.
 	 * @IANJUTA_SYMBOL_FIELD_ACCESS: String. Access attribute of a symbol.
@@ -5666,6 +5668,8 @@ interface IAnjutaSymbol
 		FIELD_TYPE,
 		FIELD_TYPE_NAME,		
 		FIELD_FILE_PATH,
+		FIELD_PROJECT_NAME,
+		FIELD_PROJECT_VERSION,
 		FIELD_IMPLEMENTATION,
 		FIELD_ACCESS,
 		FIELD_KIND,
diff --git a/plugins/am-project/Makefile.am b/plugins/am-project/Makefile.am
index fe7e2e1..2295e67 100644
--- a/plugins/am-project/Makefile.am
+++ b/plugins/am-project/Makefile.am
@@ -96,7 +96,8 @@ projectparser_SOURCES = \
 	projectparser.c
 
 projectparser_LDADD = \
-	libam-project.la
+	libam-project.la \
+	$(LIBANJUTA_LIBS)
 
 
 EXTRA_DIST = \
diff --git a/plugins/am-project/amp-package.c b/plugins/am-project/amp-package.c
index 28fd05f..83afdc7 100644
--- a/plugins/am-project/amp-package.c
+++ b/plugins/am-project/amp-package.c
@@ -54,50 +54,6 @@ struct _AmpPackageNode {
 };
 
 
-/* Helper functions
- *---------------------------------------------------------------------------*/
-
-static void
-list_all_children (GList **children, GFile *dir)
-{
-	GFileEnumerator *list;
-					
-	list = g_file_enumerate_children (dir,
-	    G_FILE_ATTRIBUTE_STANDARD_NAME,
-	    G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
-	    NULL,
-	    NULL);
-
-	if (list != NULL)
-	{
-		GFileInfo *info;
-		
-		while ((info = g_file_enumerator_next_file (list, NULL, NULL)) != NULL)
-		{
-			const gchar *name;
-			GFile *file;
-
-			name = g_file_info_get_name (info);
-			file = g_file_get_child (dir, name);
-			g_object_unref (info);
-
-			if (g_file_query_file_type (file, G_FILE_QUERY_INFO_NONE, NULL) == G_FILE_TYPE_DIRECTORY)
-			{
-				list_all_children (children, file);
-				g_object_unref (file);
-			}
-			else
-			{
-				*children = g_list_prepend (*children, file);
-			}
-		}
-		g_file_enumerator_close (list, NULL, NULL);
-		g_object_unref (list);
-	}
-}
-
-
-
 /* Package objects
  *---------------------------------------------------------------------------*/
 
@@ -191,7 +147,7 @@ amp_package_node_load (AmpNode *node, AmpNode *parent, AmpProject *project, GErr
 			GList* file = NULL;
 			GFile* dir = g_file_new_for_path (include_dir->data);
 
-			list_all_children (&children, dir);
+			anjuta_util_list_all_dir_children (&children, dir);
 			for (file = g_list_first (children); file != NULL; file = g_list_next (file))
 			{
 				/* Create a source for files */
diff --git a/plugins/symbol-db/plugin.c b/plugins/symbol-db/plugin.c
index b48c993..c3910cf 100644
--- a/plugins/symbol-db/plugin.c
+++ b/plugins/symbol-db/plugin.c
@@ -1539,6 +1539,31 @@ on_project_loaded (IAnjutaProjectManager *pm, GError *error,
 	/* Malformed project abort */
 	if (error != NULL) return;
 
+	// DEBUG FIXME
+	GList *pkgs = ianjuta_project_manager_get_packages (pm, NULL);
+	GList *node;
+
+	node = pkgs;
+/*/
+	while (node != NULL)
+	{
+		DEBUG_PRINT ("-------------------");
+		DEBUG_PRINT ("package is %s", node->data);
+
+		GList * headers = anjuta_pkg_config_get_abs_headers (node->data, FALSE, NULL);
+		GList *hnode = headers;
+
+		while (hnode != NULL)
+		{
+			DEBUG_PRINT ("header %s", hnode->data);
+			
+			hnode = g_list_next (hnode);
+		}
+		
+		node = g_list_next (node);
+	}
+//*/	
+
 	/*
 	 * we need an initial import 
 	 */
@@ -1628,7 +1653,8 @@ on_project_root_added (AnjutaPlugin *plugin, const gchar *name,
 	
 	pm = anjuta_shell_get_interface (ANJUTA_PLUGIN (sdb_plugin)->shell,
 									 IAnjutaProjectManager, NULL);
-	
+
+
 	/*
 	 *   The Project thing
 	 */	
@@ -2466,7 +2492,11 @@ isymbol_manager_create_query (IAnjutaSymbolManager *isymbol_manager,
 	sdb_plugin = ANJUTA_PLUGIN_SYMBOL_DB (isymbol_manager);
 	
 	query = symbol_db_query_new (sdb_plugin->sdbe_globals,
-	                             sdb_plugin->sdbe_project, query_name, db);
+	                             sdb_plugin->sdbe_project, 
+	                             query_name, 
+	                             db,
+	                             db == IANJUTA_SYMBOL_QUERY_DB_PROJECT ? 
+	                         			NULL : sdb_plugin->session_packages);
 	return IANJUTA_SYMBOL_QUERY (query);
 }
 
diff --git a/plugins/symbol-db/symbol-db-engine-utils.c b/plugins/symbol-db/symbol-db-engine-utils.c
index 5f91b0e..3d0e2c0 100644
--- a/plugins/symbol-db/symbol-db-engine-utils.c
+++ b/plugins/symbol-db/symbol-db-engine-utils.c
@@ -71,9 +71,9 @@ symbol_db_util_get_file_db_path (SymbolDBEngine *dbe, const gchar* full_local_fi
 	SymbolDBEnginePriv *priv;
 	g_return_val_if_fail (dbe != NULL, NULL);
 	g_return_val_if_fail (full_local_file_path != NULL, NULL);
-		
-	priv = dbe->priv;
 	
+	priv = dbe->priv;
+
 	g_return_val_if_fail (priv->project_directory != NULL, NULL);
 	
 	if (priv->db_directory == NULL ||
diff --git a/plugins/symbol-db/symbol-db-query.c b/plugins/symbol-db/symbol-db-query.c
index 4d0a3a8..8346fd1 100644
--- a/plugins/symbol-db/symbol-db-query.c
+++ b/plugins/symbol-db/symbol-db-query.c
@@ -1,7 +1,8 @@
 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
 /*
  * symbol-db-query.c
- * Copyright (C) Naba Kumar 2010 <naba gnome org>
+ * Copyright (C) Naba Kumar		2010 <naba gnome org>
+ * Copyright (C) Massimo Cora'  2011 <maxcvs email it>
  * 
  * anjuta is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
@@ -45,7 +46,8 @@ enum
 	PROP_GROUP_BY,
 	PROP_DB_ENGINE_SYSTEM,
 	PROP_DB_ENGINE_PROJECT,
-	PROP_DB_ENGINE_SELECTED
+	PROP_DB_ENGINE_SELECTED,
+	PROP_SESSION_PACKAGES
 };
 
 struct _SymbolDBQueryPriv {
@@ -64,6 +66,7 @@ struct _SymbolDBQueryPriv {
 	SymbolDBEngine *dbe_project;
 	/* a reference to dbe_system or dbe_project */
 	SymbolDBEngine *dbe_selected;
+	GHashTable *session_packages;
 	
 	/* Param holders */
 	GdaSet *params;
@@ -87,6 +90,7 @@ typedef enum
 	SDB_QUERY_TABLE_IMPLEMENTATION,
 	SDB_QUERY_TABLE_ACCESS,
 	SDB_QUERY_TABLE_KIND,
+	SDB_QUERY_TABLE_PROJECT,
 	SDB_QUERY_TABLE_MAX,
 }  SdbQueryTable;
 
@@ -97,7 +101,9 @@ static gchar *table_joins[] =
 	"LEFT JOIN file ON symbol.file_defined_id = file.file_id",
 	"LEFT JOIN sym_implementation ON symbol.implementation_kind_id = sym_implementation.sym_impl_id",
 	"LEFT JOIN sym_access ON symbol.access_kind_id = sym_access.access_kind_id",
-	"LEFT JOIN sym_kind ON symbol.kind_id = sym_kind.sym_kind_id"
+	"LEFT JOIN sym_kind ON symbol.kind_id = sym_kind.sym_kind_id",
+	"LEFT JOIN file ON symbol.file_defined_id = file.file_id \
+	 LEFT JOIN project ON file.prj_id = project.project_id",
 };
 
 /* Spec to associate a coloum to its table */
@@ -118,13 +124,15 @@ SdbQueryFieldSpec field_specs[] = {
 	{"symbol.is_file_scope ", SDB_QUERY_TABLE_SYMBOL},
 	{"symbol.signature ", SDB_QUERY_TABLE_SYMBOL},
 	{"symbol.returntype ", SDB_QUERY_TABLE_SYMBOL},
-	{"symbol.type_type", SDB_QUERY_TABLE_SYMBOL},
-	{"symbol.type_name", SDB_QUERY_TABLE_SYMBOL},
-	{"file.file_path", SDB_QUERY_TABLE_FILE},
-	{"sym_implementation.implementation_name", SDB_QUERY_TABLE_IMPLEMENTATION},
-	{"sym_access.access_name", SDB_QUERY_TABLE_ACCESS},
+	{"symbol.type_type ", SDB_QUERY_TABLE_SYMBOL},
+	{"symbol.type_name ", SDB_QUERY_TABLE_SYMBOL},
+	{"file.file_path ", SDB_QUERY_TABLE_FILE},
+	{"project.project_name ", SDB_QUERY_TABLE_PROJECT},
+	{"project.project_version ", SDB_QUERY_TABLE_PROJECT},
+	{"sym_implementation.implementation_name ", SDB_QUERY_TABLE_IMPLEMENTATION},
+	{"sym_access.access_name ", SDB_QUERY_TABLE_ACCESS},
 	{"sym_kind.kind_name ", SDB_QUERY_TABLE_KIND},
-	{"sym_kind.is_container", SDB_QUERY_TABLE_KIND}
+	{"sym_kind.is_container ", SDB_QUERY_TABLE_KIND}
 };
 
 /* FIXME: This maps to the bit position of IAnjutaSymbolType enum. This can
@@ -291,7 +299,7 @@ sdb_query_add_field (SymbolDBQuery *query, IAnjutaSymbolField field)
 	/* Iterate until the given field is found in the list, otherwise add it */
 	while (query->priv->fields[idx] != IANJUTA_SYMBOL_FIELD_END)
 	{
-		if (query->priv->fields[idx]  == field)
+		if (query->priv->fields[idx] == field)
 			return;
 		idx++;
 	}
@@ -299,6 +307,21 @@ sdb_query_add_field (SymbolDBQuery *query, IAnjutaSymbolField field)
 	query->priv->fields[idx + 1] = IANJUTA_SYMBOL_FIELD_END;
 }
 
+static gboolean
+sdb_query_is_field_set (SymbolDBQuery *query, IAnjutaSymbolField field)
+{
+	gint i;
+
+	for (i = 0; i < IANJUTA_SYMBOL_FIELD_END; i++)
+	{
+		if (query->priv->fields[i] == field)
+			return TRUE;
+	}
+
+	/* not found */
+	return FALSE;
+}
+
 /**
  * sdb_query_reset:
  * @query: The query
@@ -885,6 +908,9 @@ sdb_query_set_property (GObject *object, guint prop_id, const GValue *value, GPa
 		g_signal_connect (priv->dbe_selected, "db-disconnected",
 		                  G_CALLBACK (on_sdb_query_dbe_disconnected), query);
 		break;
+	case PROP_SESSION_PACKAGES:
+		priv->session_packages = g_value_get_pointer (value);
+		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 		break;
@@ -1070,6 +1096,16 @@ sdb_query_class_init (SymbolDBQueryClass *klass)
 	                                                      "The selected SymbolDBEngine",
 	                                                      SYMBOL_TYPE_DB_ENGINE,
 	                                                      G_PARAM_READABLE));
+
+	g_object_class_install_property (object_class,
+	                                 PROP_SESSION_PACKAGES,
+	                                 g_param_spec_pointer ("session-packages",
+	                                                       "Session Packages",
+	                                                       "The session packages",
+	                                                       G_PARAM_READABLE |
+	                                                       G_PARAM_WRITABLE));
+	
+	// FIXMEPROP_SESSION_PACKAGES	
 }
 
 /* IAnjutaSymbolQuery implementation */
@@ -1296,11 +1332,14 @@ SymbolDBQuery *
 symbol_db_query_new (SymbolDBEngine *system_db_engine,
                      SymbolDBEngine *project_db_engine,
                      IAnjutaSymbolQueryName name,
-                     IAnjutaSymbolQueryDb db)
+                     IAnjutaSymbolQueryDb db,
+                 	 GHashTable *session_packages)
 {
 	return g_object_new (SYMBOL_DB_TYPE_QUERY,
 	                     "db-engine-system", system_db_engine,
 	                     "db-engine-project", project_db_engine,
-	                     "query-db", db, "query-name", name,
+	                     "query-db", db, 
+	                     "query-name", name,
+	                     "session-packages", session_packages,
 	                      NULL);
 }
diff --git a/plugins/symbol-db/symbol-db-query.h b/plugins/symbol-db/symbol-db-query.h
index 679e74f..facf280 100644
--- a/plugins/symbol-db/symbol-db-query.h
+++ b/plugins/symbol-db/symbol-db-query.h
@@ -52,7 +52,8 @@ GType sdb_query_get_type (void) G_GNUC_CONST;
 SymbolDBQuery* symbol_db_query_new (SymbolDBEngine *system_db_engine,
                                     SymbolDBEngine *project_db_engine,
                                     IAnjutaSymbolQueryName name,
-                                    IAnjutaSymbolQueryDb db);
+                                    IAnjutaSymbolQueryDb db,
+                                	GHashTable *session_packages);
 
 G_END_DECLS
 



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