summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtkcssarrayvalue.c11
-rw-r--r--gtk/gtkcssbgsizevalue.c13
-rw-r--r--gtk/gtkcssbordervalue.c11
-rw-r--r--gtk/gtkcsscomputedvalues.c2
-rw-r--r--gtk/gtkcsscornervalue.c13
-rw-r--r--gtk/gtkcsseasevalue.c7
-rw-r--r--gtk/gtkcssenginevalue.c7
-rw-r--r--gtk/gtkcssenumvalue.c7
-rw-r--r--gtk/gtkcssimagelinear.c6
-rw-r--r--gtk/gtkcssimagevalue.c9
-rw-r--r--gtk/gtkcssinheritvalue.c12
-rw-r--r--gtk/gtkcssinitialvalue.c10
-rw-r--r--gtk/gtkcssnumbervalue.c9
-rw-r--r--gtk/gtkcsspositionvalue.c13
-rw-r--r--gtk/gtkcssrepeatvalue.c7
-rw-r--r--gtk/gtkcssrgbavalue.c7
-rw-r--r--gtk/gtkcssshadowsvalue.c11
-rw-r--r--gtk/gtkcssshadowvalue.c19
-rw-r--r--gtk/gtkcssstringvalue.c7
-rw-r--r--gtk/gtkcsstypedvalue.c9
-rw-r--r--gtk/gtkcsstypesprivate.h10
-rw-r--r--gtk/gtkcssvalue.c20
-rw-r--r--gtk/gtkcssvalueprivate.h6
-rw-r--r--gtk/gtksymboliccolor.c12
24 files changed, 153 insertions, 85 deletions
diff --git a/gtk/gtkcssarrayvalue.c b/gtk/gtkcssarrayvalue.c
index a4fa0f4b62..418ac65598 100644
--- a/gtk/gtkcssarrayvalue.c
+++ b/gtk/gtkcssarrayvalue.c
@@ -41,9 +41,10 @@ gtk_css_value_array_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_array_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context)
+gtk_css_value_array_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleContext *context,
+ GtkCssDependencies *dependencies)
{
GtkCssValue *result;
gboolean changed = FALSE;
@@ -52,10 +53,12 @@ gtk_css_value_array_compute (GtkCssValue *value,
if (value->n_values == 0)
return _gtk_css_value_ref (value);
+ *dependencies = GTK_CSS_DEPENDS_ON_EVERYTHING;
+
result = _gtk_css_array_value_new_from_array (value->values, value->n_values);
for (i = 0; i < value->n_values; i++)
{
- result->values[i] = _gtk_css_value_compute (value->values[i], property_id, context);
+ result->values[i] = _gtk_css_value_compute (value->values[i], property_id, context, NULL);
changed |= (result->values[i] != value->values[i]);
}
diff --git a/gtk/gtkcssbgsizevalue.c b/gtk/gtkcssbgsizevalue.c
index 38f605496e..2bff385b9f 100644
--- a/gtk/gtkcssbgsizevalue.c
+++ b/gtk/gtkcssbgsizevalue.c
@@ -41,15 +41,18 @@ gtk_css_value_bg_size_free (GtkCssValue *value)
}
GtkCssValue *
-gtk_css_value_bg_size_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context)
+gtk_css_value_bg_size_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleContext *context,
+ GtkCssDependencies *dependencies)
{
if (value->x == NULL && value->y == NULL)
return _gtk_css_value_ref (value);
- return _gtk_css_bg_size_value_new (value->x ? _gtk_css_value_compute (value->x, property_id, context) : NULL,
- value->y ? _gtk_css_value_compute (value->y, property_id, context) : NULL);
+ *dependencies = GTK_CSS_DEPENDS_ON_EVERYTHING;
+
+ return _gtk_css_bg_size_value_new (value->x ? _gtk_css_value_compute (value->x, property_id, context, NULL) : NULL,
+ value->y ? _gtk_css_value_compute (value->y, property_id, context, NULL) : NULL);
}
static gboolean
diff --git a/gtk/gtkcssbordervalue.c b/gtk/gtkcssbordervalue.c
index 45f7fd14e4..085e3f2e40 100644
--- a/gtk/gtkcssbordervalue.c
+++ b/gtk/gtkcssbordervalue.c
@@ -42,14 +42,17 @@ gtk_css_value_border_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_border_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context)
+gtk_css_value_border_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleContext *context,
+ GtkCssDependencies *dependencies)
{
GtkCssValue *computed;
gboolean changed = FALSE;
guint i;
+ *dependencies = GTK_CSS_DEPENDS_ON_EVERYTHING;
+
computed = _gtk_css_border_value_new (NULL, NULL, NULL, NULL);
computed->fill = value->fill;
@@ -57,7 +60,7 @@ gtk_css_value_border_compute (GtkCssValue *value,
{
if (value->values[i])
{
- computed->values[i] = _gtk_css_value_compute (value->values[i], property_id, context);
+ computed->values[i] = _gtk_css_value_compute (value->values[i], property_id, context, NULL);
changed |= (computed->values[i] != value->values[i]);
}
}
diff --git a/gtk/gtkcsscomputedvalues.c b/gtk/gtkcsscomputedvalues.c
index 7aa121f023..ad0353046d 100644
--- a/gtk/gtkcsscomputedvalues.c
+++ b/gtk/gtkcsscomputedvalues.c
@@ -113,7 +113,7 @@ _gtk_css_computed_values_compute_value (GtkCssComputedValues *values,
else
_gtk_css_value_ref (specified);
- g_ptr_array_index (values->values, id) = _gtk_css_value_compute (specified, id, context);
+ g_ptr_array_index (values->values, id) = _gtk_css_value_compute (specified, id, context, NULL);
if (section)
{
diff --git a/gtk/gtkcsscornervalue.c b/gtk/gtkcsscornervalue.c
index 7e41688950..8710243aff 100644
--- a/gtk/gtkcsscornervalue.c
+++ b/gtk/gtkcsscornervalue.c
@@ -37,14 +37,17 @@ gtk_css_value_corner_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_corner_compute (GtkCssValue *corner,
- guint property_id,
- GtkStyleContext *context)
+gtk_css_value_corner_compute (GtkCssValue *corner,
+ guint property_id,
+ GtkStyleContext *context,
+ GtkCssDependencies *dependencies)
{
GtkCssValue *x, *y;
- x = _gtk_css_value_compute (corner->x, property_id, context);
- y = _gtk_css_value_compute (corner->y, property_id, context);
+ *dependencies = GTK_CSS_DEPENDS_ON_EVERYTHING;
+
+ x = _gtk_css_value_compute (corner->x, property_id, context, NULL);
+ y = _gtk_css_value_compute (corner->y, property_id, context, NULL);
if (x == corner->x && y == corner->y)
{
_gtk_css_value_unref (x);
diff --git a/gtk/gtkcsseasevalue.c b/gtk/gtkcsseasevalue.c
index 122d6c1299..81c9bce56a 100644
--- a/gtk/gtkcsseasevalue.c
+++ b/gtk/gtkcsseasevalue.c
@@ -50,9 +50,10 @@ gtk_css_value_ease_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_ease_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context)
+gtk_css_value_ease_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleContext *context,
+ GtkCssDependencies *dependencies)
{
return _gtk_css_value_ref (value);
}
diff --git a/gtk/gtkcssenginevalue.c b/gtk/gtkcssenginevalue.c
index 8041090a09..a39ac6c57d 100644
--- a/gtk/gtkcssenginevalue.c
+++ b/gtk/gtkcssenginevalue.c
@@ -35,9 +35,10 @@ gtk_css_value_engine_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_engine_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context)
+gtk_css_value_engine_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleContext *context,
+ GtkCssDependencies *dependencies)
{
return _gtk_css_value_ref (value);
}
diff --git a/gtk/gtkcssenumvalue.c b/gtk/gtkcssenumvalue.c
index fb9c836388..9ea7ae8f01 100644
--- a/gtk/gtkcssenumvalue.c
+++ b/gtk/gtkcssenumvalue.c
@@ -36,9 +36,10 @@ gtk_css_value_enum_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_enum_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context)
+gtk_css_value_enum_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleContext *context,
+ GtkCssDependencies *dependencies)
{
return _gtk_css_value_ref (value);
}
diff --git a/gtk/gtkcssimagelinear.c b/gtk/gtkcssimagelinear.c
index 10977e8ff2..998d3660cf 100644
--- a/gtk/gtkcssimagelinear.c
+++ b/gtk/gtkcssimagelinear.c
@@ -420,7 +420,7 @@ gtk_css_image_linear_compute (GtkCssImage *image,
copy = g_object_new (GTK_TYPE_CSS_IMAGE_LINEAR, NULL);
copy->repeating = linear->repeating;
- copy->angle = _gtk_css_value_compute (linear->angle, property_id, context);
+ copy->angle = _gtk_css_value_compute (linear->angle, property_id, context, NULL);
g_array_set_size (copy->stops, linear->stops->len);
for (i = 0; i < linear->stops->len; i++)
@@ -430,10 +430,10 @@ gtk_css_image_linear_compute (GtkCssImage *image,
stop = &g_array_index (linear->stops, GtkCssImageLinearColorStop, i);
scopy = &g_array_index (copy->stops, GtkCssImageLinearColorStop, i);
- scopy->color = _gtk_css_value_compute (stop->color, property_id, context);
+ scopy->color = _gtk_css_value_compute (stop->color, property_id, context, NULL);
if (stop->offset)
- scopy->offset = _gtk_css_value_compute (stop->offset, property_id, context);
+ scopy->offset = _gtk_css_value_compute (stop->offset, property_id, context, NULL);
else
scopy->offset = NULL;
}
diff --git a/gtk/gtkcssimagevalue.c b/gtk/gtkcssimagevalue.c
index 5cd4929234..e56db9d476 100644
--- a/gtk/gtkcssimagevalue.c
+++ b/gtk/gtkcssimagevalue.c
@@ -34,9 +34,10 @@ gtk_css_value_image_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_image_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context)
+gtk_css_value_image_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleContext *context,
+ GtkCssDependencies *dependencies)
{
GtkCssImage *image, *computed;
@@ -53,6 +54,8 @@ gtk_css_value_image_compute (GtkCssValue *value,
return _gtk_css_value_ref (value);
}
+ *dependencies = GTK_CSS_DEPENDS_ON_EVERYTHING;
+
return _gtk_css_image_value_new (computed);
}
diff --git a/gtk/gtkcssinheritvalue.c b/gtk/gtkcssinheritvalue.c
index 6faeef3c84..58964be240 100644
--- a/gtk/gtkcssinheritvalue.c
+++ b/gtk/gtkcssinheritvalue.c
@@ -34,18 +34,22 @@ gtk_css_value_inherit_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_inherit_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context)
+gtk_css_value_inherit_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleContext *context,
+ GtkCssDependencies *dependencies)
{
GtkStyleContext *parent = gtk_style_context_get_parent (context);
+ *dependencies = GTK_CSS_DEPENDS_ON_EVERYTHING;
+
if (parent)
return _gtk_css_value_ref (_gtk_style_context_peek_property (parent, property_id));
else
return _gtk_css_value_compute (_gtk_css_style_property_get_initial_value (_gtk_css_style_property_lookup_by_id (property_id)),
property_id,
- context);
+ context,
+ NULL);
}
static gboolean
diff --git a/gtk/gtkcssinitialvalue.c b/gtk/gtkcssinitialvalue.c
index 7bebbc87d7..45cadd7c17 100644
--- a/gtk/gtkcssinitialvalue.c
+++ b/gtk/gtkcssinitialvalue.c
@@ -33,13 +33,15 @@ gtk_css_value_initial_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_initial_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context)
+gtk_css_value_initial_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleContext *context,
+ GtkCssDependencies *dependencies)
{
return _gtk_css_value_compute (_gtk_css_style_property_get_initial_value (_gtk_css_style_property_lookup_by_id (property_id)),
property_id,
- context);
+ context,
+ dependencies);
}
static gboolean
diff --git a/gtk/gtkcssnumbervalue.c b/gtk/gtkcssnumbervalue.c
index 479662c22b..535c20587f 100644
--- a/gtk/gtkcssnumbervalue.c
+++ b/gtk/gtkcssnumbervalue.c
@@ -35,9 +35,10 @@ gtk_css_value_number_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_number_compute (GtkCssValue *number,
- guint property_id,
- GtkStyleContext *context)
+gtk_css_value_number_compute (GtkCssValue *number,
+ guint property_id,
+ GtkStyleContext *context,
+ GtkCssDependencies *dependencies)
{
GtkBorderStyle border_style;
@@ -73,6 +74,8 @@ gtk_css_value_number_compute (GtkCssValue *number,
break;
}
+ *dependencies = GTK_CSS_DEPENDS_ON_EVERYTHING;
+
switch (number->unit)
{
default:
diff --git a/gtk/gtkcsspositionvalue.c b/gtk/gtkcsspositionvalue.c
index 9f4b0d3f0a..6a6cbe3828 100644
--- a/gtk/gtkcsspositionvalue.c
+++ b/gtk/gtkcsspositionvalue.c
@@ -37,14 +37,15 @@ gtk_css_value_position_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_position_compute (GtkCssValue *position,
- guint property_id,
- GtkStyleContext *context)
+gtk_css_value_position_compute (GtkCssValue *position,
+ guint property_id,
+ GtkStyleContext *context,
+ GtkCssDependencies *dependencies)
{
GtkCssValue *x, *y;
- x = _gtk_css_value_compute (position->x, property_id, context);
- y = _gtk_css_value_compute (position->y, property_id, context);
+ x = _gtk_css_value_compute (position->x, property_id, context, NULL);
+ y = _gtk_css_value_compute (position->y, property_id, context, NULL);
if (x == position->x && y == position->y)
{
_gtk_css_value_unref (x);
@@ -52,6 +53,8 @@ gtk_css_value_position_compute (GtkCssValue *position,
return _gtk_css_value_ref (position);
}
+ *dependencies = GTK_CSS_DEPENDS_ON_EVERYTHING;
+
return _gtk_css_position_value_new (x, y);
}
diff --git a/gtk/gtkcssrepeatvalue.c b/gtk/gtkcssrepeatvalue.c
index 97fe41f349..6f070727e8 100644
--- a/gtk/gtkcssrepeatvalue.c
+++ b/gtk/gtkcssrepeatvalue.c
@@ -34,9 +34,10 @@ gtk_css_value_repeat_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_repeat_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context)
+gtk_css_value_repeat_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleContext *context,
+ GtkCssDependencies *dependencies)
{
return _gtk_css_value_ref (value);
}
diff --git a/gtk/gtkcssrgbavalue.c b/gtk/gtkcssrgbavalue.c
index 7a641a3a77..3bb6897d13 100644
--- a/gtk/gtkcssrgbavalue.c
+++ b/gtk/gtkcssrgbavalue.c
@@ -35,9 +35,10 @@ gtk_css_value_rgba_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_rgba_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context)
+gtk_css_value_rgba_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleContext *context,
+ GtkCssDependencies *dependencies)
{
return _gtk_css_value_ref (value);
}
diff --git a/gtk/gtkcssshadowsvalue.c b/gtk/gtkcssshadowsvalue.c
index 387076eb38..ce37d86b4d 100644
--- a/gtk/gtkcssshadowsvalue.c
+++ b/gtk/gtkcssshadowsvalue.c
@@ -48,9 +48,10 @@ gtk_css_value_shadows_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_shadows_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context)
+gtk_css_value_shadows_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleContext *context,
+ GtkCssDependencies *dependencies)
{
GtkCssValue *result;
guint i;
@@ -58,10 +59,12 @@ gtk_css_value_shadows_compute (GtkCssValue *value,
if (value->len == 0)
return _gtk_css_value_ref (value);
+ *dependencies = GTK_CSS_DEPENDS_ON_EVERYTHING;
+
result = gtk_css_shadows_value_new (value->values, value->len);
for (i = 0; i < value->len; i++)
{
- result->values[i] = _gtk_css_value_compute (value->values[i], property_id, context);
+ result->values[i] = _gtk_css_value_compute (value->values[i], property_id, context, NULL);
}
return result;
diff --git a/gtk/gtkcssshadowvalue.c b/gtk/gtkcssshadowvalue.c
index 3351d6f8dd..9b2d897aea 100644
--- a/gtk/gtkcssshadowvalue.c
+++ b/gtk/gtkcssshadowvalue.c
@@ -60,16 +60,19 @@ gtk_css_value_shadow_free (GtkCssValue *shadow)
}
static GtkCssValue *
-gtk_css_value_shadow_compute (GtkCssValue *shadow,
- guint property_id,
- GtkStyleContext *context)
+gtk_css_value_shadow_compute (GtkCssValue *shadow,
+ guint property_id,
+ GtkStyleContext *context,
+ GtkCssDependencies *dependencies)
{
- return gtk_css_shadow_value_new (_gtk_css_value_compute (shadow->hoffset, property_id, context),
- _gtk_css_value_compute (shadow->voffset, property_id, context),
- _gtk_css_value_compute (shadow->radius, property_id, context),
- _gtk_css_value_compute (shadow->spread, property_id, context),
+ *dependencies = GTK_CSS_DEPENDS_ON_EVERYTHING;
+
+ return gtk_css_shadow_value_new (_gtk_css_value_compute (shadow->hoffset, property_id, context, NULL),
+ _gtk_css_value_compute (shadow->voffset, property_id, context, NULL),
+ _gtk_css_value_compute (shadow->radius, property_id, context, NULL),
+ _gtk_css_value_compute (shadow->spread, property_id, context, NULL),
shadow->inset,
- _gtk_css_value_compute (shadow->color, property_id, context));
+ _gtk_css_value_compute (shadow->color, property_id, context, NULL));
}
static gboolean
diff --git a/gtk/gtkcssstringvalue.c b/gtk/gtkcssstringvalue.c
index 2bc140dd97..328fd21dc5 100644
--- a/gtk/gtkcssstringvalue.c
+++ b/gtk/gtkcssstringvalue.c
@@ -33,9 +33,10 @@ gtk_css_value_string_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_string_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context)
+gtk_css_value_string_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleContext *context,
+ GtkCssDependencies *dependencies)
{
return _gtk_css_value_ref (value);
}
diff --git a/gtk/gtkcsstypedvalue.c b/gtk/gtkcsstypedvalue.c
index 60eeea8c68..fd8f0ad925 100644
--- a/gtk/gtkcsstypedvalue.c
+++ b/gtk/gtkcsstypedvalue.c
@@ -35,12 +35,15 @@ gtk_css_value_typed_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_typed_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context)
+gtk_css_value_typed_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleContext *context,
+ GtkCssDependencies *dependencies)
{
GtkCssCustomProperty *custom = GTK_CSS_CUSTOM_PROPERTY (_gtk_css_style_property_lookup_by_id (property_id));
+ *dependencies = GTK_CSS_DEPENDS_ON_EVERYTHING;
+
return _gtk_css_style_compute_value (context, custom->pspec->value_type, value);
}
diff --git a/gtk/gtkcsstypesprivate.h b/gtk/gtkcsstypesprivate.h
index b0db18d0b9..dfc9527e0d 100644
--- a/gtk/gtkcsstypesprivate.h
+++ b/gtk/gtkcsstypesprivate.h
@@ -56,6 +56,16 @@ typedef enum { /*< skip >*/
GTK_CSS_CHANGE_PARENT_POSITION | GTK_CSS_CHANGE_PARENT_SIBLING_POSITION | \
GTK_CSS_CHANGE_PARENT_STATE | GTK_CSS_CHANGE_PARENT_SIBLING_STATE)
+typedef enum /*< skip >*/ {
+ GTK_CSS_DEPENDS_ON_PARENT = (1 << 0),
+ GTK_CSS_EQUALS_PARENT = (1 << 1),
+ GTK_CSS_DEPENDS_ON_COLOR = (1 << 2),
+ GTK_CSS_DEPENDS_ON_FONT_SIZE = (1 << 3)
+} GtkCssDependencies;
+
+#define GTK_CSS_DEPENDS_ON_EVERYTHING (GTK_CSS_DEPENDS_ON_PARENT | GTK_CSS_EQUALS_PARENT \
+ | GTK_CSS_DEPENDS_ON_COLOR | GTK_CSS_DEPENDS_ON_FONT_SIZE)
+
enum { /*< skip >*/
GTK_CSS_PROPERTY_COLOR,
GTK_CSS_PROPERTY_FONT_SIZE,
diff --git a/gtk/gtkcssvalue.c b/gtk/gtkcssvalue.c
index 5d5d39227f..e057f90b50 100644
--- a/gtk/gtkcssvalue.c
+++ b/gtk/gtkcssvalue.c
@@ -66,6 +66,9 @@ _gtk_css_value_unref (GtkCssValue *value)
* @value: the value to compute from
* @property_id: the ID of the property to compute
* @context: the context to use for resolving
+ * @dependencies: (out) (allow-none): Set to the dependencies of the
+ * computed values that indicate when this value needs to be
+ * recomputed and how.
*
* Converts the specified @value into the computed value for the CSS
* property given by @property_id using the information in @context.
@@ -73,17 +76,24 @@ _gtk_css_value_unref (GtkCssValue *value)
* <ulink url="http://www.w3.org/TR/css3-cascade/#computed>
* the CSS documentation</ulink>.
*
- * Returns: the comptued value
+ * Returns: the computed value
**/
GtkCssValue *
-_gtk_css_value_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context)
+_gtk_css_value_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleContext *context,
+ GtkCssDependencies *dependencies)
{
+ GtkCssDependencies fallback;
+
g_return_val_if_fail (value != NULL, NULL);
g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), NULL);
- return value->class->compute (value, property_id, context);
+ if (dependencies == NULL)
+ dependencies = &fallback;
+ *dependencies = 0;
+
+ return value->class->compute (value, property_id, context, dependencies);
}
gboolean
diff --git a/gtk/gtkcssvalueprivate.h b/gtk/gtkcssvalueprivate.h
index 74550f794e..629cc754b2 100644
--- a/gtk/gtkcssvalueprivate.h
+++ b/gtk/gtkcssvalueprivate.h
@@ -44,7 +44,8 @@ struct _GtkCssValueClass {
GtkCssValue * (* compute) (GtkCssValue *value,
guint property_id,
- GtkStyleContext *context);
+ GtkStyleContext *context,
+ GtkCssDependencies *dependencies);
gboolean (* equal) (const GtkCssValue *value1,
const GtkCssValue *value2);
GtkCssValue * (* transition) (GtkCssValue *start,
@@ -65,7 +66,8 @@ void _gtk_css_value_unref (GtkCssValue
GtkCssValue *_gtk_css_value_compute (GtkCssValue *value,
guint property_id,
- GtkStyleContext *context);
+ GtkStyleContext *context,
+ GtkCssDependencies *dependencies);
gboolean _gtk_css_value_equal (const GtkCssValue *value1,
const GtkCssValue *value2);
gboolean _gtk_css_value_equal0 (const GtkCssValue *value1,
diff --git a/gtk/gtksymboliccolor.c b/gtk/gtksymboliccolor.c
index 8429bbc67b..9fcfd4957e 100644
--- a/gtk/gtksymboliccolor.c
+++ b/gtk/gtksymboliccolor.c
@@ -142,7 +142,8 @@ gtk_css_value_symbolic_get_fallback (guint property_id,
case GTK_CSS_PROPERTY_OUTLINE_COLOR:
return _gtk_css_value_compute (_gtk_css_style_property_get_initial_value (_gtk_css_style_property_lookup_by_id (property_id)),
property_id,
- context);
+ context,
+ NULL);
default:
if (property_id < GTK_CSS_PROPERTY_N_PROPERTIES)
g_warning ("No fallback color defined for property '%s'",
@@ -152,12 +153,15 @@ gtk_css_value_symbolic_get_fallback (guint property_id,
}
static GtkCssValue *
-gtk_css_value_symbolic_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context)
+gtk_css_value_symbolic_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleContext *context,
+ GtkCssDependencies *dependencies)
{
GtkCssValue *resolved, *current;
+ *dependencies = GTK_CSS_DEPENDS_ON_EVERYTHING;
+
/* The computed value of the ‘currentColor’ keyword is the computed
* value of the ‘color’ property. If the ‘currentColor’ keyword is
* set on the ‘color’ property itself, it is treated as ‘color: inherit’.