From 4a03ea2334bde7d2e15d0933c5a78f5a2338a854 Mon Sep 17 00:00:00 2001 From: Kristian Rietveld Date: Thu, 29 May 2003 15:09:47 +0000 Subject: [PATCH] Merged from stable. Thu May 29 17:06:09 2003 Kristian Rietveld Merged from stable. * gtk/gtktreeview.c (check_selection_helper): new function, (gtk_tree_view_row_deleted): traverse the tree from the deleted node to see whether the selection changed, instead of just checking this node. (Fixes #107400, reported by 'Duncan'). --- ChangeLog | 9 +++++++++ ChangeLog.pre-2-10 | 9 +++++++++ ChangeLog.pre-2-4 | 9 +++++++++ ChangeLog.pre-2-6 | 9 +++++++++ ChangeLog.pre-2-8 | 9 +++++++++ gtk/gtktreeview.c | 20 +++++++++++++++++--- 6 files changed, 62 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 111e0c5bfb..f67c1dff9d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +Thu May 29 17:06:09 2003 Kristian Rietveld + + Merged from stable. + + * gtk/gtktreeview.c (check_selection_helper): new function, + (gtk_tree_view_row_deleted): traverse the tree from the + deleted node to see whether the selection changed, instead of + just checking this node. (Fixes #107400, reported by 'Duncan'). + Thu May 29 16:31:34 2003 Kristian Rietveld Merged from stable. diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 111e0c5bfb..f67c1dff9d 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,12 @@ +Thu May 29 17:06:09 2003 Kristian Rietveld + + Merged from stable. + + * gtk/gtktreeview.c (check_selection_helper): new function, + (gtk_tree_view_row_deleted): traverse the tree from the + deleted node to see whether the selection changed, instead of + just checking this node. (Fixes #107400, reported by 'Duncan'). + Thu May 29 16:31:34 2003 Kristian Rietveld Merged from stable. diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 111e0c5bfb..f67c1dff9d 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,12 @@ +Thu May 29 17:06:09 2003 Kristian Rietveld + + Merged from stable. + + * gtk/gtktreeview.c (check_selection_helper): new function, + (gtk_tree_view_row_deleted): traverse the tree from the + deleted node to see whether the selection changed, instead of + just checking this node. (Fixes #107400, reported by 'Duncan'). + Thu May 29 16:31:34 2003 Kristian Rietveld Merged from stable. diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 111e0c5bfb..f67c1dff9d 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,12 @@ +Thu May 29 17:06:09 2003 Kristian Rietveld + + Merged from stable. + + * gtk/gtktreeview.c (check_selection_helper): new function, + (gtk_tree_view_row_deleted): traverse the tree from the + deleted node to see whether the selection changed, instead of + just checking this node. (Fixes #107400, reported by 'Duncan'). + Thu May 29 16:31:34 2003 Kristian Rietveld Merged from stable. diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 111e0c5bfb..f67c1dff9d 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,12 @@ +Thu May 29 17:06:09 2003 Kristian Rietveld + + Merged from stable. + + * gtk/gtktreeview.c (check_selection_helper): new function, + (gtk_tree_view_row_deleted): traverse the tree from the + deleted node to see whether the selection changed, instead of + just checking this node. (Fixes #107400, reported by 'Duncan'). + Thu May 29 16:31:34 2003 Kristian Rietveld Merged from stable. diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c index 0c474a3e0c..e420fc7b83 100644 --- a/gtk/gtktreeview.c +++ b/gtk/gtktreeview.c @@ -6332,6 +6332,19 @@ count_children_helper (GtkRBTree *tree, (*((gint *)data))++; } +static void +check_selection_helper (GtkRBTree *tree, + GtkRBNode *node, + gpointer data) +{ + gint *value = (gint *)data; + + *value = GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_SELECTED); + + if (node->children && !*value) + _gtk_rbtree_traverse (node->children, node->children->root, G_POST_ORDER, check_selection_helper, data); +} + static void gtk_tree_view_row_deleted (GtkTreeModel *model, GtkTreePath *path, @@ -6341,7 +6354,7 @@ gtk_tree_view_row_deleted (GtkTreeModel *model, GtkRBTree *tree; GtkRBNode *node; GList *list; - gint selection_changed; + gint selection_changed = FALSE; g_return_if_fail (path != NULL); @@ -6353,8 +6366,9 @@ gtk_tree_view_row_deleted (GtkTreeModel *model, if (tree == NULL) return; - /* Change the selection */ - selection_changed = GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_SELECTED); + /* check if the selection has been changed */ + _gtk_rbtree_traverse (tree, node, G_POST_ORDER, + check_selection_helper, &selection_changed); for (list = tree_view->priv->columns; list; list = list->next) if (((GtkTreeViewColumn *)list->data)->visible &&