diff options
author | Michael Catanzaro <mcatanzaro@gnome.org> | 2015-05-09 09:59:49 -0500 |
---|---|---|
committer | Michael Catanzaro <mcatanzaro@gnome.org> | 2015-05-09 13:08:19 -0500 |
commit | 193e853c8b0d3c1222d7565eb209354f460cad9b (patch) | |
tree | ebb17e9c2b3ba3b1bbec4bd80b3d5c794da3f92e | |
parent | 93a03bcc92f04b89796c015813a62f7d002c2f24 (diff) | |
download | empathy-193e853c8b0d3c1222d7565eb209354f460cad9b.tar.gz |
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
-rw-r--r-- | libempathy-gtk/empathy-avatar-image.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/libempathy-gtk/empathy-avatar-image.c b/libempathy-gtk/empathy-avatar-image.c index 78a3e5ff3..146880217 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) |