summaryrefslogtreecommitdiff
path: root/gui-libs/gtk/files/gtk-4.10.3-black-screen-rendering.patch
blob: 0431cf2bf16a5e6c3f6eac822f7d84bf573c37c4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
https://gitlab.gnome.org/GNOME/gtk/-/commit/b686ce1cb62dba505120e0f1116c516662a06e30

From b686ce1cb62dba505120e0f1116c516662a06e30 Mon Sep 17 00:00:00 2001
From: Carlos Garnacho <carlosg@gnome.org>
Date: Fri, 21 Apr 2023 10:58:19 +0200
Subject: [PATCH] gdk/x11: Invalidate whole surface after size change

The Expose events following a ConfigureNotify may arrive at
a time that we did not resize the surface yet, making these
expose events a no-op. Even though gsk/gtk take care of the
window content itself, this might lead to unrendered portions
of the window shadow.

This may be seen with GSK_RENDERER=cairo and GDK_BACKEND=x11,
attempting to tile a window (e.g. gtk4-demo) left or right.
The window will show black rectangles or other artifacts in
the window shadow areas that correspond to the newly painted
portions (as the window needs to expand vertically).

In order to fix this with a similar behavior to Wayland,
consider ourselves the whole surface invalidated after resize,
in order to ensure everything is painted from scratch.

(cherry-picked from commit 24302315fb8f46be141a9eda60e8d107c84a948d)
--- a/gdk/x11/gdksurface-x11.c
+++ b/gdk/x11/gdksurface-x11.c
@@ -208,6 +208,8 @@ gdk_x11_surface_update_size (GdkX11Surface *self,
       cairo_surface_set_device_scale (self->cairo_surface, scale, scale);
     }
 
+  gdk_surface_invalidate_rect (surface, NULL);
+
   return TRUE;
 }
 
-- 
GitLab