Blob Blame History Raw
From 193e853c8b0d3c1222d7565eb209354f460cad9b Mon Sep 17 00:00:00 2001
From: Michael Catanzaro <mcatanzaro@gnome.org>
Date: Sat, 9 May 2015 09:59:49 -0500
Subject: [PATCH 8/8] Don't crash when running in Wayland

It's wrong to use X11-specific APIs without checking:

* If GTK+ was compiled with support for X11
* If the application is currently running in X11
---
 libempathy-gtk/empathy-avatar-image.c | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/libempathy-gtk/empathy-avatar-image.c b/libempathy-gtk/empathy-avatar-image.c
index 78a3e5f..1468802 100644
--- a/libempathy-gtk/empathy-avatar-image.c
+++ b/libempathy-gtk/empathy-avatar-image.c
@@ -119,6 +119,19 @@ avatar_image_finalize (GObject *object)
 	G_OBJECT_CLASS (empathy_avatar_image_parent_class)->finalize (object);
 }
 
+#ifdef GDK_WINDOWING_X11
+static gboolean
+running_in_x11 (void)
+{
+	GdkDisplay* display;
+
+	display = gdk_display_get_default ();
+	if (!display)
+		return FALSE;
+
+	return GDK_IS_X11_DISPLAY (display);
+}
+
 static GdkFilterReturn
 avatar_image_filter_func (GdkXEvent  *gdkxevent,
 			  GdkEvent   *event,
@@ -128,6 +141,9 @@ avatar_image_filter_func (GdkXEvent  *gdkxevent,
 	Atom                   atom;
 	EmpathyAvatarImagePriv *priv;
 
+	if (!running_in_x11 ())
+		return GDK_FILTER_CONTINUE;
+
 	priv = GET_PRIV (data);
 
 	if (xevent->type == PropertyNotify) {
@@ -151,6 +167,9 @@ avatar_image_add_filter (EmpathyAvatarImage *avatar_image)
 	gint       mask;
 	XWindowAttributes attrs;
 
+	if (!running_in_x11 ())
+		return;
+
 	mask = PropertyChangeMask;
 
 	window = gdk_x11_get_default_root_xwindow ();
@@ -167,6 +186,20 @@ avatar_image_add_filter (EmpathyAvatarImage *avatar_image)
 
 	gdk_window_add_filter (NULL, avatar_image_filter_func, avatar_image);
 }
+#else
+static GdkFilterReturn
+avatar_image_filter_func (GdkXEvent  *gdkxevent,
+			  GdkEvent   *event,
+			  gpointer    data)
+{
+	return GDK_FILTER_CONTINUE;
+}
+
+static void
+avatar_image_add_filter (EmpathyAvatarImage *avatar_image)
+{
+}
+#endif
 
 static void
 avatar_image_remove_filter (EmpathyAvatarImage *avatar_image)
-- 
2.4.0