diff options
-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 | } |