aboutsummaryrefslogtreecommitdiff
path: root/sway/commands
diff options
context:
space:
mode:
Diffstat (limited to 'sway/commands')
-rw-r--r--sway/commands/output/background.c18
1 files changed, 17 insertions, 1 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) {
"Missing background scaling mode.");
}
- wordexp_t p;
+ wordexp_t p = {0};
char *src = join_args(argv, j);
while (strstr(src, " ")) {
src = realloc(src, strlen(src) + 2);
@@ -123,6 +123,22 @@ struct cmd_results *output_cmd_background(int argc, char **argv) {
}
free(src);
} else {
+ // Escape spaces and quotes in the final path for swaybg
+ for (size_t i = 0; i < strlen(src); i++) {
+ switch (src[i]) {
+ case ' ':
+ case '\'':
+ case '\"':
+ src = realloc(src, strlen(src) + 2);
+ memmove(src + i + 1, src + i, strlen(src + i) + 1);
+ *(src + i) = '\\';
+ i++;
+ break;
+ default:
+ break;
+ }
+ }
+
output->background = src;
output->background_option = strdup(mode);
}