aboutsummaryrefslogtreecommitdiffstats
path: root/sway/commands/bind.c
diff options
context:
space:
mode:
authorLibravatar frsfnrrg <frsfnrrg@users.noreply.github.com>2018-05-27 12:37:18 -0400
committerLibravatar frsfnrrg <frsfnrrg@users.noreply.github.com>2018-05-27 13:28:02 -0400
commita78a5684ea8a19e54d797ab6cddd2f81f88360a5 (patch)
tree8870a8acc8d92d10d64e9d3d9bfdd28dedb6eea7 /sway/commands/bind.c
parentMerge pull request #2052 from emersion/output-destroy-empty-workspace (diff)
downloadsway-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.c48
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);