From: Tony Crisci Date: Tue, 4 Feb 2014 18:36:20 +0000 (-0500) Subject: Really do not create con pixmap when not needed X-Git-Tag: 4.8~125 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=d6b32971df0638b460cd303de5cc3ffb709281bb;p=i3%2Fi3 Really do not create con pixmap when not needed The pixmap of a borderless leaf container will not be used except for the titlebar in a stack or tabs. Make sure these containers do not (really) have a pixmap because it can only get in the way. fixes #1013 --- diff --git a/src/x.c b/src/x.c index 366cbe13..b3af85aa 100644 --- a/src/x.c +++ b/src/x.c @@ -667,9 +667,24 @@ void x_push_node(Con *con) { /* As the pixmap only depends on the size and not on the position, it * is enough to check if width/height have changed. Also, we don’t * create a pixmap at all when the window is actually not visible - * (height == 0). */ - if ((state->rect.width != rect.width || - state->rect.height != rect.height)) { + * (height == 0) or when it is not needed. */ + bool has_rect_changed = (state->rect.width != rect.width || state->rect.height != rect.height); + + /* The pixmap of a borderless leaf container will not be used except + * for the titlebar in a stack or tabs (issue #1013). */ + bool is_pixmap_needed = (con->border_style != BS_NONE || + !con_is_leaf(con) || + con->parent->layout == L_STACKED || + con->parent->layout == L_TABBED); + + /* Check if the container has an unneeded pixmap left over from + * previously having a border or titlebar. */ + if (!is_pixmap_needed && con->pixmap != XCB_NONE) { + xcb_free_pixmap(conn, con->pixmap); + con->pixmap = XCB_NONE; + } + + if (has_rect_changed && is_pixmap_needed) { if (con->pixmap == 0) { con->pixmap = xcb_generate_id(conn); con->pm_gc = xcb_generate_id(conn);