[gtk+] When the filter removes a node, it needs to remove its children too
- From: Kristian Rietveld <kristian src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gtk+] When the filter removes a node, it needs to remove its children too
- Date: Sat, 5 Sep 2009 15:27:03 +0000 (UTC)
commit 0c4f29e85767154382cf2a46d3faa6b0ab742aa8
Author: Kristian Rietveld <kris gtk org>
Date: Sat Sep 5 16:12:48 2009 +0200
When the filter removes a node, it needs to remove its children too
In gtk_tree_model_filter_remove_node(), we check if the given elt has
children. If so, this level will be freed. This action is recursive.
gtk/gtktreemodelfilter.c | 18 ++++++++++++++----
1 files changed, 14 insertions(+), 4 deletions(-)
---
diff --git a/gtk/gtktreemodelfilter.c b/gtk/gtktreemodelfilter.c
index 1c20a0b..1036636 100644
--- a/gtk/gtktreemodelfilter.c
+++ b/gtk/gtktreemodelfilter.c
@@ -1008,9 +1008,13 @@ gtk_tree_model_filter_remove_node (GtkTreeModelFilter *filter,
GtkTreePath *path;
FilterElt *tmp;
- /* we emit row-deleted, and remove the node from the cache.
+ /* We emit row-deleted, and remove the node from the cache.
+ * If it has any children, these will be removed here as well.
*/
+ if (elt->children)
+ gtk_tree_model_filter_free_level (filter, elt->children);
+
path = gtk_tree_model_get_path (GTK_TREE_MODEL (filter), iter);
elt->visible = FALSE;
gtk_tree_model_filter_increment_stamp (filter);
@@ -1052,10 +1056,16 @@ gtk_tree_model_filter_remove_node (GtkTreeModelFilter *filter,
{
GtkTreePath *path;
- /* we emit row-deleted, but keep the node in the cache and
- * referenced.
+ /* We emit row-deleted, but keep the node in the cache and
+ * referenced. Its children will be removed.
*/
+ if (elt->children)
+ {
+ gtk_tree_model_filter_free_level (filter, elt->children);
+ elt->children = NULL;
+ }
+
path = gtk_tree_model_get_path (GTK_TREE_MODEL (filter), iter);
elt->visible = FALSE;
gtk_tree_model_filter_increment_stamp (filter);
@@ -1066,7 +1076,7 @@ gtk_tree_model_filter_remove_node (GtkTreeModelFilter *filter,
{
GtkTreePath *path;
- /* blow level away */
+ /* Blow level away, including any child levels */
path = gtk_tree_model_get_path (GTK_TREE_MODEL (filter), iter);
elt->visible = FALSE;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]