Fix command list execution

Determine the container/workspace a command is run on, each time when a
command of the command list will be run.
Previously the container/workspace was determined only once at the
beginning of command list execution, which led to wrong behaviour
because commands wouldn't take into account when a previous command
changed the focused container.
This commit is contained in:
mwenzkowski 2018-12-05 08:20:40 +01:00 committed by emersion
parent 6ccc836ebf
commit cf6edaf26a

View file

@ -232,15 +232,6 @@ list_t *execute_command(char *_exec, struct sway_seat *seat,
} }
} }
// This is the container or workspace which this command will run on.
// Ignored if the command string contains criteria.
struct sway_node *node;
if (con) {
node = &con->node;
} else {
node = seat_get_focus_inactive(seat, &root->node);
}
config->handler_context.seat = seat; config->handler_context.seat = seat;
head = exec; head = exec;
@ -301,6 +292,9 @@ list_t *execute_command(char *_exec, struct sway_seat *seat,
} }
if (!config->handler_context.using_criteria) { if (!config->handler_context.using_criteria) {
// The container or workspace which this command will run on.
struct sway_node *node = con ? &con->node :
seat_get_focus_inactive(seat, &root->node);
set_config_node(node); set_config_node(node);
struct cmd_results *res = handler->handle(argc-1, argv+1); struct cmd_results *res = handler->handle(argc-1, argv+1);
list_add(res_list, res); list_add(res_list, res);