+ while (! PSPPIRE_IS_DICT (*model))
+ {
+ GtkTreeIter parent_iter;
+ if (iter)
+ parent_iter = *iter;
+
+ if (GTK_IS_TREE_MODEL_FILTER (*model))
+ {
+ GtkTreeModelFilter *parent_model = GTK_TREE_MODEL_FILTER (*model);
+
+ *model = gtk_tree_model_filter_get_model (parent_model);
+
+ if (iter)
+ gtk_tree_model_filter_convert_iter_to_child_iter (parent_model,
+ iter,
+ &parent_iter);
+ }
+ else if (GTK_IS_TREE_MODEL_SORT (*model))
+ {
+ GtkTreeModelSort *parent_model = GTK_TREE_MODEL_SORT (*model);
+
+ *model = gtk_tree_model_sort_get_model (parent_model);
+
+ if (iter)
+ gtk_tree_model_sort_convert_iter_to_child_iter (parent_model,
+ iter,
+ &parent_iter);
+ }