From e732c16aab46913db2d81b91b5860ccbccc45efe Mon Sep 17 00:00:00 2001 From: Kristian Rietveld Date: Tue, 12 Oct 2010 17:20:44 +0200 Subject: [PATCH] Use GtkAdjustment accessors to properly compress changed signals --- gtk/gtktreeview.c | 59 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 40 insertions(+), 19 deletions(-) diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c index 3f447b14a2..e5fa337047 100644 --- a/gtk/gtktreeview.c +++ b/gtk/gtktreeview.c @@ -2384,11 +2384,18 @@ gtk_tree_view_size_allocate (GtkWidget *widget, */ gtk_tree_view_size_allocate_columns (widget, &width_changed); - tree_view->priv->hadjustment->page_size = allocation->width; - tree_view->priv->hadjustment->page_increment = allocation->width * 0.9; - tree_view->priv->hadjustment->step_increment = allocation->width * 0.1; - tree_view->priv->hadjustment->lower = 0; - tree_view->priv->hadjustment->upper = MAX (tree_view->priv->hadjustment->page_size, tree_view->priv->width); + g_object_freeze_notify (G_OBJECT (tree_view->priv->hadjustment)); + gtk_adjustment_set_page_size (tree_view->priv->hadjustment, + allocation->width); + gtk_adjustment_set_page_increment (tree_view->priv->hadjustment, + allocation->width * 0.9); + gtk_adjustment_set_step_increment (tree_view->priv->hadjustment, + allocation->width * 0.1); + gtk_adjustment_set_lower (tree_view->priv->hadjustment, 0); + gtk_adjustment_set_upper (tree_view->priv->hadjustment, + MAX (tree_view->priv->hadjustment->page_size, + tree_view->priv->width)); + g_object_thaw_notify (G_OBJECT (tree_view->priv->hadjustment)); if (gtk_widget_get_direction(widget) == GTK_TEXT_DIR_RTL) { @@ -2396,35 +2403,49 @@ gtk_tree_view_size_allocate (GtkWidget *widget, { if (tree_view->priv->init_hadjust_value) { - tree_view->priv->hadjustment->value = MAX (tree_view->priv->width - allocation->width, 0); + gtk_adjustment_set_value (tree_view->priv->hadjustment, + MAX (tree_view->priv->width - + allocation->width, 0)); tree_view->priv->init_hadjust_value = FALSE; } else if (allocation->width != old_width) { - tree_view->priv->hadjustment->value = CLAMP (tree_view->priv->hadjustment->value - allocation->width + old_width, 0, tree_view->priv->width - allocation->width); + gtk_adjustment_set_value (tree_view->priv->hadjustment, + CLAMP (tree_view->priv->hadjustment->value - allocation->width + old_width, + 0, + tree_view->priv->width - allocation->width)); } else - tree_view->priv->hadjustment->value = CLAMP (tree_view->priv->width - (tree_view->priv->prev_width - tree_view->priv->hadjustment->value), 0, tree_view->priv->width - allocation->width); + gtk_adjustment_set_value (tree_view->priv->hadjustment, + CLAMP (tree_view->priv->width - (tree_view->priv->prev_width - tree_view->priv->hadjustment->value), + 0, + tree_view->priv->width - allocation->width)); } else { - tree_view->priv->hadjustment->value = 0; + gtk_adjustment_set_value (tree_view->priv->hadjustment, 0); tree_view->priv->init_hadjust_value = TRUE; } } else if (tree_view->priv->hadjustment->value + allocation->width > tree_view->priv->width) - tree_view->priv->hadjustment->value = MAX (tree_view->priv->width - allocation->width, 0); + gtk_adjustment_set_value (tree_view->priv->hadjustment, + MAX (tree_view->priv->width - + allocation->width, 0)); - gtk_adjustment_changed (tree_view->priv->hadjustment); - - tree_view->priv->vadjustment->page_size = allocation->height - TREE_VIEW_HEADER_HEIGHT (tree_view); - tree_view->priv->vadjustment->step_increment = tree_view->priv->vadjustment->page_size * 0.1; - tree_view->priv->vadjustment->page_increment = tree_view->priv->vadjustment->page_size * 0.9; - tree_view->priv->vadjustment->lower = 0; - tree_view->priv->vadjustment->upper = MAX (tree_view->priv->vadjustment->page_size, tree_view->priv->height); - - gtk_adjustment_changed (tree_view->priv->vadjustment); + g_object_freeze_notify (G_OBJECT (tree_view->priv->vadjustment)); + gtk_adjustment_set_page_size (tree_view->priv->vadjustment, + allocation->height - + TREE_VIEW_HEADER_HEIGHT (tree_view)); + gtk_adjustment_set_step_increment (tree_view->priv->vadjustment, + tree_view->priv->vadjustment->page_size * 0.1); + gtk_adjustment_set_page_increment (tree_view->priv->vadjustment, + tree_view->priv->vadjustment->page_size * 0.9); + gtk_adjustment_set_lower (tree_view->priv->vadjustment, 0); + gtk_adjustment_set_upper (tree_view->priv->vadjustment, + MAX (tree_view->priv->vadjustment->page_size, + tree_view->priv->height)); + g_object_thaw_notify (G_OBJECT (tree_view->priv->vadjustment)); /* now the adjustments and window sizes are in sync, we can sync toprow/dy again */ if (tree_view->priv->height <= tree_view->priv->vadjustment->page_size)