From 2704e07c49da1f3a4ff9844d427d52c0377e7c27 Mon Sep 17 00:00:00 2001 From: Daniel De Graaf Date: Sat, 19 Sep 2020 13:02:47 -0400 Subject: [PATCH] Add --label support to sway{nag,bg,bar}_command --- include/sway/config.h | 3 +++ sway/commands/bar/swaybar_command.c | 12 ++++++++++++ sway/commands/swaybg_command.c | 12 ++++++++++++ sway/commands/swaynag_command.c | 12 ++++++++++++ sway/config.c | 2 ++ sway/config/bar.c | 6 ++++++ sway/config/output.c | 5 +++++ sway/swaynag.c | 6 ++++++ 8 files changed, 58 insertions(+) diff --git a/include/sway/config.h b/include/sway/config.h index 538930f22..f38e7e351 100644 --- a/include/sway/config.h +++ b/include/sway/config.h @@ -321,6 +321,7 @@ enum pango_markup_config { struct bar_config { char *swaybar_command; + char *swaybar_label; struct wl_client *client; struct wl_listener client_destroy; @@ -473,6 +474,7 @@ enum xwayland_mode { */ struct sway_config { char *swaynag_command; + char *swaynag_label; struct swaynag_instance swaynag_config_errors; list_t *symbols; list_t *modes; @@ -512,6 +514,7 @@ struct sway_config { // swaybg char *swaybg_command; + char *swaybg_label; struct wl_client *swaybg_client; struct wl_listener swaybg_client_destroy; diff --git a/sway/commands/bar/swaybar_command.c b/sway/commands/bar/swaybar_command.c index 0892a898a..65ca5ce72 100644 --- a/sway/commands/bar/swaybar_command.c +++ b/sway/commands/bar/swaybar_command.c @@ -1,3 +1,4 @@ +#define _XOPEN_SOURCE 700 // for strdup #include #include "sway/commands.h" #include "log.h" @@ -5,11 +6,22 @@ struct cmd_results *bar_cmd_swaybar_command(int argc, char **argv) { struct cmd_results *error = NULL; + char *new_label = NULL; if ((error = checkarg(argc, "swaybar_command", EXPECTED_AT_LEAST, 1))) { return error; } + if (strcmp(argv[0], "--label") == 0) { + if ((error = checkarg(argc, "swaybar_command", EXPECTED_AT_LEAST, 3))) { + return error; + } + new_label = strdup(argv[1]); + argv += 2; + argc -= 2; + } free(config->current_bar->swaybar_command); config->current_bar->swaybar_command = join_args(argv, argc); + free(config->current_bar->swaybar_label); + config->current_bar->swaybar_label = new_label; sway_log(SWAY_DEBUG, "Using custom swaybar command: %s", config->current_bar->swaybar_command); return cmd_results_new(CMD_SUCCESS, NULL); diff --git a/sway/commands/swaybg_command.c b/sway/commands/swaybg_command.c index 92e9bdfd6..120c98940 100644 --- a/sway/commands/swaybg_command.c +++ b/sway/commands/swaybg_command.c @@ -1,3 +1,4 @@ +#define _XOPEN_SOURCE 700 // for strdup #include #include "sway/commands.h" #include "log.h" @@ -5,12 +6,23 @@ struct cmd_results *cmd_swaybg_command(int argc, char **argv) { struct cmd_results *error = NULL; + char *new_label = NULL; if ((error = checkarg(argc, "swaybg_command", EXPECTED_AT_LEAST, 1))) { return error; } + if (strcmp(argv[0], "--label") == 0) { + if ((error = checkarg(argc, "swaybg_command", EXPECTED_AT_LEAST, 3))) { + return error; + } + new_label = strdup(argv[1]); + argv += 2; + argc -= 2; + } free(config->swaybg_command); config->swaybg_command = NULL; + free(config->swaybg_label); + config->swaybg_label = new_label; char *new_command = join_args(argv, argc); if (strcmp(new_command, "-") != 0) { diff --git a/sway/commands/swaynag_command.c b/sway/commands/swaynag_command.c index f851d2234..8a409f0a7 100644 --- a/sway/commands/swaynag_command.c +++ b/sway/commands/swaynag_command.c @@ -1,3 +1,4 @@ +#define _XOPEN_SOURCE 700 // for strdup #include #include "sway/commands.h" #include "log.h" @@ -5,12 +6,23 @@ struct cmd_results *cmd_swaynag_command(int argc, char **argv) { struct cmd_results *error = NULL; + char *new_label = NULL; if ((error = checkarg(argc, "swaynag_command", EXPECTED_AT_LEAST, 1))) { return error; } + if (strcmp(argv[0], "--label") == 0) { + if ((error = checkarg(argc, "swaynag_command", EXPECTED_AT_LEAST, 3))) { + return error; + } + new_label = strdup(argv[1]); + argv += 2; + argc -= 2; + } free(config->swaynag_command); config->swaynag_command = NULL; + free(config->swaynag_label); + config->swaynag_label = new_label; char *new_command = join_args(argv, argc); if (strcmp(new_command, "-") != 0) { diff --git a/sway/config.c b/sway/config.c index e4745a5c7..bd528c763 100644 --- a/sway/config.c +++ b/sway/config.c @@ -161,6 +161,8 @@ void free_config(struct sway_config *config) { free(config->font); free(config->swaybg_command); free(config->swaynag_command); + free(config->swaybg_label); + free(config->swaynag_label); free((char *)config->current_config_path); free((char *)config->current_config); keysym_translation_state_destroy(config->keysym_translation_state); diff --git a/sway/config/bar.c b/sway/config/bar.c index d1b342e69..7ed4a4295 100644 --- a/sway/config/bar.c +++ b/sway/config/bar.c @@ -10,6 +10,7 @@ #include #include #include +#include "sway/client_label.h" #include "sway/config.h" #include "sway/input/keyboard.h" #include "sway/output.h" @@ -37,6 +38,7 @@ void free_bar_config(struct bar_config *bar) { free(bar->hidden_state); free(bar->status_command); free(bar->swaybar_command); + free(bar->swaybar_label); free(bar->font); free(bar->separator_symbol); if (bar->bindings) { @@ -205,6 +207,10 @@ static void invoke_swaybar(struct bar_config *bar) { return; } + if (bar->swaybar_label) { + wl_client_label_set(bar->client, strdup(bar->swaybar_label)); + } + bar->client_destroy.notify = handle_swaybar_client_destroy; wl_client_add_destroy_listener(bar->client, &bar->client_destroy); diff --git a/sway/config/output.c b/sway/config/output.c index 88514ac0d..714b25de3 100644 --- a/sway/config/output.c +++ b/sway/config/output.c @@ -10,6 +10,7 @@ #include #include #include +#include "sway/client_label.h" #include "sway/config.h" #include "sway/input/cursor.h" #include "sway/output.h" @@ -779,6 +780,10 @@ static bool _spawn_swaybg(char **command) { return false; } + if (config->swaybg_label) { + wl_client_label_set(config->swaybg_client, strdup(config->swaybg_label)); + } + config->swaybg_client_destroy.notify = handle_swaybg_client_destroy; wl_client_add_destroy_listener(config->swaybg_client, &config->swaybg_client_destroy); diff --git a/sway/swaynag.c b/sway/swaynag.c index 4a0a6d305..cc77ccc74 100644 --- a/sway/swaynag.c +++ b/sway/swaynag.c @@ -8,6 +8,8 @@ #include #include #include "log.h" +#include "sway/client_label.h" +#include "sway/config.h" #include "sway/server.h" #include "sway/swaynag.h" #include "util.h" @@ -56,6 +58,10 @@ bool swaynag_spawn(const char *swaynag_command, goto failed; } + if (config->swaynag_label) { + wl_client_label_set(swaynag->client, strdup(config->swaynag_label)); + } + swaynag->client_destroy.notify = handle_swaynag_client_destroy; wl_client_add_destroy_listener(swaynag->client, &swaynag->client_destroy);