From 2e6ba401cc22f25cf97245ef3bd8ec832617770a Mon Sep 17 00:00:00 2001 From: Kristian Rietveld Date: Wed, 1 Mar 2006 12:18:57 +0000 Subject: [PATCH] rename to _gtk_tree_selection_row_is_selectable and export internally, 2006-03-01 Kristian Rietveld * gtk/gtktreeselection.c (row_is_selectable): rename to _gtk_tree_selection_row_is_selectable and export internally, (gtk_tree_selection_real_select_node): changed so it is always possible to unselect insensitive nodes, changed the logic a bit to be more clear. * gtk/gtktreeprivate.h: add _gtk_tree_selection_row_is_selectable. * gtk/gtktreeview.c (gtk_tree_view_row_changed): Unselect a row if it became insensitive. --- ChangeLog | 13 +++++++++++++ ChangeLog.pre-2-10 | 13 +++++++++++++ gtk/gtktreeprivate.h | 3 +++ gtk/gtktreeselection.c | 19 +++++++++++-------- gtk/gtktreeview.c | 5 +++++ 5 files changed, 45 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 066e0fdbfe..500aae7b38 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2006-03-01 Kristian Rietveld + + * gtk/gtktreeselection.c (row_is_selectable): rename to + _gtk_tree_selection_row_is_selectable and export internally, + (gtk_tree_selection_real_select_node): changed so it is always + possible to unselect insensitive nodes, changed the logic a bit to + be more clear. + + * gtk/gtktreeprivate.h: add _gtk_tree_selection_row_is_selectable. + + * gtk/gtktreeview.c (gtk_tree_view_row_changed): Unselect a row if + it became insensitive. + 2006-02-27 Federico Mena Quintero * gtk/gtkfontsel.c (gtk_font_selection_set_font_name): Check that diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 066e0fdbfe..500aae7b38 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,16 @@ +2006-03-01 Kristian Rietveld + + * gtk/gtktreeselection.c (row_is_selectable): rename to + _gtk_tree_selection_row_is_selectable and export internally, + (gtk_tree_selection_real_select_node): changed so it is always + possible to unselect insensitive nodes, changed the logic a bit to + be more clear. + + * gtk/gtktreeprivate.h: add _gtk_tree_selection_row_is_selectable. + + * gtk/gtktreeview.c (gtk_tree_view_row_changed): Unselect a row if + it became insensitive. + 2006-02-27 Federico Mena Quintero * gtk/gtkfontsel.c (gtk_font_selection_set_font_name): Check that diff --git a/gtk/gtktreeprivate.h b/gtk/gtktreeprivate.h index 459faf0d17..dad8db4121 100644 --- a/gtk/gtktreeprivate.h +++ b/gtk/gtktreeprivate.h @@ -366,6 +366,9 @@ GtkTreeSelection* _gtk_tree_selection_new (void); GtkTreeSelection* _gtk_tree_selection_new_with_tree_view (GtkTreeView *tree_view); void _gtk_tree_selection_set_tree_view (GtkTreeSelection *selection, GtkTreeView *tree_view); +gboolean _gtk_tree_selection_row_is_selectable (GtkTreeSelection *selection, + GtkRBNode *node, + GtkTreePath *path); void _gtk_tree_view_column_cell_render (GtkTreeViewColumn *tree_column, GdkWindow *window, diff --git a/gtk/gtktreeselection.c b/gtk/gtktreeselection.c index 90a0dac174..1ced62de68 100644 --- a/gtk/gtktreeselection.c +++ b/gtk/gtktreeselection.c @@ -1294,10 +1294,10 @@ tree_column_is_sensitive (GtkTreeViewColumn *column, return sensitive; } -static gboolean -row_is_selectable (GtkTreeSelection *selection, - GtkRBNode *node, - GtkTreePath *path) +gboolean +_gtk_tree_selection_row_is_selectable (GtkTreeSelection *selection, + GtkRBNode *node, + GtkTreePath *path) { GList *list; GtkTreeIter iter; @@ -1386,7 +1386,7 @@ _gtk_tree_selection_internal_select_node (GtkTreeSelection *selection, { /* We only want to select the new node if we can unselect the old one, * and we can select the new one. */ - dirty = row_is_selectable (selection, node, path); + dirty = _gtk_tree_selection_row_is_selectable (selection, node, path); /* if dirty is FALSE, we weren't able to select the new one, otherwise, we try to * unselect the new one @@ -1502,7 +1502,7 @@ gtk_tree_selection_real_select_node (GtkTreeSelection *selection, GtkRBNode *node, gboolean select) { - gboolean selected = FALSE; + gboolean toggle = FALSE; GtkTreePath *path = NULL; select = !! select; @@ -1510,11 +1510,14 @@ gtk_tree_selection_real_select_node (GtkTreeSelection *selection, if (GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_SELECTED) != select) { path = _gtk_tree_view_find_path (selection->tree_view, tree, node); - selected = row_is_selectable (selection, node, path); + if (!select) + toggle = TRUE; + else + toggle = _gtk_tree_selection_row_is_selectable (selection, node, path); gtk_tree_path_free (path); } - if (selected == TRUE) + if (toggle) { node->flags ^= GTK_RBNODE_IS_SELECTED; diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c index f2994684aa..492678c5ab 100644 --- a/gtk/gtktreeview.c +++ b/gtk/gtktreeview.c @@ -7238,6 +7238,11 @@ gtk_tree_view_row_changed (GtkTreeModel *model, if (tree == NULL) goto done; + /* Check if the node became insensitive, and if so, unselect it */ + if (!_gtk_tree_selection_row_is_selectable (tree_view->priv->selection, + node, path)) + gtk_tree_selection_unselect_path (tree_view->priv->selection, path); + if (tree_view->priv->fixed_height_mode && tree_view->priv->fixed_height >= 0) {