properly serialize floating/scratchpad state when restarting

This commit is contained in:
Michael Stapelberg 2012-01-05 21:39:18 +00:00
parent ec7ed75c01
commit 91499ed2c7
3 changed files with 39 additions and 0 deletions

View File

@ -274,6 +274,22 @@ void dump_node(yajl_gen gen, struct Con *con, bool inplace_restart) {
ystr("fullscreen_mode"); ystr("fullscreen_mode");
y(integer, con->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"); ystr("swallows");
y(array_open); y(array_open);
Match *match; Match *match;

View File

@ -156,6 +156,28 @@ static int json_string(void *ctx, const unsigned char *val, unsigned int len) {
char *buf = NULL; char *buf = NULL;
sasprintf(&buf, "%.*s", (int)len, val); sasprintf(&buf, "%.*s", (int)len, val);
json_node->mark = buf; 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; return 1;

View File

@ -46,6 +46,7 @@ my $expected = {
swallows => $ignore, swallows => $ignore,
percent => undef, percent => undef,
layout => 'default', layout => 'default',
floating => 'auto_off',
scratchpad_state => 'none', scratchpad_state => 'none',
focus => $ignore, focus => $ignore,
focused => JSON::XS::false, focused => JSON::XS::false,