diff options
author | Kristian Rietveld <kris@imendio.com> | 2008-02-12 16:00:02 +0000 |
---|---|---|
committer | Kristian Rietveld <kristian@src.gnome.org> | 2008-02-12 16:00:02 +0000 |
commit | 8bb6729e214b4940631deb44761def6b2ea5e8ac (patch) | |
tree | 4bd7a8982520d2f1b3936db5ceeb1d7a30afa521 | |
parent | 011a75e87a959e54504eb7c6df22f59c4b0521bd (diff) | |
download | gdk-pixbuf-8bb6729e214b4940631deb44761def6b2ea5e8ac.tar.gz |
Merge from trunk:
2008-02-12 Kristian Rietveld <kris@imendio.com>
Merge from trunk:
* gtk/gtktreeview.c (gtk_tree_view_real_select_cursor_row),
(gtk_tree_view_real_toggle_cursor_row): guard against people
deleting the row in question in the selection-changed callback.
(#514621, Andreas Koehler).
svn path=/branches/gtk-2-12/; revision=19531
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | gtk/gtktreeview.c | 22 |
2 files changed, 31 insertions, 0 deletions
@@ -1,3 +1,12 @@ +2008-02-12 Kristian Rietveld <kris@imendio.com> + + Merge from trunk: + + * gtk/gtktreeview.c (gtk_tree_view_real_select_cursor_row), + (gtk_tree_view_real_toggle_cursor_row): guard against people + deleting the row in question in the selection-changed callback. + (#514621, Andreas Koehler). + 2008-02-11 Matthias Clasen <mclasen@redhat.com> Merged from trunk: diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c index cb4e89afb..fce72ed82 100644 --- a/gtk/gtktreeview.c +++ b/gtk/gtktreeview.c @@ -10075,6 +10075,8 @@ static gboolean gtk_tree_view_real_select_cursor_row (GtkTreeView *tree_view, gboolean start_editing) { + GtkRBTree *new_tree = NULL; + GtkRBNode *new_node = NULL; GtkRBTree *cursor_tree = NULL; GtkRBNode *cursor_node = NULL; GtkTreePath *cursor_path = NULL; @@ -10120,6 +10122,15 @@ gtk_tree_view_real_select_cursor_row (GtkTreeView *tree_view, mode, FALSE); + /* We bail out if the original (tree, node) don't exist anymore after + * handling the selection-changed callback. We do return TRUE because + * the key press has been handled at this point. + */ + _gtk_tree_view_find_node (tree_view, cursor_path, &new_tree, &new_node); + + if (cursor_tree != new_tree || cursor_node != new_node) + return FALSE; + gtk_tree_view_clamp_node_visible (tree_view, cursor_tree, cursor_node); gtk_widget_grab_focus (GTK_WIDGET (tree_view)); @@ -10137,6 +10148,8 @@ gtk_tree_view_real_select_cursor_row (GtkTreeView *tree_view, static gboolean gtk_tree_view_real_toggle_cursor_row (GtkTreeView *tree_view) { + GtkRBTree *new_tree = NULL; + GtkRBNode *new_node = NULL; GtkRBTree *cursor_tree = NULL; GtkRBNode *cursor_node = NULL; GtkTreePath *cursor_path = NULL; @@ -10166,6 +10179,15 @@ gtk_tree_view_real_toggle_cursor_row (GtkTreeView *tree_view) GTK_TREE_SELECT_MODE_TOGGLE, FALSE); + /* We bail out if the original (tree, node) don't exist anymore after + * handling the selection-changed callback. We do return TRUE because + * the key press has been handled at this point. + */ + _gtk_tree_view_find_node (tree_view, cursor_path, &new_tree, &new_node); + + if (cursor_tree != new_tree || cursor_node != new_node) + return FALSE; + gtk_tree_view_clamp_node_visible (tree_view, cursor_tree, cursor_node); gtk_widget_grab_focus (GTK_WIDGET (tree_view)); |