Refactor the interface of commands.c

This change has two implications:

1) tree_render() will now be called precisely once for input which consists of
   multiple commands (like "focus left; focus right"). Also, the caller of
   parse_command() has to call it. This makes us able to fix tickets such as
   ticket #608 (where multiple tree_render() calls are noticable).

2) The output of a command is now a JSON array of return values of the
   individual subcommands. In the case of "focus left; focus right", this is:

   [{"success":true}, {"success":true}]

   While this is incompatible with what i3 returned before, the return value of
   commands was undocumented and therefore not subject to our API stability.
This commit is contained in:
Michael Stapelberg
2012-02-07 17:38:21 -05:00
parent 58ecd14900
commit e114b3dba2
9 changed files with 262 additions and 219 deletions

View File

@ -118,9 +118,12 @@ static void handle_key_press(xcb_key_press_event_t *event) {
}
}
char *json_result = parse_command(bind->command);
FREE(json_result);
return;
struct CommandResult *command_output = parse_command(bind->command);
if (command_output->needs_tree_render)
tree_render();
free(command_output->json_output);
}
/*