From: Ingo Bürk Date: Mon, 16 Nov 2015 22:40:41 +0000 (+0100) Subject: Don't create a pixmap for CT_ROOT and CT_OUTPUT containers. X-Git-Tag: 4.12~97^2~2 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=d2126027cef86a3a6cf3e22ec551156636e4d9b8;p=i3%2Fi3 Don't create a pixmap for CT_ROOT and CT_OUTPUT containers. 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 --- diff --git a/src/x.c b/src/x.c index 63cc4b48..17970fb8 100644 --- 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 */