+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
+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
+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
+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
+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
+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
+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
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
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 */