aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/sway/commands.h6
-rw-r--r--sway/commands/exec.c7
-rw-r--r--sway/commands/exec_always.c20
3 files changed, 27 insertions, 6 deletions
diff --git a/include/sway/commands.h b/include/sway/commands.h
index 4a2f8c20..07730f98 100644
--- a/include/sway/commands.h
+++ b/include/sway/commands.h
@@ -97,6 +97,12 @@ void container_resize_tiled(struct sway_container *parent, uint32_t axis,
97struct sway_container *container_find_resize_parent(struct sway_container *con, 97struct sway_container *container_find_resize_parent(struct sway_container *con,
98 uint32_t edge); 98 uint32_t edge);
99 99
100/**
101 * Handlers shared by exec and exec_always.
102 */
103sway_cmd cmd_exec_validate;
104sway_cmd cmd_exec_process;
105
100sway_cmd cmd_assign; 106sway_cmd cmd_assign;
101sway_cmd cmd_bar; 107sway_cmd cmd_bar;
102sway_cmd cmd_bindcode; 108sway_cmd cmd_bindcode;
diff --git a/sway/commands/exec.c b/sway/commands/exec.c
index 87d90716..2c6f3d2d 100644
--- a/sway/commands/exec.c
+++ b/sway/commands/exec.c
@@ -5,12 +5,15 @@
5#include "stringop.h" 5#include "stringop.h"
6 6
7struct cmd_results *cmd_exec(int argc, char **argv) { 7struct cmd_results *cmd_exec(int argc, char **argv) {
8 if (!config->active) return cmd_results_new(CMD_DEFER, NULL); 8 struct cmd_results *error = NULL;
9 if ((error = cmd_exec_validate(argc, argv))) {
10 return error;
11 }
9 if (config->reloading) { 12 if (config->reloading) {
10 char *args = join_args(argv, argc); 13 char *args = join_args(argv, argc);
11 sway_log(SWAY_DEBUG, "Ignoring 'exec %s' due to reload", args); 14 sway_log(SWAY_DEBUG, "Ignoring 'exec %s' due to reload", args);
12 free(args); 15 free(args);
13 return cmd_results_new(CMD_SUCCESS, NULL); 16 return cmd_results_new(CMD_SUCCESS, NULL);
14 } 17 }
15 return cmd_exec_always(argc, argv); 18 return cmd_exec_process(argc, argv);
16} 19}
diff --git a/sway/commands/exec_always.c b/sway/commands/exec_always.c
index a5724295..39e48a44 100644
--- a/sway/commands/exec_always.c
+++ b/sway/commands/exec_always.c
@@ -13,15 +13,19 @@
13#include "log.h" 13#include "log.h"
14#include "stringop.h" 14#include "stringop.h"
15 15
16struct cmd_results *cmd_exec_always(int argc, char **argv) { 16struct cmd_results *cmd_exec_validate(int argc, char **argv) {
17 struct cmd_results *error = NULL; 17 struct cmd_results *error = NULL;
18 if (!config->active || config->validating) {
19 return cmd_results_new(CMD_DEFER, NULL);
20 }
21 if ((error = checkarg(argc, argv[-1], EXPECTED_AT_LEAST, 1))) { 18 if ((error = checkarg(argc, argv[-1], EXPECTED_AT_LEAST, 1))) {
22 return error; 19 return error;
23 } 20 }
21 if (!config->active || config->validating) {
22 return cmd_results_new(CMD_DEFER, NULL);
23 }
24 return error;
25}
24 26
27struct cmd_results *cmd_exec_process(int argc, char **argv) {
28 struct cmd_results *error = NULL;
25 char *tmp = NULL; 29 char *tmp = NULL;
26 if (strcmp(argv[0], "--no-startup-id") == 0) { 30 if (strcmp(argv[0], "--no-startup-id") == 0) {
27 sway_log(SWAY_INFO, "exec switch '--no-startup-id' not supported, ignored."); 31 sway_log(SWAY_INFO, "exec switch '--no-startup-id' not supported, ignored.");
@@ -92,3 +96,11 @@ struct cmd_results *cmd_exec_always(int argc, char **argv) {
92 96
93 return cmd_results_new(CMD_SUCCESS, NULL); 97 return cmd_results_new(CMD_SUCCESS, NULL);
94} 98}
99
100struct cmd_results *cmd_exec_always(int argc, char **argv) {
101 struct cmd_results *error;
102 if ((error = cmd_exec_validate(argc, argv))) {
103 return error;
104 }
105 return cmd_exec_process(argc, argv);
106}