sway

i3-compatible Wayland compositor
git clone https://git.awy.one/sway
Log | Files | Refs | README | LICENSE

commit e3625d8f337d61c5d2ba1266679b9053168cd0ae
parent 3db7fc2bb2c35d545b2a0a72f5554af833bd447f
Author: Brian Ashworth <bosrsf04@gmail.com>
Date:   Sat, 12 May 2018 12:37:48 -0400

Count descendant views for hide_edge_borders smart

Diffstat:
Minclude/sway/tree/container.h | 3+++
Msway/desktop/output.c | 8++++----
Msway/tree/container.c | 14++++++++++++++
Msway/tree/view.c | 2+-
4 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/include/sway/tree/container.h b/include/sway/tree/container.h @@ -187,6 +187,9 @@ bool container_has_anscestor(struct sway_container *container, bool container_has_child(struct sway_container *con, struct sway_container *child); +int container_count_descendants_of_type(struct sway_container *con, + enum sway_container_type type); + void container_create_notify(struct sway_container *container); void container_damage_whole(struct sway_container *container); diff --git a/sway/desktop/output.c b/sway/desktop/output.c @@ -322,8 +322,8 @@ static void render_container_simple_border_normal(struct sway_output *output, struct wlr_box box; float color[4]; - struct sway_container *workspace = container_parent(con, C_WORKSPACE); - int other_views = workspace->children->length - 1; + struct sway_container *ws = container_parent(con, C_WORKSPACE); + int other_views = container_count_descendants_of_type(ws, C_VIEW) - 1; if (config->hide_edge_borders != E_VERTICAL && config->hide_edge_borders != E_BOTH @@ -424,8 +424,8 @@ static void render_container_simple_border_pixel(struct sway_output *output, struct wlr_box box; float color[4]; - struct sway_container *workspace = container_parent(con, C_WORKSPACE); - int other_views = workspace->children->length - 1; + struct sway_container *ws = container_parent(con, C_WORKSPACE); + int other_views = container_count_descendants_of_type(ws, C_VIEW) - 1; if (config->hide_edge_borders != E_VERTICAL && config->hide_edge_borders != E_BOTH diff --git a/sway/tree/container.c b/sway/tree/container.c @@ -547,6 +547,20 @@ bool container_has_child(struct sway_container *con, return container_find(con, find_child_func, child); } +int container_count_descendants_of_type(struct sway_container *con, + enum sway_container_type type) { + int children = 0; + if (con->type == type) { + children++; + } else if (con->children) { + for (int i = 0; i < con->children->length; i++) { + struct sway_container *child = con->children->items[i]; + children += container_count_descendants_of_type(child, type); + } + } + return children; +} + void container_damage_whole(struct sway_container *container) { for (int i = 0; i < root_container.children->length; ++i) { struct sway_container *cont = root_container.children->items[i]; diff --git a/sway/tree/view.c b/sway/tree/view.c @@ -101,7 +101,7 @@ void view_autoconfigure(struct sway_view *view) { } struct sway_container *ws = container_parent(view->swayc, C_WORKSPACE); - int other_views = ws->children->length - 1; + int other_views = container_count_descendants_of_type(ws, C_VIEW) - 1; double x, y, width, height; x = y = width = height = 0;