* vim:ts=4:sw=4:expandtab
*
* i3 - an improved dynamic tiling window manager
- * © 2009-2012 Michael Stapelberg and contributors (see also: LICENSE)
+ * © 2009 Michael Stapelberg and contributors (see also: LICENSE)
*
* load_layout.c: Restore (parts of) the layout, for example after an inplace
* restart.
int cnt = 1;
while (workspace != NULL) {
FREE(json_node->name);
- asprintf(&(json_node->name), "%s_%d", base, cnt++);
+ sasprintf(&(json_node->name), "%s_%d", base, cnt++);
workspace = NULL;
TAILQ_FOREACH(output, &(croot->nodes_head), nodes)
GREP_FIRST(workspace, output_get_content(output), !strcasecmp(child->name, json_node->name));
}
static json_content_t content_result;
+static int content_level;
+
+static int json_determine_content_deeper(void *ctx) {
+ content_level++;
+ return 1;
+}
+
+static int json_determine_content_shallower(void *ctx) {
+ content_level--;
+ return 1;
+}
static int json_determine_content_string(void *ctx, const unsigned char *val, size_t len) {
- if (strcasecmp(last_key, "type") != 0)
+ if (strcasecmp(last_key, "type") != 0 || content_level > 1)
return 1;
DLOG("string = %.*s, last_key = %s\n", (int)len, val, last_key);
// We default to JSON_CONTENT_CON because it is legal to not include
// “"type": "con"” in the JSON files for better readability.
content_result = JSON_CONTENT_CON;
+ content_level = 0;
yajl_gen g;
yajl_handle hand;
static yajl_callbacks callbacks = {
.yajl_string = json_determine_content_string,
.yajl_map_key = json_key,
+ .yajl_start_array = json_determine_content_deeper,
+ .yajl_start_map = json_determine_content_deeper,
+ .yajl_end_map = json_determine_content_shallower,
+ .yajl_end_array = json_determine_content_shallower,
};
g = yajl_gen_alloc(NULL);
hand = yajl_alloc(&callbacks, NULL, (void *)g);