From f0ac99072eb67fd2221a00e9fd1378ff6326c62d Mon Sep 17 00:00:00 2001 From: Přemysl Janouch Date: Wed, 10 Oct 2012 20:35:52 +0200 Subject: Win32 bugfixes. * Force redraw on LdCategorySymbolView size allocation. * Fix an infinite loop sometimes caused by update_adjustments(). --- liblogdiag/ld-category-symbol-view.c | 3 +++ liblogdiag/ld-diagram-view.c | 33 ++++++++++++++++++--------------- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/liblogdiag/ld-category-symbol-view.c b/liblogdiag/ld-category-symbol-view.c index a2ae4cc..19df4b8 100644 --- a/liblogdiag/ld-category-symbol-view.c +++ b/liblogdiag/ld-category-symbol-view.c @@ -298,7 +298,10 @@ on_size_allocate (GtkWidget *widget, GdkRectangle *allocation, self = LD_CATEGORY_SYMBOL_VIEW (widget); if (self->priv->height_negotiation) + { + gtk_widget_queue_draw (widget); self->priv->height_negotiation = FALSE; + } else { self->priv->height_negotiation = TRUE; diff --git a/liblogdiag/ld-diagram-view.c b/liblogdiag/ld-diagram-view.c index 14186ef..e40b55f 100644 --- a/liblogdiag/ld-diagram-view.c +++ b/liblogdiag/ld-diagram-view.c @@ -729,31 +729,34 @@ on_size_allocate (GtkWidget *widget, GtkAllocation *allocation, update_adjustments (self); } +static void +update_adjustment_value (LdDiagramView *self, GtkAdjustment *adjustment, + gdouble value, gdouble page_size) +{ + gtk_adjustment_set_page_size (adjustment, page_size); + g_signal_handlers_block_by_func (adjustment, + on_adjustment_value_changed, self); + gtk_adjustment_set_value (adjustment, value - page_size / 2); + g_signal_handlers_unblock_by_func (adjustment, + on_adjustment_value_changed, self); + gtk_adjustment_changed (adjustment); +} + static void update_adjustments (LdDiagramView *self) { GtkAllocation allocation; - gdouble scale, page_size; + gdouble scale; gtk_widget_get_allocation (GTK_WIDGET (self), &allocation); scale = ld_diagram_view_get_scale_in_px (self); if (self->priv->adjustment_h) - { - page_size = allocation.width / scale; - gtk_adjustment_set_page_size (self->priv->adjustment_h, page_size); - gtk_adjustment_set_value (self->priv->adjustment_h, - self->priv->x - page_size / 2); - gtk_adjustment_changed (self->priv->adjustment_h); - } + update_adjustment_value (self, self->priv->adjustment_h, + self->priv->x, allocation.width / scale); if (self->priv->adjustment_v) - { - page_size = allocation.height / scale; - gtk_adjustment_set_page_size (self->priv->adjustment_v, page_size); - gtk_adjustment_set_value (self->priv->adjustment_v, - self->priv->y - page_size / 2); - gtk_adjustment_changed (self->priv->adjustment_v); - } + update_adjustment_value (self, self->priv->adjustment_v, + self->priv->y, allocation.height / scale); } static void -- cgit v1.2.3-70-g09d2