]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkcsskeyframes.c
filechooserbutton: Give proper names to the SELECT_FOLDER tests with cancelled dialog
[~andy/gtk] / gtk / gtkcsskeyframes.c
index f25ccef3f209e439d20e9c19a85d20b2e1b3dea6..dc214b28096939c28be539ce62df1a1f4688bd47 100644 (file)
@@ -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)
@@ -414,14 +425,18 @@ _gtk_css_keyframes_print (GtkCssKeyframes *keyframes,
 }
 
 GtkCssKeyframes *
-_gtk_css_keyframes_compute (GtkCssKeyframes *keyframes,
-                            GtkStyleContext *context)
+_gtk_css_keyframes_compute (GtkCssKeyframes         *keyframes,
+                            GtkStyleProviderPrivate *provider,
+                            GtkCssComputedValues    *values,
+                            GtkCssComputedValues    *parent_values)
 {
   GtkCssKeyframes *resolved;
   guint k, p;
 
   g_return_val_if_fail (keyframes != NULL, NULL);
-  g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), NULL);
+  g_return_val_if_fail (GTK_IS_STYLE_PROVIDER_PRIVATE (provider), NULL);
+  g_return_val_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values), NULL);
+  g_return_val_if_fail (parent_values == NULL || GTK_IS_CSS_COMPUTED_VALUES (parent_values), NULL);
 
   resolved = gtk_css_keyframes_new ();
   resolved->n_keyframes = keyframes->n_keyframes;
@@ -439,7 +454,9 @@ _gtk_css_keyframes_compute (GtkCssKeyframes *keyframes,
 
           KEYFRAMES_VALUE (resolved, k, p) =  _gtk_css_value_compute (KEYFRAMES_VALUE (keyframes, k, p),
                                                                       resolved->property_ids[p],
-                                                                      context,
+                                                                      provider,
+                                                                      values,
+                                                                      parent_values,
                                                                       NULL);
         }
     }