diff options
Diffstat (limited to 'gio/gemblemedicon.c')
-rw-r--r-- | gio/gemblemedicon.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/gio/gemblemedicon.c b/gio/gemblemedicon.c index c10dc9bc1..51005f0b6 100644 --- a/gio/gemblemedicon.c +++ b/gio/gemblemedicon.c @@ -413,6 +413,38 @@ g_emblemed_icon_from_tokens (gchar **tokens, return NULL; } +static GVariant * +g_emblemed_icon_serialize (GIcon *icon) +{ + GEmblemedIcon *emblemed_icon = G_EMBLEMED_ICON (icon); + GVariantBuilder builder; + GVariant *icon_data; + GList *node; + + icon_data = g_icon_serialize (emblemed_icon->priv->icon); + if (!icon_data) + return NULL; + + g_variant_builder_init (&builder, G_VARIANT_TYPE ("(vav)")); + + g_variant_builder_add (&builder, "v", icon_data); + g_variant_unref (icon_data); + + g_variant_builder_open (&builder, G_VARIANT_TYPE ("av")); + for (node = emblemed_icon->priv->emblems; node != NULL; node = node->next) + { + icon_data = g_icon_serialize (node->data); + if (icon_data) + { + g_variant_builder_add (&builder, "v", icon_data); + g_variant_unref (icon_data); + } + } + g_variant_builder_close (&builder); + + return g_variant_builder_end (&builder); +} + static void g_emblemed_icon_icon_iface_init (GIconIface *iface) { @@ -420,4 +452,5 @@ g_emblemed_icon_icon_iface_init (GIconIface *iface) iface->equal = g_emblemed_icon_equal; iface->to_tokens = g_emblemed_icon_to_tokens; iface->from_tokens = g_emblemed_icon_from_tokens; + iface->serialize = g_emblemed_icon_serialize; } |