Add --label support to sway{nag,bg,bar}_command

This commit is contained in:
Daniel De Graaf 2020-09-19 13:02:47 -04:00
parent 27c67cc2b3
commit 2704e07c49
8 changed files with 58 additions and 0 deletions

View file

@ -321,6 +321,7 @@ enum pango_markup_config {
struct bar_config { struct bar_config {
char *swaybar_command; char *swaybar_command;
char *swaybar_label;
struct wl_client *client; struct wl_client *client;
struct wl_listener client_destroy; struct wl_listener client_destroy;
@ -473,6 +474,7 @@ enum xwayland_mode {
*/ */
struct sway_config { struct sway_config {
char *swaynag_command; char *swaynag_command;
char *swaynag_label;
struct swaynag_instance swaynag_config_errors; struct swaynag_instance swaynag_config_errors;
list_t *symbols; list_t *symbols;
list_t *modes; list_t *modes;
@ -512,6 +514,7 @@ struct sway_config {
// swaybg // swaybg
char *swaybg_command; char *swaybg_command;
char *swaybg_label;
struct wl_client *swaybg_client; struct wl_client *swaybg_client;
struct wl_listener swaybg_client_destroy; struct wl_listener swaybg_client_destroy;

View file

@ -1,3 +1,4 @@
#define _XOPEN_SOURCE 700 // for strdup
#include <string.h> #include <string.h>
#include "sway/commands.h" #include "sway/commands.h"
#include "log.h" #include "log.h"
@ -5,11 +6,22 @@
struct cmd_results *bar_cmd_swaybar_command(int argc, char **argv) { struct cmd_results *bar_cmd_swaybar_command(int argc, char **argv) {
struct cmd_results *error = NULL; struct cmd_results *error = NULL;
char *new_label = NULL;
if ((error = checkarg(argc, "swaybar_command", EXPECTED_AT_LEAST, 1))) { if ((error = checkarg(argc, "swaybar_command", EXPECTED_AT_LEAST, 1))) {
return error; 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); free(config->current_bar->swaybar_command);
config->current_bar->swaybar_command = join_args(argv, argc); 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", sway_log(SWAY_DEBUG, "Using custom swaybar command: %s",
config->current_bar->swaybar_command); config->current_bar->swaybar_command);
return cmd_results_new(CMD_SUCCESS, NULL); return cmd_results_new(CMD_SUCCESS, NULL);

View file

@ -1,3 +1,4 @@
#define _XOPEN_SOURCE 700 // for strdup
#include <string.h> #include <string.h>
#include "sway/commands.h" #include "sway/commands.h"
#include "log.h" #include "log.h"
@ -5,12 +6,23 @@
struct cmd_results *cmd_swaybg_command(int argc, char **argv) { struct cmd_results *cmd_swaybg_command(int argc, char **argv) {
struct cmd_results *error = NULL; struct cmd_results *error = NULL;
char *new_label = NULL;
if ((error = checkarg(argc, "swaybg_command", EXPECTED_AT_LEAST, 1))) { if ((error = checkarg(argc, "swaybg_command", EXPECTED_AT_LEAST, 1))) {
return error; 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); free(config->swaybg_command);
config->swaybg_command = NULL; config->swaybg_command = NULL;
free(config->swaybg_label);
config->swaybg_label = new_label;
char *new_command = join_args(argv, argc); char *new_command = join_args(argv, argc);
if (strcmp(new_command, "-") != 0) { if (strcmp(new_command, "-") != 0) {

View file

@ -1,3 +1,4 @@
#define _XOPEN_SOURCE 700 // for strdup
#include <string.h> #include <string.h>
#include "sway/commands.h" #include "sway/commands.h"
#include "log.h" #include "log.h"
@ -5,12 +6,23 @@
struct cmd_results *cmd_swaynag_command(int argc, char **argv) { struct cmd_results *cmd_swaynag_command(int argc, char **argv) {
struct cmd_results *error = NULL; struct cmd_results *error = NULL;
char *new_label = NULL;
if ((error = checkarg(argc, "swaynag_command", EXPECTED_AT_LEAST, 1))) { if ((error = checkarg(argc, "swaynag_command", EXPECTED_AT_LEAST, 1))) {
return error; 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); free(config->swaynag_command);
config->swaynag_command = NULL; config->swaynag_command = NULL;
free(config->swaynag_label);
config->swaynag_label = new_label;
char *new_command = join_args(argv, argc); char *new_command = join_args(argv, argc);
if (strcmp(new_command, "-") != 0) { if (strcmp(new_command, "-") != 0) {

View file

@ -161,6 +161,8 @@ void free_config(struct sway_config *config) {
free(config->font); free(config->font);
free(config->swaybg_command); free(config->swaybg_command);
free(config->swaynag_command); free(config->swaynag_command);
free(config->swaybg_label);
free(config->swaynag_label);
free((char *)config->current_config_path); free((char *)config->current_config_path);
free((char *)config->current_config); free((char *)config->current_config);
keysym_translation_state_destroy(config->keysym_translation_state); keysym_translation_state_destroy(config->keysym_translation_state);

View file

@ -10,6 +10,7 @@
#include <sys/wait.h> #include <sys/wait.h>
#include <unistd.h> #include <unistd.h>
#include <wordexp.h> #include <wordexp.h>
#include "sway/client_label.h"
#include "sway/config.h" #include "sway/config.h"
#include "sway/input/keyboard.h" #include "sway/input/keyboard.h"
#include "sway/output.h" #include "sway/output.h"
@ -37,6 +38,7 @@ void free_bar_config(struct bar_config *bar) {
free(bar->hidden_state); free(bar->hidden_state);
free(bar->status_command); free(bar->status_command);
free(bar->swaybar_command); free(bar->swaybar_command);
free(bar->swaybar_label);
free(bar->font); free(bar->font);
free(bar->separator_symbol); free(bar->separator_symbol);
if (bar->bindings) { if (bar->bindings) {
@ -205,6 +207,10 @@ static void invoke_swaybar(struct bar_config *bar) {
return; return;
} }
if (bar->swaybar_label) {
wl_client_label_set(bar->client, strdup(bar->swaybar_label));
}
bar->client_destroy.notify = handle_swaybar_client_destroy; bar->client_destroy.notify = handle_swaybar_client_destroy;
wl_client_add_destroy_listener(bar->client, &bar->client_destroy); wl_client_add_destroy_listener(bar->client, &bar->client_destroy);

View file

@ -10,6 +10,7 @@
#include <wlr/types/wlr_output_layout.h> #include <wlr/types/wlr_output_layout.h>
#include <wlr/types/wlr_output.h> #include <wlr/types/wlr_output.h>
#include <wlr/backend/drm.h> #include <wlr/backend/drm.h>
#include "sway/client_label.h"
#include "sway/config.h" #include "sway/config.h"
#include "sway/input/cursor.h" #include "sway/input/cursor.h"
#include "sway/output.h" #include "sway/output.h"
@ -779,6 +780,10 @@ static bool _spawn_swaybg(char **command) {
return false; 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; config->swaybg_client_destroy.notify = handle_swaybg_client_destroy;
wl_client_add_destroy_listener(config->swaybg_client, wl_client_add_destroy_listener(config->swaybg_client,
&config->swaybg_client_destroy); &config->swaybg_client_destroy);

View file

@ -8,6 +8,8 @@
#include <sys/wait.h> #include <sys/wait.h>
#include <unistd.h> #include <unistd.h>
#include "log.h" #include "log.h"
#include "sway/client_label.h"
#include "sway/config.h"
#include "sway/server.h" #include "sway/server.h"
#include "sway/swaynag.h" #include "sway/swaynag.h"
#include "util.h" #include "util.h"
@ -56,6 +58,10 @@ bool swaynag_spawn(const char *swaynag_command,
goto failed; goto failed;
} }
if (config->swaynag_label) {
wl_client_label_set(swaynag->client, strdup(config->swaynag_label));
}
swaynag->client_destroy.notify = handle_swaynag_client_destroy; swaynag->client_destroy.notify = handle_swaynag_client_destroy;
wl_client_add_destroy_listener(swaynag->client, &swaynag->client_destroy); wl_client_add_destroy_listener(swaynag->client, &swaynag->client_destroy);