aboutsummaryrefslogtreecommitdiffstats
path: root/swaybar/ipc.c
diff options
context:
space:
mode:
authorLibravatar Ian Fan <ianfan0@gmail.com>2018-10-12 20:28:04 +0100
committerLibravatar Ian Fan <ianfan0@gmail.com>2018-10-14 13:33:12 +0100
commit55ca16f2d83f4d7e14635ac4de3eb67ee2a0787e (patch)
treec92080e2e054cf0b7b2e33e615b55f6143fcda9f /swaybar/ipc.c
parentswaybar: move mode & mode_pango_markup to bar struct (diff)
downloadsway-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.c28
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}