From 91499ed2c740630bdd8ba3eec5d1646ccb3c5919 Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Thu, 5 Jan 2012 21:39:18 +0000 Subject: [PATCH] properly serialize floating/scratchpad state when restarting --- src/ipc.c | 16 ++++++++++++++++ src/load_layout.c | 22 ++++++++++++++++++++++ testcases/t/116-nestedcons.t | 1 + 3 files changed, 39 insertions(+) diff --git a/src/ipc.c b/src/ipc.c index 5143695b..8a50761d 100644 --- a/src/ipc.c +++ b/src/ipc.c @@ -274,6 +274,22 @@ void dump_node(yajl_gen gen, struct Con *con, bool inplace_restart) { ystr("fullscreen_mode"); y(integer, con->fullscreen_mode); + ystr("floating"); + switch (con->floating) { + case FLOATING_AUTO_OFF: + ystr("auto_off"); + break; + case FLOATING_AUTO_ON: + ystr("auto_on"); + break; + case FLOATING_USER_OFF: + ystr("user_off"); + break; + case FLOATING_USER_ON: + ystr("user_on"); + break; + } + ystr("swallows"); y(array_open); Match *match; diff --git a/src/load_layout.c b/src/load_layout.c index ef787fd1..08d03bd1 100644 --- a/src/load_layout.c +++ b/src/load_layout.c @@ -156,6 +156,28 @@ static int json_string(void *ctx, const unsigned char *val, unsigned int len) { char *buf = NULL; sasprintf(&buf, "%.*s", (int)len, val); json_node->mark = buf; + } else if (strcasecmp(last_key, "floating") == 0) { + char *buf = NULL; + sasprintf(&buf, "%.*s", (int)len, val); + if (strcasecmp(buf, "auto_off") == 0) + json_node->floating = FLOATING_AUTO_OFF; + else if (strcasecmp(buf, "auto_on") == 0) + json_node->floating = FLOATING_AUTO_ON; + else if (strcasecmp(buf, "user_off") == 0) + json_node->floating = FLOATING_USER_OFF; + else if (strcasecmp(buf, "user_on") == 0) + json_node->floating = FLOATING_USER_ON; + free(buf); + } else if (strcasecmp(last_key, "scratchpad_state") == 0) { + char *buf = NULL; + sasprintf(&buf, "%.*s", (int)len, val); + if (strcasecmp(buf, "none") == 0) + json_node->scratchpad_state = SCRATCHPAD_NONE; + else if (strcasecmp(buf, "fresh") == 0) + json_node->scratchpad_state = SCRATCHPAD_FRESH; + else if (strcasecmp(buf, "changed") == 0) + json_node->scratchpad_state = SCRATCHPAD_CHANGED; + free(buf); } } return 1; diff --git a/testcases/t/116-nestedcons.t b/testcases/t/116-nestedcons.t index d3ed9969..3a495e27 100644 --- a/testcases/t/116-nestedcons.t +++ b/testcases/t/116-nestedcons.t @@ -46,6 +46,7 @@ my $expected = { swallows => $ignore, percent => undef, layout => 'default', + floating => 'auto_off', scratchpad_state => 'none', focus => $ignore, focused => JSON::XS::false,