diff --git a/include/sway/config.h b/include/sway/config.h index d23fe578a..eff7cfbbd 100644 --- a/include/sway/config.h +++ b/include/sway/config.h @@ -695,6 +695,8 @@ bool apply_output_config(struct output_config *oc, struct sway_output *output); bool apply_output_configs(struct matched_output_config *configs, size_t configs_len, bool test_only); +void apply_all_output_configs(void); + bool test_output_config(struct output_config *oc, struct sway_output *output); struct output_config *store_output_config(struct output_config *oc); diff --git a/sway/config/output.c b/sway/config/output.c index de9515e21..5bf5bed58 100644 --- a/sway/config/output.c +++ b/sway/config/output.c @@ -809,6 +809,34 @@ out: return ok; } +void apply_all_output_configs(void) { + size_t configs_len = wl_list_length(&root->all_outputs); + struct matched_output_config *configs = calloc(configs_len, sizeof(*configs)); + if (!configs) { + return; + } + + int config_idx = 0; + struct sway_output *sway_output; + wl_list_for_each(sway_output, &root->all_outputs, link) { + if (sway_output == root->fallback_output) { + configs_len--; + continue; + } + + struct matched_output_config *config = &configs[config_idx++]; + config->output = sway_output; + config->config = find_output_config(sway_output); + } + + apply_output_configs(configs, configs_len, false); + for (size_t idx = 0; idx < configs_len; idx++) { + struct matched_output_config *cfg = &configs[idx]; + free_output_config(cfg->config); + } + free(configs); +} + void apply_output_config_to_outputs(struct output_config *oc) { size_t configs_len = wl_list_length(&root->all_outputs); struct matched_output_config *configs = calloc(configs_len, sizeof(*configs));