summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Brian Ashworth <bosrsf04@gmail.com>2018-05-12 12:37:48 -0400
committerLibravatar Brian Ashworth <bosrsf04@gmail.com>2018-05-12 12:37:48 -0400
commite3625d8f337d61c5d2ba1266679b9053168cd0ae (patch)
tree496ed7323dfead9e048a146fcfede4ef255b1a97
parentImplement hide_edge_borders (diff)
downloadsway-e3625d8f337d61c5d2ba1266679b9053168cd0ae.tar.gz
sway-e3625d8f337d61c5d2ba1266679b9053168cd0ae.tar.zst
sway-e3625d8f337d61c5d2ba1266679b9053168cd0ae.zip
Count descendant views for hide_edge_borders smart
-rw-r--r--include/sway/tree/container.h3
-rw-r--r--sway/desktop/output.c8
-rw-r--r--sway/tree/container.c14
-rw-r--r--sway/tree/view.c2
4 files changed, 22 insertions, 5 deletions
diff --git a/include/sway/tree/container.h b/include/sway/tree/container.h
index 61ab7ca1..ec9e2385 100644
--- a/include/sway/tree/container.h
+++ b/include/sway/tree/container.h
@@ -187,6 +187,9 @@ bool container_has_anscestor(struct sway_container *container,
187bool container_has_child(struct sway_container *con, 187bool container_has_child(struct sway_container *con,
188 struct sway_container *child); 188 struct sway_container *child);
189 189
190int container_count_descendants_of_type(struct sway_container *con,
191 enum sway_container_type type);
192
190void container_create_notify(struct sway_container *container); 193void container_create_notify(struct sway_container *container);
191 194
192void container_damage_whole(struct sway_container *container); 195void container_damage_whole(struct sway_container *container);
diff --git a/sway/desktop/output.c b/sway/desktop/output.c
index c3bff03d..b99e9a91 100644
--- 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,
322 struct wlr_box box; 322 struct wlr_box box;
323 float color[4]; 323 float color[4];
324 324
325 struct sway_container *workspace = container_parent(con, C_WORKSPACE); 325 struct sway_container *ws = container_parent(con, C_WORKSPACE);
326 int other_views = workspace->children->length - 1; 326 int other_views = container_count_descendants_of_type(ws, C_VIEW) - 1;
327 327
328 if (config->hide_edge_borders != E_VERTICAL 328 if (config->hide_edge_borders != E_VERTICAL
329 && config->hide_edge_borders != E_BOTH 329 && config->hide_edge_borders != E_BOTH
@@ -424,8 +424,8 @@ static void render_container_simple_border_pixel(struct sway_output *output,
424 struct wlr_box box; 424 struct wlr_box box;
425 float color[4]; 425 float color[4];
426 426
427 struct sway_container *workspace = container_parent(con, C_WORKSPACE); 427 struct sway_container *ws = container_parent(con, C_WORKSPACE);
428 int other_views = workspace->children->length - 1; 428 int other_views = container_count_descendants_of_type(ws, C_VIEW) - 1;
429 429
430 if (config->hide_edge_borders != E_VERTICAL 430 if (config->hide_edge_borders != E_VERTICAL
431 && config->hide_edge_borders != E_BOTH 431 && config->hide_edge_borders != E_BOTH
diff --git a/sway/tree/container.c b/sway/tree/container.c
index db02c69c..c26afdd8 100644
--- a/sway/tree/container.c
+++ b/sway/tree/container.c
@@ -547,6 +547,20 @@ bool container_has_child(struct sway_container *con,
547 return container_find(con, find_child_func, child); 547 return container_find(con, find_child_func, child);
548} 548}
549 549
550int container_count_descendants_of_type(struct sway_container *con,
551 enum sway_container_type type) {
552 int children = 0;
553 if (con->type == type) {
554 children++;
555 } else if (con->children) {
556 for (int i = 0; i < con->children->length; i++) {
557 struct sway_container *child = con->children->items[i];
558 children += container_count_descendants_of_type(child, type);
559 }
560 }
561 return children;
562}
563
550void container_damage_whole(struct sway_container *container) { 564void container_damage_whole(struct sway_container *container) {
551 for (int i = 0; i < root_container.children->length; ++i) { 565 for (int i = 0; i < root_container.children->length; ++i) {
552 struct sway_container *cont = root_container.children->items[i]; 566 struct sway_container *cont = root_container.children->items[i];
diff --git a/sway/tree/view.c b/sway/tree/view.c
index c2496f0d..5695a16b 100644
--- a/sway/tree/view.c
+++ b/sway/tree/view.c
@@ -101,7 +101,7 @@ void view_autoconfigure(struct sway_view *view) {
101 } 101 }
102 102
103 struct sway_container *ws = container_parent(view->swayc, C_WORKSPACE); 103 struct sway_container *ws = container_parent(view->swayc, C_WORKSPACE);
104 int other_views = ws->children->length - 1; 104 int other_views = container_count_descendants_of_type(ws, C_VIEW) - 1;
105 105
106 double x, y, width, height; 106 double x, y, width, height;
107 x = y = width = height = 0; 107 x = y = width = height = 0;