#include <glib/gstdio.h>
#include <glib/gi18n.h>
+#include <gio/gio.h>
#include <string.h>
return apps;
}
+#if !GLIB_CHECK_VERSION (2, 20, 0)
+/* GIcon serialization
+ Copyright (C) 2006-2007 Red Hat, Inc.
+ Copyright (C) 2006-2007 Alexander Larsson <alexl@redhat.com>
+ Copied subtly changed from Glib 2.20 */
+static gboolean
+g_icon_to_string_tokenized (GIcon *icon, GString *s)
+{
+ char *ret;
+ GPtrArray *tokens;
+ gint version;
+ GIconIface *icon_iface;
+ guint i;
+
+ ret = NULL;
+
+ icon_iface = G_ICON_GET_IFACE (icon);
+ if (icon_iface->to_tokens == NULL)
+ return FALSE;
+
+ tokens = g_ptr_array_new ();
+ if (!icon_iface->to_tokens (icon, tokens, &version))
+ {
+ g_ptr_array_free (tokens, TRUE);
+ return FALSE;
+ }
+
+ /* format: TypeName[.Version] <token_0> .. <token_N-1>
+ version 0 is implicit and can be omitted
+ all the tokens are url escaped to ensure they have no spaces in them */
+
+ g_string_append (s, g_type_name_from_instance ((GTypeInstance *)icon));
+ if (version != 0)
+ g_string_append_printf (s, ".%d", version);
+
+ for (i = 0; i < tokens->len; i++)
+ {
+ char *token = g_ptr_array_index (tokens, i);
+ g_string_append_c (s, ' ');
+ /* We really only need to escape spaces here, so allow lots of otherwise reserved chars */
+ g_string_append_uri_escaped (s, token, "!$&'()*+,;=:@/", TRUE);
+ g_free (token);
+ }
+
+ g_ptr_array_free (tokens, TRUE);
+
+ return TRUE;
+}
+
+/* GIcon serialization
+ Copyright (C) 2006-2007 Red Hat, Inc.
+ Copyright (C) 2006-2007 Alexander Larsson <alexl@redhat.com>
+ Copied subtly changed from Glib 2.20 */
+gchar *
+g_icon_to_string (GIcon *icon)
+{
+ gchar *ret;
+
+ g_return_val_if_fail (icon != NULL, NULL);
+ g_return_val_if_fail (G_IS_ICON (icon), NULL);
+
+ ret = NULL;
+
+ if (G_IS_FILE_ICON (icon))
+ {
+ GFile *file;
+
+ file = g_file_icon_get_file (G_FILE_ICON (icon));
+ if (g_file_is_native (file))
+ {
+ ret = g_file_get_path (file);
+ if (!g_utf8_validate (ret, -1, NULL))
+ {
+ g_free (ret);
+ ret = NULL;
+ }
+ }
+ else
+ ret = g_file_get_uri (file);
+ }
+ else if (G_IS_THEMED_ICON (icon))
+ {
+ const char * const *names;
+
+ names = g_themed_icon_get_names (G_THEMED_ICON (icon));
+ if (names != NULL &&
+ names[0] != NULL &&
+ /* Allowing icons starting with dot would break G_ICON_SERIALIZATION_MAGIC0 */
+ names[0][0] != '.' &&
+ g_utf8_validate (names[0], -1, NULL) && /* Only return utf8 strings */
+ names[1] == NULL)
+ ret = g_strdup (names[0]);
+ }
+
+ if (ret == NULL)
+ {
+ GString *s = g_string_new (". ");
+ if (g_icon_to_string_tokenized (icon, s))
+ ret = g_string_free (s, FALSE);
+ else
+ g_string_free (s, TRUE);
+ }
+
+ return ret;
+}
+#endif
+
/**
* katze_property_proxy:
* @object: a #GObject