Xext: xtest.c: death to tabs+spaces indendation, remove #define XINPUT

This commit is contained in:
Peter Hutterer 2008-04-18 09:48:06 +09:30
parent eebdf69e9a
commit cb0168b4ac

View File

@ -1,30 +1,30 @@
/* /*
Copyright 1992, 1998 The Open Group Copyright 1992, 1998 The Open Group
Permission to use, copy, modify, distribute, and sell this software and its Permission to use, copy, modify, distribute, and sell this software and its
documentation for any purpose is hereby granted without fee, provided that documentation for any purpose is hereby granted without fee, provided that
the above copyright notice appear in all copies and that both that the above copyright notice appear in all copies and that both that
copyright notice and this permission notice appear in supporting copyright notice and this permission notice appear in supporting
documentation. documentation.
The above copyright notice and this permission notice shall be included The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software. in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE. OTHER DEALINGS IN THE SOFTWARE.
Except as contained in this notice, the name of The Open Group shall Except as contained in this notice, the name of The Open Group shall
not be used in advertising or otherwise to promote the sale, use or not be used in advertising or otherwise to promote the sale, use or
other dealings in this Software without prior written authorization other dealings in this Software without prior written authorization
from The Open Group. from The Open Group.
*/ */
#ifdef HAVE_DIX_CONFIG_H #ifdef HAVE_DIX_CONFIG_H
#include <dix-config.h> #include <dix-config.h>
@ -45,17 +45,13 @@ from The Open Group.
#define _XTEST_SERVER_ #define _XTEST_SERVER_
#include <X11/extensions/XTest.h> #include <X11/extensions/XTest.h>
#include <X11/extensions/xteststr.h> #include <X11/extensions/xteststr.h>
#ifdef XINPUT
#include <X11/extensions/XI.h> #include <X11/extensions/XI.h>
#include <X11/extensions/XIproto.h> #include <X11/extensions/XIproto.h>
#define EXTENSION_EVENT_BASE 64 #define EXTENSION_EVENT_BASE 64
#endif /* XINPUT */
#include "modinit.h" #include "modinit.h"
#ifdef XINPUT
extern int DeviceValuator; extern int DeviceValuator;
#endif /* XINPUT */
#ifdef PANORAMIX #ifdef PANORAMIX
#include "panoramiX.h" #include "panoramiX.h"
@ -63,12 +59,12 @@ extern int DeviceValuator;
#endif #endif
static void XTestResetProc( static void XTestResetProc(
ExtensionEntry * /* extEntry */ ExtensionEntry * /* extEntry */
); );
static int XTestSwapFakeInput( static int XTestSwapFakeInput(
ClientPtr /* client */, ClientPtr /* client */,
xReq * /* req */ xReq * /* req */
); );
static DISPATCH_PROC(ProcXTestCompareCursor); static DISPATCH_PROC(ProcXTestCompareCursor);
static DISPATCH_PROC(ProcXTestDispatch); static DISPATCH_PROC(ProcXTestDispatch);
@ -85,23 +81,23 @@ void
XTestExtensionInit(INITARGS) XTestExtensionInit(INITARGS)
{ {
AddExtension(XTestExtensionName, 0, 0, AddExtension(XTestExtensionName, 0, 0,
ProcXTestDispatch, SProcXTestDispatch, ProcXTestDispatch, SProcXTestDispatch,
XTestResetProc, StandardMinorOpcode); XTestResetProc, StandardMinorOpcode);
} }
/*ARGSUSED*/ /*ARGSUSED*/
static void static void
XTestResetProc (extEntry) XTestResetProc (extEntry)
ExtensionEntry *extEntry; ExtensionEntry *extEntry;
{ {
} }
static int static int
ProcXTestGetVersion(client) ProcXTestGetVersion(client)
ClientPtr client; ClientPtr client;
{ {
xXTestGetVersionReply rep; xXTestGetVersionReply rep;
int n; int n;
REQUEST_SIZE_MATCH(xXTestGetVersionReq); REQUEST_SIZE_MATCH(xXTestGetVersionReq);
rep.type = X_Reply; rep.type = X_Reply;
@ -110,8 +106,8 @@ ProcXTestGetVersion(client)
rep.majorVersion = XTestMajorVersion; rep.majorVersion = XTestMajorVersion;
rep.minorVersion = XTestMinorVersion; rep.minorVersion = XTestMinorVersion;
if (client->swapped) { if (client->swapped) {
swaps(&rep.sequenceNumber, n); swaps(&rep.sequenceNumber, n);
swaps(&rep.minorVersion, n); swaps(&rep.minorVersion, n);
} }
WriteToClient(client, sizeof(xXTestGetVersionReply), (char *)&rep); WriteToClient(client, sizeof(xXTestGetVersionReply), (char *)&rep);
return(client->noClientException); return(client->noClientException);
@ -119,7 +115,7 @@ ProcXTestGetVersion(client)
static int static int
ProcXTestCompareCursor(client) ProcXTestCompareCursor(client)
ClientPtr client; ClientPtr client;
{ {
REQUEST(xXTestCompareCursorReq); REQUEST(xXTestCompareCursorReq);
xXTestCompareCursorReply rep; xXTestCompareCursorReply rep;
@ -133,24 +129,24 @@ ProcXTestCompareCursor(client)
if (rc != Success) if (rc != Success)
return rc; return rc;
if (stuff->cursor == None) if (stuff->cursor == None)
pCursor = NullCursor; pCursor = NullCursor;
else if (stuff->cursor == XTestCurrentCursor) else if (stuff->cursor == XTestCurrentCursor)
pCursor = GetSpriteCursor(ptr); pCursor = GetSpriteCursor(ptr);
else { else {
rc = dixLookupResource((pointer *)&pCursor, stuff->cursor, RT_CURSOR, rc = dixLookupResource((pointer *)&pCursor, stuff->cursor, RT_CURSOR,
client, DixReadAccess); client, DixReadAccess);
if (rc != Success) if (rc != Success)
{ {
client->errorValue = stuff->cursor; client->errorValue = stuff->cursor;
return (rc == BadValue) ? BadCursor : rc; return (rc == BadValue) ? BadCursor : rc;
} }
} }
rep.type = X_Reply; rep.type = X_Reply;
rep.length = 0; rep.length = 0;
rep.sequenceNumber = client->sequence; rep.sequenceNumber = client->sequence;
rep.same = (wCursor(pWin) == pCursor); rep.same = (wCursor(pWin) == pCursor);
if (client->swapped) { if (client->swapped) {
swaps(&rep.sequenceNumber, n); swaps(&rep.sequenceNumber, n);
} }
WriteToClient(client, sizeof(xXTestCompareCursorReply), (char *)&rep); WriteToClient(client, sizeof(xXTestCompareCursorReply), (char *)&rep);
return(client->noClientException); return(client->noClientException);
@ -158,298 +154,292 @@ ProcXTestCompareCursor(client)
static int static int
ProcXTestFakeInput(client) ProcXTestFakeInput(client)
ClientPtr client; ClientPtr client;
{ {
REQUEST(xXTestFakeInputReq); REQUEST(xXTestFakeInputReq);
int nev, n, type, rc; int nev, n, type, rc;
xEvent *ev; xEvent *ev;
DeviceIntPtr dev = NULL; DeviceIntPtr dev = NULL;
WindowPtr root; WindowPtr root;
#ifdef XINPUT
Bool extension = FALSE; Bool extension = FALSE;
deviceValuator *dv = NULL; deviceValuator *dv = NULL;
int base; int base;
int *values; int *values;
#endif /* XINPUT */
nev = (stuff->length << 2) - sizeof(xReq); nev = (stuff->length << 2) - sizeof(xReq);
if ((nev % sizeof(xEvent)) || !nev) if ((nev % sizeof(xEvent)) || !nev)
return BadLength; return BadLength;
nev /= sizeof(xEvent); nev /= sizeof(xEvent);
UpdateCurrentTime(); UpdateCurrentTime();
ev = (xEvent *)&((xReq *)stuff)[1]; ev = (xEvent *)&((xReq *)stuff)[1];
type = ev->u.u.type & 0177; type = ev->u.u.type & 0177;
#ifdef XINPUT
if (type >= EXTENSION_EVENT_BASE) if (type >= EXTENSION_EVENT_BASE)
{ {
type -= DeviceValuator; type -= DeviceValuator;
switch (type) { switch (type) {
case XI_DeviceKeyPress: case XI_DeviceKeyPress:
case XI_DeviceKeyRelease: case XI_DeviceKeyRelease:
case XI_DeviceButtonPress: case XI_DeviceButtonPress:
case XI_DeviceButtonRelease: case XI_DeviceButtonRelease:
case XI_DeviceMotionNotify: case XI_DeviceMotionNotify:
case XI_ProximityIn: case XI_ProximityIn:
case XI_ProximityOut: case XI_ProximityOut:
break; break;
default: default:
client->errorValue = ev->u.u.type; client->errorValue = ev->u.u.type;
return BadValue; return BadValue;
} }
if (nev == 1 && type == XI_DeviceMotionNotify) if (nev == 1 && type == XI_DeviceMotionNotify)
return BadLength; return BadLength; /* DevMotion must be followed by DevValuator */
if (type == XI_DeviceMotionNotify) if (type == XI_DeviceMotionNotify)
base = ((deviceValuator *)(ev+1))->first_valuator; base = ((deviceValuator *)(ev+1))->first_valuator;
else else
base = 0; base = 0;
for (n = 1; n < nev; n++) for (n = 1; n < nev; n++)
{ {
dv = (deviceValuator *)(ev + n); dv = (deviceValuator *)(ev + n);
if (dv->type != DeviceValuator) if (dv->type != DeviceValuator)
{ {
client->errorValue = dv->type; client->errorValue = dv->type;
return BadValue; return BadValue;
} }
if (dv->first_valuator != base) if (dv->first_valuator != base)
{ {
client->errorValue = dv->first_valuator; client->errorValue = dv->first_valuator;
return BadValue; return BadValue;
} }
if (!dv->num_valuators || dv->num_valuators > 6) if (!dv->num_valuators || dv->num_valuators > 6)
{ {
client->errorValue = dv->num_valuators; client->errorValue = dv->num_valuators;
return BadValue; return BadValue;
} }
base += dv->num_valuators; base += dv->num_valuators;
} }
type = type - XI_DeviceKeyPress + KeyPress; type = type - XI_DeviceKeyPress + KeyPress;
extension = TRUE; extension = TRUE;
} }
else else
#endif /* XINPUT */
{ {
if (nev != 1) if (nev != 1)
return BadLength; return BadLength;
switch (type) switch (type)
{ {
case KeyPress: case KeyPress:
case KeyRelease: case KeyRelease:
case MotionNotify: case MotionNotify:
case ButtonPress: case ButtonPress:
case ButtonRelease: case ButtonRelease:
break; break;
default: default:
client->errorValue = ev->u.u.type; client->errorValue = ev->u.u.type;
return BadValue; return BadValue;
} }
} }
/* If the event has a time set, wait for it to pass */
if (ev->u.keyButtonPointer.time) if (ev->u.keyButtonPointer.time)
{ {
TimeStamp activateTime; TimeStamp activateTime;
CARD32 ms; CARD32 ms;
activateTime = currentTime; activateTime = currentTime;
ms = activateTime.milliseconds + ev->u.keyButtonPointer.time; ms = activateTime.milliseconds + ev->u.keyButtonPointer.time;
if (ms < activateTime.milliseconds) if (ms < activateTime.milliseconds)
activateTime.months++; activateTime.months++;
activateTime.milliseconds = ms; activateTime.milliseconds = ms;
ev->u.keyButtonPointer.time = 0; ev->u.keyButtonPointer.time = 0;
/* see mbuf.c:QueueDisplayRequest for code similar to this */ /* see mbuf.c:QueueDisplayRequest for code similar to this */
if (!ClientSleepUntil(client, &activateTime, NULL, NULL)) if (!ClientSleepUntil(client, &activateTime, NULL, NULL))
{ {
return BadAlloc; return BadAlloc;
} }
/* swap the request back so we can simply re-execute it */ /* swap the request back so we can simply re-execute it */
if (client->swapped) if (client->swapped)
{ {
(void) XTestSwapFakeInput(client, (xReq *)stuff); (void) XTestSwapFakeInput(client, (xReq *)stuff);
swaps(&stuff->length, n); swaps(&stuff->length, n);
} }
ResetCurrentRequest (client); ResetCurrentRequest (client);
client->sequence--; client->sequence--;
return Success; return Success;
} }
#ifdef XINPUT
if (extension) if (extension)
{ {
rc = dixLookupDevice(&dev, stuff->deviceid & 0177, client, rc = dixLookupDevice(&dev, stuff->deviceid & 0177, client,
DixWriteAccess); DixWriteAccess);
if (rc != Success) if (rc != Success)
{ {
client->errorValue = stuff->deviceid & 0177; client->errorValue = stuff->deviceid & 0177;
return rc; return rc;
} }
if (nev > 1) if (nev > 1)
{ {
dv = (deviceValuator *)(ev + 1); dv = (deviceValuator *)(ev + 1);
if (!dev->valuator || dv->first_valuator >= dev->valuator->numAxes) if (!dev->valuator || dv->first_valuator >= dev->valuator->numAxes)
{ {
client->errorValue = dv->first_valuator; client->errorValue = dv->first_valuator;
return BadValue; return BadValue;
} }
if (dv->first_valuator + dv->num_valuators > if (dv->first_valuator + dv->num_valuators >
dev->valuator->numAxes) dev->valuator->numAxes)
{ {
client->errorValue = dv->num_valuators; client->errorValue = dv->num_valuators;
return BadValue; return BadValue;
} }
} }
} }
#endif /* XINPUT */
switch (type) switch (type)
{ {
case KeyPress: case KeyPress:
case KeyRelease: case KeyRelease:
#ifdef XINPUT if (!extension)
if (!extension) dev = PickKeyboard(client);
#endif /* XINPUT */ if (ev->u.u.detail < dev->key->curKeySyms.minKeyCode ||
dev = PickKeyboard(client); ev->u.u.detail > dev->key->curKeySyms.maxKeyCode)
if (ev->u.u.detail < dev->key->curKeySyms.minKeyCode || {
ev->u.u.detail > dev->key->curKeySyms.maxKeyCode) client->errorValue = ev->u.u.detail;
{ return BadValue;
client->errorValue = ev->u.u.detail; }
return BadValue; break;
} case MotionNotify:
break; if (extension)
case MotionNotify: {
#ifdef XINPUT if (ev->u.u.detail != xFalse && ev->u.u.detail != xTrue)
if (extension) {
{ client->errorValue = ev->u.u.detail;
if (ev->u.u.detail != xFalse && ev->u.u.detail != xTrue) return BadValue;
{ }
client->errorValue = ev->u.u.detail; /* detail is True for relative coordinates */
return BadValue; if (ev->u.u.detail == xTrue && dev->valuator->mode == Absolute)
} {
if (ev->u.u.detail == xTrue && dev->valuator->mode == Absolute) values = dev->valuator->axisVal + dv->first_valuator;
{ for (n = 1; n < nev; n++)
values = dev->valuator->axisVal + dv->first_valuator; {
for (n = 1; n < nev; n++) dv = (deviceValuator *)(ev + n);
{ switch (dv->num_valuators)
dv = (deviceValuator *)(ev + n); {
switch (dv->num_valuators) case 6:
{ dv->valuator5 += values[5];
case 6: case 5:
dv->valuator5 += values[5]; dv->valuator4 += values[4];
case 5: case 4:
dv->valuator4 += values[4]; dv->valuator3 += values[3];
case 4: case 3:
dv->valuator3 += values[3]; dv->valuator2 += values[2];
case 3: case 2:
dv->valuator2 += values[2]; dv->valuator1 += values[1];
case 2: case 1:
dv->valuator1 += values[1]; dv->valuator0 += values[0];
case 1: }
dv->valuator0 += values[0]; values += 6;
} }
values += 6; }
} break;
} }
break;
} if (!dev)
#endif /* XINPUT */ dev = PickPointer(client);
if (!dev) if (ev->u.keyButtonPointer.root == None)
dev = PickPointer(client); root = GetCurrentRootWindow(dev);
if (ev->u.keyButtonPointer.root == None) else
root = GetCurrentRootWindow(dev); {
else rc = dixLookupWindow(&root, ev->u.keyButtonPointer.root, client,
{ DixGetAttrAccess);
rc = dixLookupWindow(&root, ev->u.keyButtonPointer.root, client, if (rc != Success)
DixGetAttrAccess); return rc;
if (rc != Success) if (root->parent)
return rc; {
if (root->parent) client->errorValue = ev->u.keyButtonPointer.root;
{ return BadValue;
client->errorValue = ev->u.keyButtonPointer.root; }
return BadValue; }
} if (ev->u.u.detail == xTrue)
} {
if (ev->u.u.detail == xTrue) int x, y;
{ GetSpritePosition(dev, &x, &y);
int x, y; ev->u.keyButtonPointer.rootX += x;
GetSpritePosition(dev, &x, &y); ev->u.keyButtonPointer.rootY += y;
ev->u.keyButtonPointer.rootX += x; }
ev->u.keyButtonPointer.rootY += y; else if (ev->u.u.detail != xFalse)
} {
else if (ev->u.u.detail != xFalse) client->errorValue = ev->u.u.detail;
{ return BadValue;
client->errorValue = ev->u.u.detail; }
return BadValue;
}
#ifdef PANORAMIX #ifdef PANORAMIX
if (!noPanoramiXExtension) { if (!noPanoramiXExtension) {
ScreenPtr pScreen = root->drawable.pScreen; ScreenPtr pScreen = root->drawable.pScreen;
BoxRec box; BoxRec box;
int i; int i;
int x = ev->u.keyButtonPointer.rootX + panoramiXdataPtr[0].x; int x = ev->u.keyButtonPointer.rootX + panoramiXdataPtr[0].x;
int y = ev->u.keyButtonPointer.rootY + panoramiXdataPtr[0].y; int y = ev->u.keyButtonPointer.rootY + panoramiXdataPtr[0].y;
if (!POINT_IN_REGION(pScreen, &XineramaScreenRegions[pScreen->myNum], if (!POINT_IN_REGION(pScreen, &XineramaScreenRegions[pScreen->myNum],
x, y, &box)) { x, y, &box)) {
FOR_NSCREENS(i) { FOR_NSCREENS(i) {
if (i == pScreen->myNum) continue; if (i == pScreen->myNum) continue;
if (POINT_IN_REGION(pScreen, if (POINT_IN_REGION(pScreen,
&XineramaScreenRegions[i], &XineramaScreenRegions[i],
x, y, &box)) { x, y, &box)) {
root = WindowTable[i]; root = WindowTable[i];
x -= panoramiXdataPtr[i].x; x -= panoramiXdataPtr[i].x;
y -= panoramiXdataPtr[i].y; y -= panoramiXdataPtr[i].y;
ev->u.keyButtonPointer.rootX = x; ev->u.keyButtonPointer.rootX = x;
ev->u.keyButtonPointer.rootY = y; ev->u.keyButtonPointer.rootY = y;
break; break;
} }
} }
} }
} }
#endif #endif
if (ev->u.keyButtonPointer.rootX < 0) if (ev->u.keyButtonPointer.rootX < 0)
ev->u.keyButtonPointer.rootX = 0; ev->u.keyButtonPointer.rootX = 0;
else if (ev->u.keyButtonPointer.rootX >= root->drawable.width) else if (ev->u.keyButtonPointer.rootX >= root->drawable.width)
ev->u.keyButtonPointer.rootX = root->drawable.width - 1; ev->u.keyButtonPointer.rootX = root->drawable.width - 1;
if (ev->u.keyButtonPointer.rootY < 0) if (ev->u.keyButtonPointer.rootY < 0)
ev->u.keyButtonPointer.rootY = 0; ev->u.keyButtonPointer.rootY = 0;
else if (ev->u.keyButtonPointer.rootY >= root->drawable.height) else if (ev->u.keyButtonPointer.rootY >= root->drawable.height)
ev->u.keyButtonPointer.rootY = root->drawable.height - 1; ev->u.keyButtonPointer.rootY = root->drawable.height - 1;
#ifdef PANORAMIX #ifdef PANORAMIX
if ((!noPanoramiXExtension if ((!noPanoramiXExtension
&& root->drawable.pScreen->myNum && root->drawable.pScreen->myNum
!= XineramaGetCursorScreen(dev)) != XineramaGetCursorScreen(dev))
|| (noPanoramiXExtension && root != GetCurrentRootWindow(dev))) || (noPanoramiXExtension && root != GetCurrentRootWindow(dev)))
#else #else
if (root != GetCurrentRootWindow(dev)) if (root != GetCurrentRootWindow(dev))
#endif #endif
{ {
NewCurrentScreen(dev, root->drawable.pScreen, NewCurrentScreen(dev, root->drawable.pScreen,
ev->u.keyButtonPointer.rootX, ev->u.keyButtonPointer.rootX,
ev->u.keyButtonPointer.rootY); ev->u.keyButtonPointer.rootY);
return client->noClientException; return client->noClientException;
} }
(*root->drawable.pScreen->SetCursorPosition) (*root->drawable.pScreen->SetCursorPosition)
(dev, root->drawable.pScreen, (dev, root->drawable.pScreen,
ev->u.keyButtonPointer.rootX, ev->u.keyButtonPointer.rootX,
ev->u.keyButtonPointer.rootY, FALSE); ev->u.keyButtonPointer.rootY, FALSE);
dev->lastx = ev->u.keyButtonPointer.rootX; dev->lastx = ev->u.keyButtonPointer.rootX;
dev->lasty = ev->u.keyButtonPointer.rootY; dev->lasty = ev->u.keyButtonPointer.rootY;
break; break;
case ButtonPress: case ButtonPress:
case ButtonRelease: case ButtonRelease:
#ifdef XINPUT if (!extension)
if (!extension) dev = PickPointer(client);
#endif /* XINPUT */ if (!ev->u.u.detail || ev->u.u.detail > dev->button->numButtons)
dev = PickPointer(client); {
if (!ev->u.u.detail || ev->u.u.detail > dev->button->numButtons) client->errorValue = ev->u.u.detail;
{ return BadValue;
client->errorValue = ev->u.u.detail; }
return BadValue; break;
}
break;
} }
if (screenIsSaved == SCREEN_SAVER_ON) if (screenIsSaved == SCREEN_SAVER_ON)
dixSaveScreens(serverClient, SCREEN_SAVER_OFF, ScreenSaverReset); dixSaveScreens(serverClient, SCREEN_SAVER_OFF, ScreenSaverReset);
ev->u.keyButtonPointer.time = currentTime.milliseconds; ev->u.keyButtonPointer.time = currentTime.milliseconds;
(*dev->public.processInputProc)(ev, dev, nev); (*dev->public.processInputProc)(ev, dev, nev);
return client->noClientException; return client->noClientException;
@ -457,48 +447,48 @@ ProcXTestFakeInput(client)
static int static int
ProcXTestGrabControl(client) ProcXTestGrabControl(client)
ClientPtr client; ClientPtr client;
{ {
REQUEST(xXTestGrabControlReq); REQUEST(xXTestGrabControlReq);
REQUEST_SIZE_MATCH(xXTestGrabControlReq); REQUEST_SIZE_MATCH(xXTestGrabControlReq);
if ((stuff->impervious != xTrue) && (stuff->impervious != xFalse)) if ((stuff->impervious != xTrue) && (stuff->impervious != xFalse))
{ {
client->errorValue = stuff->impervious; client->errorValue = stuff->impervious;
return(BadValue); return(BadValue);
} }
if (stuff->impervious) if (stuff->impervious)
MakeClientGrabImpervious(client); MakeClientGrabImpervious(client);
else else
MakeClientGrabPervious(client); MakeClientGrabPervious(client);
return(client->noClientException); return(client->noClientException);
} }
static int static int
ProcXTestDispatch (client) ProcXTestDispatch (client)
ClientPtr client; ClientPtr client;
{ {
REQUEST(xReq); REQUEST(xReq);
switch (stuff->data) switch (stuff->data)
{ {
case X_XTestGetVersion: case X_XTestGetVersion:
return ProcXTestGetVersion(client); return ProcXTestGetVersion(client);
case X_XTestCompareCursor: case X_XTestCompareCursor:
return ProcXTestCompareCursor(client); return ProcXTestCompareCursor(client);
case X_XTestFakeInput: case X_XTestFakeInput:
return ProcXTestFakeInput(client); return ProcXTestFakeInput(client);
case X_XTestGrabControl: case X_XTestGrabControl:
return ProcXTestGrabControl(client); return ProcXTestGrabControl(client);
default: default:
return BadRequest; return BadRequest;
} }
} }
static int static int
SProcXTestGetVersion(client) SProcXTestGetVersion(client)
ClientPtr client; ClientPtr client;
{ {
int n; int n;
REQUEST(xXTestGetVersionReq); REQUEST(xXTestGetVersionReq);
swaps(&stuff->length, n); swaps(&stuff->length, n);
@ -509,9 +499,9 @@ SProcXTestGetVersion(client)
static int static int
SProcXTestCompareCursor(client) SProcXTestCompareCursor(client)
ClientPtr client; ClientPtr client;
{ {
int n; int n;
REQUEST(xXTestCompareCursorReq); REQUEST(xXTestCompareCursorReq);
swaps(&stuff->length, n); swaps(&stuff->length, n);
@ -523,49 +513,49 @@ SProcXTestCompareCursor(client)
static int static int
XTestSwapFakeInput(client, req) XTestSwapFakeInput(client, req)
ClientPtr client; ClientPtr client;
xReq *req; xReq *req;
{ {
int nev; int nev;
xEvent *ev; xEvent *ev;
xEvent sev; xEvent sev;
EventSwapPtr proc; EventSwapPtr proc;
nev = ((req->length << 2) - sizeof(xReq)) / sizeof(xEvent); nev = ((req->length << 2) - sizeof(xReq)) / sizeof(xEvent);
for (ev = (xEvent *)&req[1]; --nev >= 0; ev++) for (ev = (xEvent *)&req[1]; --nev >= 0; ev++)
{ {
/* Swap event */ /* Swap event */
proc = EventSwapVector[ev->u.u.type & 0177]; proc = EventSwapVector[ev->u.u.type & 0177];
/* no swapping proc; invalid event type? */ /* no swapping proc; invalid event type? */
if (!proc || proc == NotImplemented) { if (!proc || proc == NotImplemented) {
client->errorValue = ev->u.u.type; client->errorValue = ev->u.u.type;
return BadValue; return BadValue;
} }
(*proc)(ev, &sev); (*proc)(ev, &sev);
*ev = sev; *ev = sev;
} }
return Success; return Success;
} }
static int static int
SProcXTestFakeInput(client) SProcXTestFakeInput(client)
ClientPtr client; ClientPtr client;
{ {
int n; int n;
REQUEST(xReq); REQUEST(xReq);
swaps(&stuff->length, n); swaps(&stuff->length, n);
n = XTestSwapFakeInput(client, stuff); n = XTestSwapFakeInput(client, stuff);
if (n != Success) if (n != Success)
return n; return n;
return ProcXTestFakeInput(client); return ProcXTestFakeInput(client);
} }
static int static int
SProcXTestGrabControl(client) SProcXTestGrabControl(client)
ClientPtr client; ClientPtr client;
{ {
int n; int n;
REQUEST(xXTestGrabControlReq); REQUEST(xXTestGrabControlReq);
swaps(&stuff->length, n); swaps(&stuff->length, n);
@ -575,20 +565,20 @@ SProcXTestGrabControl(client)
static int static int
SProcXTestDispatch (client) SProcXTestDispatch (client)
ClientPtr client; ClientPtr client;
{ {
REQUEST(xReq); REQUEST(xReq);
switch (stuff->data) switch (stuff->data)
{ {
case X_XTestGetVersion: case X_XTestGetVersion:
return SProcXTestGetVersion(client); return SProcXTestGetVersion(client);
case X_XTestCompareCursor: case X_XTestCompareCursor:
return SProcXTestCompareCursor(client); return SProcXTestCompareCursor(client);
case X_XTestFakeInput: case X_XTestFakeInput:
return SProcXTestFakeInput(client); return SProcXTestFakeInput(client);
case X_XTestGrabControl: case X_XTestGrabControl:
return SProcXTestGrabControl(client); return SProcXTestGrabControl(client);
default: default:
return BadRequest; return BadRequest;
} }
} }