aboutsummaryrefslogtreecommitdiffstats
path: root/sway/commands/bind.c
diff options
context:
space:
mode:
authorLibravatar Brian Ashworth <bosrsf04@gmail.com>2019-06-11 21:41:02 -0400
committerLibravatar Simon Ser <contact@emersion.fr>2019-06-12 07:56:41 +0300
commit9670ccee683ab985e89eb04302fb998c4161f2d6 (patch)
treef7cafeaf55a7c139e97a920b0b43bcb080d3a27c /sway/commands/bind.c
parentFix segfaults caused by faulty command parsing (diff)
downloadsway-9670ccee683ab985e89eb04302fb998c4161f2d6.tar.gz
sway-9670ccee683ab985e89eb04302fb998c4161f2d6.tar.zst
sway-9670ccee683ab985e89eb04302fb998c4161f2d6.zip
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.
Diffstat (limited to 'sway/commands/bind.c')
-rw-r--r--sway/commands/bind.c14
1 files changed, 13 insertions, 1 deletions
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) {
559 * Execute the command associated to a binding 559 * Execute the command associated to a binding
560 */ 560 */
561void seat_execute_command(struct sway_seat *seat, struct sway_binding *binding) { 561void seat_execute_command(struct sway_seat *seat, struct sway_binding *binding) {
562 sway_log(SWAY_DEBUG, "running command for binding: %s", binding->command); 562 if (!config->active) {
563 sway_log(SWAY_DEBUG, "deferring command for binding: %s",
564 binding->command);
565 struct sway_binding *deferred = calloc(1, sizeof(struct sway_binding));
566 if (!deferred) {
567 sway_log(SWAY_ERROR, "Failed to allocate deferred binding");
568 return;
569 }
570 memcpy(deferred, binding, sizeof(struct sway_binding));
571 list_add(seat->deferred_bindings, deferred);
572 return;
573 }
563 574
575 sway_log(SWAY_DEBUG, "running command for binding: %s", binding->command);
564 struct sway_container *con = NULL; 576 struct sway_container *con = NULL;
565 if (binding->type == BINDING_MOUSESYM 577 if (binding->type == BINDING_MOUSESYM
566 || binding->type == BINDING_MOUSECODE) { 578 || binding->type == BINDING_MOUSECODE) {