GNOME Bugzilla – Bug 735294
No widgets visible in simple applications with gtk+ 3.13.3 and later
Last modified: 2014-08-29 03:02:34 UTC
Created attachment 284309 [details] Test application The attached application works with gtk+ 3.13.2, but not with gtk+ 3.13.3 (and 3.13.7, and presumably any in between) Expected behaviour: A small window with the label "Test" Actual behaviour: A small window with no widgets visible Additional notes: this is not limited to GtkLabel widgets. The issue also seems to occur for midori, where I also noticed some signs of the widgets being there in the form of the mouse cursor changing over text fields. But it seems like it might not affect applications with the thick header (sorry for not knowing the proper term) like gtk3-demo. It appears to be limited to the x11 backend, the label shows up in broadway and also in wayland (shortly before crashing, but that's for another report)
works fine here
Maybe there is something wrong with how it's built on my system then, or a runtime dependency that isn't mentioned or warned about. Here is how it's built on my system: tar -xJf gtk+-3.13.3.tar.xz cd gtk+-3.13.3 mkdir -p builddir cd builddir ../configure --prefix="/usr" --sysconfdir="/etc" make make install
I narrowed it down to commit d48adf9cee7e340acd7f8b9a5f9716695352b848 I also tested it on my desktop computer which has an nvidia card and could not reproduce it, so it seems to be specific to the intel graphics on my laptop. OpenGL renderer string: Mesa DRI Intel(R) Ivybridge Mobile lspci output: 00:02.0 VGA compatible controller: Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09) Setting GDK_RENDERING to 'image' or 'recording' makes the label show up on the intel graphics.
I've done more digging and found that the issue also requires cairo 1.12.4 or later to trigger, and only when cairo is built without libXrender support.
The commit you bisected to essentially changes a call to cairo_xlib_surface_set_size (surface, new_width, new_height); to the equivalent calls cairo_destroy (surface); surface = cairo_xlib_surface_create (display, xid, visual, new_width, new_height); and was made to simplify the GDK code base. So I'd say that this is most likely a bug in either Cairo's xlib backend in the non-xrender usecase or it's a bug in the X driver for your GPU. The non-xrender codepath is probably quite well tested there, too...
I've added a release note about this combination (X without Render) not working well.