X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkcsskeyframes.c;h=dc214b28096939c28be539ce62df1a1f4688bd47;hb=3c04597306a918317cb96d6c267fc73a798c04e4;hp=f9098715946cf8dfbd1bdc55b603aa3f7b67215d;hpb=1454ba15baa2e3378c48566746de3f41da6cde95;p=~andy%2Fgtk diff --git a/gtk/gtkcsskeyframes.c b/gtk/gtkcsskeyframes.c index f90987159..dc214b280 100644 --- a/gtk/gtkcsskeyframes.c +++ b/gtk/gtkcsskeyframes.c @@ -36,6 +36,8 @@ struct _GtkCssKeyframes { GtkCssValue **values; /* 2D array: n_keyframes * n_properties of (value or NULL) for all the keyframes */ }; +#define KEYFRAMES_VALUE(keyframes, k, p) ((keyframes)->values[(k) * (keyframes)->n_properties + (p)]) + GtkCssKeyframes * _gtk_css_keyframes_ref (GtkCssKeyframes *keyframes) { @@ -49,6 +51,8 @@ _gtk_css_keyframes_ref (GtkCssKeyframes *keyframes) void _gtk_css_keyframes_unref (GtkCssKeyframes *keyframes) { + guint k, p; + g_return_if_fail (keyframes != NULL); keyframes->ref_count--; @@ -57,13 +61,20 @@ _gtk_css_keyframes_unref (GtkCssKeyframes *keyframes) g_free (keyframes->keyframe_progress); g_free (keyframes->property_ids); + + for (k = 0; k < keyframes->n_keyframes; k++) + { + for (p = 0; p < keyframes->n_properties; p++) + { + _gtk_css_value_unref (KEYFRAMES_VALUE (keyframes, k, p)); + KEYFRAMES_VALUE (keyframes, k, p) = NULL; + } + } g_free (keyframes->values); g_slice_free (GtkCssKeyframes, keyframes); } -#define KEYFRAMES_VALUE(keyframes, k, p) ((keyframes)->values[(k) * (keyframes)->n_properties + (p)]) - static guint gtk_css_keyframes_add_keyframe (GtkCssKeyframes *keyframes, double progress)