diff options
Diffstat (limited to 'src/mouse.c')
-rw-r--r-- | src/mouse.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/mouse.c b/src/mouse.c index f9f874b..d5f918e 100644 --- a/src/mouse.c +++ b/src/mouse.c @@ -129,6 +129,10 @@ 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) < 12 static InputInfoPtr MousePreInit(InputDriverPtr drv, IDevPtr dev, int flags); #else @@ -2025,12 +2029,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 +2051,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; } @@ -3276,14 +3290,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 +3412,11 @@ createProtoList(MouseDevPtr pMse, MouseProtocolID *protoList) } } +#if HAVE_THREADED_INPUT + input_unlock(); +#else xf86UnblockSIGIO(blocked); +#endif mPriv->protoList[k] = PROT_UNKNOWN; |