]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtktreemodelsort.c
derive GtkObject from GUnowned, so it initially has a floating reference
[~andy/gtk] / gtk / gtktreemodelsort.c
index 47b42b66b16506f66457c7a3f697bd80346d3fbb..20b0f53239a5567d765dca5a8d5495e2a6368684 100644 (file)
@@ -282,7 +282,7 @@ gtk_tree_model_sort_get_type (void)
       };
 
       tree_model_sort_type =
-       g_type_register_static (G_TYPE_OBJECT, "GtkTreeModelSort",
+       g_type_register_static (G_TYPE_OBJECT, I_("GtkTreeModelSort"),
                                &tree_model_sort_info, 0);
 
       g_type_add_interface_static (tree_model_sort_type,
@@ -700,22 +700,6 @@ gtk_tree_model_sort_row_inserted (GtkTreeModel          *s_model,
 
       if (!elt->children)
        {
-         GtkTreePath *tmppath;
-         GtkTreeIter  tmpiter;
-
-         tmpiter.stamp = tree_model_sort->stamp;
-         tmpiter.user_data = level;
-         tmpiter.user_data2 = elt;
-
-         tmppath = gtk_tree_model_get_path (GTK_TREE_MODEL (data), &tmpiter);
-         if (tmppath)
-           {
-             gtk_tree_model_row_has_child_toggled (GTK_TREE_MODEL (data),
-                                                   tmppath,
-                                                   &tmpiter);
-             gtk_tree_path_free (tmppath);
-           }
-
          /* not covering this signal */
          goto done;
        }
@@ -728,6 +712,12 @@ gtk_tree_model_sort_row_inserted (GtkTreeModel          *s_model,
   if (!parent_level)
     goto done;
 
+  if (level->ref_count == 0 && level != tree_model_sort->root)
+    {
+      gtk_tree_model_sort_free_level (tree_model_sort, level);
+      goto done;
+    }
+
   if (!gtk_tree_model_sort_insert_value (tree_model_sort,
                                         parent_level,
                                         s_path,
@@ -1280,7 +1270,6 @@ gtk_tree_model_sort_real_unref_node (GtkTreeModel *tree_model,
                                     gboolean      propagate_unref)
 {
   GtkTreeModelSort *tree_model_sort = (GtkTreeModelSort *) tree_model;
-  GtkTreeIter child_iter;
   SortLevel *level;
   SortElt *elt;
 
@@ -1288,10 +1277,13 @@ gtk_tree_model_sort_real_unref_node (GtkTreeModel *tree_model,
   g_return_if_fail (GTK_TREE_MODEL_SORT (tree_model)->child_model != NULL);
   g_return_if_fail (GTK_TREE_MODEL_SORT (tree_model)->stamp == iter->stamp);
 
-  GET_CHILD_ITER (tree_model, &child_iter, iter);
-
   if (propagate_unref)
-    gtk_tree_model_unref_node (GTK_TREE_MODEL_SORT (tree_model)->child_model, &child_iter);
+    {
+      GtkTreeIter child_iter;
+
+      GET_CHILD_ITER (tree_model, &child_iter, iter);
+      gtk_tree_model_unref_node (GTK_TREE_MODEL_SORT (tree_model)->child_model, &child_iter);
+    }
 
   level = iter->user_data;
   elt = iter->user_data2;