diff options
author | Brian Ashworth <bosrsf04@gmail.com> | 2018-10-09 13:41:12 -0400 |
---|---|---|
committer | Brian Ashworth <bosrsf04@gmail.com> | 2018-10-13 08:00:01 -0400 |
commit | 00745d6280d36b57e661f9de7af84c93fde60efa (patch) | |
tree | 2518c93327baa4df99c25f68754adf77c8429364 | |
parent | Merge pull request #2828 from RyanDwyer/fix-locked-map-crash (diff) | |
download | sway-00745d6280d36b57e661f9de7af84c93fde60efa.tar.gz sway-00745d6280d36b57e661f9de7af84c93fde60efa.tar.zst sway-00745d6280d36b57e661f9de7af84c93fde60efa.zip |
Fix bar subcommand handler structs and selection
-rw-r--r-- | include/sway/config.h | 2 | ||||
-rw-r--r-- | sway/commands/bar.c | 40 | ||||
-rw-r--r-- | sway/config/bar.c | 14 |
3 files changed, 35 insertions, 21 deletions
diff --git a/include/sway/config.h b/include/sway/config.h index bc02c0fd..2396e9ef 100644 --- a/include/sway/config.h +++ b/include/sway/config.h | |||
@@ -531,6 +531,8 @@ void free_sway_binding(struct sway_binding *sb); | |||
531 | 531 | ||
532 | void seat_execute_command(struct sway_seat *seat, struct sway_binding *binding); | 532 | void seat_execute_command(struct sway_seat *seat, struct sway_binding *binding); |
533 | 533 | ||
534 | void load_swaybar(struct bar_config *bar); | ||
535 | |||
534 | void load_swaybars(void); | 536 | void load_swaybars(void); |
535 | 537 | ||
536 | void terminate_swaybg(pid_t pid); | 538 | void terminate_swaybg(pid_t pid); |
diff --git a/sway/commands/bar.c b/sway/commands/bar.c index 03f4c557..49a94104 100644 --- a/sway/commands/bar.c +++ b/sway/commands/bar.c | |||
@@ -17,7 +17,6 @@ static struct cmd_handler bar_handlers[] = { | |||
17 | { "height", bar_cmd_height }, | 17 | { "height", bar_cmd_height }, |
18 | { "hidden_state", bar_cmd_hidden_state }, | 18 | { "hidden_state", bar_cmd_hidden_state }, |
19 | { "icon_theme", bar_cmd_icon_theme }, | 19 | { "icon_theme", bar_cmd_icon_theme }, |
20 | { "id", bar_cmd_id }, | ||
21 | { "mode", bar_cmd_mode }, | 20 | { "mode", bar_cmd_mode }, |
22 | { "modifier", bar_cmd_modifier }, | 21 | { "modifier", bar_cmd_modifier }, |
23 | { "output", bar_cmd_output }, | 22 | { "output", bar_cmd_output }, |
@@ -27,7 +26,6 @@ static struct cmd_handler bar_handlers[] = { | |||
27 | { "separator_symbol", bar_cmd_separator_symbol }, | 26 | { "separator_symbol", bar_cmd_separator_symbol }, |
28 | { "status_command", bar_cmd_status_command }, | 27 | { "status_command", bar_cmd_status_command }, |
29 | { "strip_workspace_numbers", bar_cmd_strip_workspace_numbers }, | 28 | { "strip_workspace_numbers", bar_cmd_strip_workspace_numbers }, |
30 | { "swaybar_command", bar_cmd_swaybar_command }, | ||
31 | { "tray_output", bar_cmd_tray_output }, | 29 | { "tray_output", bar_cmd_tray_output }, |
32 | { "tray_padding", bar_cmd_tray_padding }, | 30 | { "tray_padding", bar_cmd_tray_padding }, |
33 | { "workspace_buttons", bar_cmd_workspace_buttons }, | 31 | { "workspace_buttons", bar_cmd_workspace_buttons }, |
@@ -36,8 +34,8 @@ static struct cmd_handler bar_handlers[] = { | |||
36 | 34 | ||
37 | // Must be in alphabetical order for bsearch | 35 | // Must be in alphabetical order for bsearch |
38 | static struct cmd_handler bar_config_handlers[] = { | 36 | static struct cmd_handler bar_config_handlers[] = { |
39 | { "hidden_state", bar_cmd_hidden_state }, | 37 | { "id", bar_cmd_id }, |
40 | { "mode", bar_cmd_mode } | 38 | { "swaybar_command", bar_cmd_swaybar_command }, |
41 | }; | 39 | }; |
42 | 40 | ||
43 | struct cmd_results *cmd_bar(int argc, char **argv) { | 41 | struct cmd_results *cmd_bar(int argc, char **argv) { |
@@ -46,16 +44,7 @@ struct cmd_results *cmd_bar(int argc, char **argv) { | |||
46 | return error; | 44 | return error; |
47 | } | 45 | } |
48 | 46 | ||
49 | if (find_handler(argv[0], bar_config_handlers, | 47 | bool spawn = false; |
50 | sizeof(bar_config_handlers))) { | ||
51 | if (config->reading) { | ||
52 | return config_subcommand(argv, argc, bar_config_handlers, | ||
53 | sizeof(bar_config_handlers)); | ||
54 | } | ||
55 | return cmd_results_new(CMD_FAILURE, "bar", | ||
56 | "Can only be used in config file."); | ||
57 | } | ||
58 | |||
59 | if (argc > 1) { | 48 | if (argc > 1) { |
60 | struct bar_config *bar = NULL; | 49 | struct bar_config *bar = NULL; |
61 | if (!find_handler(argv[0], bar_handlers, sizeof(bar_handlers)) | 50 | if (!find_handler(argv[0], bar_handlers, sizeof(bar_handlers)) |
@@ -69,6 +58,7 @@ struct cmd_results *cmd_bar(int argc, char **argv) { | |||
69 | } | 58 | } |
70 | } | 59 | } |
71 | if (!bar) { | 60 | if (!bar) { |
61 | spawn = !config->reading; | ||
72 | wlr_log(WLR_DEBUG, "Creating bar: %s", argv[0]); | 62 | wlr_log(WLR_DEBUG, "Creating bar: %s", argv[0]); |
73 | bar = default_bar_config(); | 63 | bar = default_bar_config(); |
74 | if (!bar) { | 64 | if (!bar) { |
@@ -83,7 +73,7 @@ struct cmd_results *cmd_bar(int argc, char **argv) { | |||
83 | } | 73 | } |
84 | } | 74 | } |
85 | 75 | ||
86 | if (!config->current_bar) { | 76 | if (!config->current_bar && config->reading) { |
87 | // Create new bar with default values | 77 | // Create new bar with default values |
88 | struct bar_config *bar = default_bar_config(); | 78 | struct bar_config *bar = default_bar_config(); |
89 | if (!bar) { | 79 | if (!bar) { |
@@ -111,5 +101,23 @@ struct cmd_results *cmd_bar(int argc, char **argv) { | |||
111 | wlr_log(WLR_DEBUG, "Creating bar %s", bar->id); | 101 | wlr_log(WLR_DEBUG, "Creating bar %s", bar->id); |
112 | } | 102 | } |
113 | 103 | ||
114 | return config_subcommand(argv, argc, bar_handlers, sizeof(bar_handlers)); | 104 | if (find_handler(argv[0], bar_config_handlers, |
105 | sizeof(bar_config_handlers))) { | ||
106 | if (config->reading) { | ||
107 | return config_subcommand(argv, argc, bar_config_handlers, | ||
108 | sizeof(bar_config_handlers)); | ||
109 | } | ||
110 | return cmd_results_new(CMD_INVALID, "bar", | ||
111 | "Can only be used in the config file."); | ||
112 | } | ||
113 | |||
114 | struct cmd_results *res = | ||
115 | config_subcommand(argv, argc, bar_handlers, sizeof(bar_handlers)); | ||
116 | if (!config->reading) { | ||
117 | if (spawn) { | ||
118 | load_swaybar(config->current_bar); | ||
119 | } | ||
120 | config->current_bar = NULL; | ||
121 | } | ||
122 | return res; | ||
115 | } | 123 | } |
diff --git a/sway/config/bar.c b/sway/config/bar.c index c6899f57..5726e95b 100644 --- a/sway/config/bar.c +++ b/sway/config/bar.c | |||
@@ -226,13 +226,17 @@ static void invoke_swaybar(struct bar_config *bar) { | |||
226 | close(filedes[1]); | 226 | close(filedes[1]); |
227 | } | 227 | } |
228 | 228 | ||
229 | void load_swaybar(struct bar_config *bar) { | ||
230 | if (bar->pid != 0) { | ||
231 | terminate_swaybar(bar->pid); | ||
232 | } | ||
233 | wlr_log(WLR_DEBUG, "Invoking swaybar for bar id '%s'", bar->id); | ||
234 | invoke_swaybar(bar); | ||
235 | } | ||
236 | |||
229 | void load_swaybars(void) { | 237 | void load_swaybars(void) { |
230 | for (int i = 0; i < config->bars->length; ++i) { | 238 | for (int i = 0; i < config->bars->length; ++i) { |
231 | struct bar_config *bar = config->bars->items[i]; | 239 | struct bar_config *bar = config->bars->items[i]; |
232 | if (bar->pid != 0) { | 240 | load_swaybar(bar); |
233 | terminate_swaybar(bar->pid); | ||
234 | } | ||
235 | wlr_log(WLR_DEBUG, "Invoking swaybar for bar id '%s'", bar->id); | ||
236 | invoke_swaybar(bar); | ||
237 | } | 241 | } |
238 | } | 242 | } |