aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/swaybar/ipc.h2
-rw-r--r--swaybar/ipc.c12
2 files changed, 10 insertions, 4 deletions
diff --git a/include/swaybar/ipc.h b/include/swaybar/ipc.h
index 51db85b5..d8cd0c76 100644
--- a/include/swaybar/ipc.h
+++ b/include/swaybar/ipc.h
@@ -5,7 +5,7 @@
5 5
6bool ipc_initialize(struct swaybar *bar); 6bool ipc_initialize(struct swaybar *bar);
7bool handle_ipc_readable(struct swaybar *bar); 7bool handle_ipc_readable(struct swaybar *bar);
8void ipc_get_workspaces(struct swaybar *bar); 8bool 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);
10void ipc_execute_binding(struct swaybar *bar, struct swaybar_binding *bind); 10void ipc_execute_binding(struct swaybar *bar, struct swaybar_binding *bind);
11 11
diff --git a/swaybar/ipc.c b/swaybar/ipc.c
index c7fdffae..e1b30b52 100644
--- a/swaybar/ipc.c
+++ b/swaybar/ipc.c
@@ -262,7 +262,7 @@ static bool ipc_parse_config(
262 return true; 262 return true;
263} 263}
264 264
265void ipc_get_workspaces(struct swaybar *bar) { 265bool ipc_get_workspaces(struct swaybar *bar) {
266 struct swaybar_output *output; 266 struct swaybar_output *output;
267 wl_list_for_each(output, &bar->outputs, link) { 267 wl_list_for_each(output, &bar->outputs, link) {
268 free_workspaces(&output->workspaces); 268 free_workspaces(&output->workspaces);
@@ -274,8 +274,10 @@ void ipc_get_workspaces(struct swaybar *bar) {
274 json_object *results = json_tokener_parse(res); 274 json_object *results = json_tokener_parse(res);
275 if (!results) { 275 if (!results) {
276 free(res); 276 free(res);
277 return; 277 return false;
278 } 278 }
279
280 bar->visible_by_urgency = false;
279 size_t length = json_object_array_length(results); 281 size_t length = json_object_array_length(results);
280 json_object *ws_json; 282 json_object *ws_json;
281 json_object *num, *name, *visible, *focused, *out, *urgent; 283 json_object *num, *name, *visible, *focused, *out, *urgent;
@@ -302,12 +304,16 @@ void ipc_get_workspaces(struct swaybar *bar) {
302 output->focused = true; 304 output->focused = true;
303 } 305 }
304 ws->urgent = json_object_get_boolean(urgent); 306 ws->urgent = json_object_get_boolean(urgent);
307 if (ws->urgent) {
308 bar->visible_by_urgency = true;
309 }
305 wl_list_insert(&output->workspaces, &ws->link); 310 wl_list_insert(&output->workspaces, &ws->link);
306 } 311 }
307 } 312 }
308 } 313 }
309 json_object_put(results); 314 json_object_put(results);
310 free(res); 315 free(res);
316 return determine_bar_visibility(bar, false);
311} 317}
312 318
313static void ipc_get_outputs(struct swaybar *bar) { 319static void ipc_get_outputs(struct swaybar *bar) {
@@ -436,7 +442,7 @@ bool handle_ipc_readable(struct swaybar *bar) {
436 bool bar_is_dirty = true; 442 bool bar_is_dirty = true;
437 switch (resp->type) { 443 switch (resp->type) {
438 case IPC_EVENT_WORKSPACE: 444 case IPC_EVENT_WORKSPACE:
439 ipc_get_workspaces(bar); 445 bar_is_dirty = ipc_get_workspaces(bar);
440 break; 446 break;
441 case IPC_EVENT_MODE: { 447 case IPC_EVENT_MODE: {
442 json_object *json_change, *json_pango_markup; 448 json_object *json_change, *json_pango_markup;