diff options
author | Ian Fan <ianfan0@gmail.com> | 2018-10-12 20:28:04 +0100 |
---|---|---|
committer | Ian Fan <ianfan0@gmail.com> | 2018-10-14 13:33:12 +0100 |
commit | 55ca16f2d83f4d7e14635ac4de3eb67ee2a0787e (patch) | |
tree | c92080e2e054cf0b7b2e33e615b55f6143fcda9f /swaybar/ipc.c | |
parent | swaybar: move mode & mode_pango_markup to bar struct (diff) | |
download | sway-55ca16f2d83f4d7e14635ac4de3eb67ee2a0787e.tar.gz sway-55ca16f2d83f4d7e14635ac4de3eb67ee2a0787e.tar.zst sway-55ca16f2d83f4d7e14635ac4de3eb67ee2a0787e.zip |
swaybar: streamline ipc handling
The received json is handled outside of the case statement, which will
allow better extensibility.
This commit also introduces the variable bar_is_dirty, the return value
signifying whether the bar requires rendering.
Diffstat (limited to 'swaybar/ipc.c')
-rw-r--r-- | swaybar/ipc.c | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/swaybar/ipc.c b/swaybar/ipc.c index 8568f957..6013c2de 100644 --- a/swaybar/ipc.c +++ b/swaybar/ipc.c | |||
@@ -372,17 +372,20 @@ bool handle_ipc_readable(struct swaybar *bar) { | |||
372 | if (!resp) { | 372 | if (!resp) { |
373 | return false; | 373 | return false; |
374 | } | 374 | } |
375 | |||
376 | json_object *result = json_tokener_parse(resp->payload); | ||
377 | if (!result) { | ||
378 | wlr_log(WLR_ERROR, "failed to parse payload as json"); | ||
379 | free_ipc_response(resp); | ||
380 | return false; | ||
381 | } | ||
382 | |||
383 | bool bar_is_dirty = true; | ||
375 | switch (resp->type) { | 384 | switch (resp->type) { |
376 | case IPC_EVENT_WORKSPACE: | 385 | case IPC_EVENT_WORKSPACE: |
377 | ipc_get_workspaces(bar); | 386 | ipc_get_workspaces(bar); |
378 | break; | 387 | break; |
379 | case IPC_EVENT_MODE: { | 388 | case IPC_EVENT_MODE: { |
380 | json_object *result = json_tokener_parse(resp->payload); | ||
381 | if (!result) { | ||
382 | free_ipc_response(resp); | ||
383 | wlr_log(WLR_ERROR, "failed to parse payload as json"); | ||
384 | return false; | ||
385 | } | ||
386 | json_object *json_change, *json_pango_markup; | 389 | json_object *json_change, *json_pango_markup; |
387 | if (json_object_object_get_ex(result, "change", &json_change)) { | 390 | if (json_object_object_get_ex(result, "change", &json_change)) { |
388 | const char *change = json_object_get_string(json_change); | 391 | const char *change = json_object_get_string(json_change); |
@@ -390,21 +393,20 @@ bool handle_ipc_readable(struct swaybar *bar) { | |||
390 | bar->mode = strcmp(change, "default") != 0 ? strdup(change) : NULL; | 393 | bar->mode = strcmp(change, "default") != 0 ? strdup(change) : NULL; |
391 | } else { | 394 | } else { |
392 | wlr_log(WLR_ERROR, "failed to parse response"); | 395 | wlr_log(WLR_ERROR, "failed to parse response"); |
393 | json_object_put(result); | 396 | bar_is_dirty = false; |
394 | free_ipc_response(resp); | 397 | break; |
395 | return false; | ||
396 | } | 398 | } |
397 | if (json_object_object_get_ex(result, | 399 | if (json_object_object_get_ex(result, |
398 | "pango_markup", &json_pango_markup)) { | 400 | "pango_markup", &json_pango_markup)) { |
399 | bar->mode_pango_markup = json_object_get_boolean(json_pango_markup); | 401 | bar->mode_pango_markup = json_object_get_boolean(json_pango_markup); |
400 | } | 402 | } |
401 | json_object_put(result); | ||
402 | break; | 403 | break; |
403 | } | 404 | } |
404 | default: | 405 | default: |
405 | free_ipc_response(resp); | 406 | bar_is_dirty = false; |
406 | return false; | 407 | break; |
407 | } | 408 | } |
409 | json_object_put(result); | ||
408 | free_ipc_response(resp); | 410 | free_ipc_response(resp); |
409 | return true; | 411 | return bar_is_dirty; |
410 | } | 412 | } |