[anjuta] prj: Store only a pointer on gbf_tree_data instead in the tree



commit ea4acce836b2fe2b1dd7e5c11988714d23c6c4fc
Author: Sébastien Granjoux <seb sfo free fr>
Date:   Fri Jan 1 18:24:54 2010 +0100

    prj: Store only a pointer on gbf_tree_data instead in the tree

 plugins/project-manager/gbf-project-model.c |   66 ++++++++++++++++++---------
 plugins/project-manager/gbf-project-util.c  |    2 -
 plugins/project-manager/gbf-project-view.c  |   11 +----
 plugins/project-manager/gbf-tree-data.c     |   12 -----
 plugins/project-manager/gbf-tree-data.h     |    3 -
 5 files changed, 47 insertions(+), 47 deletions(-)
---
diff --git a/plugins/project-manager/gbf-project-model.c b/plugins/project-manager/gbf-project-model.c
index 7a89cc6..07183f1 100644
--- a/plugins/project-manager/gbf-project-model.c
+++ b/plugins/project-manager/gbf-project-model.c
@@ -242,7 +242,7 @@ gbf_project_model_instance_init (GbfProjectModel *model)
 {
 	static GType types [GBF_PROJECT_MODEL_NUM_COLUMNS];
 
-	types [GBF_PROJECT_MODEL_COLUMN_DATA] = GBF_TYPE_TREE_DATA;
+	types [GBF_PROJECT_MODEL_COLUMN_DATA] = G_TYPE_POINTER;
 
 	gtk_tree_store_set_column_types (GTK_TREE_STORE (model),
 					 GBF_PROJECT_MODEL_NUM_COLUMNS,
@@ -264,6 +264,42 @@ gbf_project_model_instance_init (GbfProjectModel *model)
 
 /* Model data functions ------------ */
 
+static gboolean
+gbf_project_model_remove (GbfProjectModel *model, GtkTreeIter *iter)
+{
+	GbfTreeData *data;
+	
+	gtk_tree_model_get (GTK_TREE_MODEL (model), iter,
+			    GBF_PROJECT_MODEL_COLUMN_DATA, &data,
+			    -1);
+	if (data != NULL) gbf_tree_data_free (data);
+
+	return gtk_tree_store_remove (GTK_TREE_STORE (model), iter);
+}
+
+static gboolean
+gbf_project_model_remove_node (GtkTreeModel *model,
+    GtkTreePath *path,
+    GtkTreeIter *iter,
+    gpointer user_data)
+{
+	GbfTreeData *data;
+	
+	gtk_tree_model_get (model, iter,
+			    GBF_PROJECT_MODEL_COLUMN_DATA, &data,
+			    -1);
+	if (data != NULL) gbf_tree_data_free (data);
+	
+	return FALSE;
+}
+
+static void
+gbf_project_model_clear (GbfProjectModel *model)
+{
+	gtk_tree_model_foreach (GTK_TREE_MODEL (model), gbf_project_model_remove_node, NULL);
+	gtk_tree_store_clear (GTK_TREE_STORE (model));
+}
+
 static gint 
 default_sort_func (GtkTreeModel *model,
 		   GtkTreeIter  *iter_a,
@@ -316,9 +352,6 @@ default_sort_func (GtkTreeModel *model,
 		}
 	}
 	
-	gbf_tree_data_free (data_a);
-	gbf_tree_data_free (data_b);
-	
 	return retval;
 }
 
@@ -339,7 +372,6 @@ add_source (GbfProjectModel    	      *model,
 	gtk_tree_store_set (GTK_TREE_STORE (model), &iter, 
 			    GBF_PROJECT_MODEL_COLUMN_DATA, data,
 			    -1);
-	gbf_tree_data_free (data);
 }
 
 static GtkTreePath *
@@ -422,7 +454,6 @@ add_target_shortcut (GbfProjectModel *model,
 	gtk_tree_store_set (GTK_TREE_STORE (model), &iter, 
 			    GBF_PROJECT_MODEL_COLUMN_DATA, data,
 			    -1);
-	gbf_tree_data_free (data);
 	
 	/* add sources */
 	for (node = anjuta_project_node_first_child (target); node; node = anjuta_project_node_next_sibling (node))
@@ -448,7 +479,6 @@ add_target (GbfProjectModel 		*model,
 	gtk_tree_store_set (GTK_TREE_STORE (model), &iter, 
 			    GBF_PROJECT_MODEL_COLUMN_DATA, data,
 			    -1);
-	gbf_tree_data_free (data);
 	
 	/* add sources */
 	for (l = anjuta_project_node_first_child (target); l; l = anjuta_project_node_next_sibling (l))
@@ -506,12 +536,12 @@ update_target (GbfProjectModel *model, AnjutaProjectTarget *target, GtkTreeIter
 					sources = g_list_delete_link (sources, node);
 					valid = gtk_tree_model_iter_next (tree_model, &child);
 				} else {
-					valid = gtk_tree_store_remove (GTK_TREE_STORE (model), &child);
+					valid = gbf_project_model_remove (model, &child);
 				}
 			}
 			else
 			{
-				valid = gtk_tree_store_remove (GTK_TREE_STORE (model), &child);
+				valid = gbf_project_model_remove (model, &child);
 			}
 		}
 	}
