Bugfix: Don’t fill split cons etc. with client background color (fixes nested decoration rendering)

Fixes: #359
This commit is contained in:
Michael Stapelberg 2011-05-11 22:01:09 +02:00
parent 4da6fc7ba3
commit 4be3178d4d
1 changed files with 21 additions and 19 deletions

40
src/x.c
View File

@ -303,28 +303,30 @@ void x_draw_decoration(Con *con) {
deco_rect.height = 0;
/* 2: draw the client.background, but only for the parts around the client_rect */
xcb_rectangle_t background[] = {
/* top area */
{ 0, 0, r->width, w->y },
/* bottom area */
{ 0, (w->y + w->height), r->width, r->height - (w->y + w->height) },
/* left area */
{ 0, 0, w->x, r->height },
/* right area */
{ w->x + w->width, 0, r->width - (w->x + w->width), r->height }
};
if (con->window != NULL) {
xcb_rectangle_t background[] = {
/* top area */
{ 0, 0, r->width, w->y },
/* bottom area */
{ 0, (w->y + w->height), r->width, r->height - (w->y + w->height) },
/* left area */
{ 0, 0, w->x, r->height },
/* right area */
{ w->x + w->width, 0, r->width - (w->x + w->width), r->height }
};
#if 0
for (int i = 0; i < 4; i++)
DLOG("rect is (%d, %d) with %d x %d\n",
background[i].x,
background[i].y,
background[i].width,
background[i].height
);
for (int i = 0; i < 4; i++)
DLOG("rect is (%d, %d) with %d x %d\n",
background[i].x,
background[i].y,
background[i].width,
background[i].height
);
#endif
xcb_change_gc_single(conn, con->pm_gc, XCB_GC_FOREGROUND, config.client.background);
xcb_poly_fill_rectangle(conn, con->pixmap, con->pm_gc, sizeof(background) / sizeof(xcb_rectangle_t), background);
xcb_change_gc_single(conn, con->pm_gc, XCB_GC_FOREGROUND, config.client.background);
xcb_poly_fill_rectangle(conn, con->pixmap, con->pm_gc, sizeof(background) / sizeof(xcb_rectangle_t), background);
}
/* 3: draw a rectangle in border color around the client */
if (p->border_style != BS_NONE && p->con_is_leaf) {