diff --git a/gtk/gtkadjustment.c b/gtk/gtkadjustment.c index 74541a8843..88a02a5a66 100644 --- a/gtk/gtkadjustment.c +++ b/gtk/gtkadjustment.c @@ -1017,3 +1017,9 @@ gtk_adjustment_get_animation_duration (GtkAdjustment *adjustment) { return adjustment->priv->duration; } + +gboolean +gtk_adjustment_is_animating (GtkAdjustment *adjustment) +{ + return adjustment->priv->tick_id != 0; +} diff --git a/gtk/gtkadjustmentprivate.h b/gtk/gtkadjustmentprivate.h index 3d9ba4c76c..c0884448a7 100644 --- a/gtk/gtkadjustmentprivate.h +++ b/gtk/gtkadjustmentprivate.h @@ -32,6 +32,8 @@ void gtk_adjustment_animate_to_value (GtkAdjustment *adjustment, gdouble value); gdouble gtk_adjustment_get_target_value (GtkAdjustment *adjustment); +gboolean gtk_adjustment_is_animating (GtkAdjustment *adjustment); + G_END_DECLS diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c index 1a01582a71..4283f24a77 100644 --- a/gtk/gtktextview.c +++ b/gtk/gtktextview.c @@ -3887,8 +3887,10 @@ gtk_text_view_size_allocate (GtkWidget *widget, gtk_text_view_allocate_children (text_view); /* Update adjustments */ - gtk_text_view_set_hadjustment_values (text_view); - gtk_text_view_set_vadjustment_values (text_view); + if (!gtk_adjustment_is_animating (priv->hadjustment)) + gtk_text_view_set_hadjustment_values (text_view); + if (!gtk_adjustment_is_animating (priv->vadjustment)) + gtk_text_view_set_vadjustment_values (text_view); /* The GTK resize loop processes all the pending exposes right * after doing the resize stuff, so the idle sizer won't have a