- if (win->uses_net_wm_name)
- xcb_image_text_16(
- conn,
- win->name_len,
- parent->pixmap,
- parent->pm_gc,
- con->deco_rect.x + 2 + indent_px,
- con->deco_rect.y + text_offset_y,
- (xcb_char2b_t*)win->name_x
- );
- else
- xcb_image_text_8(
- conn,
- win->name_len,
- parent->pixmap,
- parent->pm_gc,
- con->deco_rect.x + 2 + indent_px,
- con->deco_rect.y + text_offset_y,
- win->name_x
- );
+ draw_text(win->name_x, win->name_len, win->uses_net_wm_name,
+ parent->pixmap, parent->pm_gc,
+ 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). */
+
+ /* Draw a separator line after every tab (except the last one), so that
+ * tabs can be easily distinguished. */
+ if (parent->layout == L_TABBED && TAILQ_NEXT(con, nodes) != NULL) {
+ xcb_change_gc(conn, parent->pm_gc, XCB_GC_FOREGROUND, (uint32_t[]){ p->color->border });
+ } else {
+ 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);