aboutsummaryrefslogtreecommitdiff
path: root/tests/json-loader.c
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2012-03-27 20:47:06 -0500
committerTed Gould <ted@gould.cx>2012-03-27 20:47:06 -0500
commit4bc6615625a86de9aa0f9abb3f593938cefecf02 (patch)
treecf0a12632e0a83eaa7194e83e2bc4e6d1256abec /tests/json-loader.c
parentd1dd6cf380d614cde08f64828cb082f7d74cc823 (diff)
downloadlibdbusmenu-4bc6615625a86de9aa0f9abb3f593938cefecf02.tar.gz
libdbusmenu-4bc6615625a86de9aa0f9abb3f593938cefecf02.tar.bz2
libdbusmenu-4bc6615625a86de9aa0f9abb3f593938cefecf02.zip
Making it so that the JSON handler can handle an array of bytes to specify images
Diffstat (limited to 'tests/json-loader.c')
-rw-r--r--tests/json-loader.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/tests/json-loader.c b/tests/json-loader.c
index 7f0ec8e..94982c4 100644
--- a/tests/json-loader.c
+++ b/tests/json-loader.c
@@ -24,6 +24,18 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
static GVariant * node2variant (JsonNode * node, const gchar * name);
static void
+array_byte_foreach (JsonArray * array, guint index, JsonNode * node, gpointer user_data)
+{
+ g_return_if_fail(JSON_NODE_TYPE(node) == JSON_NODE_VALUE);
+ g_return_if_fail(json_node_get_value_type(node) == G_TYPE_INT || json_node_get_value_type(node) == G_TYPE_INT64);
+
+ GVariantBuilder * builder = (GVariantBuilder *)user_data;
+
+ g_variant_builder_add_value(builder, g_variant_new_byte(json_node_get_int(node)));
+ return;
+}
+
+static void
array_foreach (JsonArray * array, guint index, JsonNode * node, gpointer user_data)
{
GVariantBuilder * builder = (GVariantBuilder *)user_data;
@@ -79,11 +91,17 @@ node2variant (JsonNode * node, const gchar * name)
}
if (JSON_NODE_TYPE(node) == JSON_NODE_ARRAY) {
+ JsonArray * array = json_node_get_array(node);
GVariantBuilder builder;
- g_variant_builder_init(&builder, G_VARIANT_TYPE_ARRAY);
- JsonArray * array = json_node_get_array(node);
- json_array_foreach_element(array, array_foreach, &builder);
+ if (g_strcmp0(name, "icon-data") == 0) {
+ g_variant_builder_init(&builder, G_VARIANT_TYPE("ay"));
+ json_array_foreach_element(array, array_byte_foreach, &builder);
+ } else {
+ g_variant_builder_init(&builder, G_VARIANT_TYPE_ARRAY);
+ json_array_foreach_element(array, array_foreach, &builder);
+ }
+
return g_variant_builder_end(&builder);
}