From c988b03d85e4c747194a682a40ab1b1e309a2fbe Mon Sep 17 00:00:00 2001 From: emersion Date: Mon, 8 Oct 2018 15:08:33 +0200 Subject: [PATCH 1/2] Allow swaybg to be disabled Same as #2791 but for swaybg. Fixes #2790 --- sway/commands/swaybg_command.c | 15 ++++++++++----- sway/config.c | 3 +++ sway/config/output.c | 19 +++++++++---------- sway/sway.5.scd | 3 +++ 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/sway/commands/swaybg_command.c b/sway/commands/swaybg_command.c index 36f7fdcd4..b184b1930 100644 --- a/sway/commands/swaybg_command.c +++ b/sway/commands/swaybg_command.c @@ -9,12 +9,17 @@ struct cmd_results *cmd_swaybg_command(int argc, char **argv) { return error; } - if (config->swaybg_command) { - free(config->swaybg_command); + free(config->swaybg_command); + config->swaybg_command = NULL; + + char *new_command = join_args(argv, argc); + if (strcmp(new_command, "-") != 0) { + config->swaybg_command = new_command; + wlr_log(WLR_DEBUG, "Using custom swaybg command: %s", + config->swaybg_command); + } else { + free(new_command); } - config->swaybg_command = join_args(argv, argc); - wlr_log(WLR_DEBUG, "Using custom swaybg command: %s", - config->swaybg_command); return cmd_results_new(CMD_SUCCESS, NULL, NULL); } diff --git a/sway/config.c b/sway/config.c index 8f8ed438b..7f29347a5 100644 --- a/sway/config.c +++ b/sway/config.c @@ -136,6 +136,7 @@ void free_config(struct sway_config *config) { free(config->floating_scroll_left_cmd); free(config->floating_scroll_right_cmd); free(config->font); + free(config->swaybg_command); free((char *)config->current_config_path); free((char *)config->current_config); free(config); @@ -240,6 +241,8 @@ static void config_defaults(struct sway_config *config) { if (!(config->active_bar_modifiers = create_list())) goto cleanup; + if (!(config->swaybg_command = strdup("swaybg"))) goto cleanup; + if (!(config->config_chain = create_list())) goto cleanup; config->current_config_path = NULL; config->current_config = NULL; diff --git a/sway/config/output.c b/sway/config/output.c index 6f337b66b..2b0413535 100644 --- a/sway/config/output.c +++ b/sway/config/output.c @@ -229,17 +229,16 @@ void apply_output_config(struct output_config *oc, struct sway_output *output) { } } - if (oc && oc->background) { - if (output->bg_pid != 0) { - terminate_swaybg(output->bg_pid); - } - + if (output->bg_pid != 0) { + terminate_swaybg(output->bg_pid); + } + if (oc && oc->background && config->swaybg_command) { wlr_log(WLR_DEBUG, "Setting background for output %d to %s", output_i, oc->background); size_t len = snprintf(NULL, 0, "%s %d \"%s\" %s %s", - config->swaybg_command ? config->swaybg_command : "swaybg", - output_i, oc->background, oc->background_option, + config->swaybg_command, output_i, oc->background, + oc->background_option, oc->background_fallback ? oc->background_fallback : ""); char *command = malloc(len + 1); if (!command) { @@ -247,8 +246,8 @@ void apply_output_config(struct output_config *oc, struct sway_output *output) { return; } snprintf(command, len + 1, "%s %d \"%s\" %s %s", - config->swaybg_command ? config->swaybg_command : "swaybg", - output_i, oc->background, oc->background_option, + config->swaybg_command, output_i, oc->background, + oc->background_option, oc->background_fallback ? oc->background_fallback : ""); wlr_log(WLR_DEBUG, "-> %s", command); @@ -260,6 +259,7 @@ void apply_output_config(struct output_config *oc, struct sway_output *output) { free(command); } } + if (oc) { switch (oc->dpms_state) { case DPMS_ON: @@ -353,4 +353,3 @@ void create_default_output_configs(void) { list_add(config->output_configs, oc); } } - diff --git a/sway/sway.5.scd b/sway/sway.5.scd index 3fda6cefc..c7d20b17c 100644 --- a/sway/sway.5.scd +++ b/sway/sway.5.scd @@ -71,6 +71,9 @@ The following commands may only be used in the configuration file. Executes custom background _command_. Default is _swaybg_. Refer to *output* below for more information. + It can be disabled by setting the command to a single dash: + _swaybg\_command -_ + *swaynag\_command* Executes custom command for _swaynag_. Default is _swaynag_. Additional arguments may be appended to the end. This should only be used to either From ab3a397d58898045c3461bbdca8f48361ccfb8f4 Mon Sep 17 00:00:00 2001 From: emersion Date: Mon, 8 Oct 2018 15:21:20 +0200 Subject: [PATCH 2/2] Fix memory leak in status_command handler --- sway/commands/bar/status_command.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sway/commands/bar/status_command.c b/sway/commands/bar/status_command.c index 5ea225256..5b4fdc87d 100644 --- a/sway/commands/bar/status_command.c +++ b/sway/commands/bar/status_command.c @@ -20,6 +20,8 @@ struct cmd_results *bar_cmd_status_command(int argc, char **argv) { config->current_bar->status_command = new_command; wlr_log(WLR_DEBUG, "Feeding bar with status command: %s", config->current_bar->status_command); + } else { + free(new_command); } if (config->active && !config->validating) {