From 51bfdbf0a840833830030c1752a4ea6d414b9347 Mon Sep 17 00:00:00 2001
From: Michael Stapelberg <michael@stapelberg.de>
Date: Thu, 2 Jun 2011 17:12:18 +0200
Subject: [PATCH] ipc: make 'layout' a string

---
 src/ipc.c                   | 18 +++++++++++++++++-
 src/load_layout.c           | 16 ++++++++++++++++
 testcases/t/16-nestedcons.t |  2 +-
 3 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/src/ipc.c b/src/ipc.c
index bdf1dfea..fa3513bc 100644
--- a/src/ipc.c
+++ b/src/ipc.c
@@ -202,7 +202,23 @@ void dump_node(yajl_gen gen, struct Con *con, bool inplace_restart) {
     y(integer, (con == focused));
 
     ystr("layout");
-    y(integer, con->layout);
+    switch (con->layout) {
+        case L_DEFAULT:
+            ystr("default");
+            break;
+        case L_STACKED:
+            ystr("stacked");
+            break;
+        case L_TABBED:
+            ystr("tabbed");
+            break;
+        case L_DOCKAREA:
+            ystr("dockarea");
+            break;
+        case L_OUTPUT:
+            ystr("output");
+            break;
+    }
 
     ystr("border");
     switch (con->border_style) {
diff --git a/src/load_layout.c b/src/load_layout.c
index 7e57e94d..6fe0a086 100644
--- a/src/load_layout.c
+++ b/src/load_layout.c
@@ -131,6 +131,21 @@ static int json_string(void *ctx, const unsigned char *val, unsigned int len) {
                 json_node->border_style = BS_NORMAL;
             else LOG("Unhandled \"border\": %s\n", buf);
             free(buf);
+        } else if (strcasecmp(last_key, "layout") == 0) {
+            char *buf = NULL;
+            asprintf(&buf, "%.*s", (int)len, val);
+            if (strcasecmp(buf, "default") == 0)
+                json_node->layout = L_DEFAULT;
+            else if (strcasecmp(buf, "stacked") == 0)
+                json_node->layout = L_STACKED;
+            else if (strcasecmp(buf, "tabbed") == 0)
+                json_node->layout = L_TABBED;
+            else if (strcasecmp(buf, "dockarea") == 0)
+                json_node->layout = L_DOCKAREA;
+            else if (strcasecmp(buf, "output") == 0)
+                json_node->layout = L_OUTPUT;
+            else LOG("Unhandled \"layout\": %s\n", buf);
+            free(buf);
         }
     }
     return 1;
@@ -142,6 +157,7 @@ static int json_int(void *ctx, long long val) {
 static int json_int(void *ctx, long val) {
 #endif
     LOG("int %d for key %s\n", val, last_key);
+    // TODO: remove this after the next preview release
     if (strcasecmp(last_key, "layout") == 0) {
         json_node->layout = val;
     }
diff --git a/testcases/t/16-nestedcons.t b/testcases/t/16-nestedcons.t
index 954732dd..8d25482b 100644
--- a/testcases/t/16-nestedcons.t
+++ b/testcases/t/16-nestedcons.t
@@ -26,7 +26,7 @@ my $expected = {
     geometry => ignore(),
     swallows => ignore(),
     percent => 0,
-    layout => 0,
+    layout => 'default',
     focus => ignore(),
     focused => 0,
     urgent => 0,