@@ -540,7 +570,6 @@ add_target_group (GbfProjectModel 	*model,
 	gtk_tree_store_set (GTK_TREE_STORE (model), &iter, 
 			    GBF_PROJECT_MODEL_COLUMN_DATA, data,
 			    -1);
-	gbf_tree_data_free (data);
 
 	/* create root reference */
 	if (parent == NULL) {
@@ -597,7 +626,7 @@ update_group (GbfProjectModel *model, AnjutaProjectGroup *group, GtkTreeIter *it
 
 			/* find the iterating id in the group's children */
 			data = gbf_project_model_get_node (model, &child);
-			
+
 			if (anjuta_project_node_get_type (data) == ANJUTA_PROJECT_GROUP) {
 				/* update recursively */
 				update_group (model, data, &child);
@@ -628,7 +657,7 @@ update_group (GbfProjectModel *model, AnjutaProjectGroup *group, GtkTreeIter *it
 
 					if (gtk_tree_model_get_iter (tree_model, &tmp, shortcut)) {
 						if (remove_child)
-							gtk_tree_store_remove (GTK_TREE_STORE (model), &tmp);
+							gbf_project_model_remove (model, &tmp);
 						else
 							update_target (model, data, &tmp);
 					}
@@ -643,7 +672,7 @@ update_group (GbfProjectModel *model, AnjutaProjectGroup *group, GtkTreeIter *it
 			}
 		
 			if (remove_child)
-				valid = gtk_tree_store_remove (GTK_TREE_STORE (model), &child);
+				valid = gbf_project_model_remove (model, &child);
 			else
 				valid = gtk_tree_model_iter_next (tree_model, &child);
 		};
@@ -685,7 +714,7 @@ load_project (GbfProjectModel *model, IAnjutaProject *proj)
 	g_object_ref (proj);
 
 	/* to get rid of the empty node */
-	gtk_tree_store_clear (GTK_TREE_STORE (model));
+	gbf_project_model_clear (model);
 
 	add_target_group (model, ianjuta_project_get_root (proj, NULL), NULL);
 
@@ -712,7 +741,7 @@ unload_project (GbfProjectModel *model)
 		gtk_tree_row_reference_free (model->priv->root_row);
 		model->priv->root_row = NULL;
 
-		gtk_tree_store_clear (GTK_TREE_STORE (model));
+		gbf_project_model_clear (model);
 
 		g_list_free (model->priv->shortcuts);
 		model->priv->shortcuts = NULL;
@@ -748,7 +777,6 @@ recursive_find_id (GtkTreeModel   	*model,
 			*iter = tmp;
 			retval = TRUE;
 		}
-		gbf_tree_data_free (data);
 		
 		if (gtk_tree_model_iter_children (model, &child, &tmp)) {
 			if (recursive_find_id (model, &child, type, id)) {
@@ -871,7 +899,6 @@ gbf_project_model_get_node (GbfProjectModel *model,
 		default:
 			break;
 		}
-		gbf_tree_data_free (data);
 	}
 
 	return node;
@@ -907,7 +934,6 @@ row_draggable (GtkTreeDragSource *drag_source, GtkTreePath *path)
 		else
 			gtk_tree_path_free (found);
 	}
-	gbf_tree_data_free (data);
 
 	return retval;
 }
@@ -927,10 +953,9 @@ drag_data_delete (GtkTreeDragSource *drag_source, GtkTreePath *path)
 				    -1);
 
 		if (data->is_shortcut) {
-			gtk_tree_store_remove (GTK_TREE_STORE (drag_source), &iter);
+			gbf_project_model_remove (GBF_PROJECT_MODEL (drag_source), &iter);
 			retval = TRUE;
 		}
-		gbf_tree_data_free (data);
 	}
 	
 	return retval;
@@ -964,7 +989,6 @@ drag_data_received (GtkTreeDragDest  *drag_dest,
 						     data->id, dest);
 				retval = TRUE;
 			}
-			gbf_tree_data_free (data);
 		}
 	}
 
