From d2126027cef86a3a6cf3e22ec551156636e4d9b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingo=20B=C3=BCrk?= Date: Mon, 16 Nov 2015 23:40:41 +0100 Subject: [PATCH] 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 --- src/x.c | 6 ++++++ 1 file changed, 6 insertions(+) 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 */