]> git.sur5r.net Git - i3/i3/commitdiff
Do not create container pixmap when not needed
authorTony Crisci <tony@dubstepdish.com>
Sun, 19 Jan 2014 15:22:50 +0000 (10:22 -0500)
committerMichael Stapelberg <michael@stapelberg.de>
Sun, 19 Jan 2014 22:11:25 +0000 (23:11 +0100)
The pixmap of a borderless container will not be used (except for the
titlebar in a stack or tabs). Make sure these containers do not have a
pixmap because it can only get in the way.

fixes #1013

src/x.c

diff --git a/src/x.c b/src/x.c
index 366cbe13c96bb9a8663cbc745bdc08298eec89f2..a306356b0eaca485aa00f64c7605f9b4ac32bd87 100644 (file)
--- 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 container will not be used (except for
+         * the titlebar in a stack or tabs). It can only get in the way. (bug
+         * #1013). */
+        bool is_pixmap_needed = (con->border_style != BS_NONE ||
+                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);