diff --git a/plugins/project-manager/gbf-project-util.c b/plugins/project-manager/gbf-project-util.c
index 4f9cc51..0c7d695 100644
--- a/plugins/project-manager/gbf-project-util.c
+++ b/plugins/project-manager/gbf-project-util.c
@@ -70,7 +70,6 @@ groups_filter_fn (GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
     gtk_tree_model_get (model, iter,
                         GBF_PROJECT_MODEL_COLUMN_DATA, &data, -1);
     retval = (data && data->type == GBF_TREE_NODE_GROUP);
-    gbf_tree_data_free (data);
     
     return retval;
 }
@@ -446,7 +445,6 @@ targets_filter_fn (GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
     retval = (data && !data->is_shortcut &&
               (data->type == GBF_TREE_NODE_GROUP ||
                data->type == GBF_TREE_NODE_TARGET));
-    gbf_tree_data_free (data);
     
     return retval;
 }
diff --git a/plugins/project-manager/gbf-project-view.c b/plugins/project-manager/gbf-project-view.c
index b870f6f..cfe3901 100644
--- a/plugins/project-manager/gbf-project-view.c
+++ b/plugins/project-manager/gbf-project-view.c
@@ -99,8 +99,6 @@ row_activated (GtkTreeView       *tree_view,
 			       signals [GROUP_SELECTED], 0,
 			       data->uri);
 	}
-	
-	gbf_tree_data_free (data);
 }
 
 static void
@@ -165,7 +163,6 @@ set_pixbuf (GtkTreeViewColumn *tree_column,
 	    GtkTreeIter       *iter,
 	    gpointer           user_data)
 {
-	//GbfProjectView *view = GBF_PROJECT_VIEW (user_data);
 	GbfTreeData *data = NULL;
 	GdkPixbuf *pixbuf = NULL;
 	
@@ -202,8 +199,6 @@ set_pixbuf (GtkTreeViewColumn *tree_column,
 	g_object_set (GTK_CELL_RENDERER (cell), "pixbuf", pixbuf, NULL);
 	if (pixbuf)
 		g_object_unref (pixbuf);
-
-	gbf_tree_data_free (data);
 }
 
 static void
@@ -215,10 +210,9 @@ set_text (GtkTreeViewColumn *tree_column,
 {
 	GbfTreeData *data;
   
-	gtk_tree_model_get (model, iter, 0, &data, -1);
+	gtk_tree_model_get (model, iter, GBF_PROJECT_MODEL_COLUMN_DATA, &data, -1);
 	g_object_set (GTK_CELL_RENDERER (cell), "text", 
 		      data->name, NULL);
-	gbf_tree_data_free (data);
 }
 
 static gboolean
@@ -229,10 +223,9 @@ search_equal_func (GtkTreeModel *model, gint column,
 	GbfTreeData *data;
 	gboolean ret = TRUE;
 		     
-	gtk_tree_model_get (model, iter, 0, &data, -1);
+	gtk_tree_model_get (model, iter, GBF_PROJECT_MODEL_COLUMN_DATA, &data, -1);
 	if (strncmp (data->name, key, strlen (key)) == 0)
 	    ret = FALSE;
-	gbf_tree_data_free (data);
 	return ret;
 }
 
diff --git a/plugins/project-manager/gbf-tree-data.c b/plugins/project-manager/gbf-tree-data.c
index 042a2f5..9b16f43 100644
--- a/plugins/project-manager/gbf-tree-data.c
+++ b/plugins/project-manager/gbf-tree-data.c
@@ -28,18 +28,6 @@
 #include <gio/gio.h>
 #include "gbf-tree-data.h"
 
-GType
-gbf_tree_data_get_type (void)
-{
-    static GType our_type = 0;
-  
-    if (our_type == 0)
-        our_type = g_boxed_type_register_static ("GbfProjectTreeNodeData",
-                                                 (GBoxedCopyFunc) gbf_tree_data_copy,
-                                                 (GBoxedFreeFunc) gbf_tree_data_free);
-
-    return our_type;
-}
 
 GbfTreeData *
 gbf_tree_data_new_string (const gchar *string)
diff --git a/plugins/project-manager/gbf-tree-data.h b/plugins/project-manager/gbf-tree-data.h
index c34c3b9..ef57130 100644
--- a/plugins/project-manager/gbf-tree-data.h
+++ b/plugins/project-manager/gbf-tree-data.h
@@ -30,8 +30,6 @@
 
 G_BEGIN_DECLS
 
-#define GBF_TYPE_TREE_DATA			(gbf_tree_data_get_type ())
-
 typedef struct _GbfTreeData GbfTreeData;
 
 typedef enum {
@@ -51,7 +49,6 @@ struct _GbfTreeData
 	gchar           	*mime_type;
 };
 
-GType          gbf_tree_data_get_type            (void);
 GbfTreeData   *gbf_tree_data_new_string          (const gchar            *string);
 GbfTreeData   *gbf_tree_data_new_group           (IAnjutaProject         *project,
 						  AnjutaProjectGroup     *group);



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