Make gtk_style_context_get_* functions more robust

Even if the default CSS contains values for these, handle non-existing
values as queries might happen on an incomplete style.
This commit is contained in:
Carlos Garnacho 2010-12-21 14:42:06 +01:00
parent e36ba3465b
commit ac0353e08a

View File

@ -499,6 +499,8 @@ enum {
static guint signals[LAST_SIGNAL] = { 0 }; static guint signals[LAST_SIGNAL] = { 0 };
static GQuark provider_list_quark = 0; static GQuark provider_list_quark = 0;
static GdkRGBA fallback_color = { 1.0, 0.75, 0.75, 1.0 };
static GtkBorder fallback_border = { 0 };
static void gtk_style_context_finalize (GObject *object); static void gtk_style_context_finalize (GObject *object);
@ -3192,6 +3194,9 @@ gtk_style_context_get_color (GtkStyleContext *context,
const GValue *value; const GValue *value;
GdkRGBA *c; GdkRGBA *c;
g_return_if_fail (color != NULL);
*color = fallback_color;
g_return_if_fail (GTK_IS_STYLE_CONTEXT (context)); g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
priv = context->priv; priv = context->priv;
@ -3200,9 +3205,13 @@ gtk_style_context_get_color (GtkStyleContext *context,
data = style_data_lookup (context); data = style_data_lookup (context);
value = _gtk_style_properties_peek_property (data->store, value = _gtk_style_properties_peek_property (data->store,
"color", state); "color", state);
if (value)
{
c = g_value_get_boxed (value); c = g_value_get_boxed (value);
*color = *c; *color = *c;
} }
}
/** /**
* gtk_style_context_get_background_color: * gtk_style_context_get_background_color:
@ -3224,6 +3233,9 @@ gtk_style_context_get_background_color (GtkStyleContext *context,
const GValue *value; const GValue *value;
GdkRGBA *c; GdkRGBA *c;
g_return_if_fail (color != NULL);
*color = fallback_color;
g_return_if_fail (GTK_IS_STYLE_CONTEXT (context)); g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
priv = context->priv; priv = context->priv;
@ -3232,9 +3244,13 @@ gtk_style_context_get_background_color (GtkStyleContext *context,
data = style_data_lookup (context); data = style_data_lookup (context);
value = _gtk_style_properties_peek_property (data->store, value = _gtk_style_properties_peek_property (data->store,
"background-color", state); "background-color", state);
if (value)
{
c = g_value_get_boxed (value); c = g_value_get_boxed (value);
*color = *c; *color = *c;
} }
}
/** /**
* gtk_style_context_get_border_color: * gtk_style_context_get_border_color:
@ -3256,6 +3272,9 @@ gtk_style_context_get_border_color (GtkStyleContext *context,
const GValue *value; const GValue *value;
GdkRGBA *c; GdkRGBA *c;
g_return_if_fail (color != NULL);
*color = fallback_color;
g_return_if_fail (GTK_IS_STYLE_CONTEXT (context)); g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
priv = context->priv; priv = context->priv;
@ -3264,9 +3283,13 @@ gtk_style_context_get_border_color (GtkStyleContext *context,
data = style_data_lookup (context); data = style_data_lookup (context);
value = _gtk_style_properties_peek_property (data->store, value = _gtk_style_properties_peek_property (data->store,
"border-color", state); "border-color", state);
if (value)
{
c = g_value_get_boxed (value); c = g_value_get_boxed (value);
*color = *c; *color = *c;
} }
}
/** /**
* gtk_style_context_get_border: * gtk_style_context_get_border:
@ -3288,6 +3311,9 @@ gtk_style_context_get_border (GtkStyleContext *context,
const GValue *value; const GValue *value;
GtkBorder *b; GtkBorder *b;
g_return_if_fail (border != NULL);
*border = fallback_border;
g_return_if_fail (GTK_IS_STYLE_CONTEXT (context)); g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
priv = context->priv; priv = context->priv;
@ -3296,9 +3322,13 @@ gtk_style_context_get_border (GtkStyleContext *context,
data = style_data_lookup (context); data = style_data_lookup (context);
value = _gtk_style_properties_peek_property (data->store, value = _gtk_style_properties_peek_property (data->store,
"border-width", state); "border-width", state);
if (value)
{
b = g_value_get_boxed (value); b = g_value_get_boxed (value);
*border = *b; *border = *b;
} }
}
/** /**
* gtk_style_context_get_padding: * gtk_style_context_get_padding:
@ -3320,6 +3350,9 @@ gtk_style_context_get_padding (GtkStyleContext *context,
const GValue *value; const GValue *value;
GtkBorder *b; GtkBorder *b;
g_return_if_fail (padding != NULL);
*padding = fallback_border;
g_return_if_fail (GTK_IS_STYLE_CONTEXT (context)); g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
priv = context->priv; priv = context->priv;
@ -3328,9 +3361,13 @@ gtk_style_context_get_padding (GtkStyleContext *context,
data = style_data_lookup (context); data = style_data_lookup (context);
value = _gtk_style_properties_peek_property (data->store, value = _gtk_style_properties_peek_property (data->store,
"padding", state); "padding", state);
if (value)
{
b = g_value_get_boxed (value); b = g_value_get_boxed (value);
*padding = *b; *padding = *b;
} }
}
/** /**
* gtk_style_context_get_margin: * gtk_style_context_get_margin:
@ -3352,6 +3389,9 @@ gtk_style_context_get_margin (GtkStyleContext *context,
const GValue *value; const GValue *value;
GtkBorder *b; GtkBorder *b;
g_return_if_fail (margin != NULL);
*margin = fallback_border;
g_return_if_fail (GTK_IS_STYLE_CONTEXT (context)); g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
priv = context->priv; priv = context->priv;
@ -3360,9 +3400,13 @@ gtk_style_context_get_margin (GtkStyleContext *context,
data = style_data_lookup (context); data = style_data_lookup (context);
value = _gtk_style_properties_peek_property (data->store, value = _gtk_style_properties_peek_property (data->store,
"margin", state); "margin", state);
if (value)
{
b = g_value_get_boxed (value); b = g_value_get_boxed (value);
*margin = *b; *margin = *b;
} }
}
/** /**
* gtk_style_context_get_font: * gtk_style_context_get_font:
@ -3393,7 +3437,11 @@ gtk_style_context_get_font (GtkStyleContext *context,
data = style_data_lookup (context); data = style_data_lookup (context);
value = _gtk_style_properties_peek_property (data->store, "font", state); value = _gtk_style_properties_peek_property (data->store, "font", state);
if (value)
return g_value_get_boxed (value); return g_value_get_boxed (value);
return NULL;
} }
/* Paint methods */ /* Paint methods */