x: Only render / copy pixmap when the pixmap was actually created
Fixes some X11 errors
This commit is contained in:
parent
85d851de5f
commit
d9038cdb80
10
src/x.c
10
src/x.c
|
@ -257,6 +257,14 @@ void x_draw_decoration(Con *con) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Skip containers whose pixmap has not yet been created (can happen when
|
||||||
|
* decoration rendering happens recursively for a window for which
|
||||||
|
* x_push_node() was not yet called) */
|
||||||
|
if (con->pixmap == XCB_NONE) {
|
||||||
|
DLOG("pixmap not yet created, not rendering\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* 1: build deco_params and compare with cache */
|
/* 1: build deco_params and compare with cache */
|
||||||
struct deco_render_params *p = scalloc(sizeof(struct deco_render_params));
|
struct deco_render_params *p = scalloc(sizeof(struct deco_render_params));
|
||||||
|
|
||||||
|
@ -602,6 +610,7 @@ void x_push_node(Con *con) {
|
||||||
* fast as possible) */
|
* fast as possible) */
|
||||||
xcb_flush(conn);
|
xcb_flush(conn);
|
||||||
xcb_set_window_rect(conn, con->frame, rect);
|
xcb_set_window_rect(conn, con->frame, rect);
|
||||||
|
if (con->pixmap != XCB_NONE)
|
||||||
xcb_copy_area(conn, con->pixmap, con->frame, con->pm_gc, 0, 0, 0, 0, con->rect.width, con->rect.height);
|
xcb_copy_area(conn, con->pixmap, con->frame, con->pm_gc, 0, 0, 0, 0, con->rect.width, con->rect.height);
|
||||||
xcb_flush(conn);
|
xcb_flush(conn);
|
||||||
|
|
||||||
|
@ -653,6 +662,7 @@ void x_push_node(Con *con) {
|
||||||
xcb_change_window_attributes(conn, con->frame, XCB_CW_EVENT_MASK, values);
|
xcb_change_window_attributes(conn, con->frame, XCB_CW_EVENT_MASK, values);
|
||||||
|
|
||||||
/* copy the pixmap contents to the frame window immediately after mapping */
|
/* copy the pixmap contents to the frame window immediately after mapping */
|
||||||
|
if (con->pixmap != XCB_NONE)
|
||||||
xcb_copy_area(conn, con->pixmap, con->frame, con->pm_gc, 0, 0, 0, 0, con->rect.width, con->rect.height);
|
xcb_copy_area(conn, con->pixmap, con->frame, con->pm_gc, 0, 0, 0, 0, con->rect.width, con->rect.height);
|
||||||
xcb_flush(conn);
|
xcb_flush(conn);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue