|  |  |  | @ -20,6 +20,16 @@ static const char *bg_options[] = { | 
			
		
	
		
			
				
					|  |  |  |  | 	"tile", | 
			
		
	
		
			
				
					|  |  |  |  | }; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | static bool validate_color(const char *color) { | 
			
		
	
		
			
				
					|  |  |  |  | 	if (strlen(color) != 7 || color[0] != '#') { | 
			
		
	
		
			
				
					|  |  |  |  | 		return false; | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	char *ptr = NULL; | 
			
		
	
		
			
				
					|  |  |  |  | 	strtol(&color[1], &ptr, 16); | 
			
		
	
		
			
				
					|  |  |  |  | 	return *ptr == '\0'; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | struct cmd_results *output_cmd_background(int argc, char **argv) { | 
			
		
	
		
			
				
					|  |  |  |  | 	if (!config->handler_context.output_config) { | 
			
		
	
		
			
				
					|  |  |  |  | 		return cmd_results_new(CMD_FAILURE, "Missing output config"); | 
			
		
	
	
		
			
				
					|  |  |  | @ -36,6 +46,10 @@ struct cmd_results *output_cmd_background(int argc, char **argv) { | 
			
		
	
		
			
				
					|  |  |  |  | 	struct output_config *output = config->handler_context.output_config; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	if (strcasecmp(argv[1], "solid_color") == 0) { | 
			
		
	
		
			
				
					|  |  |  |  | 		if (!validate_color(argv[0])) { | 
			
		
	
		
			
				
					|  |  |  |  | 			return cmd_results_new(CMD_INVALID, | 
			
		
	
		
			
				
					|  |  |  |  | 					"Colors should be of the form #RRGGBB"); | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 		output->background = strdup(argv[0]); | 
			
		
	
		
			
				
					|  |  |  |  | 		output->background_option = strdup("solid_color"); | 
			
		
	
		
			
				
					|  |  |  |  | 		output->background_fallback = NULL; | 
			
		
	
	
		
			
				
					|  |  |  | @ -130,6 +144,11 @@ struct cmd_results *output_cmd_background(int argc, char **argv) { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 		output->background_fallback = NULL; | 
			
		
	
		
			
				
					|  |  |  |  | 		if (argc && *argv[0] == '#') { | 
			
		
	
		
			
				
					|  |  |  |  | 			if (!validate_color(argv[0])) { | 
			
		
	
		
			
				
					|  |  |  |  | 				return cmd_results_new(CMD_INVALID, | 
			
		
	
		
			
				
					|  |  |  |  | 						"fallback color should be of the form #RRGGBB"); | 
			
		
	
		
			
				
					|  |  |  |  | 			} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 			output->background_fallback = strdup(argv[0]); | 
			
		
	
		
			
				
					|  |  |  |  | 			argc--; argv++; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | 
 |