summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sway/commands/output/background.c18
-rw-r--r--sway/config/output.c4
2 files changed, 19 insertions, 3 deletions
diff --git a/sway/commands/output/background.c b/sway/commands/output/background.c
index 2ff5f0d7..9e370d43 100644
--- a/sway/commands/output/background.c
+++ b/sway/commands/output/background.c
@@ -61,7 +61,7 @@ struct cmd_results *output_cmd_background(int argc, char **argv) {
61 "Missing background scaling mode."); 61 "Missing background scaling mode.");
62 } 62 }
63 63
64 wordexp_t p; 64 wordexp_t p = {0};
65 char *src = join_args(argv, j); 65 char *src = join_args(argv, j);
66 while (strstr(src, " ")) { 66 while (strstr(src, " ")) {
67 src = realloc(src, strlen(src) + 2); 67 src = realloc(src, strlen(src) + 2);
@@ -123,6 +123,22 @@ struct cmd_results *output_cmd_background(int argc, char **argv) {
123 } 123 }
124 free(src); 124 free(src);
125 } else { 125 } else {
126 // Escape spaces and quotes in the final path for swaybg
127 for (size_t i = 0; i < strlen(src); i++) {
128 switch (src[i]) {
129 case ' ':
130 case '\'':
131 case '\"':
132 src = realloc(src, strlen(src) + 2);
133 memmove(src + i + 1, src + i, strlen(src + i) + 1);
134 *(src + i) = '\\';
135 i++;
136 break;
137 default:
138 break;
139 }
140 }
141
126 output->background = src; 142 output->background = src;
127 output->background_option = strdup(mode); 143 output->background_option = strdup(mode);
128 } 144 }
diff --git a/sway/config/output.c b/sway/config/output.c
index 6f337b66..74d79130 100644
--- a/sway/config/output.c
+++ b/sway/config/output.c
@@ -237,7 +237,7 @@ void apply_output_config(struct output_config *oc, struct sway_output *output) {
237 wlr_log(WLR_DEBUG, "Setting background for output %d to %s", 237 wlr_log(WLR_DEBUG, "Setting background for output %d to %s",
238 output_i, oc->background); 238 output_i, oc->background);
239 239
240 size_t len = snprintf(NULL, 0, "%s %d \"%s\" %s %s", 240 size_t len = snprintf(NULL, 0, "%s %d %s %s %s",
241 config->swaybg_command ? config->swaybg_command : "swaybg", 241 config->swaybg_command ? config->swaybg_command : "swaybg",
242 output_i, oc->background, oc->background_option, 242 output_i, oc->background, oc->background_option,
243 oc->background_fallback ? oc->background_fallback : ""); 243 oc->background_fallback ? oc->background_fallback : "");
@@ -246,7 +246,7 @@ void apply_output_config(struct output_config *oc, struct sway_output *output) {
246 wlr_log(WLR_DEBUG, "Unable to allocate swaybg command"); 246 wlr_log(WLR_DEBUG, "Unable to allocate swaybg command");
247 return; 247 return;
248 } 248 }
249 snprintf(command, len + 1, "%s %d \"%s\" %s %s", 249 snprintf(command, len + 1, "%s %d %s %s %s",
250 config->swaybg_command ? config->swaybg_command : "swaybg", 250 config->swaybg_command ? config->swaybg_command : "swaybg",
251 output_i, oc->background, oc->background_option, 251 output_i, oc->background, oc->background_option,
252 oc->background_fallback ? oc->background_fallback : ""); 252 oc->background_fallback ? oc->background_fallback : "");