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.
This commit is contained in:
Ian Fan 2018-10-12 20:28:04 +01:00
parent fed11d1c7b
commit 55ca16f2d8

View File

@ -372,17 +372,20 @@ bool handle_ipc_readable(struct swaybar *bar) {
if (!resp) { if (!resp) {
return false; return false;
} }
json_object *result = json_tokener_parse(resp->payload);
if (!result) {
wlr_log(WLR_ERROR, "failed to parse payload as json");
free_ipc_response(resp);
return false;
}
bool bar_is_dirty = true;
switch (resp->type) { switch (resp->type) {
case IPC_EVENT_WORKSPACE: case IPC_EVENT_WORKSPACE:
ipc_get_workspaces(bar); ipc_get_workspaces(bar);
break; break;
case IPC_EVENT_MODE: { case IPC_EVENT_MODE: {
json_object *result = json_tokener_parse(resp->payload);
if (!result) {
free_ipc_response(resp);
wlr_log(WLR_ERROR, "failed to parse payload as json");
return false;
}
json_object *json_change, *json_pango_markup; json_object *json_change, *json_pango_markup;
if (json_object_object_get_ex(result, "change", &json_change)) { if (json_object_object_get_ex(result, "change", &json_change)) {
const char *change = json_object_get_string(json_change); const char *change = json_object_get_string(json_change);
@ -390,21 +393,20 @@ bool handle_ipc_readable(struct swaybar *bar) {
bar->mode = strcmp(change, "default") != 0 ? strdup(change) : NULL; bar->mode = strcmp(change, "default") != 0 ? strdup(change) : NULL;
} else { } else {
wlr_log(WLR_ERROR, "failed to parse response"); wlr_log(WLR_ERROR, "failed to parse response");
json_object_put(result); bar_is_dirty = false;
free_ipc_response(resp); break;
return false;
} }
if (json_object_object_get_ex(result, if (json_object_object_get_ex(result,
"pango_markup", &json_pango_markup)) { "pango_markup", &json_pango_markup)) {
bar->mode_pango_markup = json_object_get_boolean(json_pango_markup); bar->mode_pango_markup = json_object_get_boolean(json_pango_markup);
} }
json_object_put(result);
break; break;
} }
default: default:
free_ipc_response(resp); bar_is_dirty = false;
return false; break;
} }
json_object_put(result);
free_ipc_response(resp); free_ipc_response(resp);
return true; return bar_is_dirty;
} }