/* 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);