[gtk/gtk-3-24: 1/2] gdk: Fix parent relative background crash
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/gtk-3-24: 1/2] gdk: Fix parent relative background crash
- Date: Tue, 27 Oct 2020 21:42:35 +0000 (UTC)
commit a91de44755539f8eafa760d8d6005cb206bad20e
Author: Sam Bazley <sambazley fastmail com>
Date: Sun Oct 25 15:30:50 2020 +0000
gdk: Fix parent relative background crash
When setting a window's background to ParentRelative on X11, the window
depths must match to avoid a BadMatch error. Query the X server for the
parent window rather that relying on the parent passed to
gtk_window_new() to prevent crashes with reparented windows.
Fixes: #3288
gdk/x11/gdkwindow-x11.c | 23 ++++++++++++++++++++---
1 file changed, 20 insertions(+), 3 deletions(-)
---
diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c
index 1fe7b90cd0..38ff91da6d 100644
--- a/gdk/x11/gdkwindow-x11.c
+++ b/gdk/x11/gdkwindow-x11.c
@@ -3025,12 +3025,29 @@ G_GNUC_END_IGNORE_DEPRECATIONS
if (pattern == parent_relative_pattern)
{
- GdkWindow *parent;
+ Window xroot, xparent, *xchildren;
+ guint nxchildren, xparent_depth;
+ XWindowAttributes xattrs;
+
+ if (!XQueryTree (GDK_WINDOW_XDISPLAY (window), GDK_WINDOW_XID (window),
+ &xroot, &xparent, &xchildren, &nxchildren))
+ {
+ XSetWindowBackgroundPixmap (GDK_WINDOW_XDISPLAY (window),
+ GDK_WINDOW_XID (window), None);
+ return;
+ }
+
+ if (xchildren)
+ XFree (xchildren);
+
+ if (xparent) {
+ XGetWindowAttributes (GDK_WINDOW_XDISPLAY (window), xparent, &xattrs);
+ xparent_depth = xattrs.depth;
+ }
/* X throws BadMatch if the parent has a different depth when
* using ParentRelative */
- parent = gdk_window_get_parent (window);
- if (parent != NULL && window->depth == parent->depth &&
+ if (xparent && window->depth == xparent_depth &&
cairo_pattern_status (pattern) == CAIRO_STATUS_SUCCESS)
{
XSetWindowBackgroundPixmap (GDK_WINDOW_XDISPLAY (window),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]