From 9d1040af666ce64f86002d558e8dbdb9eae50e59 Mon Sep 17 00:00:00 2001 From: Mike Gorse Date: Sun, 15 Sep 2013 11:59:03 -0500 Subject: [PATCH] Allow a :-separated list of attribute values when reading match rules https://bugzilla.gnome.org/show_bug.cgi?id=700865 --- atk-adaptor/adaptors/collection-adaptor.c | 32 +++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/atk-adaptor/adaptors/collection-adaptor.c b/atk-adaptor/adaptors/collection-adaptor.c index 918addf..c49b502 100644 --- a/atk-adaptor/adaptors/collection-adaptor.c +++ b/atk-adaptor/adaptors/collection-adaptor.c @@ -672,14 +672,38 @@ read_mr (DBusMessageIter * iter, MatchRulePrivate * mrp) while (dbus_message_iter_get_arg_type (&iter_dict) != DBUS_TYPE_INVALID) { const char *key, *val; + const char *p, *q; dbus_message_iter_recurse (&iter_dict, &iter_dict_entry); dbus_message_iter_get_basic (&iter_dict_entry, &key); dbus_message_iter_next (&iter_dict_entry); dbus_message_iter_get_basic (&iter_dict_entry, &val); - attr = g_new (AtkAttribute, 1); - attr->name = g_strdup (key); - attr->value = g_strdup (val); - mrp->attributes = g_slist_prepend (mrp->attributes, attr); + p = q = val; + for (;;) + { + if (*q == '\0' || (*q == ':' && (q == val || q[-1] != '\\'))) + { + char *tmp; + attr = g_new (AtkAttribute, 1); + attr->name = g_strdup (key); + attr->value = g_strdup (p); + attr->value[q - p] = '\0'; + tmp = attr->value; + while (*tmp != '\0') + { + if (*tmp == '\\') + memmove (tmp, tmp + 1, strlen (tmp)); + else + tmp++; + } + mrp->attributes = g_slist_prepend (mrp->attributes, attr); + if (*q == '\0') + break; + else + p = ++q; + } + else + q++; + } dbus_message_iter_next (&iter_dict); } dbus_message_iter_next (&iter_struct); -- 2.7.4