[anjuta] pm: Fix a crash when removing a target with a properties dialog



commit 881f62b72b60188eaafbe3d92118da6667bec04d
Author: Sébastien Granjoux <seb sfo free fr>
Date:   Fri Jan 8 22:28:19 2010 +0100

    pm: Fix a crash when removing a target with a properties dialog

 plugins/gbf-am/gbf-am-project.c             |    1 +
 plugins/project-manager/gbf-project-model.c |   67 ++++++++++-----------------
 2 files changed, 25 insertions(+), 43 deletions(-)
---
diff --git a/plugins/gbf-am/gbf-am-project.c b/plugins/gbf-am/gbf-am-project.c
index a0a0fe2..f114962 100644
--- a/plugins/gbf-am/gbf-am-project.c
+++ b/plugins/gbf-am/gbf-am-project.c
@@ -4119,6 +4119,7 @@ gbf_am_project_instance_init (GbfAmProject *project)
 {
 	/* initialize data & monitors */
 	project->project_root_uri = NULL;
+	project->root_node = NULL;
 	project_data_init (project);
 
 	/* setup queue */
diff --git a/plugins/project-manager/gbf-project-model.c b/plugins/project-manager/gbf-project-model.c
index 30aea8d..474c3b8 100644
--- a/plugins/project-manager/gbf-project-model.c
+++ b/plugins/project-manager/gbf-project-model.c
@@ -279,43 +279,41 @@ gbf_project_model_instance_init (GbfProjectModel *model)
 /* Model data functions ------------ */
 
 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 gboolean
 gbf_project_model_remove (GbfProjectModel *model, GtkTreeIter *iter)
 {
+	GtkTreeIter child;
 	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);
+	gboolean valid;
 
 	/* Free all children */
-	my_gtk_tree_model_foreach_child (GTK_TREE_MODEL (model), iter, gbf_project_model_remove_node, NULL);
+	valid = gtk_tree_model_iter_children (GTK_TREE_MODEL (model), &child, iter);
+	while (valid)
+	{
+		valid = gbf_project_model_remove (model, &child);
+	}
+	
+	gtk_tree_model_get (model, iter,
+		    GBF_PROJECT_MODEL_COLUMN_DATA, &data,
+		    -1);
+	valid = gtk_tree_store_remove (GTK_TREE_STORE (model), iter);
+	if (data != NULL) gbf_tree_data_free (data);
 
-	return gtk_tree_store_remove (GTK_TREE_STORE (model), iter);
+	return valid;
 }
 
 
 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));
+	GtkTreeIter child;
+	GbfTreeData *data;
+	gboolean valid;
+
+	valid = gtk_tree_model_iter_children (GTK_TREE_MODEL (model), &child, NULL);
+	while (valid)
+	{
+		valid = gbf_project_model_remove (model, &child);
+	}
 }
 
 static gint 
@@ -999,24 +997,7 @@ row_draggable (GtkTreeDragSource *drag_source, GtkTreePath *path)
 static gboolean 
 drag_data_delete (GtkTreeDragSource *drag_source, GtkTreePath *path)
 {
-	GtkTreeIter iter;
-	gboolean retval = FALSE;
-	
-	/*if (gtk_tree_model_get_iter (GTK_TREE_MODEL (drag_source),
-				     &iter, path)) {
-		GbfTreeData *data;
-
-		gtk_tree_model_get (GTK_TREE_MODEL (drag_source), &iter,
-				    GBF_PROJECT_MODEL_COLUMN_DATA, &data,
-				    -1);
-
-		if (data->is_shortcut) {
-			gtk_tree_store_remove (GTK_TREE_STORE (drag_source), &iter);			
-			retval = TRUE;
-		}
-	}*/
-	
-	return retval;
+	return FALSE;
 }
 
 static gboolean



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