aboutsummaryrefslogtreecommitdiffstats
path: root/sway
diff options
context:
space:
mode:
authorLibravatar Brian Ashworth <bosrsf04@gmail.com>2018-08-08 13:46:36 -0400
committerLibravatar Brian Ashworth <bosrsf04@gmail.com>2018-08-08 15:37:06 -0400
commit43d1ffc9ddf01eaf614293b5c8aeada27c3c9907 (patch)
treea628319cf9fe03e2e0c2ec0cd4a885b39cf7807d /sway
parentMerge pull request #2423 from manio/master (diff)
downloadsway-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.c35
-rw-r--r--sway/config/output.c14
-rw-r--r--sway/sway.5.scd8
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_