summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2016-05-10 21:29:10 -0400
committerMatthias Clasen <mclasen@redhat.com>2016-05-19 12:10:07 -0400
commit8e2cf127e691022e9b28b6744cc4ddd48c168371 (patch)
treed3f0536bbffa699d55601254a237a2a9c86a5c53
parent077e1999b34db42f291b79c93b2325a13e2b350c (diff)
downloadgtk+-8e2cf127e691022e9b28b6744cc4ddd48c168371.tar.gz
x11: Trap possible X error
XIGetClientPointer can generate X errors (e.g. when the X server does not support XI2. Trap them and carry on. https://bugzilla.gnome.org/show_bug.cgi?id=766233
-rw-r--r--gdk/x11/gdkdisplay-x11.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/gdk/x11/gdkdisplay-x11.c b/gdk/x11/gdkdisplay-x11.c
index 6804ed2006..de91c642e9 100644
--- a/gdk/x11/gdkdisplay-x11.c
+++ b/gdk/x11/gdkdisplay-x11.c
@@ -2878,10 +2878,14 @@ gdk_x11_display_get_default_seat (GdkDisplay *display)
{
GList *seats, *l;
int device_id;
+ gboolean result = FALSE;
seats = gdk_display_list_seats (display);
- XIGetClientPointer (GDK_DISPLAY_XDISPLAY (display),
- None, &device_id);
+
+ gdk_x11_display_error_trap_push (display);
+ result = XIGetClientPointer (GDK_DISPLAY_XDISPLAY (display),
+ None, &device_id);
+ gdk_x11_display_error_trap_pop_ignored (display);
for (l = seats; l; l = l->next)
{
@@ -2889,7 +2893,7 @@ gdk_x11_display_get_default_seat (GdkDisplay *display)
pointer = gdk_seat_get_pointer (l->data);
- if (gdk_x11_device_get_id (pointer) == device_id)
+ if (gdk_x11_device_get_id (pointer) == device_id || !result)
{
GdkSeat *seat = l->data;
g_list_free (seats);