From 8d0048c8d5b3774f79fcb0711d63bcc226b78631 Mon Sep 17 00:00:00 2001
From: "D.B" <thejan.2009@gmail.com>
Date: Sat, 30 Jul 2016 15:12:34 +0200
Subject: [PATCH 1/2] properly hide top border inside tabbed/stacked

When titlebar is hidden, top border of the topmost view inside
tabbed/stacked container will not be drawn. This is changed in layout.c

On the other hand, top border should be drawn sometimes, for example
when titlebar is hidden on a view that is not the topmost inside
tabbed/stacked container. This is changed in border.c
---
 include/border.h |  1 +
 sway/border.c    | 20 ++++++++++++++++++--
 sway/layout.c    |  2 +-
 3 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/include/border.h b/include/border.h
index eb7fc656..b629ba46 100644
--- a/include/border.h
+++ b/include/border.h
@@ -20,5 +20,6 @@ void render_view_borders(wlc_handle view);
 void update_view_border(swayc_t *view);
 void map_update_view_border(swayc_t *view, void *data);
 int get_font_text_height(const char *font);
+bool should_hide_top_border(swayc_t *con, double y);
 
 #endif
diff --git a/sway/border.c b/sway/border.c
index d17d8d0c..c1a62bc6 100644
--- a/sway/border.c
+++ b/sway/border.c
@@ -332,10 +332,12 @@ void update_view_border(swayc_t *view) {
 			}
 		};
 		cr = create_border_buffer(view, g, &surface);
+
+		bool render_top = !should_hide_top_border(view, view->y);
 		if (view == focused) {
-			render_borders(view, cr, &config->border_colors.focused, false);
+			render_borders(view, cr, &config->border_colors.focused, render_top);
 		} else {
-			render_borders(view, cr, &config->border_colors.focused_inactive, false);
+			render_borders(view, cr, &config->border_colors.focused_inactive, render_top);
 		}
 
 		// generate container titles
@@ -418,3 +420,17 @@ void render_view_borders(wlc_handle view) {
 		wlc_pixels_write(WLC_RGBA8888, &c->border->geometry, c->border->buffer);
 	}
 }
+
+bool should_hide_top_border(swayc_t *con, double y) {
+	// returns true if container is child of tabbed/stacked layout and is
+	// sharing top border with tabbed titlebar
+	swayc_t *par = con->parent;
+	while (par->type != C_WORKSPACE) {
+		if (par->layout == L_TABBED || par->layout == L_STACKED) {
+			return con->y == y;
+		}
+		con = par;
+		par = par->parent;
+	}
+	return false;
+}
diff --git a/sway/layout.c b/sway/layout.c
index db9787f3..ba9a8864 100644
--- a/sway/layout.c
+++ b/sway/layout.c
@@ -587,7 +587,7 @@ void update_geometry(swayc_t *container) {
 			}
 
 			if (config->hide_edge_borders == E_VERTICAL || config->hide_edge_borders == E_BOTH) {
-				if (geometry.origin.y == workspace->y) {
+				if (geometry.origin.y == workspace->y || should_hide_top_border(container, geometry.origin.y)) {
 					border_top = 0;
 				}
 

From c33e0ee629e263bcf158df59bff01c1289d18d0a Mon Sep 17 00:00:00 2001
From: "D.B" <thejan.2009@gmail.com>
Date: Sat, 30 Jul 2016 15:22:53 +0200
Subject: [PATCH 2/2] revert border hiding to more recent version

---
 sway/layout.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/sway/layout.c b/sway/layout.c
index ba9a8864..6502d930 100644
--- a/sway/layout.c
+++ b/sway/layout.c
@@ -579,9 +579,7 @@ void update_geometry(swayc_t *container) {
 					border_left = 0;
 				}
 
-				if (geometry.origin.x + geometry.size.w == size.w ||
-						geometry.size.w == container->x + container->width) {
-					// should work for swaybar at right
+				if (geometry.origin.x + geometry.size.w == workspace->x + workspace->width) {
 					border_right = 0;
 				}
 			}
@@ -591,9 +589,7 @@ void update_geometry(swayc_t *container) {
 					border_top = 0;
 				}
 
-				if (geometry.origin.y + geometry.size.h == size.h ||
-						geometry.size.h == container->y + container->height) {
-					// this works for swaybar at bottom
+				if (geometry.origin.y + geometry.size.h == workspace->y + workspace->height) {
 					border_bottom = 0;
 				}
 			}