summaryrefslogtreecommitdiffstats
path: root/sway/config.c
diff options
context:
space:
mode:
Diffstat (limited to 'sway/config.c')
-rw-r--r--sway/config.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/sway/config.c b/sway/config.c
index 6c22556f..d5b75adf 100644
--- a/sway/config.c
+++ b/sway/config.c
@@ -38,6 +38,14 @@ static void free_mode(struct sway_mode *mode) {
38 free(mode); 38 free(mode);
39} 39}
40 40
41static void free_bar(struct bar_config *bar) {
42 free(bar->mode);
43 free(bar->hidden_state);
44 free(bar->status_command);
45 free(bar->font);
46 free(bar);
47}
48
41void free_output_config(struct output_config *oc) { 49void free_output_config(struct output_config *oc) {
42 free(oc->name); 50 free(oc->name);
43 free(oc); 51 free(oc);
@@ -61,6 +69,11 @@ static void free_config(struct sway_config *config) {
61 } 69 }
62 list_free(config->modes); 70 list_free(config->modes);
63 71
72 for (i = 0; i < config->bars->length; ++i) {
73 free_bar(config->bars->items[i]);
74 }
75 list_free(config->bars);
76
64 free_flat_list(config->cmd_queue); 77 free_flat_list(config->cmd_queue);
65 78
66 for (i = 0; i < config->workspace_outputs->length; ++i) { 79 for (i = 0; i < config->workspace_outputs->length; ++i) {
@@ -88,6 +101,7 @@ static bool file_exists(const char *path) {
88static void config_defaults(struct sway_config *config) { 101static void config_defaults(struct sway_config *config) {
89 config->symbols = create_list(); 102 config->symbols = create_list();
90 config->modes = create_list(); 103 config->modes = create_list();
104 config->bars = create_list();
91 config->workspace_outputs = create_list(); 105 config->workspace_outputs = create_list();
92 config->criteria = create_list(); 106 config->criteria = create_list();
93 config->output_configs = create_list(); 107 config->output_configs = create_list();
@@ -248,11 +262,26 @@ bool read_config(FILE *file, bool is_active) {
248 } 262 }
249 break; 263 break;
250 264
265 case CMD_BLOCK_BAR:
266 if (block == CMD_BLOCK_END) {
267 block = CMD_BLOCK_BAR;
268 } else {
269 sway_log(L_ERROR, "Invalid block '%s'", line);
270 }
271 break;
272
251 case CMD_BLOCK_END: 273 case CMD_BLOCK_END:
252 switch(block) { 274 switch(block) {
253 case CMD_BLOCK_MODE: 275 case CMD_BLOCK_MODE:
254 sway_log(L_DEBUG, "End of mode block"); 276 sway_log(L_DEBUG, "End of mode block");
255 config->current_mode = config->modes->items[0]; 277 config->current_mode = config->modes->items[0];
278 block = CMD_BLOCK_END;
279 break;
280
281 case CMD_BLOCK_BAR:
282 sway_log(L_DEBUG, "End of bar block");
283 config->current_bar = NULL;
284 block = CMD_BLOCK_END;
256 break; 285 break;
257 286
258 case CMD_BLOCK_END: 287 case CMD_BLOCK_END: