summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2014-12-09 00:41:11 -0500
committerMatthias Clasen <mclasen@redhat.com>2014-12-09 00:42:40 -0500
commit1ed5bd07bbe61f8cff5ca122e94d90c8ec97075c (patch)
tree2061342d1ac050ab80277cfde4177c833be4cf57
parent54e3711c390716e7df96c16ef6b0a81858fe99f5 (diff)
downloadgtk+-1ed5bd07bbe61f8cff5ca122e94d90c8ec97075c.tar.gz
Make gtk_tree_model_foreach robust
Make gtk_tree_model_foreach safe for callbacks that modify the model, even if the model does not have persistent iters. https://bugzilla.gnome.org/show_bug.cgi?id=722781
-rw-r--r--gtk/gtktreemodel.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/gtk/gtktreemodel.c b/gtk/gtktreemodel.c
index 39065621f7..8bbf55d025 100644
--- a/gtk/gtktreemodel.c
+++ b/gtk/gtktreemodel.c
@@ -1969,6 +1969,10 @@ gtk_tree_model_foreach_helper (GtkTreeModel *model,
GtkTreeModelForeachFunc func,
gpointer user_data)
{
+ gboolean iters_persist;
+
+ iters_persist = gtk_tree_model_get_flags (model) & GTK_TREE_MODEL_ITERS_PERSIST;
+
do
{
GtkTreeIter child;
@@ -1976,6 +1980,12 @@ gtk_tree_model_foreach_helper (GtkTreeModel *model,
if ((* func) (model, path, iter, user_data))
return TRUE;
+ if (!iters_persist)
+ {
+ if (!gtk_tree_model_get_iter (model, iter, path))
+ return TRUE;
+ }
+
if (gtk_tree_model_iter_children (model, &child, iter))
{
gtk_tree_path_down (path);