diff --git a/gtk/gtkcssanimatedstyle.c b/gtk/gtkcssanimatedstyle.c index 82cf1acbe9..1ea4918101 100644 --- a/gtk/gtkcssanimatedstyle.c +++ b/gtk/gtkcssanimatedstyle.c @@ -645,15 +645,20 @@ gtk_css_animated_style_get_intrinsic_value (GtkCssAnimatedStyle *style, return gtk_css_style_get_value (style->style, id); } -void +gboolean gtk_css_animated_style_set_animated_custom_value (GtkCssAnimatedStyle *animated, int id, GtkCssVariableValue *value) { GtkCssStyle *style = (GtkCssStyle *)animated; + GtkCssVariableValue *old_value; - gtk_internal_return_if_fail (GTK_IS_CSS_ANIMATED_STYLE (style)); - gtk_internal_return_if_fail (value != NULL); + gtk_internal_return_val_if_fail (GTK_IS_CSS_ANIMATED_STYLE (style), FALSE); + gtk_internal_return_val_if_fail (value != NULL, FALSE); + + old_value = gtk_css_style_get_custom_property (style, id); + if (gtk_css_value_equal0 ((GtkCssValue *) old_value, (GtkCssValue *) value)) + return FALSE; if (style->variables == NULL) { @@ -669,6 +674,8 @@ gtk_css_animated_style_set_animated_custom_value (GtkCssAnimatedStyle *animated, } gtk_css_variable_set_add (style->variables, id, value); + + return TRUE; } void diff --git a/gtk/gtkcssanimatedstyleprivate.h b/gtk/gtkcssanimatedstyleprivate.h index ada5ad75f8..2c8420e7bc 100644 --- a/gtk/gtkcssanimatedstyleprivate.h +++ b/gtk/gtkcssanimatedstyleprivate.h @@ -70,7 +70,7 @@ void gtk_css_animated_style_set_animated_value(GtkCssAnimated GtkCssValue * gtk_css_animated_style_get_intrinsic_value (GtkCssAnimatedStyle *style, guint id); -void gtk_css_animated_style_set_animated_custom_value (GtkCssAnimatedStyle *animated, +gboolean gtk_css_animated_style_set_animated_custom_value (GtkCssAnimatedStyle *animated, int id, GtkCssVariableValue *value); diff --git a/gtk/gtkcssanimation.c b/gtk/gtkcssanimation.c index d920d4d71a..7c09a370b0 100644 --- a/gtk/gtkcssanimation.c +++ b/gtk/gtkcssanimation.c @@ -126,11 +126,10 @@ gtk_css_animation_apply_values (GtkStyleAnimation *style_animation, if (!value) continue; - gtk_css_animated_style_set_animated_custom_value (style, variable_id, value); + if (gtk_css_animated_style_set_animated_custom_value (style, variable_id, value)) + change |= GTK_CSS_ANIMATION_CHANGE_VARIABLES; gtk_css_variable_value_unref (value); - - change |= GTK_CSS_ANIMATION_CHANGE_VARIABLES; } for (i = 0; i < _gtk_css_keyframes_get_n_properties (resolved_keyframes); i++)