1 #include <gdk-pixbuf/gdk-pixbuf.h>
2 #include <gio/gio.h>
3 
g_icon_new_pixbuf_from_variant(GVariant * variant)4 G_GNUC_INTERNAL GIcon *g_icon_new_pixbuf_from_variant(GVariant *variant)
5 {
6 	gsize length;
7 	const unsigned char *data =
8 	    (const unsigned char *)g_variant_get_fixed_array(variant, &length, sizeof(guchar));
9 	if (length == 0)
10 		return NULL;
11 
12 	g_autoptr(GInputStream) stream = g_memory_input_stream_new_from_data(data, length, NULL);
13 	if (stream == NULL)
14 		return NULL;
15 
16 	g_autoptr(GError) error = NULL;
17 	GdkPixbuf *pixbuf       = gdk_pixbuf_new_from_stream(stream, NULL, &error);
18 	if (error != NULL)
19 		g_warning("Unable to build GdkPixbuf from icon data: %s", error->message);
20 
21 	return G_ICON(pixbuf);
22 }
23