[anjuta] debug-manager: Fix accessing of invalid tree models.



commit 61b7f4916d709c6264aef5967796abc6aa0b4895
Author: Carl-Anton Ingmarsson <ca ingmarsson gmail com>
Date:   Sun Nov 18 20:08:21 2012 +0100

    debug-manager: Fix accessing of invalid tree models.
    
    We previously stored the DebugTree's model in the gTreeList but the model could be changed
    with debug_tree_set_model() which would make the model stored in the gTreeList invalid. Fix
    this by storing the DebugTree in the gTreeList instead. This fixes these two warnings.
    
    (anjuta:31701): GLib-GObject-WARNING **: invalid uninstantiatable type `<invalid>' in cast to `GtkTreeModel'
    
    (anjuta:31701): Gtk-CRITICAL **: gtk_tree_model_iter_children: assertion `GTK_IS_TREE_MODEL (tree_model)' failed
    
    https://bugzilla.gnome.org/show_bug.cgi?id=688600

 plugins/debug-manager/debug_tree.c |   34 +++++++++++++++++++---------------
 1 files changed, 19 insertions(+), 15 deletions(-)
---
diff --git a/plugins/debug-manager/debug_tree.c b/plugins/debug-manager/debug_tree.c
index bf65156..9ed0cfa 100644
--- a/plugins/debug-manager/debug_tree.c
+++ b/plugins/debug-manager/debug_tree.c
@@ -1044,14 +1044,16 @@ on_debug_tree_changed (gpointer data, gpointer user_data)
 	if (var->name != NULL)
 	{
 		/* Search corresponding variable in one tree */
-		GList *tree;
+		GList *list;
 		
-		for (tree = g_list_first (gTreeList); tree != NULL; tree = g_list_next (tree))
+		for (list = g_list_first (gTreeList); list != NULL; list = g_list_next (list))
 		{
+			DebugTree *tree = (DebugTree *)list->data;
+
 			GtkTreeIter iter;
 			GtkTreeModel *model;
 			
-			model =  GTK_TREE_MODEL (tree->data);
+			model = debug_tree_get_model (tree);
 			
 			if (debug_tree_find_name (model, &iter, var->name))
 			{
@@ -1169,10 +1171,14 @@ on_debug_tree_update_all (const GList *change, gpointer user_data, GError* err)
 	// Update all tree models
 	for (list = g_list_first (gTreeList); list != NULL; list = g_list_next (list))
 	{
-		GtkTreeModel* model = GTK_TREE_MODEL (list->data);
+		DebugTree* tree = (DebugTree*)list->data;
+
+		GtkTreeModel* model;
 		GtkTreeIter iter;
 		gboolean valid;
 
+		model = debug_tree_get_model (tree);
+
 		// Update this tree
 		for (valid = gtk_tree_model_get_iter_first (model, &iter);
 			valid;
@@ -1505,14 +1511,17 @@ debug_tree_dump_iter (GtkTreeModel *model, GtkTreeIter *iter, guint indent)
 void
 debug_tree_dump (void)
 {
-	GList *tree;
+	GList *list;
 	
-	for (tree = g_list_first (gTreeList); tree != NULL; tree = g_list_next (tree))
+	for (list = g_list_first (gTreeList); list != NULL; list = g_list_next (list))
 	{
-		GtkTreeModel *model = (GtkTreeModel *)tree->data;
+		DebugTree* tree = (DebugTree*)list->data;
+
+		GtkTreeModel* model;
 		GtkTreeIter iter;
 		gboolean valid;
 
+		model = debug_tree_get_model (tree);
 		g_message ("Tree model %p   MCEDU", model);
 		for (valid = gtk_tree_model_get_iter_first (model, &iter);
 			valid;
@@ -1531,15 +1540,13 @@ DebugTree *
 debug_tree_new_with_view (AnjutaPlugin *plugin, GtkTreeView *view)
 {
 	DebugTree *tree = g_new0 (DebugTree, 1);
-	GtkTreeModel *model;	
 
 	tree->plugin = plugin;
 	tree->view = debug_tree_create(tree, view);
 	tree->auto_expand = FALSE;
 
-	/* Add this model in list */
-	model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree->view));
-	gTreeList = g_list_prepend (gTreeList, model);
+	/* Add this tree in list */
+	gTreeList = g_list_prepend (gTreeList, tree);
 	
 	/* Connect signal */
     g_signal_connect(GTK_TREE_VIEW (tree->view), "row_expanded", G_CALLBACK (on_treeview_row_expanded), tree);
@@ -1560,15 +1567,12 @@ debug_tree_new (AnjutaPlugin* plugin)
 void
 debug_tree_free (DebugTree * tree)
 {
-	GtkTreeModel *model;
-	
 	g_return_if_fail (tree);
 
-	model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree->view));
 	debug_tree_remove_all (tree);
 
 	/* Remove from list */
-	gTreeList = g_list_remove (gTreeList, model);
+	gTreeList = g_list_remove (gTreeList, tree);
 	
 	g_signal_handlers_disconnect_by_func (GTK_TREE_VIEW (tree->view),
 				  G_CALLBACK (on_treeview_row_expanded), tree);



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