summaryrefslogtreecommitdiff
path: root/gtk/gtkcssimage.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2011-12-20 08:52:54 +0100
committerBenjamin Otte <otte@redhat.com>2012-01-09 18:37:56 +0100
commit950b95af403312b1b498c725a6082406bf4d69b9 (patch)
tree0c975a5638c35b22032f27113a12fc322de7aa97 /gtk/gtkcssimage.c
parent38be9fe879e521edf928539e4a10406f3f0e47df (diff)
downloadgtk+-950b95af403312b1b498c725a6082406bf4d69b9.tar.gz
cssimage: Improve new_parse() to select right image type
Diffstat (limited to 'gtk/gtkcssimage.c')
-rw-r--r--gtk/gtkcssimage.c35
1 files changed, 26 insertions, 9 deletions
diff --git a/gtk/gtkcssimage.c b/gtk/gtkcssimage.c
index e46706cbf2..968ab7df3b 100644
--- a/gtk/gtkcssimage.c
+++ b/gtk/gtkcssimage.c
@@ -162,21 +162,38 @@ GtkCssImage *
_gtk_css_image_new_parse (GtkCssParser *parser,
GFile *base)
{
- GtkCssImage *image;
- GtkCssImageClass *klass;
+ static const struct {
+ const char *prefix;
+ GType (* type_func) (void);
+ } image_types[] = {
+ { "url", _gtk_css_image_url_get_type }
+ };
+ guint i;
g_return_val_if_fail (parser != NULL, NULL);
g_return_val_if_fail (G_IS_FILE (base), NULL);
- image = g_object_new (GTK_TYPE_CSS_IMAGE_URL, NULL);
-
- klass = GTK_CSS_IMAGE_GET_CLASS (image);
- if (!klass->parse (image, parser, base))
+ for (i = 0; i < G_N_ELEMENTS (image_types); i++)
{
- g_object_unref (image);
- return NULL;
+ if (_gtk_css_parser_has_prefix (parser, image_types[i].prefix))
+ {
+ GtkCssImage *image;
+ GtkCssImageClass *klass;
+
+ image = g_object_new (image_types[i].type_func (), NULL);
+
+ klass = GTK_CSS_IMAGE_GET_CLASS (image);
+ if (!klass->parse (image, parser, base))
+ {
+ g_object_unref (image);
+ return NULL;
+ }
+
+ return image;
+ }
}
- return image;
+ _gtk_css_parser_error (parser, "Not a valid image");
+ return NULL;
}