From 789d2027202b5824cfa35556d739ff2b886e32bc Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Sun, 26 Mar 2023 15:57:56 +0100 Subject: [PATCH] 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 --- gdk/gdkpixbuf-drawable.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/gdk/gdkpixbuf-drawable.c b/gdk/gdkpixbuf-drawable.c index ee88abe3b3..e6fda26880 100644 --- a/gdk/gdkpixbuf-drawable.c +++ b/gdk/gdkpixbuf-drawable.c @@ -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);