]> git.sur5r.net Git - i3/i3/commitdiff
Bugfix: Redraw right border after rendering the window title (Thanks fernandotcl)
authorMichael Stapelberg <michael@stapelberg.de>
Sat, 21 Jan 2012 10:59:23 +0000 (10:59 +0000)
committerMichael Stapelberg <michael@stapelberg.de>
Sat, 21 Jan 2012 11:03:57 +0000 (11:03 +0000)
Fixes #368

src/x.c

diff --git a/src/x.c b/src/x.c
index 213564444374f4f389c82ab2ccf057e45a2a7fb4..8eacd2b7a29d0547995d4212ee8db9442fccf968 100644 (file)
--- a/src/x.c
+++ b/src/x.c
@@ -384,7 +384,7 @@ void x_draw_decoration(Con *con) {
         }
     }
 
-    /* if this is a borderless/1pixel window, we don’t need to render the
+    /* if this is a borderless/1pixel window, we don’t need to render the
      * decoration. */
     if (p->border_style != BS_NORMAL)
         goto copy_pixmaps;
@@ -443,6 +443,22 @@ void x_draw_decoration(Con *con) {
             con->deco_rect.x + 2 + indent_px, con->deco_rect.y + text_offset_y,
             con->deco_rect.width - 2 - indent_px);
 
+    /* Since we don’t clip the text at all, it might in some cases be painted
+     * on the border pixels on the right side of a window. Therefore, we draw
+     * the right border again after rendering the text (and the unconnected
+     * lines in border color). */
+    xcb_change_gc(conn, parent->pm_gc, XCB_GC_FOREGROUND, (uint32_t[]){ p->color->background });
+    xcb_poly_line(conn, XCB_COORD_MODE_ORIGIN, parent->pixmap, parent->pm_gc, 4,
+                  (xcb_point_t[]){
+                      { dr->x + dr->width - 1, dr->y },
+                      { dr->x + dr->width - 1, dr->y + dr->height },
+                      { dr->x + dr->width - 2, dr->y },
+                      { dr->x + dr->width - 2, dr->y + dr->height }
+                  });
+
+    xcb_change_gc(conn, parent->pm_gc, XCB_GC_FOREGROUND, (uint32_t[]){ p->color->border });
+    xcb_poly_segment(conn, parent->pixmap, parent->pm_gc, 2, segments);
+
 copy_pixmaps:
     xcb_copy_area(conn, con->pixmap, con->frame, con->pm_gc, 0, 0, 0, 0, con->rect.width, con->rect.height);
 }