From be28c18ad5a3271aad537a5356662d57f16d9703 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Mon, 16 Jul 2018 14:30:31 +1000 Subject: [PATCH] Mark containers as urgent in IPC if they have urgent views --- include/sway/tree/container.h | 2 ++ sway/ipc-json.c | 7 +++---- sway/tree/container.c | 9 +++++++++ sway/tree/workspace.c | 7 +------ 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/include/sway/tree/container.h b/include/sway/tree/container.h index 04e50fc6..ca7a3288 100644 --- a/include/sway/tree/container.h +++ b/include/sway/tree/container.h @@ -316,4 +316,6 @@ void container_floating_move_to(struct sway_container *con, */ void container_set_dirty(struct sway_container *container); +bool container_has_urgent_child(struct sway_container *container); + #endif diff --git a/sway/ipc-json.c b/sway/ipc-json.c index dbab8e68..c49ea47e 100644 --- a/sway/ipc-json.c +++ b/sway/ipc-json.c @@ -198,10 +198,9 @@ static void ipc_json_describe_view(struct sway_container *c, json_object *object json_object_new_string(ipc_json_layout_description(c->layout))); } - if (c->type == C_VIEW) { - json_object_object_add(object, "urgent", - json_object_new_boolean(view_is_urgent(c->sway_view))); - } + bool urgent = c->type == C_VIEW ? + view_is_urgent(c->sway_view) : container_has_urgent_child(c); + json_object_object_add(object, "urgent", json_object_new_boolean(urgent)); } static void focus_inactive_children_iterator(struct sway_container *c, void *data) { diff --git a/sway/tree/container.c b/sway/tree/container.c index c1de46b5..6d52c38c 100644 --- a/sway/tree/container.c +++ b/sway/tree/container.c @@ -1082,3 +1082,12 @@ void container_set_dirty(struct sway_container *container) { container->dirty = true; list_add(server.dirty_containers, container); } + +static bool find_urgent_iterator(struct sway_container *con, + void *data) { + return con->type == C_VIEW && view_is_urgent(con->sway_view); +} + +bool container_has_urgent_child(struct sway_container *container) { + return container_find(container, find_urgent_iterator, NULL); +} diff --git a/sway/tree/workspace.c b/sway/tree/workspace.c index d14f01eb..00b479ec 100644 --- a/sway/tree/workspace.c +++ b/sway/tree/workspace.c @@ -520,13 +520,8 @@ struct sway_container *workspace_output_get_highest_available( return NULL; } -static bool find_urgent_iterator(struct sway_container *con, - void *data) { - return con->type == C_VIEW && view_is_urgent(con->sway_view); -} - void workspace_detect_urgent(struct sway_container *workspace) { - bool new_urgent = container_find(workspace, find_urgent_iterator, NULL); + bool new_urgent = container_has_urgent_child(workspace); if (workspace->sway_workspace->urgent != new_urgent) { workspace->sway_workspace->urgent = new_urgent;