aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sway/commands/output/background.c26
-rw-r--r--sway/server.c2
-rw-r--r--sway/tree/view.c2
-rw-r--r--swaybar/i3bar.c21
4 files changed, 34 insertions, 17 deletions
diff --git a/sway/commands/output/background.c b/sway/commands/output/background.c
index ddad679d..9e370d43 100644
--- a/sway/commands/output/background.c
+++ b/sway/commands/output/background.c
@@ -61,8 +61,14 @@ 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);
+ char *ptr = strstr(src, " ") + 1;
+ memmove(ptr + 1, ptr, strlen(ptr) + 1);
+ *ptr = '\\';
+ }
if (wordexp(src, &p, 0) != 0 || p.we_wordv[0] == NULL) {
struct cmd_results *cmd_res = cmd_results_new(CMD_INVALID, "output",
"Invalid syntax (%s)", src);
@@ -71,7 +77,7 @@ struct cmd_results *output_cmd_background(int argc, char **argv) {
return cmd_res;
}
free(src);
- src = strdup(p.we_wordv[0]);
+ src = join_args(p.we_wordv, p.we_wordc);
wordfree(&p);
if (!src) {
wlr_log(WLR_ERROR, "Failed to duplicate string");
@@ -117,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);
}
diff --git a/sway/server.c b/sway/server.c
index 58843944..9440c10f 100644
--- a/sway/server.c
+++ b/sway/server.c
@@ -16,7 +16,7 @@
#include <wlr/types/wlr_screencopy_v1.h>
#include <wlr/types/wlr_server_decoration.h>
#include <wlr/types/wlr_xcursor_manager.h>
-#include <wlr/types/wlr_xdg_output.h>
+#include <wlr/types/wlr_xdg_output_v1.h>
#include <wlr/util/log.h>
#include "list.h"
#include "sway/config.h"
diff --git a/sway/tree/view.c b/sway/tree/view.c
index d02abf30..78f85de2 100644
--- a/sway/tree/view.c
+++ b/sway/tree/view.c
@@ -34,8 +34,6 @@ void view_init(struct sway_view *view, enum sway_view_type type,
view->marks = create_list();
view->allow_request_urgent = true;
wl_signal_init(&view->events.unmap);
-
- view->container = container_create(view);
}
void view_destroy(struct sway_view *view) {
diff --git a/swaybar/i3bar.c b/swaybar/i3bar.c
index 1345ee9b..0becae5d 100644
--- a/swaybar/i3bar.c
+++ b/swaybar/i3bar.c
@@ -8,22 +8,19 @@
#include "swaybar/config.h"
#include "swaybar/status_line.h"
-static void i3bar_block_free(struct i3bar_block *block) {
- if (!block) {
+void i3bar_block_unref(struct i3bar_block *block) {
+ if (block == NULL) {
return;
}
- free(block->full_text);
- free(block->short_text);
- free(block->align);
- free(block->name);
- free(block->instance);
- free(block->color);
- free(block);
-}
-void i3bar_block_unref(struct i3bar_block *block) {
if (--block->ref_count == 0) {
- i3bar_block_free(block);
+ free(block->full_text);
+ free(block->short_text);
+ free(block->align);
+ free(block->name);
+ free(block->instance);
+ free(block->color);
+ free(block);
}
}