--- header-pane.cc.bak 2006-04-26 00:14:03.000000000 -0500 +++ header-pane.cc 2006-04-26 00:20:26.000000000 -0500 @@ -685,25 +685,31 @@ GtkTreeIter * cur, const quarks_t & mids_to_remove) { - const Article *a (get_rec (model, cur).article); + for (;;) + { + const Article *a (get_rec (model, cur).article); - GtkTreeIter child; - if (gtk_tree_model_iter_children (model, &child, cur)) - walk_and_remove (model, &child, mids_to_remove); + // process the children first + GtkTreeIter child; + if (gtk_tree_model_iter_children (model, &child, cur)) + walk_and_remove (model, &child, mids_to_remove); - if (mids_to_remove.count (a->message_id)) - { - HeaderPane * pane (static_cast(g_object_get_qdata (G_OBJECT(model), pane_quark()))); - pane->_iter_to_view_record.erase (cur->user_data); + // if this article's not being removed, proceed to its sibling + if (!mids_to_remove.count (a->message_id)) + { + if (!gtk_tree_model_iter_next (model, cur)) + break; + } + else // this article's going away + { + // remove it from our iter-to-article map... + HeaderPane * pane (static_cast(g_object_get_qdata (G_OBJECT(model), pane_quark()))); + pane->_iter_to_view_record.erase (cur->user_data); - if (gtk_tree_store_remove (GTK_TREE_STORE(model), cur)) - walk_and_remove (model, cur, mids_to_remove); - else - return; + if (!gtk_tree_store_remove (GTK_TREE_STORE(model), cur)) + break; + } } - else if (gtk_tree_model_iter_next (model, cur)) - walk_and_remove (model, cur, mids_to_remove); - } void