diff options
author | Benjamin Otte <otte@redhat.com> | 2011-12-20 08:52:54 +0100 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2012-01-09 18:37:56 +0100 |
commit | 950b95af403312b1b498c725a6082406bf4d69b9 (patch) | |
tree | 0c975a5638c35b22032f27113a12fc322de7aa97 /gtk/gtkcssimage.c | |
parent | 38be9fe879e521edf928539e4a10406f3f0e47df (diff) | |
download | gtk+-950b95af403312b1b498c725a6082406bf4d69b9.tar.gz |
cssimage: Improve new_parse() to select right image type
Diffstat (limited to 'gtk/gtkcssimage.c')
-rw-r--r-- | gtk/gtkcssimage.c | 35 |
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; } |