]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkcssarrayvalue.c
gtkfilechooserbutton: In tests, allow the possibility of doing unselect_all
[~andy/gtk] / gtk / gtkcssarrayvalue.c
index dadedba90d479769d1ae10ba6ecdb753e2c3f68b..45f1fb2c21e70a61a406e7ad3dd0b699196c3271 100644 (file)
@@ -43,34 +43,41 @@ gtk_css_value_array_free (GtkCssValue *value)
 }
 
 static GtkCssValue *
-gtk_css_value_array_compute (GtkCssValue        *value,
-                             guint               property_id,
-                             GtkStyleContext    *context,
-                             GtkCssDependencies *dependencies)
+gtk_css_value_array_compute (GtkCssValue             *value,
+                             guint                    property_id,
+                             GtkStyleProviderPrivate *provider,
+                             GtkCssComputedValues    *values,
+                             GtkCssComputedValues    *parent_values,
+                             GtkCssDependencies      *dependencies)
 {
   GtkCssValue *result;
-  gboolean changed = FALSE;
-  guint i;
+  GtkCssValue *i_value;
+  guint i, j;
   GtkCssDependencies child_deps;
 
-  if (value->n_values == 0)
-    return _gtk_css_value_ref (value);
-
-  result = _gtk_css_array_value_new_from_array (value->values, value->n_values);
+  result = NULL;
   for (i = 0; i < value->n_values; i++)
     {
-      result->values[i] = _gtk_css_value_compute (value->values[i], property_id, context, &child_deps);
+      i_value =  _gtk_css_value_compute (value->values[i], property_id, provider, values, parent_values, &child_deps);
 
       *dependencies = _gtk_css_dependencies_union (*dependencies, child_deps);
 
-      changed |= (result->values[i] != value->values[i]);
+      if (result == NULL &&
+         i_value != value->values[i])
+       {
+         result = _gtk_css_array_value_new_from_array (value->values, value->n_values);
+         for (j = 0; j < i; j++)
+           _gtk_css_value_ref (result->values[j]);
+       }
+
+      if (result != NULL)
+       result->values[i] = i_value;
+      else
+       _gtk_css_value_unref (i_value);
     }
 
-  if (!changed)
-    {
-      _gtk_css_value_unref (result);
-      return _gtk_css_value_ref (value);
-    }
+  if (result == NULL)
+    return _gtk_css_value_ref (value);
 
   return result;
 }