diff options
author | Brian Ashworth <bosrsf04@gmail.com> | 2018-08-08 13:46:36 -0400 |
---|---|---|
committer | Brian Ashworth <bosrsf04@gmail.com> | 2018-08-08 15:37:06 -0400 |
commit | 43d1ffc9ddf01eaf614293b5c8aeada27c3c9907 (patch) | |
tree | a628319cf9fe03e2e0c2ec0cd4a885b39cf7807d /sway/commands/output | |
parent | fc039f0759c1293fc270b631b035176f6924797b (diff) |
Allow a fallback color to be specified for swaybg
This allows for a color to be set when the wallpaper does not fill the
entire output. If specified, the fallback color is also used when the
image path is inaccessible.
Diffstat (limited to 'sway/commands/output')
-rw-r--r-- | sway/commands/output/background.c | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/sway/commands/output/background.c b/sway/commands/output/background.c index 4ed56c2a..e45b571e 100644 --- a/sway/commands/output/background.c +++ b/sway/commands/output/background.c @@ -6,6 +6,7 @@ #include <errno.h> #include "sway/commands.h" #include "sway/config.h" +#include "sway/swaynag.h" #include "log.h" #include "stringop.h" @@ -36,6 +37,7 @@ struct cmd_results *output_cmd_background(int argc, char **argv) { output->background = calloc(1, strlen(argv[0]) + 3); snprintf(output->background, strlen(argv[0]) + 3, "\"%s\"", argv[0]); output->background_option = strdup("solid_color"); + output->background_fallback = NULL; argc -= 2; argv += 2; } else { bool valid = false; @@ -104,16 +106,35 @@ struct cmd_results *output_cmd_background(int argc, char **argv) { free(conf); } - if (access(src, F_OK) == -1) { - struct cmd_results *cmd_res = cmd_results_new(CMD_FAILURE, "output", - "Unable to access background file '%s': %s", src, strerror(errno)); + bool can_access = access(src, F_OK) != -1; + if (!can_access) { + wlr_log(WLR_ERROR, "Unable to access background file '%s': %s", + src, strerror(errno)); + if (!config->validating) { + swaynag_log(config->swaynag_command, + &config->swaynag_config_errors, + "Unable to access background file '%s'", src); + } free(src); - return cmd_res; + } else { + output->background = src; + output->background_option = strdup(mode); } - - output->background = src; - output->background_option = strdup(mode); argc -= j + 1; argv += j + 1; + + output->background_fallback = NULL; + if (argc && *argv[0] == '#') { + output->background_fallback = calloc(1, strlen(argv[0]) + 3); + snprintf(output->background_fallback, strlen(argv[0]) + 3, + "\"%s\"", argv[0]); + argc--; argv++; + + if (!can_access) { + output->background = output->background_fallback; + output->background_option = strdup("solid_color"); + output->background_fallback = NULL; + } + } } config->handler_context.leftovers.argc = argc; |