mirror of
				https://github.com/swaywm/sway.git
				synced 2025-11-03 09:01:43 -05:00 
			
		
		
		
	cmd_output: Merge instead of replace output config
This commit is contained in:
		
							parent
							
								
									ae7ed79573
								
							
						
					
					
						commit
						b1bd3ae6f3
					
				
					 3 changed files with 43 additions and 4 deletions
				
			
		| 
						 | 
					@ -99,6 +99,7 @@ bool read_config(FILE *file, bool is_active);
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
char *do_var_replacement(char *str);
 | 
					char *do_var_replacement(char *str);
 | 
				
			||||||
int output_name_cmp(const void *item, const void *data);
 | 
					int output_name_cmp(const void *item, const void *data);
 | 
				
			||||||
 | 
					void merge_output_config(struct output_config *dst, struct output_config *src);
 | 
				
			||||||
/** Sets up a WLC output handle based on a given output_config.
 | 
					/** Sets up a WLC output handle based on a given output_config.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
void apply_output_config(struct output_config *oc, swayc_t *output);
 | 
					void apply_output_config(struct output_config *oc, swayc_t *output);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -804,12 +804,14 @@ static struct cmd_results *cmd_output(int argc, char **argv) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	i = list_seq_find(config->output_configs, output_name_cmp, name);
 | 
						i = list_seq_find(config->output_configs, output_name_cmp, name);
 | 
				
			||||||
	if (i >= 0) {
 | 
						if (i >= 0) {
 | 
				
			||||||
		// replace existing config
 | 
							// merge existing config
 | 
				
			||||||
		struct output_config *oc = config->output_configs->items[i];
 | 
							struct output_config *oc = config->output_configs->items[i];
 | 
				
			||||||
		list_del(config->output_configs, i);
 | 
							merge_output_config(oc, output);
 | 
				
			||||||
		free_output_config(oc);
 | 
							free_output_config(output);
 | 
				
			||||||
	}
 | 
							output = oc;
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
		list_add(config->output_configs, output);
 | 
							list_add(config->output_configs, output);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sway_log(L_DEBUG, "Config stored for output %s (enabled:%d) (%d x %d @ %d, %d) (bg %s %s)",
 | 
						sway_log(L_DEBUG, "Config stored for output %s (enabled:%d) (%d x %d @ %d, %d) (bg %s %s)",
 | 
				
			||||||
			output->name, output->enabled, output->width,
 | 
								output->name, output->enabled, output->width,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -271,6 +271,42 @@ int output_name_cmp(const void *item, const void *data) {
 | 
				
			||||||
	return strcmp(output->name, name);
 | 
						return strcmp(output->name, name);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void merge_output_config(struct output_config *dst, struct output_config *src) {
 | 
				
			||||||
 | 
						if (src->name) {
 | 
				
			||||||
 | 
							if (dst->name) {
 | 
				
			||||||
 | 
								free(dst->name);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							dst->name = strdup(src->name);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (src->enabled != -1) {
 | 
				
			||||||
 | 
							dst->enabled = src->enabled;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (src->width != -1) {
 | 
				
			||||||
 | 
							dst->width = src->width;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (src->height != -1) {
 | 
				
			||||||
 | 
							dst->height = src->height;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (src->x != -1) {
 | 
				
			||||||
 | 
							dst->x = src->x;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (src->y != -1) {
 | 
				
			||||||
 | 
							dst->y = src->y;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (src->background) {
 | 
				
			||||||
 | 
							if (dst->background) {
 | 
				
			||||||
 | 
								free(dst->background);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							dst->background = strdup(src->background);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (src->background_option) {
 | 
				
			||||||
 | 
							if (dst->background_option) {
 | 
				
			||||||
 | 
								free(dst->background_option);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							dst->background_option = strdup(src->background_option);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void apply_output_config(struct output_config *oc, swayc_t *output) {
 | 
					void apply_output_config(struct output_config *oc, swayc_t *output) {
 | 
				
			||||||
	if (oc && oc->width > 0 && oc->height > 0) {
 | 
						if (oc && oc->width > 0 && oc->height > 0) {
 | 
				
			||||||
		output->width = oc->width;
 | 
							output->width = oc->width;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue