From 2696fbc98fc23b28f0c0cbfa2257b5cee8eec00e Mon Sep 17 00:00:00 2001 From: Jonathan Blandford Date: Fri, 14 Jun 2002 19:43:16 +0000 Subject: [PATCH] Fix bug #84268, where validate_rows sometimes didn't remove itself Fri Jun 14 15:41:50 2002 Jonathan Blandford * gtk/gtktreeview.c: Fix bug #84268, where validate_rows sometimes didn't remove itself correctly. Thanks to Dave Camp for the fix. --- ChangeLog | 5 +++++ ChangeLog.pre-2-10 | 5 +++++ ChangeLog.pre-2-2 | 5 +++++ ChangeLog.pre-2-4 | 5 +++++ ChangeLog.pre-2-6 | 5 +++++ ChangeLog.pre-2-8 | 5 +++++ gtk/gtktreeview.c | 34 ++++++++++++++++++++++++---------- 7 files changed, 54 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5aa5a63f27..20d75fcd35 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Fri Jun 14 15:41:50 2002 Jonathan Blandford + + * gtk/gtktreeview.c: Fix bug #84268, where validate_rows sometimes + didn't remove itself correctly. Thanks to Dave Camp for the fix. + Fri Jun 14 15:09:11 2002 Jonathan Blandford * gtk/gtktreeview.c (gtk_tree_view_set_adjustments): diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 5aa5a63f27..20d75fcd35 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,8 @@ +Fri Jun 14 15:41:50 2002 Jonathan Blandford + + * gtk/gtktreeview.c: Fix bug #84268, where validate_rows sometimes + didn't remove itself correctly. Thanks to Dave Camp for the fix. + Fri Jun 14 15:09:11 2002 Jonathan Blandford * gtk/gtktreeview.c (gtk_tree_view_set_adjustments): diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 5aa5a63f27..20d75fcd35 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,8 @@ +Fri Jun 14 15:41:50 2002 Jonathan Blandford + + * gtk/gtktreeview.c: Fix bug #84268, where validate_rows sometimes + didn't remove itself correctly. Thanks to Dave Camp for the fix. + Fri Jun 14 15:09:11 2002 Jonathan Blandford * gtk/gtktreeview.c (gtk_tree_view_set_adjustments): diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 5aa5a63f27..20d75fcd35 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,8 @@ +Fri Jun 14 15:41:50 2002 Jonathan Blandford + + * gtk/gtktreeview.c: Fix bug #84268, where validate_rows sometimes + didn't remove itself correctly. Thanks to Dave Camp for the fix. + Fri Jun 14 15:09:11 2002 Jonathan Blandford * gtk/gtktreeview.c (gtk_tree_view_set_adjustments): diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 5aa5a63f27..20d75fcd35 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,8 @@ +Fri Jun 14 15:41:50 2002 Jonathan Blandford + + * gtk/gtktreeview.c: Fix bug #84268, where validate_rows sometimes + didn't remove itself correctly. Thanks to Dave Camp for the fix. + Fri Jun 14 15:09:11 2002 Jonathan Blandford * gtk/gtktreeview.c (gtk_tree_view_set_adjustments): diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 5aa5a63f27..20d75fcd35 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,8 @@ +Fri Jun 14 15:41:50 2002 Jonathan Blandford + + * gtk/gtktreeview.c: Fix bug #84268, where validate_rows sometimes + didn't remove itself correctly. Thanks to Dave Camp for the fix. + Fri Jun 14 15:09:11 2002 Jonathan Blandford * gtk/gtktreeview.c (gtk_tree_view_set_adjustments): diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c index 546d8c2394..1e3a5abf80 100644 --- a/gtk/gtktreeview.c +++ b/gtk/gtktreeview.c @@ -263,7 +263,7 @@ static gboolean validate_row (GtkTreeView *tree_view, GtkTreePath *path); static void validate_visible_area (GtkTreeView *tree_view); static gboolean validate_rows_handler (GtkTreeView *tree_view); -static gboolean do_validate_rows (GtkTreeView *tree_view); +static gboolean validate_rows (GtkTreeView *tree_view); static gboolean presize_handler_callback (gpointer data); static void install_presize_handler (GtkTreeView *tree_view); static void install_scroll_sync_handler (GtkTreeView *tree_view); @@ -1494,7 +1494,7 @@ gtk_tree_view_size_request (GtkWidget *widget, /* we validate 50 rows initially just to make sure we have some size */ /* in practice, with a lot of static lists, this should get a good width */ - do_validate_rows (tree_view); + validate_rows (tree_view); gtk_tree_view_size_request_columns (tree_view); gtk_tree_view_update_size (GTK_TREE_VIEW (widget)); @@ -3970,10 +3970,8 @@ do_validate_rows (GtkTreeView *tree_view) g_assert (tree_view); if (tree_view->priv->tree == NULL) - { - tree_view->priv->validate_rows_timer = 0; return FALSE; - } + do { if (! GTK_RBNODE_FLAG_SET (tree_view->priv->tree->root, GTK_RBNODE_DESCENDANTS_INVALID)) @@ -4080,12 +4078,26 @@ do_validate_rows (GtkTreeView *tree_view) gtk_tree_view_dy_to_top_row (tree_view); if (path) gtk_tree_path_free (path); - if (! retval) - tree_view->priv->validate_rows_timer = 0; return retval; } +static gboolean +validate_rows (GtkTreeView *tree_view) +{ + gboolean retval; + + retval = do_validate_rows (tree_view); + + if (! retval && tree_view->priv->validate_rows_timer) + { + g_source_remove (tree_view->priv->validate_rows_timer); + tree_view->priv->validate_rows_timer = 0; + } + + return retval; + } + static gboolean validate_rows_handler (GtkTreeView *tree_view) { @@ -4094,7 +4106,9 @@ validate_rows_handler (GtkTreeView *tree_view) GDK_THREADS_ENTER (); retval = do_validate_rows (tree_view); - + if (! retval) + tree_view->priv->validate_rows_timer = 0; + GDK_THREADS_LEAVE (); return retval; @@ -4260,7 +4274,7 @@ _gtk_tree_view_install_mark_rows_col_dirty (GtkTreeView *tree_view) } /** - * This function works synchronously (due to the while (do_validate_rows...) + * This function works synchronously (due to the while (validate_rows...) * loop). * * There was a check for column_type != GTK_TREE_VIEW_COLUMN_AUTOSIZE @@ -4276,7 +4290,7 @@ _gtk_tree_view_column_autosize (GtkTreeView *tree_view, _gtk_tree_view_column_cell_set_dirty (column, FALSE); do_presize_handler (tree_view); - while (do_validate_rows (tree_view)); + while (validate_rows (tree_view)); gtk_widget_queue_resize (GTK_WIDGET (tree_view)); }