]> Pileus Git - ~andy/gtk/commitdiff
new function (gtk_tree_store_clear): traverse the tree, so we emit
authorKristian Rietveld <kris@gtk.org>
Fri, 15 Feb 2002 18:38:02 +0000 (18:38 +0000)
committerKristian Rietveld <kristian@src.gnome.org>
Fri, 15 Feb 2002 18:38:02 +0000 (18:38 +0000)
Fri Feb 15 19:38:00 2002  Kristian Rietveld  <kris@gtk.org>

        * gtk/gtktreestore.c (gtk_tree_store_clear_traverse): new function
        (gtk_tree_store_clear): traverse the tree, so we emit row_deleted
        for every node. This way we don't have confused row refs crashing the
        application. (#70631)

ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtktreestore.c

index 0fd6600ae6800c99d939c009221ee75aad4d7c1b..887b263ec9c59e4331a8e7b399b9abd6a46a7f38 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Fri Feb 15 19:38:00 2002  Kristian Rietveld  <kris@gtk.org>
+
+       * gtk/gtktreestore.c (gtk_tree_store_clear_traverse): new function
+       (gtk_tree_store_clear): traverse the tree, so we emit row_deleted
+       for every node. This way we don't have confused row refs crashing the
+       application. (#70631)
+
 2002-02-14  Richard Hult  <rhult@codefactory.se>
 
        * gtk/gtkpaned.c (gtk_paned_enter): Only queue a draw on the
index 0fd6600ae6800c99d939c009221ee75aad4d7c1b..887b263ec9c59e4331a8e7b399b9abd6a46a7f38 100644 (file)
@@ -1,3 +1,10 @@
+Fri Feb 15 19:38:00 2002  Kristian Rietveld  <kris@gtk.org>
+
+       * gtk/gtktreestore.c (gtk_tree_store_clear_traverse): new function
+       (gtk_tree_store_clear): traverse the tree, so we emit row_deleted
+       for every node. This way we don't have confused row refs crashing the
+       application. (#70631)
+
 2002-02-14  Richard Hult  <rhult@codefactory.se>
 
        * gtk/gtkpaned.c (gtk_paned_enter): Only queue a draw on the
index 0fd6600ae6800c99d939c009221ee75aad4d7c1b..887b263ec9c59e4331a8e7b399b9abd6a46a7f38 100644 (file)
@@ -1,3 +1,10 @@
+Fri Feb 15 19:38:00 2002  Kristian Rietveld  <kris@gtk.org>
+
+       * gtk/gtktreestore.c (gtk_tree_store_clear_traverse): new function
+       (gtk_tree_store_clear): traverse the tree, so we emit row_deleted
+       for every node. This way we don't have confused row refs crashing the
+       application. (#70631)
+
 2002-02-14  Richard Hult  <rhult@codefactory.se>
 
        * gtk/gtkpaned.c (gtk_paned_enter): Only queue a draw on the
index 0fd6600ae6800c99d939c009221ee75aad4d7c1b..887b263ec9c59e4331a8e7b399b9abd6a46a7f38 100644 (file)
@@ -1,3 +1,10 @@
+Fri Feb 15 19:38:00 2002  Kristian Rietveld  <kris@gtk.org>
+
+       * gtk/gtktreestore.c (gtk_tree_store_clear_traverse): new function
+       (gtk_tree_store_clear): traverse the tree, so we emit row_deleted
+       for every node. This way we don't have confused row refs crashing the
+       application. (#70631)
+
 2002-02-14  Richard Hult  <rhult@codefactory.se>
 
        * gtk/gtkpaned.c (gtk_paned_enter): Only queue a draw on the
index 0fd6600ae6800c99d939c009221ee75aad4d7c1b..887b263ec9c59e4331a8e7b399b9abd6a46a7f38 100644 (file)
@@ -1,3 +1,10 @@
+Fri Feb 15 19:38:00 2002  Kristian Rietveld  <kris@gtk.org>
+
+       * gtk/gtktreestore.c (gtk_tree_store_clear_traverse): new function
+       (gtk_tree_store_clear): traverse the tree, so we emit row_deleted
+       for every node. This way we don't have confused row refs crashing the
+       application. (#70631)
+
 2002-02-14  Richard Hult  <rhult@codefactory.se>
 
        * gtk/gtkpaned.c (gtk_paned_enter): Only queue a draw on the
index 0fd6600ae6800c99d939c009221ee75aad4d7c1b..887b263ec9c59e4331a8e7b399b9abd6a46a7f38 100644 (file)
@@ -1,3 +1,10 @@
+Fri Feb 15 19:38:00 2002  Kristian Rietveld  <kris@gtk.org>
+
+       * gtk/gtktreestore.c (gtk_tree_store_clear_traverse): new function
+       (gtk_tree_store_clear): traverse the tree, so we emit row_deleted
+       for every node. This way we don't have confused row refs crashing the
+       application. (#70631)
+
 2002-02-14  Richard Hult  <rhult@codefactory.se>
 
        * gtk/gtkpaned.c (gtk_paned_enter): Only queue a draw on the
index 0fd6600ae6800c99d939c009221ee75aad4d7c1b..887b263ec9c59e4331a8e7b399b9abd6a46a7f38 100644 (file)
@@ -1,3 +1,10 @@
+Fri Feb 15 19:38:00 2002  Kristian Rietveld  <kris@gtk.org>
+
+       * gtk/gtktreestore.c (gtk_tree_store_clear_traverse): new function
+       (gtk_tree_store_clear): traverse the tree, so we emit row_deleted
+       for every node. This way we don't have confused row refs crashing the
+       application. (#70631)
+
 2002-02-14  Richard Hult  <rhult@codefactory.se>
 
        * gtk/gtkpaned.c (gtk_paned_enter): Only queue a draw on the
index ebe1e6a8dcfe4a6b654ee3c57df35c617ade7227..c4497be735fe33b53543006963633796651f3dd1 100644 (file)
@@ -1423,6 +1423,47 @@ gtk_tree_store_iter_depth (GtkTreeStore *tree_store,
   return g_node_depth (G_NODE (iter->user_data)) - 2;
 }
 
+/* simple ripoff from g_node_traverse_post_order */
+static gboolean
+gtk_tree_store_clear_traverse (GNode *node,
+                              GtkTreeStore *store)
+{
+  GtkTreeIter iter;
+
+  if (node->children)
+    {
+      GNode *child;
+
+      child = node->children;
+      while (child)
+        {
+         register GNode *current;
+
+         current = child;
+         child = current->next;
+         if (gtk_tree_store_clear_traverse (current, store))
+           return TRUE;
+       }
+
+      if (node->parent)
+        {
+         iter.stamp = store->stamp;
+         iter.user_data = node;
+
+         gtk_tree_store_remove (store, &iter);
+       }
+    }
+  else if (node->parent)
+    {
+      iter.stamp = store->stamp;
+      iter.user_data = node;
+
+      gtk_tree_store_remove (store, &iter);
+    }
+
+  return FALSE;
+}
+
 /**
  * gtk_tree_store_clear:
  * @tree_store: a #GtkTreeStore
@@ -1432,16 +1473,9 @@ gtk_tree_store_iter_depth (GtkTreeStore *tree_store,
 void
 gtk_tree_store_clear (GtkTreeStore *tree_store)
 {
-  GtkTreeIter iter;
-
   g_return_if_fail (GTK_IS_TREE_STORE (tree_store));
 
-  while (G_NODE (tree_store->root)->children)
-    {
-      iter.stamp = tree_store->stamp;
-      iter.user_data = G_NODE (tree_store->root)->children;
-      gtk_tree_store_remove (tree_store, &iter);
-    }
+  gtk_tree_store_clear_traverse (tree_store->root, tree_store);
 }
 
 /* DND */