Re: Heads-up: Potentially breaking changes to the GDK drawing model pushed

On Fri, Jun 20, 2014 at 6:00 PM, Jasper St. Pierre <jstpierre mecheye net> wrote:
To better support Wayland with fewer copies and less drawing artifacts, I've pushed some potentially breaking changes to GDK, namely around gdk_cairo_create and gdk_window_begin_paint_region.

With these changes, it is now illegal to call gdk_cairo_create outside of a begin_paint / end_paint. This was always sketchy, and would never work on Wayland anyway. If your code does this, we will print a warning and return a dummy surface which won't ever be composited back into the main surface.

Additionally, it is now forbidden to call gdk_window_begin_paint_region more than once. Previously, the code had a "paint stack" which tracked paints, but since GTK+ never used this codepath it was never actually tested and was indeed broken on Wayland due to the way the Wayland backend was written. Again, we will print a warning in this case and return.

As part of these changes, gtk_widget_set_double_buffered was deprecated and removed. Again, it will never work on Wayland, as that is natively double-buffered, and it would simply break there.

I tested with some local big applications like Ardour and the GNOME applications, but don't have a GTK+3 build of Firefox, LibreOffice, Eclipse, or any big GTK+ apps like Inkscape or The GIMP.

Please double-check to make sure your apps still work fine. If you have a problem with any of this or I broke your apps by accident, please reply and I'll try to fix it.

While I don't have anything negative to say about this particular patch series (I honestly think it's somewhat overdue), encoding knowledge such as this into commits and mailing list messages make it much, much harder to develop applications against Gtk+.

None of the commits that changed this did anything to touch the documentation saying why this was the case and how to fix your applications if they're busted. "This is not allowed" should be "This is not allowed since [when]". The commit that removed the double buffering property should emit a warning if an application sets the flag to false so that application developers can catch this kind of thing in development.

I beg of you guys as both a commercial and open source GTK+ application developer, show us a tiny bit of mercy and document changes like this in places other than commit messages and mailing list threads.

Thanks for your work Jasper,

-Andrew Walton


gtk-devel-list mailing list
gtk-devel-list gnome org

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]