]> git.sur5r.net Git - i3/i3/commitdiff
Don't create a pixmap for CT_ROOT and CT_OUTPUT containers.
authorIngo Bürk <ingo.buerk@tngtech.com>
Mon, 16 Nov 2015 22:40:41 +0000 (23:40 +0100)
committerIngo Bürk <ingo.buerk@tngtech.com>
Mon, 23 Nov 2015 21:18:02 +0000 (22:18 +0100)
Such containers never require a pixmap anyway. In particular for the __i3
output (used for the scratchpad workspace), this would cause an allocation
error anyway because it can be very big -- so big, in fact, that X cannot
allocate the pixmap for it.

Until now, this error was silently ignored due to the fact that we did not
create the pixmap checked (and asserted its success), but with cairo this
would cause a crash because we'd try to create a surface for a pixmap
which doesn't exist.

relates to #1278

src/x.c

diff --git a/src/x.c b/src/x.c
index 63cc4b48b36a8ab353ed454803eff2ec0dc68efc..17970fb8922f0dae464eb373decaf7b73b38ad8c 100644 (file)
--- a/src/x.c
+++ b/src/x.c
@@ -746,6 +746,12 @@ void x_push_node(Con *con) {
                              con->parent->layout == L_STACKED ||
                              con->parent->layout == L_TABBED);
 
+    /* The root con and output cons will never require a pixmap. In particular for the
+     * __i3 output, this will likely not work anyway because it might be ridiculously
+     * large, causing an XCB_ALLOC error. */
+    if (con->type == CT_ROOT || con->type == CT_OUTPUT)
+        is_pixmap_needed = false;
+
     bool fake_notify = false;
     /* Set new position if rect changed (and if height > 0) or if the pixmap
      * needs to be recreated */