Mark containers as urgent in IPC if they have urgent views

This commit is contained in:
Ryan Dwyer 2018-07-16 14:30:31 +10:00
parent 5f0a4bb6a4
commit be28c18ad5
4 changed files with 15 additions and 10 deletions

View file

@ -316,4 +316,6 @@ void container_floating_move_to(struct sway_container *con,
*/ */
void container_set_dirty(struct sway_container *container); void container_set_dirty(struct sway_container *container);
bool container_has_urgent_child(struct sway_container *container);
#endif #endif

View file

@ -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))); json_object_new_string(ipc_json_layout_description(c->layout)));
} }
if (c->type == C_VIEW) { bool urgent = c->type == C_VIEW ?
json_object_object_add(object, "urgent", view_is_urgent(c->sway_view) : container_has_urgent_child(c);
json_object_new_boolean(view_is_urgent(c->sway_view))); json_object_object_add(object, "urgent", json_object_new_boolean(urgent));
}
} }
static void focus_inactive_children_iterator(struct sway_container *c, void *data) { static void focus_inactive_children_iterator(struct sway_container *c, void *data) {

View file

@ -1082,3 +1082,12 @@ void container_set_dirty(struct sway_container *container) {
container->dirty = true; container->dirty = true;
list_add(server.dirty_containers, container); 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);
}

View file

@ -520,13 +520,8 @@ struct sway_container *workspace_output_get_highest_available(
return NULL; 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) { 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) { if (workspace->sway_workspace->urgent != new_urgent) {
workspace->sway_workspace->urgent = new_urgent; workspace->sway_workspace->urgent = new_urgent;