Put an error trap around XIAllowTouchEvents()

These calls are occasionally failing with BadAccess on seemingly
still valid (not yet notified upon) touch sequences. Workaround
this Xorg bug with error traps at the moment, those would catch
no error when this is working properly.

Fixing this bug will be tracked at SL #3981

Signed-off-by: Carlos Garnacho <carlos@lanedo.com>
Acked-by: Simon Schampijer <simon@laptop.org>
This commit is contained in:
Carlos Garnacho 2012-10-04 14:47:31 +00:00 committed by Simon Schampijer
parent 81ee0632c9
commit b79a391902

View File

@ -76,12 +76,14 @@ _sugar_gesture_grabber_notify_touch (SugarGestureGrabber *grabber,
if (data->consumed)
continue;
gdk_error_trap_push ();
XIAllowTouchEvents (gdk_x11_display_get_xdisplay (display),
gdk_x11_device_get_id (data->device),
GPOINTER_TO_INT (data->sequence),
gdk_x11_window_get_xid (priv->root_window),
(handled) ? XIAcceptTouch : XIRejectTouch);
gdk_error_trap_pop_ignored ();
data->consumed = TRUE;
}
}
@ -307,10 +309,12 @@ filter_function (GdkXEvent *xevent,
handled = _sugar_gesture_grabber_run_controllers (grabber, event);
if (!handled) {
gdk_error_trap_push ();
XIAllowTouchEvents (gdk_x11_display_get_xdisplay (display),
ev->deviceid, ev->detail,
gdk_x11_window_get_xid (priv->root_window),
XIRejectTouch);
gdk_error_trap_pop_ignored ();
} else if (event->type == GDK_TOUCH_BEGIN) {
_sugar_gesture_grabber_add_touch (grabber,
event->touch.device,