diff options
author | frsfnrrg <frsfnrrg@users.noreply.github.com> | 2018-05-27 12:37:18 -0400 |
---|---|---|
committer | frsfnrrg <frsfnrrg@users.noreply.github.com> | 2018-05-27 13:28:02 -0400 |
commit | a78a5684ea8a19e54d797ab6cddd2f81f88360a5 (patch) | |
tree | 8870a8acc8d92d10d64e9d3d9bfdd28dedb6eea7 /sway/commands/bind.c | |
parent | Merge pull request #2052 from emersion/output-destroy-empty-workspace (diff) | |
download | sway-a78a5684ea8a19e54d797ab6cddd2f81f88360a5.tar.gz sway-a78a5684ea8a19e54d797ab6cddd2f81f88360a5.tar.zst sway-a78a5684ea8a19e54d797ab6cddd2f81f88360a5.zip |
Implement bindsym/bindcode --locked
Adds the --locked flag to bindsym and bindcode commands.
When a keyboard's associated seat has an exclusive client
(i.e, a screenlocker), then bindings are only executed if
they have the locked flag. When there is no such client,
this restriction is lifted.
Diffstat (limited to 'sway/commands/bind.c')
-rw-r--r-- | sway/commands/bind.c | 48 |
1 files changed, 30 insertions, 18 deletions
diff --git a/sway/commands/bind.c b/sway/commands/bind.c index cbabb07b..c6b3368a 100644 --- a/sway/commands/bind.c +++ b/sway/commands/bind.c | |||
@@ -83,20 +83,26 @@ struct cmd_results *cmd_bindsym(int argc, char **argv) { | |||
83 | binding->keys = create_list(); | 83 | binding->keys = create_list(); |
84 | binding->modifiers = 0; | 84 | binding->modifiers = 0; |
85 | binding->release = false; | 85 | binding->release = false; |
86 | binding->locked = false; | ||
86 | binding->bindcode = false; | 87 | binding->bindcode = false; |
87 | 88 | ||
88 | // Handle --release | 89 | // Handle --release and --locked |
89 | if (strcmp("--release", argv[0]) == 0) { | 90 | while (argc > 0) { |
90 | if (argc >= 3) { | 91 | if (strcmp("--release", argv[0]) == 0) { |
91 | binding->release = true; | 92 | binding->release = true; |
92 | argv++; | 93 | } else if (strcmp("--locked", argv[0]) == 0) { |
93 | argc--; | 94 | binding->locked = true; |
94 | } else { | 95 | } else { |
95 | free_sway_binding(binding); | 96 | break; |
96 | return cmd_results_new(CMD_FAILURE, "bindsym", | ||
97 | "Invalid bindsym command " | ||
98 | "(expected more than 2 arguments, got %d)", argc); | ||
99 | } | 97 | } |
98 | argv++; | ||
99 | argc--; | ||
100 | } | ||
101 | if (argc < 2) { | ||
102 | free_sway_binding(binding); | ||
103 | return cmd_results_new(CMD_FAILURE, "bindsym", | ||
104 | "Invalid bindsym command " | ||
105 | "(expected at least 2 non-option arguments, got %d)", argc); | ||
100 | } | 106 | } |
101 | 107 | ||
102 | binding->command = join_args(argv + 1, argc - 1); | 108 | binding->command = join_args(argv + 1, argc - 1); |
@@ -176,20 +182,26 @@ struct cmd_results *cmd_bindcode(int argc, char **argv) { | |||
176 | binding->keys = create_list(); | 182 | binding->keys = create_list(); |
177 | binding->modifiers = 0; | 183 | binding->modifiers = 0; |
178 | binding->release = false; | 184 | binding->release = false; |
185 | binding->locked = false; | ||
179 | binding->bindcode = true; | 186 | binding->bindcode = true; |
180 | 187 | ||
181 | // Handle --release | 188 | // Handle --release and --locked |
182 | if (strcmp("--release", argv[0]) == 0) { | 189 | while (argc > 0) { |
183 | if (argc >= 3) { | 190 | if (strcmp("--release", argv[0]) == 0) { |
184 | binding->release = true; | 191 | binding->release = true; |
185 | argv++; | 192 | } else if (strcmp("--locked", argv[0]) == 0) { |
186 | argc--; | 193 | binding->locked = true; |
187 | } else { | 194 | } else { |
188 | free_sway_binding(binding); | 195 | break; |
189 | return cmd_results_new(CMD_FAILURE, "bindcode", | ||
190 | "Invalid bindcode command " | ||
191 | "(expected more than 2 arguments, got %d)", argc); | ||
192 | } | 196 | } |
197 | argv++; | ||
198 | argc--; | ||
199 | } | ||
200 | if (argc < 2) { | ||
201 | free_sway_binding(binding); | ||
202 | return cmd_results_new(CMD_FAILURE, "bindcode", | ||
203 | "Invalid bindcode command " | ||
204 | "(expected at least 2 non-option arguments, got %d)", argc); | ||
193 | } | 205 | } |
194 | 206 | ||
195 | binding->command = join_args(argv + 1, argc - 1); | 207 | binding->command = join_args(argv + 1, argc - 1); |