summaryrefslogtreecommitdiffstats
path: root/sway/config.c
diff options
context:
space:
mode:
Diffstat (limited to 'sway/config.c')
-rw-r--r--sway/config.c72
1 files changed, 71 insertions, 1 deletions
diff --git a/sway/config.c b/sway/config.c
index 7d5999d8..e737f83c 100644
--- a/sway/config.c
+++ b/sway/config.c
@@ -167,6 +167,16 @@ void free_pid_workspace(struct pid_workspace *pw) {
167 free(pw); 167 free(pw);
168} 168}
169 169
170void free_command_policy(struct command_policy *policy) {
171 free(policy->command);
172 free(policy);
173}
174
175void free_feature_policy(struct feature_policy *policy) {
176 free(policy->program);
177 free(policy);
178}
179
170void free_config(struct sway_config *config) { 180void free_config(struct sway_config *config) {
171 int i; 181 int i;
172 for (i = 0; i < config->symbols->length; ++i) { 182 for (i = 0; i < config->symbols->length; ++i) {
@@ -211,6 +221,16 @@ void free_config(struct sway_config *config) {
211 } 221 }
212 list_free(config->output_configs); 222 list_free(config->output_configs);
213 223
224 for (i = 0; i < config->command_policies->length; ++i) {
225 free_command_policy(config->command_policies->items[i]);
226 }
227 list_free(config->command_policies);
228
229 for (i = 0; i < config->feature_policies->length; ++i) {
230 free_feature_policy(config->feature_policies->items[i]);
231 }
232 list_free(config->feature_policies);
233
214 list_free(config->active_bar_modifiers); 234 list_free(config->active_bar_modifiers);
215 free_flat_list(config->config_chain); 235 free_flat_list(config->config_chain);
216 free(config->font); 236 free(config->font);
@@ -321,6 +341,11 @@ static void config_defaults(struct sway_config *config) {
321 config->border_colors.placeholder.child_border = 0x0C0C0CFF; 341 config->border_colors.placeholder.child_border = 0x0C0C0CFF;
322 342
323 config->border_colors.background = 0xFFFFFFFF; 343 config->border_colors.background = 0xFFFFFFFF;
344
345 // Security
346 config->command_policies = create_list();
347 config->feature_policies = create_list();
348 config->ipc_policy = UINT32_MAX;
324} 349}
325 350
326static int compare_modifiers(const void *left, const void *right) { 351static int compare_modifiers(const void *left, const void *right) {
@@ -556,7 +581,13 @@ bool read_config(FILE *file, struct sway_config *config) {
556 free(line); 581 free(line);
557 continue; 582 continue;
558 } 583 }
559 struct cmd_results *res = config_command(line, block); 584 struct cmd_results *res;
585 if (block == CMD_BLOCK_COMMANDS) {
586 // Special case
587 res = config_commands_command(line);
588 } else {
589 res = config_command(line, block);
590 }
560 switch(res->status) { 591 switch(res->status) {
561 case CMD_FAILURE: 592 case CMD_FAILURE:
562 case CMD_INVALID: 593 case CMD_INVALID:
@@ -602,6 +633,30 @@ bool read_config(FILE *file, struct sway_config *config) {
602 } 633 }
603 break; 634 break;
604 635
636 case CMD_BLOCK_COMMANDS:
637 if (block == CMD_BLOCK_END) {
638 block = CMD_BLOCK_COMMANDS;
639 } else {
640 sway_log(L_ERROR, "Invalid block '%s'", line);
641 }
642 break;
643
644 case CMD_BLOCK_IPC:
645 if (block == CMD_BLOCK_END) {
646 block = CMD_BLOCK_IPC;
647 } else {
648 sway_log(L_ERROR, "Invalid block '%s'", line);
649 }
650 break;
651
652 case CMD_BLOCK_IPC_EVENTS:
653 if (block == CMD_BLOCK_IPC) {
654 block = CMD_BLOCK_IPC_EVENTS;
655 } else {
656 sway_log(L_ERROR, "Invalid block '%s'", line);
657 }
658 break;
659
605 case CMD_BLOCK_END: 660 case CMD_BLOCK_END:
606 switch(block) { 661 switch(block) {
607 case CMD_BLOCK_MODE: 662 case CMD_BLOCK_MODE:
@@ -627,6 +682,21 @@ bool read_config(FILE *file, struct sway_config *config) {
627 block = CMD_BLOCK_BAR; 682 block = CMD_BLOCK_BAR;
628 break; 683 break;
629 684
685 case CMD_BLOCK_COMMANDS:
686 sway_log(L_DEBUG, "End of commands block");
687 block = CMD_BLOCK_END;
688 break;
689
690 case CMD_BLOCK_IPC:
691 sway_log(L_DEBUG, "End of IPC block");
692 block = CMD_BLOCK_END;
693 break;
694
695 case CMD_BLOCK_IPC_EVENTS:
696 sway_log(L_DEBUG, "End of IPC events block");
697 block = CMD_BLOCK_IPC;
698 break;
699
630 case CMD_BLOCK_END: 700 case CMD_BLOCK_END:
631 sway_log(L_ERROR, "Unmatched }"); 701 sway_log(L_ERROR, "Unmatched }");
632 break; 702 break;