diff options
author | Drew DeVault <sir@cmpwn.com> | 2018-09-14 20:56:50 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-14 20:56:50 -0400 |
commit | b4d60da8568c59e6aaf8995d737d587da88c2cbf (patch) | |
tree | 1f71cb868579ee7b0331435eee4f62592f9ab9d8 | |
parent | 7699c5444c32289a22ce2c57d1daadabed87e7ac (diff) | |
parent | 73aab86b6d51b57d0426c5b81e36adfee6611ef1 (diff) | |
download | sway-b4d60da8568c59e6aaf8995d737d587da88c2cbf.tar.xz |
Merge branch 'master' into wlroots-1243
-rw-r--r-- | sway/commands/output/background.c | 26 | ||||
-rw-r--r-- | sway/server.c | 2 | ||||
-rw-r--r-- | sway/tree/view.c | 2 | ||||
-rw-r--r-- | swaybar/i3bar.c | 21 |
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); } } |