aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Ian Fan <ianfan0@gmail.com>2018-09-24 18:42:25 +0100
committerLibravatar Ian Fan <ianfan0@gmail.com>2018-09-28 13:48:59 +0100
commit312d009f656e86401cda1c6198b929e4cbd85d2f (patch)
tree4ac796d0f654d29416a1906e70b05d79e1a0641a
parentMerge pull request #2722 from RyanDwyer/workspace-configs (diff)
downloadsway-312d009f656e86401cda1c6198b929e4cbd85d2f.tar.gz
sway-312d009f656e86401cda1c6198b929e4cbd85d2f.tar.zst
sway-312d009f656e86401cda1c6198b929e4cbd85d2f.zip
swaybar: fail if bar id is invalid
-rw-r--r--include/swaybar/bar.h4
-rw-r--r--include/swaybar/ipc.h2
-rw-r--r--swaybar/bar.c7
-rw-r--r--swaybar/ipc.c18
-rw-r--r--swaybar/main.c5
5 files changed, 26 insertions, 10 deletions
diff --git a/include/swaybar/bar.h b/include/swaybar/bar.h
index 29e96159..20a51809 100644
--- a/include/swaybar/bar.h
+++ b/include/swaybar/bar.h
@@ -95,9 +95,7 @@ struct swaybar_workspace {
95 bool urgent; 95 bool urgent;
96}; 96};
97 97
98void bar_setup(struct swaybar *bar, 98bool bar_setup(struct swaybar *bar, const char *socket_path, const char *bar_id);
99 const char *socket_path,
100 const char *bar_id);
101void bar_run(struct swaybar *bar); 99void bar_run(struct swaybar *bar);
102void bar_teardown(struct swaybar *bar); 100void bar_teardown(struct swaybar *bar);
103 101
diff --git a/include/swaybar/ipc.h b/include/swaybar/ipc.h
index a1696bcf..81e48a6b 100644
--- a/include/swaybar/ipc.h
+++ b/include/swaybar/ipc.h
@@ -3,7 +3,7 @@
3#include <stdbool.h> 3#include <stdbool.h>
4#include "swaybar/bar.h" 4#include "swaybar/bar.h"
5 5
6void ipc_initialize(struct swaybar *bar, const char *bar_id); 6bool ipc_initialize(struct swaybar *bar, const char *bar_id);
7bool handle_ipc_readable(struct swaybar *bar); 7bool handle_ipc_readable(struct swaybar *bar);
8void ipc_get_workspaces(struct swaybar *bar); 8void ipc_get_workspaces(struct swaybar *bar);
9void ipc_send_workspace_command(struct swaybar *bar, const char *ws); 9void ipc_send_workspace_command(struct swaybar *bar, const char *ws);
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
481void bar_setup(struct swaybar *bar, 481bool 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
531static void display_in(int fd, short mask, void *data) { 534static 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
144static void ipc_parse_config( 144static 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
231void ipc_get_workspaces(struct swaybar *bar) { 239void 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
315void ipc_initialize(struct swaybar *bar, const char *bar_id) { 323bool 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
329bool handle_ipc_readable(struct swaybar *bar) { 341bool 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);