From 9670ccee683ab985e89eb04302fb998c4161f2d6 Mon Sep 17 00:00:00 2001 From: Brian Ashworth Date: Tue, 11 Jun 2019 21:41:02 -0400 Subject: bindings: defer while initiailizing This adds the logic to defer binding execution while sway is still initializing. Without this, the binding command would be executed, but the command handler would return CMD_DEFER, which was being treated as a failure to run. To avoid partial executions, this will defer all bindings while config->active is false. --- sway/commands/bind.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'sway/commands') diff --git a/sway/commands/bind.c b/sway/commands/bind.c index d43c87fb..49b511ad 100644 --- a/sway/commands/bind.c +++ b/sway/commands/bind.c @@ -559,8 +559,20 @@ struct cmd_results *cmd_unbindswitch(int argc, char **argv) { * Execute the command associated to a binding */ void seat_execute_command(struct sway_seat *seat, struct sway_binding *binding) { - sway_log(SWAY_DEBUG, "running command for binding: %s", binding->command); + if (!config->active) { + sway_log(SWAY_DEBUG, "deferring command for binding: %s", + binding->command); + struct sway_binding *deferred = calloc(1, sizeof(struct sway_binding)); + if (!deferred) { + sway_log(SWAY_ERROR, "Failed to allocate deferred binding"); + return; + } + memcpy(deferred, binding, sizeof(struct sway_binding)); + list_add(seat->deferred_bindings, deferred); + return; + } + sway_log(SWAY_DEBUG, "running command for binding: %s", binding->command); struct sway_container *con = NULL; if (binding->type == BINDING_MOUSESYM || binding->type == BINDING_MOUSECODE) { -- cgit v1.2.3