]> git.sur5r.net Git - i3/i3/commitdiff
Align lower line of bar decoration to border width
authorMats <d912e3@gmail.com>
Fri, 1 Aug 2014 18:07:04 +0000 (20:07 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Mon, 11 Aug 2014 07:49:49 +0000 (09:49 +0200)
In normal border style, two horizontal lines are drawn to outline the
bar decoration. The lower line leaves a gap to the left and right to
align with the border. This gap was hardcoded to 2 pixels. Now it
matches the current border width, if any.

In stacked layout, only the bottommost bar is aligned. In tabbed layout,
no gaps are left in order to close the outline and make the notion of a
tab more clear.

src/x.c

diff --git a/src/x.c b/src/x.c
index e3fdde19b360e0f5cf6d0d74f6479b5a968b8109..ff0a22953f2730a6f5a708304816b2488c27b9ee 100644 (file)
--- a/src/x.c
+++ b/src/x.c
@@ -473,12 +473,12 @@ void x_draw_decoration(Con *con) {
     /* 5: draw two unconnected horizontal lines in border color */
     xcb_change_gc(conn, parent->pm_gc, XCB_GC_FOREGROUND, (uint32_t[]) {p->color->border});
     Rect *dr = &(con->deco_rect);
-    int deco_diff_l = 2;
-    int deco_diff_r = 2;
-    if (parent->layout == L_TABBED) {
-        if (TAILQ_PREV(con, nodes_head, nodes) != NULL)
+    adjacent_t borders_to_hide = con_adjacent_borders(con) & config.hide_edge_borders;
+    int deco_diff_l = borders_to_hide & ADJ_LEFT_SCREEN_EDGE ? 0 : con->current_border_width;
+    int deco_diff_r = borders_to_hide & ADJ_RIGHT_SCREEN_EDGE ? 0 : con-> current_border_width;
+    if (parent->layout == L_TABBED ||
+        (parent->layout == L_STACKED && TAILQ_NEXT(con, nodes) != NULL)) {
             deco_diff_l = 0;
-        if (TAILQ_NEXT(con, nodes) != NULL)
             deco_diff_r = 0;
     }
     xcb_segment_t segments[] = {