aboutsummaryrefslogtreecommitdiffstats
path: root/sway/commands/bar.c
diff options
context:
space:
mode:
authorLibravatar Brian Ashworth <bosrsf04@gmail.com>2018-10-10 10:49:34 -0400
committerLibravatar Brian Ashworth <bosrsf04@gmail.com>2018-10-13 17:55:49 -0400
commit84b28dc5937e156db27df50854f93a7cfad82387 (patch)
tree95d477ee8b409550071e5b8de323ed72f02b4a01 /sway/commands/bar.c
parentbar_cmd_status_command: only reload current bar (diff)
downloadsway-84b28dc5937e156db27df50854f93a7cfad82387.tar.gz
sway-84b28dc5937e156db27df50854f93a7cfad82387.tar.zst
sway-84b28dc5937e156db27df50854f93a7cfad82387.zip
cmd_bar: fix bar id issues
Allows bar-subcommand to be a valid bar-ids Destroys runtime created bar if trying to use a config only subcommand Allow subcommands (except for id) to be ids
Diffstat (limited to 'sway/commands/bar.c')
-rw-r--r--sway/commands/bar.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/sway/commands/bar.c b/sway/commands/bar.c
index 49a94104..8d118fb6 100644
--- a/sway/commands/bar.c
+++ b/sway/commands/bar.c
@@ -38,6 +38,12 @@ static struct cmd_handler bar_config_handlers[] = {
38 { "swaybar_command", bar_cmd_swaybar_command }, 38 { "swaybar_command", bar_cmd_swaybar_command },
39}; 39};
40 40
41// Determines whether the subcommand is valid in any bar handler struct
42static bool is_subcommand(char *name) {
43 return find_handler(name, bar_handlers, sizeof(bar_handlers)) ||
44 find_handler(name, bar_config_handlers, sizeof(bar_config_handlers));
45}
46
41struct cmd_results *cmd_bar(int argc, char **argv) { 47struct cmd_results *cmd_bar(int argc, char **argv) {
42 struct cmd_results *error = NULL; 48 struct cmd_results *error = NULL;
43 if ((error = checkarg(argc, "bar", EXPECTED_AT_LEAST, 1))) { 49 if ((error = checkarg(argc, "bar", EXPECTED_AT_LEAST, 1))) {
@@ -47,8 +53,8 @@ struct cmd_results *cmd_bar(int argc, char **argv) {
47 bool spawn = false; 53 bool spawn = false;
48 if (argc > 1) { 54 if (argc > 1) {
49 struct bar_config *bar = NULL; 55 struct bar_config *bar = NULL;
50 if (!find_handler(argv[0], bar_handlers, sizeof(bar_handlers)) 56 if (!is_subcommand(argv[0]) ||
51 && find_handler(argv[1], bar_handlers, sizeof(bar_handlers))) { 57 (strcmp(argv[0], "id") != 0 && is_subcommand(argv[1]))) {
52 for (int i = 0; i < config->bars->length; ++i) { 58 for (int i = 0; i < config->bars->length; ++i) {
53 struct bar_config *item = config->bars->items[i]; 59 struct bar_config *item = config->bars->items[i];
54 if (strcmp(item->id, argv[0]) == 0) { 60 if (strcmp(item->id, argv[0]) == 0) {
@@ -106,6 +112,15 @@ struct cmd_results *cmd_bar(int argc, char **argv) {
106 if (config->reading) { 112 if (config->reading) {
107 return config_subcommand(argv, argc, bar_config_handlers, 113 return config_subcommand(argv, argc, bar_config_handlers,
108 sizeof(bar_config_handlers)); 114 sizeof(bar_config_handlers));
115 } else if (spawn) {
116 for (int i = config->bars->length - 1; i >= 0; i--) {
117 struct bar_config *bar = config->bars->items[i];
118 if (bar == config->current_bar) {
119 list_del(config->bars, i);
120 free_bar_config(bar);
121 break;
122 }
123 }
109 } 124 }
110 return cmd_results_new(CMD_INVALID, "bar", 125 return cmd_results_new(CMD_INVALID, "bar",
111 "Can only be used in the config file."); 126 "Can only be used in the config file.");