1 #include <gdk-pixbuf/gdk-pixbuf.h> 2 #include <gio/gio.h> 3 g_icon_new_pixbuf_from_variant(GVariant * variant)4G_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