X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fassignments.c;h=655816a3bc0ffd1ad464c92a3adbffe0f7c42c26;hb=9ee26a608e329ceea583950fcc92bc5a28f6cf55;hp=05da75546a39636f1939682f9d4a005b792d5bb1;hpb=2daa8d422ae63d55e4b952070e8e894c0963618f;p=i3%2Fi3 diff --git a/src/assignments.c b/src/assignments.c index 05da7554..655816a3 100644 --- a/src/assignments.c +++ b/src/assignments.c @@ -1,3 +1,5 @@ +#undef I3__FILE__ +#define I3__FILE__ "assignments.c" /* * vim:ts=4:sw=4:expandtab * @@ -17,6 +19,8 @@ void run_assignments(i3Window *window) { DLOG("Checking if any assignments match this window\n"); + bool needs_tree_render = false; + /* Check if any assignments match */ Assignment *current; TAILQ_FOREACH(current, &assignments, assignments) { @@ -41,9 +45,13 @@ void run_assignments(i3Window *window) { DLOG("execute command %s\n", current->dest.command); char *full_command; sasprintf(&full_command, "[id=\"%d\"] %s", window->id, current->dest.command); - char *json_result = parse_command(full_command); - FREE(full_command); - FREE(json_result); + struct CommandResult *command_output = parse_command(full_command); + free(full_command); + + if (command_output->needs_tree_render) + needs_tree_render = true; + + yajl_gen_free(command_output->json_gen); } /* Store that we ran this assignment to not execute it again */ @@ -51,6 +59,10 @@ void run_assignments(i3Window *window) { window->ran_assignments = srealloc(window->ran_assignments, sizeof(Assignment*) * window->nr_assignments); window->ran_assignments[window->nr_assignments-1] = current; } + + /* If any of the commands required re-rendering, we will do that now. */ + if (needs_tree_render) + tree_render(); } /*