[PATCH xf86-input-mouse] Support input ABI version 23 and 24
Peter Hutterer
peter.hutterer at who-t.net
Mon May 30 21:49:20 UTC 2016
On Mon, May 30, 2016 at 01:42:20AM -0700, Keith Packard wrote:
> Version 23 has threaded input, so locking uses input_lock/input_unlock
> instead of xf86BlockSIGIO/xf86UnblockSIGIO.
>
> Version 24 removes the FD_SET arguments from block and wakeup handlers
this one isn't merged yet, please send two separate patches so we have a
working mouse driver until the 24 gets merged.
Cheers,
Peter
>
> Signed-off-by: Keith Packard <keithp at keithp.com>
> ---
> src/mouse.c | 45 ++++++++++++++++++++++++++++++++++++---------
> 1 file changed, 36 insertions(+), 9 deletions(-)
>
> diff --git a/src/mouse.c b/src/mouse.c
> index f9f874b..dae98aa 100644
> --- a/src/mouse.c
> +++ b/src/mouse.c
> @@ -129,6 +129,18 @@ typedef struct _DragLockRec {
> } DragLockRec, *DragLockPtr;
>
>
> +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 23
> +#define HAVE_THREADED_INPUT 1
> +#endif
> +
> +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 24
> +#define BLOCK_HANDLER_ARGS void *data, void *waitTime
> +#define WAKEUP_HANDLER_ARGS void *data, int i
> +#else
> +#define BLOCK_HANDLER_ARGS pointer data, struct timeval **waitTime, pointer LastSelectMask
> +#define WAKEUP_HANDLER_ARGS void *data, int i, pointer LastSelectMask
> +#endif
> +
> #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 12
> static InputInfoPtr MousePreInit(InputDriverPtr drv, IDevPtr dev, int flags);
> #else
> @@ -140,9 +152,8 @@ static void MouseCtrl(DeviceIntPtr device, PtrCtrl *ctrl);
> static void MousePostEvent(InputInfoPtr pInfo, int buttons,
> int dx, int dy, int dz, int dw);
> static void MouseReadInput(InputInfoPtr pInfo);
> -static void MouseBlockHandler(pointer data, struct timeval **waitTime,
> - pointer LastSelectMask);
> -static void MouseWakeupHandler(pointer data, int i, pointer LastSelectMask);
> +static void MouseBlockHandler(BLOCK_HANDLER_ARGS);
> +static void MouseWakeupHandler(WAKEUP_HANDLER_ARGS);
> static void FlushButtons(MouseDevPtr pMse);
>
> static Bool SetupMouse(InputInfoPtr pInfo);
> @@ -2025,12 +2036,18 @@ static CARD32
> buttonTimer(InputInfoPtr pInfo)
> {
> MouseDevPtr pMse;
> +#if !HAVE_THREADED_INPUT
> int sigstate;
> +#endif
> int id;
>
> pMse = pInfo->private;
>
> +#if HAVE_THREADED_INPUT
> + input_lock();
> +#else
> sigstate = xf86BlockSIGIO ();
> +#endif
>
> pMse->emulate3Pending = FALSE;
> if ((id = stateTab[pMse->emulateState][4][0]) != 0) {
> @@ -2041,7 +2058,11 @@ buttonTimer(InputInfoPtr pInfo)
> "Got unexpected buttonTimer in state %d\n", pMse->emulateState);
> }
>
> +#if HAVE_THREADED_INPUT
> + input_unlock();
> +#else
> xf86UnblockSIGIO (sigstate);
> +#endif
> return 0;
> }
>
> @@ -2098,9 +2119,7 @@ Emulate3ButtonsSoft(InputInfoPtr pInfo)
> #endif
> }
>
> -static void MouseBlockHandler(pointer data,
> - struct timeval **waitTime,
> - pointer LastSelectMask)
> +static void MouseBlockHandler(BLOCK_HANDLER_ARGS)
> {
> InputInfoPtr pInfo = (InputInfoPtr) data;
> MouseDevPtr pMse = (MouseDevPtr) pInfo->private;
> @@ -2115,9 +2134,7 @@ static void MouseBlockHandler(pointer data,
> }
> }
>
> -static void MouseWakeupHandler(pointer data,
> - int i,
> - pointer LastSelectMask)
> +static void MouseWakeupHandler(WAKEUP_HANDLER_ARGS)
> {
> InputInfoPtr pInfo = (InputInfoPtr) data;
> MouseDevPtr pMse = (MouseDevPtr) pInfo->private;
> @@ -3276,14 +3293,20 @@ createProtoList(MouseDevPtr pMse, MouseProtocolID *protoList)
> unsigned char *para;
> mousePrivPtr mPriv = (mousePrivPtr)pMse->mousePriv;
> MouseProtocolID *tmplist = NULL;
> +#if !HAVE_THREADED_INPUT
> int blocked;
> +#endif
>
> AP_DBGC(("Autoprobe: "));
> for (i = 0; i < mPriv->count; i++)
> AP_DBGC(("%2.2x ", (unsigned char) mPriv->data[i]));
> AP_DBGC(("\n"));
>
> +#if HAVE_THREADED_INPUT
> + input_lock();
> +#else
> blocked = xf86BlockSIGIO ();
> +#endif
>
> /* create a private copy first so we can write in the old list */
> if ((tmplist = malloc(sizeof(MouseProtocolID) * NUM_AUTOPROBE_PROTOS))){
> @@ -3392,7 +3415,11 @@ createProtoList(MouseDevPtr pMse, MouseProtocolID *protoList)
> }
> }
>
> +#if HAVE_THREADED_INPUT
> + input_unlock();
> +#else
> xf86UnblockSIGIO(blocked);
> +#endif
>
> mPriv->protoList[k] = PROT_UNKNOWN;
>
> --
> 2.8.1
>
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: https://lists.x.org/mailman/listinfo/xorg-devel
>
More information about the xorg-devel
mailing list