diff options
author | Timm Bäder <mail@baedert.org> | 2020-09-23 06:06:42 +0200 |
---|---|---|
committer | Timm Bäder <mail@baedert.org> | 2020-09-24 19:08:22 +0200 |
commit | 484dcc043bc58e8c2fc650c76faec6490b5097fb (patch) | |
tree | 4a2aa655eabdd1ce8449e7ed8a9a5876bc00bb6a /gtk/gtkcssimagefallback.c | |
parent | 716b5afe6a40ef8c1f7d7e05c35e330bbe7e9d9e (diff) | |
download | gtk+-484dcc043bc58e8c2fc650c76faec6490b5097fb.tar.gz |
cssimagefallback: Avoid allocating GPtrArray for colors
If we just parse a color, like image(#FFF), avoid allocating the
GPtrArray to store images. This happens in Adwaita for background images
of backdrop buttons. We save around 70 GPtrArrays this way.
Diffstat (limited to 'gtk/gtkcssimagefallback.c')
-rw-r--r-- | gtk/gtkcssimagefallback.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/gtk/gtkcssimagefallback.c b/gtk/gtkcssimagefallback.c index c6549c6bd4..4d320a395d 100644 --- a/gtk/gtkcssimagefallback.c +++ b/gtk/gtkcssimagefallback.c @@ -209,6 +209,9 @@ gtk_css_image_fallback_parse_arg (GtkCssParser *parser, if (image == NULL) return 0; + if (!data->images) + data->images = g_ptr_array_new_with_free_func (g_object_unref); + g_ptr_array_add (data->images, image); return 1; } @@ -235,18 +238,25 @@ gtk_css_image_fallback_parse (GtkCssImage *image, return FALSE; } - data.images = g_ptr_array_new_with_free_func (g_object_unref); - if (!gtk_css_parser_consume_function (parser, 1, G_MAXUINT, gtk_css_image_fallback_parse_arg, &data)) { g_clear_pointer (&data.color, _gtk_css_value_unref); - g_ptr_array_free (data.images, TRUE); + if (data.images) + g_ptr_array_free (data.images, TRUE); return FALSE; } self->color = data.color; - self->n_images = data.images->len; - self->images = (GtkCssImage **) g_ptr_array_free (data.images, FALSE); + if (data.images) + { + self->n_images = data.images->len; + self->images = (GtkCssImage **) g_ptr_array_free (data.images, FALSE); + } + else + { + self->n_images = 0; + self->images = NULL; + } return TRUE; } |