On Oct 16, 2011, at 3:53 PM, Peter Hutterer <[email protected]> wrote:
> On Fri, Oct 14, 2011 at 09:22:27AM -0700, Chase Douglas wrote: >> On 10/13/2011 10:23 PM, Peter Hutterer wrote: >>> From: Chase Douglas <[email protected]> >>> >>> XI 2.1 has not been implemented yet, so this code defines version info >>> for it too. These will be dropped when XI 2.1 support is merged. >>> >>> The code is based on what we have in the prototype libXi in Ubuntu. The >>> main differences are: >>> >>> * No touch valuator classes >>> * No TouchUpdateUnownedEvents >>> * Addition of raw touch events >>> * Touch grab and ungrab is handled in existing passive grab functions >>> * XIAllowTouchEvents has been added as an extension of XIAllowEvents >>> * XIAllowEvents has been extended when XI 2.2 is supported >>> >>> The last item causes a bit of an issue. The XIAllowEvents handling in >>> released X.org servers check that the size of the request is exactly the >>> size published in XI 2.0. Since we are extending the request, we must >>> get the right request size from the Xlib buffer depending on what >>> version of XI the server supports. >>> >>> None of this code has been tested because we don't have a server to test >>> it with yet. >>> >>> Signed-off-by: Chase Douglas <[email protected]> >>> Signed-off-by: Peter Hutterer <[email protected]> >>> --- >>> Changes to v1: >>> - adjust to current protocol >>> - rebase on current libXi master >>> - re-use code in XIAllowTouchEvents and XIAllowEvents >>> >>> This patch requires http://patchwork.freedesktop.org/patch/7580/ >>> Untested for lack of a server supporting MT, and it doesn't include the man >>> pages yet either. >> >> [snip] >> >>> diff --git a/src/XIAllowEvents.c b/src/XIAllowEvents.c >>> index 1d388b3..e53cf25 100644 >>> --- a/src/XIAllowEvents.c >>> +++ b/src/XIAllowEvents.c >>> @@ -29,9 +29,12 @@ >>> #include <X11/extensions/extutil.h> >>> #include "XIint.h" >>> >>> -Status >>> -XIAllowEvents(Display *dpy, int deviceid, int event_mode, Time time) >>> +static Status >>> +_XIAllowEvents(Display *dpy, int deviceid, int event_mode, Time time, >>> + unsigned int touch_id, Window grab_window) >>> { >>> + Bool have_XI22 = False; >> >> It looks like have_XI22 is set backwards. Shouldn't it be True here, and >> then ... >> >>> + int req_len = sz_xXIAllowEventsReq; /* in bytes */ >>> xXIAllowEventsReq *req; >>> >>> XExtDisplayInfo *extinfo = XInput_find_display(dpy); >>> @@ -40,14 +43,51 @@ XIAllowEvents(Display *dpy, int deviceid, int >>> event_mode, Time time) >>> if (_XiCheckExtInit(dpy, XInput_2_0, extinfo) == -1) >>> return (NoSuchExtension); >>> >>> - GetReq(XIAllowEvents, req); >>> + /* 2.2's XIAllowEvents is 8 bytes longer than 2.0 */ >>> + if (_XiCheckExtInit(dpy, XInput_2_2, extinfo) == -1) { >>> + req_len -= 8; >>> + have_XI22 = True; >> >> set to False here? > > oops. thanks, amended locally. Then, Reviewed-by: Chase Douglas <[email protected]> Sorry if this comes across as html, I'm replying from my phone. _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
