gdk: Swap Cairo calls when reading back from a GdkWindow

First we flush the surface, then we mark it dirty.

Don't look at me: this makes sense in Cairo, apparently.

Fixes: #5691
This commit is contained in:
Emmanuele Bassi
2023-03-26 15:57:56 +01:00
parent 2e09856d63
commit 789d202720

View File

@ -104,16 +104,19 @@ gdk_pixbuf_get_from_window (GdkWindow *src,
* by external applications.
*
* So be on the safe side and:
* - flush the Cairo state
* - mark the surface as dirty, in case the GdkWindow was
* created from a foreign X11 surface
* - flush the Cairo state
*
* THE ORDER IS IMPORTANT. DO NOT CHANGE IT.
*
* For reference, see:
* - https://bugzilla.gnome.org/show_bug.cgi?id=754952
* - https://gitlab.gnome.org/GNOME/gtk/-/issues/4456
* - https://gitlab.gnome.org/GNOME/gtk/-/issues/5691
*/
cairo_surface_mark_dirty (surface);
cairo_surface_flush (surface);
cairo_surface_mark_dirty (surface);
if (cairo_surface_get_content (surface) & CAIRO_CONTENT_ALPHA)
copy = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width * scale, height * scale);