summaryrefslogtreecommitdiff
path: root/gtk/gtktreemodelfilter.c
diff options
context:
space:
mode:
authorKristian Rietveld <kris@gtk.org>2011-06-26 21:44:13 +0200
committerKristian Rietveld <kris@gtk.org>2011-08-22 21:30:32 +0200
commit058a9090c2960db6781161cdfca649c9677e25a4 (patch)
treec359ee3e1c92500928026af942d15f70c76515f3 /gtk/gtktreemodelfilter.c
parentcac5d606337b13f41630f5eaaa79e05ca9e5cfcd (diff)
downloadgtk+-058a9090c2960db6781161cdfca649c9677e25a4.tar.gz
treemodelfilter: Move more missions of row-deleted down
The row-deleted signal should be emitted after the internal data structures have been updated. In gtk_tree_model_filter_remove_elt_from_level and gtk_tree_model_filter_virtual_root_deleted the signal was still being emitted before the updates were carried out.
Diffstat (limited to 'gtk/gtktreemodelfilter.c')
-rw-r--r--gtk/gtktreemodelfilter.c37
1 files changed, 18 insertions, 19 deletions
diff --git a/gtk/gtktreemodelfilter.c b/gtk/gtktreemodelfilter.c
index 063f7faa5a..3d4311c2af 100644
--- a/gtk/gtktreemodelfilter.c
+++ b/gtk/gtktreemodelfilter.c
@@ -1295,10 +1295,6 @@ gtk_tree_model_filter_remove_elt_from_level (GtkTreeModelFilter *filter,
if (elt->children)
gtk_tree_model_filter_free_level (filter, elt->children, TRUE);
- gtk_tree_model_filter_increment_stamp (filter);
- iter.stamp = filter->priv->stamp;
- gtk_tree_model_row_deleted (GTK_TREE_MODEL (filter), path);
-
while (elt->ref_count > 1)
gtk_tree_model_filter_real_unref_node (GTK_TREE_MODEL (filter),
&iter, FALSE);
@@ -1330,6 +1326,9 @@ gtk_tree_model_filter_remove_elt_from_level (GtkTreeModelFilter *filter,
elt->children->parent_elt_index = i;
}
}
+
+ gtk_tree_model_filter_increment_stamp (filter);
+ gtk_tree_model_row_deleted (GTK_TREE_MODEL (filter), path);
}
else if ((length == 1 && parent && parent->ref_count > 1)
|| (length == 1 && level == filter->priv->root))
@@ -1349,12 +1348,6 @@ gtk_tree_model_filter_remove_elt_from_level (GtkTreeModelFilter *filter,
}
else
{
- /* Blow level away, including any child levels */
-
- gtk_tree_model_filter_increment_stamp (filter);
- iter.stamp = filter->priv->stamp;
- gtk_tree_model_row_deleted (GTK_TREE_MODEL (filter), path);
-
/* We must account for the filter model's reference (released
* in gtk_tree_model_filter_free_level), because the node is
* still present in the child model.
@@ -1363,7 +1356,11 @@ gtk_tree_model_filter_remove_elt_from_level (GtkTreeModelFilter *filter,
gtk_tree_model_filter_real_unref_node (GTK_TREE_MODEL (filter),
&iter, FALSE);
+ /* Blow level away, including any child levels */
gtk_tree_model_filter_free_level (filter, level, TRUE);
+
+ gtk_tree_model_filter_increment_stamp (filter);
+ gtk_tree_model_row_deleted (GTK_TREE_MODEL (filter), path);
}
gtk_tree_path_free (path);
@@ -2022,7 +2019,7 @@ static void
gtk_tree_model_filter_virtual_root_deleted (GtkTreeModelFilter *filter,
GtkTreePath *c_path)
{
- gint i;
+ gint i, nodes;
GtkTreePath *path;
FilterLevel *level = FILTER_LEVEL (filter->priv->root);
@@ -2044,20 +2041,23 @@ gtk_tree_model_filter_virtual_root_deleted (GtkTreeModelFilter *filter,
if (!level)
return;
+ nodes = level->visible_nodes;
+
+ /* We should not propagate the unref here. An unref for any of these
+ * nodes will fail, since the respective nodes in the child model are
+ * no longer there.
+ */
+ gtk_tree_model_filter_free_level (filter, filter->priv->root, FALSE);
+
gtk_tree_model_filter_increment_stamp (filter);
+
path = gtk_tree_path_new ();
gtk_tree_path_append_index (path, 0);
- for (i = 0; i < level->visible_nodes; i++)
+ for (i = 0; i < nodes; i++)
gtk_tree_model_row_deleted (GTK_TREE_MODEL (filter), path);
gtk_tree_path_free (path);
-
- /* We should not propagate the unref here. An unref for any of these
- * nodes will fail, since the respective nodes in the child model are
- * no longer there.
- */
- gtk_tree_model_filter_free_level (filter, filter->priv->root, FALSE);
}
static void
@@ -2261,7 +2261,6 @@ gtk_tree_model_filter_row_deleted (GtkTreeModel *c_model,
/* emit row_deleted */
gtk_tree_model_filter_increment_stamp (filter);
gtk_tree_model_row_deleted (GTK_TREE_MODEL (data), path);
- iter.stamp = filter->priv->stamp;
}
if (emit_child_toggled && parent_level)