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
next
Ingo Bürk 2015-11-16 23:40:41 +01:00
parent a4afd1b642
commit d2126027ce
1 changed files with 6 additions and 0 deletions

View File

@ -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 */