diff options
author | Ian Fan <ianfan0@gmail.com> | 2018-09-24 18:42:25 +0100 |
---|---|---|
committer | Ian Fan <ianfan0@gmail.com> | 2018-09-28 13:48:59 +0100 |
commit | 312d009f656e86401cda1c6198b929e4cbd85d2f (patch) | |
tree | 4ac796d0f654d29416a1906e70b05d79e1a0641a /swaybar | |
parent | Merge pull request #2722 from RyanDwyer/workspace-configs (diff) | |
download | sway-312d009f656e86401cda1c6198b929e4cbd85d2f.tar.gz sway-312d009f656e86401cda1c6198b929e4cbd85d2f.tar.zst sway-312d009f656e86401cda1c6198b929e4cbd85d2f.zip |
swaybar: fail if bar id is invalid
Diffstat (limited to 'swaybar')
-rw-r--r-- | swaybar/bar.c | 7 | ||||
-rw-r--r-- | swaybar/ipc.c | 18 | ||||
-rw-r--r-- | swaybar/main.c | 5 |
3 files changed, 24 insertions, 6 deletions
diff --git a/swaybar/bar.c b/swaybar/bar.c index ab307fd4..809416dd 100644 --- a/swaybar/bar.c +++ b/swaybar/bar.c | |||
@@ -478,14 +478,16 @@ static void render_all_frames(struct swaybar *bar) { | |||
478 | } | 478 | } |
479 | } | 479 | } |
480 | 480 | ||
481 | void bar_setup(struct swaybar *bar, | 481 | bool bar_setup(struct swaybar *bar, |
482 | const char *socket_path, const char *bar_id) { | 482 | const char *socket_path, const char *bar_id) { |
483 | bar_init(bar); | 483 | bar_init(bar); |
484 | init_event_loop(); | 484 | init_event_loop(); |
485 | 485 | ||
486 | bar->ipc_socketfd = ipc_open_socket(socket_path); | 486 | bar->ipc_socketfd = ipc_open_socket(socket_path); |
487 | bar->ipc_event_socketfd = ipc_open_socket(socket_path); | 487 | bar->ipc_event_socketfd = ipc_open_socket(socket_path); |
488 | ipc_initialize(bar, bar_id); | 488 | if (!ipc_initialize(bar, bar_id)) { |
489 | return false; | ||
490 | } | ||
489 | if (bar->config->status_command) { | 491 | if (bar->config->status_command) { |
490 | bar->status = status_line_init(bar->config->status_command); | 492 | bar->status = status_line_init(bar->config->status_command); |
491 | } | 493 | } |
@@ -526,6 +528,7 @@ void bar_setup(struct swaybar *bar, | |||
526 | 528 | ||
527 | ipc_get_workspaces(bar); | 529 | ipc_get_workspaces(bar); |
528 | render_all_frames(bar); | 530 | render_all_frames(bar); |
531 | return true; | ||
529 | } | 532 | } |
530 | 533 | ||
531 | static void display_in(int fd, short mask, void *data) { | 534 | static void display_in(int fd, short mask, void *data) { |
diff --git a/swaybar/ipc.c b/swaybar/ipc.c index 0e60c10c..2b50528d 100644 --- a/swaybar/ipc.c +++ b/swaybar/ipc.c | |||
@@ -141,9 +141,16 @@ static void ipc_parse_colors( | |||
141 | } | 141 | } |
142 | } | 142 | } |
143 | 143 | ||
144 | static void ipc_parse_config( | 144 | static bool ipc_parse_config( |
145 | struct swaybar_config *config, const char *payload) { | 145 | struct swaybar_config *config, const char *payload) { |
146 | json_object *bar_config = json_tokener_parse(payload); | 146 | json_object *bar_config = json_tokener_parse(payload); |
147 | json_object *success; | ||
148 | if (json_object_object_get_ex(bar_config, "success", &success) | ||
149 | && !json_object_get_boolean(success)) { | ||
150 | wlr_log(WLR_ERROR, "No bar with that ID. Use 'swaymsg -t get_bar_config to get the available bar configs."); | ||
151 | json_object_put(bar_config); | ||
152 | return false; | ||
153 | } | ||
147 | json_object *markup, *mode, *hidden_bar, *position, *status_command; | 154 | json_object *markup, *mode, *hidden_bar, *position, *status_command; |
148 | json_object *font, *bar_height, *wrap_scroll, *workspace_buttons, *strip_workspace_numbers; | 155 | json_object *font, *bar_height, *wrap_scroll, *workspace_buttons, *strip_workspace_numbers; |
149 | json_object *binding_mode_indicator, *verbose, *colors, *sep_symbol, *outputs; | 156 | json_object *binding_mode_indicator, *verbose, *colors, *sep_symbol, *outputs; |
@@ -226,6 +233,7 @@ static void ipc_parse_config( | |||
226 | } | 233 | } |
227 | 234 | ||
228 | json_object_put(bar_config); | 235 | json_object_put(bar_config); |
236 | return true; | ||
229 | } | 237 | } |
230 | 238 | ||
231 | void ipc_get_workspaces(struct swaybar *bar) { | 239 | void ipc_get_workspaces(struct swaybar *bar) { |
@@ -312,11 +320,14 @@ static void ipc_get_outputs(struct swaybar *bar) { | |||
312 | free(res); | 320 | free(res); |
313 | } | 321 | } |
314 | 322 | ||
315 | void ipc_initialize(struct swaybar *bar, const char *bar_id) { | 323 | bool ipc_initialize(struct swaybar *bar, const char *bar_id) { |
316 | uint32_t len = strlen(bar_id); | 324 | uint32_t len = strlen(bar_id); |
317 | char *res = ipc_single_command(bar->ipc_socketfd, | 325 | char *res = ipc_single_command(bar->ipc_socketfd, |
318 | IPC_GET_BAR_CONFIG, bar_id, &len); | 326 | IPC_GET_BAR_CONFIG, bar_id, &len); |
319 | ipc_parse_config(bar->config, res); | 327 | if (!ipc_parse_config(bar->config, res)) { |
328 | free(res); | ||
329 | return false; | ||
330 | } | ||
320 | free(res); | 331 | free(res); |
321 | ipc_get_outputs(bar); | 332 | ipc_get_outputs(bar); |
322 | 333 | ||
@@ -324,6 +335,7 @@ void ipc_initialize(struct swaybar *bar, const char *bar_id) { | |||
324 | len = strlen(subscribe); | 335 | len = strlen(subscribe); |
325 | free(ipc_single_command(bar->ipc_event_socketfd, | 336 | free(ipc_single_command(bar->ipc_event_socketfd, |
326 | IPC_SUBSCRIBE, subscribe, &len)); | 337 | IPC_SUBSCRIBE, subscribe, &len)); |
338 | return true; | ||
327 | } | 339 | } |
328 | 340 | ||
329 | bool handle_ipc_readable(struct swaybar *bar) { | 341 | bool handle_ipc_readable(struct swaybar *bar) { |
diff --git a/swaybar/main.c b/swaybar/main.c index 60e4b37c..d2c579db 100644 --- a/swaybar/main.c +++ b/swaybar/main.c | |||
@@ -96,7 +96,10 @@ int main(int argc, char **argv) { | |||
96 | 96 | ||
97 | signal(SIGTERM, sig_handler); | 97 | signal(SIGTERM, sig_handler); |
98 | 98 | ||
99 | bar_setup(&swaybar, socket_path, bar_id); | 99 | if (!bar_setup(&swaybar, socket_path, bar_id)) { |
100 | free(socket_path); | ||
101 | return 1; | ||
102 | } | ||
100 | 103 | ||
101 | free(socket_path); | 104 | free(socket_path); |
102 | free(bar_id); | 105 | free(bar_id); |