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 | |
parent | Merge pull request #2423 from manio/master (diff) | |
download | sway-43d1ffc9ddf01eaf614293b5c8aeada27c3c9907.tar.gz sway-43d1ffc9ddf01eaf614293b5c8aeada27c3c9907.tar.zst sway-43d1ffc9ddf01eaf614293b5c8aeada27c3c9907.zip |
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')
-rw-r--r-- | sway/commands/output/background.c | 35 | ||||
-rw-r--r-- | sway/config/output.c | 14 | ||||
-rw-r--r-- | sway/sway.5.scd | 8 |
3 files changed, 44 insertions, 13 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 @@ | |||
6 | #include <errno.h> | 6 | #include <errno.h> |
7 | #include "sway/commands.h" | 7 | #include "sway/commands.h" |
8 | #include "sway/config.h" | 8 | #include "sway/config.h" |
9 | #include "sway/swaynag.h" | ||
9 | #include "log.h" | 10 | #include "log.h" |
10 | #include "stringop.h" | 11 | #include "stringop.h" |
11 | 12 | ||
@@ -36,6 +37,7 @@ struct cmd_results *output_cmd_background(int argc, char **argv) { | |||
36 | output->background = calloc(1, strlen(argv[0]) + 3); | 37 | output->background = calloc(1, strlen(argv[0]) + 3); |
37 | snprintf(output->background, strlen(argv[0]) + 3, "\"%s\"", argv[0]); | 38 | snprintf(output->background, strlen(argv[0]) + 3, "\"%s\"", argv[0]); |
38 | output->background_option = strdup("solid_color"); | 39 | output->background_option = strdup("solid_color"); |
40 | output->background_fallback = NULL; | ||
39 | argc -= 2; argv += 2; | 41 | argc -= 2; argv += 2; |
40 | } else { | 42 | } else { |
41 | bool valid = false; | 43 | bool valid = false; |
@@ -104,16 +106,35 @@ struct cmd_results *output_cmd_background(int argc, char **argv) { | |||
104 | free(conf); | 106 | free(conf); |
105 | } | 107 | } |
106 | 108 | ||
107 | if (access(src, F_OK) == -1) { | 109 | bool can_access = access(src, F_OK) != -1; |
108 | struct cmd_results *cmd_res = cmd_results_new(CMD_FAILURE, "output", | 110 | if (!can_access) { |
109 | "Unable to access background file '%s': %s", src, strerror(errno)); | 111 | wlr_log(WLR_ERROR, "Unable to access background file '%s': %s", |
112 | src, strerror(errno)); | ||
113 | if (!config->validating) { | ||
114 | swaynag_log(config->swaynag_command, | ||
115 | &config->swaynag_config_errors, | ||
116 | "Unable to access background file '%s'", src); | ||
117 | } | ||
110 | free(src); | 118 | free(src); |
111 | return cmd_res; | 119 | } else { |
120 | output->background = src; | ||
121 | output->background_option = strdup(mode); | ||
112 | } | 122 | } |
113 | |||
114 | output->background = src; | ||
115 | output->background_option = strdup(mode); | ||
116 | argc -= j + 1; argv += j + 1; | 123 | argc -= j + 1; argv += j + 1; |
124 | |||
125 | output->background_fallback = NULL; | ||
126 | if (argc && *argv[0] == '#') { | ||
127 | output->background_fallback = calloc(1, strlen(argv[0]) + 3); | ||
128 | snprintf(output->background_fallback, strlen(argv[0]) + 3, | ||
129 | "\"%s\"", argv[0]); | ||
130 | argc--; argv++; | ||
131 | |||
132 | if (!can_access) { | ||
133 | output->background = output->background_fallback; | ||
134 | output->background_option = strdup("solid_color"); | ||
135 | output->background_fallback = NULL; | ||
136 | } | ||
137 | } | ||
117 | } | 138 | } |
118 | 139 | ||
119 | config->handler_context.leftovers.argc = argc; | 140 | config->handler_context.leftovers.argc = argc; |
diff --git a/sway/config/output.c b/sway/config/output.c index 504c48c6..1d8cb3ef 100644 --- a/sway/config/output.c +++ b/sway/config/output.c | |||
@@ -77,6 +77,10 @@ void merge_output_config(struct output_config *dst, struct output_config *src) { | |||
77 | free(dst->background_option); | 77 | free(dst->background_option); |
78 | dst->background_option = strdup(src->background_option); | 78 | dst->background_option = strdup(src->background_option); |
79 | } | 79 | } |
80 | if (src->background_fallback) { | ||
81 | free(dst->background_fallback); | ||
82 | dst->background_fallback = strdup(src->background_fallback); | ||
83 | } | ||
80 | if (src->dpms_state != 0) { | 84 | if (src->dpms_state != 0) { |
81 | dst->dpms_state = src->dpms_state; | 85 | dst->dpms_state = src->dpms_state; |
82 | } | 86 | } |
@@ -226,17 +230,19 @@ void apply_output_config(struct output_config *oc, struct sway_container *output | |||
226 | wlr_log(WLR_DEBUG, "Setting background for output %d to %s", | 230 | wlr_log(WLR_DEBUG, "Setting background for output %d to %s", |
227 | output_i, oc->background); | 231 | output_i, oc->background); |
228 | 232 | ||
229 | size_t len = snprintf(NULL, 0, "%s %d %s %s", | 233 | size_t len = snprintf(NULL, 0, "%s %d %s %s %s", |
230 | config->swaybg_command ? config->swaybg_command : "swaybg", | 234 | config->swaybg_command ? config->swaybg_command : "swaybg", |
231 | output_i, oc->background, oc->background_option); | 235 | output_i, oc->background, oc->background_option, |
236 | oc->background_fallback ? oc->background_fallback : ""); | ||
232 | char *command = malloc(len + 1); | 237 | char *command = malloc(len + 1); |
233 | if (!command) { | 238 | if (!command) { |
234 | wlr_log(WLR_DEBUG, "Unable to allocate swaybg command"); | 239 | wlr_log(WLR_DEBUG, "Unable to allocate swaybg command"); |
235 | return; | 240 | return; |
236 | } | 241 | } |
237 | snprintf(command, len + 1, "%s %d %s %s", | 242 | snprintf(command, len + 1, "%s %d %s %s %s", |
238 | config->swaybg_command ? config->swaybg_command : "swaybg", | 243 | config->swaybg_command ? config->swaybg_command : "swaybg", |
239 | output_i, oc->background, oc->background_option); | 244 | output_i, oc->background, oc->background_option, |
245 | oc->background_fallback ? oc->background_fallback : ""); | ||
240 | wlr_log(WLR_DEBUG, "-> %s", command); | 246 | wlr_log(WLR_DEBUG, "-> %s", command); |
241 | 247 | ||
242 | char *const cmd[] = { "sh", "-c", command, NULL }; | 248 | char *const cmd[] = { "sh", "-c", command, NULL }; |
diff --git a/sway/sway.5.scd b/sway/sway.5.scd index 73a01152..31ab281b 100644 --- a/sway/sway.5.scd +++ b/sway/sway.5.scd | |||
@@ -489,9 +489,13 @@ The default colors are: | |||
489 | setting an integral scale factor and adjusting the font size of your | 489 | setting an integral scale factor and adjusting the font size of your |
490 | applications to taste. | 490 | applications to taste. |
491 | 491 | ||
492 | *output* <name> background|bg <file> <mode> | 492 | *output* <name> background|bg <file> <mode> [<fallback\_color>] |
493 | Sets the wallpaper for the given output to the specified file, using the | 493 | Sets the wallpaper for the given output to the specified file, using the |
494 | given scaling mode (one of "stretch", "fill", "fit", "center", "tile"). | 494 | given scaling mode (one of "stretch", "fill", "fit", "center", "tile"). If |
495 | the specified file cannot be accessed or if the image does fill the entire | ||
496 | output, a fallback color may be provided to cover the rest of the output. | ||
497 | __fallback\_color__ should be specified as _#RRGGBB_. Alpha is not | ||
498 | supported. | ||
495 | 499 | ||
496 | **output** <name> background|bg <color> solid\_color | 500 | **output** <name> background|bg <color> solid\_color |
497 | Sets the background of the given output to the specified color. _color_ | 501 | Sets the background of the given output to the specified color. _color_ |