From ed50ebfb28e7a04ca4236f7bf2deaf43f1b3d579 Mon Sep 17 00:00:00 2001 From: Jonathan Blandford Date: Thu, 10 Jan 2002 00:11:32 +0000 Subject: [PATCH] Now we test we can unselect nodes before selecting new ones. Wed Jan 9 19:10:07 2002 Jonathan Blandford * gtk/gtktreeselection.c (_gtk_tree_selection_internal_select_node): Now we test we can unselect nodes before selecting new ones. (gtk_tree_selection_real_select_node): be careful comparing booleans. --- ChangeLog | 7 +++++++ ChangeLog.pre-2-0 | 7 +++++++ ChangeLog.pre-2-10 | 7 +++++++ ChangeLog.pre-2-2 | 7 +++++++ ChangeLog.pre-2-4 | 7 +++++++ ChangeLog.pre-2-6 | 7 +++++++ ChangeLog.pre-2-8 | 7 +++++++ docs/reference/gdk/tmpl/threads.sgml | 3 +++ gtk/gtktreeprivate.h | 2 ++ gtk/gtktreeselection.c | 28 ++++++++++++++++++++++++---- 10 files changed, 78 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index c1e13fd827..323e8a91b8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Wed Jan 9 19:10:07 2002 Jonathan Blandford + + * gtk/gtktreeselection.c + (_gtk_tree_selection_internal_select_node): Now we test we can + unselect nodes before selecting new ones. + (gtk_tree_selection_real_select_node): be careful comparing booleans. + Wed Jan 9 21:31:44 2002 Kristian Rietveld * gtk/gtkliststore.c (gtk_list_store_sort): pass NULL to diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index c1e13fd827..323e8a91b8 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,10 @@ +Wed Jan 9 19:10:07 2002 Jonathan Blandford + + * gtk/gtktreeselection.c + (_gtk_tree_selection_internal_select_node): Now we test we can + unselect nodes before selecting new ones. + (gtk_tree_selection_real_select_node): be careful comparing booleans. + Wed Jan 9 21:31:44 2002 Kristian Rietveld * gtk/gtkliststore.c (gtk_list_store_sort): pass NULL to diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index c1e13fd827..323e8a91b8 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,10 @@ +Wed Jan 9 19:10:07 2002 Jonathan Blandford + + * gtk/gtktreeselection.c + (_gtk_tree_selection_internal_select_node): Now we test we can + unselect nodes before selecting new ones. + (gtk_tree_selection_real_select_node): be careful comparing booleans. + Wed Jan 9 21:31:44 2002 Kristian Rietveld * gtk/gtkliststore.c (gtk_list_store_sort): pass NULL to diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index c1e13fd827..323e8a91b8 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,10 @@ +Wed Jan 9 19:10:07 2002 Jonathan Blandford + + * gtk/gtktreeselection.c + (_gtk_tree_selection_internal_select_node): Now we test we can + unselect nodes before selecting new ones. + (gtk_tree_selection_real_select_node): be careful comparing booleans. + Wed Jan 9 21:31:44 2002 Kristian Rietveld * gtk/gtkliststore.c (gtk_list_store_sort): pass NULL to diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index c1e13fd827..323e8a91b8 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,10 @@ +Wed Jan 9 19:10:07 2002 Jonathan Blandford + + * gtk/gtktreeselection.c + (_gtk_tree_selection_internal_select_node): Now we test we can + unselect nodes before selecting new ones. + (gtk_tree_selection_real_select_node): be careful comparing booleans. + Wed Jan 9 21:31:44 2002 Kristian Rietveld * gtk/gtkliststore.c (gtk_list_store_sort): pass NULL to diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index c1e13fd827..323e8a91b8 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,10 @@ +Wed Jan 9 19:10:07 2002 Jonathan Blandford + + * gtk/gtktreeselection.c + (_gtk_tree_selection_internal_select_node): Now we test we can + unselect nodes before selecting new ones. + (gtk_tree_selection_real_select_node): be careful comparing booleans. + Wed Jan 9 21:31:44 2002 Kristian Rietveld * gtk/gtkliststore.c (gtk_list_store_sort): pass NULL to diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index c1e13fd827..323e8a91b8 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,10 @@ +Wed Jan 9 19:10:07 2002 Jonathan Blandford + + * gtk/gtktreeselection.c + (_gtk_tree_selection_internal_select_node): Now we test we can + unselect nodes before selecting new ones. + (gtk_tree_selection_real_select_node): be careful comparing booleans. + Wed Jan 9 21:31:44 2002 Kristian Rietveld * gtk/gtkliststore.c (gtk_list_store_sort): pass NULL to diff --git a/docs/reference/gdk/tmpl/threads.sgml b/docs/reference/gdk/tmpl/threads.sgml index 44aa66bee0..0297636f04 100644 --- a/docs/reference/gdk/tmpl/threads.sgml +++ b/docs/reference/gdk/tmpl/threads.sgml @@ -265,11 +265,14 @@ section. + Leaves a critical region begun with gdk_threads_enter(). + + The #GMutex used to implement the critical region for diff --git a/gtk/gtktreeprivate.h b/gtk/gtktreeprivate.h index 2c4fc8dc81..66b9085093 100644 --- a/gtk/gtktreeprivate.h +++ b/gtk/gtktreeprivate.h @@ -102,6 +102,8 @@ struct _GtkTreeViewPrivate GtkTreeViewColumn *drag_column; /* bin_window offset */ + GtkTreeRowReference *top_row; + gint top_row_dy; gint dy; gint drag_column_x; diff --git a/gtk/gtktreeselection.c b/gtk/gtktreeselection.c index 3d21d3474c..54ef4c8d45 100644 --- a/gtk/gtktreeselection.c +++ b/gtk/gtktreeselection.c @@ -994,12 +994,30 @@ _gtk_tree_selection_internal_select_node (GtkTreeSelection *selection, } else { - /* FIXME: We only want to select the new node if we can unselect the - * old one, and we can select the new one. We are currently - * unselecting the old one first, then trying the new one. */ if (anchor_path) { - dirty = gtk_tree_selection_real_unselect_all (selection); + /* We only want to select the new node if we can unselect the old one, + * and we can select the new one. */ + if (selection->user_func) + { + if ((*selection->user_func) (selection, selection->tree_view->priv->model, path, + GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_SELECTED), + selection->user_data)) + dirty = TRUE; + } + else + { + dirty = TRUE; + } + + /* if dirty is FALSE, we weren't able to select the new one, otherwise, we try to + * unselect the new one + */ + if (dirty) + dirty = gtk_tree_selection_real_unselect_all (selection); + + /* if dirty is TRUE at this point, we successfully unselected the + * old one, and can then select the new one */ if (dirty) { if (selection->tree_view->priv->anchor) @@ -1093,6 +1111,8 @@ gtk_tree_selection_real_select_node (GtkTreeSelection *selection, gboolean selected = FALSE; GtkTreePath *path = NULL; + select = !! select; + if (GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_SELECTED) != select) { path = _gtk_tree_view_find_path (selection->tree_view, tree, node);