summaryrefslogtreecommitdiff
path: root/Xi/extinit.c
diff options
context:
space:
mode:
Diffstat (limited to 'Xi/extinit.c')
-rw-r--r--Xi/extinit.c189
1 files changed, 122 insertions, 67 deletions
diff --git a/Xi/extinit.c b/Xi/extinit.c
index 37148ebd2..ce5d96c8a 100644
--- a/Xi/extinit.c
+++ b/Xi/extinit.c
@@ -45,6 +45,7 @@ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
SOFTWARE.
********************************************************/
+/* $XFree86: xc/programs/Xserver/Xi/extinit.c,v 3.6 2001/12/14 19:58:55 dawes Exp $ */
/********************************************************************
*
@@ -55,6 +56,7 @@ SOFTWARE.
#define NUMTYPES 15
#define NEED_EVENTS
+#define NEED_REPLIES
#include "X.h"
#include "Xproto.h"
#include "inputstr.h"
@@ -63,6 +65,51 @@ SOFTWARE.
#include "XI.h"
#include "XIproto.h"
+#include "dixevents.h"
+#include "exevents.h"
+#include "extinit.h"
+#include "exglobals.h"
+#include "swaprep.h"
+
+/* modules local to Xi */
+#include "allowev.h"
+#include "chgdctl.h"
+#include "chgfctl.h"
+#include "chgkbd.h"
+#include "chgprop.h"
+#include "chgptr.h"
+#include "closedev.h"
+#include "devbell.h"
+#include "getbmap.h"
+#include "getbmap.h"
+#include "getdctl.h"
+#include "getfctl.h"
+#include "getfocus.h"
+#include "getkmap.h"
+#include "getmmap.h"
+#include "getprop.h"
+#include "getselev.h"
+#include "getvers.h"
+#include "getvers.h"
+#include "grabdev.h"
+#include "grabdevb.h"
+#include "grabdevk.h"
+#include "gtmotion.h"
+#include "listdev.h"
+#include "opendev.h"
+#include "queryst.h"
+#include "selectev.h"
+#include "sendexev.h"
+#include "chgkmap.h"
+#include "setbmap.h"
+#include "setdval.h"
+#include "setfocus.h"
+#include "setmmap.h"
+#include "setmode.h"
+#include "ungrdev.h"
+#include "ungrdevb.h"
+#include "ungrdevk.h"
+
static Mask lastExtEventMask = 1;
int ExtEventIndex;
Mask ExtValidMasks[EMASKSIZE];
@@ -141,10 +188,8 @@ int RT_INPUTCLIENT;
*
*/
-extern void (* ReplySwapVector[256]) ();
-extern void (* EventSwapVector[128]) ();
extern XExtensionVersion AllExtensionVersions[];
-extern InputInfo inputInfo;
+
Mask PropagateMask[MAX_DEVICES];
/*****************************************************************
@@ -153,12 +198,6 @@ Mask PropagateMask[MAX_DEVICES];
*
*/
-int ProcIDispatch();
-int SProcIDispatch();
-void SReplyIDispatch();
-void IResetProc();
-void SEventIDispatch();
-void NotImplemented();
static XExtensionVersion thisversion =
{XI_Present,
XI_Add_XChangeDeviceControl_Major,
@@ -177,10 +216,8 @@ static XExtensionVersion thisversion =
void
XInputExtensionInit()
- {
- ExtensionEntry *extEntry, *AddExtension();
- int XShutDownDevice();
- int InputClientGone();
+{
+ ExtensionEntry *extEntry;
extEntry = AddExtension(INAME, IEVENTS, IERRORS, ProcIDispatch,
SProcIDispatch, IResetProc, StandardMinorOpcode);
@@ -189,9 +226,9 @@ XInputExtensionInit()
IReqCode = extEntry->base;
AllExtensionVersions[IReqCode-128] = thisversion;
MakeDeviceTypeAtoms ();
- RT_INPUTCLIENT = CreateNewResourceType(InputClientGone);
+ RT_INPUTCLIENT = CreateNewResourceType((DeleteType)InputClientGone);
FixExtensionEvents (extEntry);
- ReplySwapVector[IReqCode] = SReplyIDispatch;
+ ReplySwapVector[IReqCode] = (ReplySwapPtr)SReplyIDispatch;
EventSwapVector[DeviceValuator] = SEventIDispatch;
EventSwapVector[DeviceKeyPress] = SEventIDispatch;
EventSwapVector[DeviceKeyRelease] = SEventIDispatch;
@@ -224,7 +261,7 @@ XInputExtensionInit()
int
ProcIDispatch (client)
register ClientPtr client;
- {
+{
REQUEST(xReq);
if (stuff->data == X_GetExtensionVersion)
return(ProcXGetExtensionVersion(client));
@@ -315,7 +352,7 @@ ProcIDispatch (client)
int
SProcIDispatch(client)
register ClientPtr client;
- {
+{
REQUEST(xReq);
if (stuff->data == X_GetExtensionVersion)
return(SProcXGetExtensionVersion(client));
@@ -401,54 +438,59 @@ SProcIDispatch(client)
*
*/
+/* FIXME: this would be more concise and readable in ANSI C */
+#define DISPATCH(code) \
+ if (rep->RepType == X_##code) \
+ SRepX##code (client, len, (x##code##Reply *) rep)
+
void
SReplyIDispatch (client, len, rep)
ClientPtr client;
int len;
xGrabDeviceReply *rep; /* All we look at is the type field */
- { /* This is common to all replies */
+{ /* This is common to all replies */
if (rep->RepType == X_GetExtensionVersion)
- SRepXGetExtensionVersion (client, len, rep);
+ SRepXGetExtensionVersion (client, len, (xGetExtensionVersionReply *)rep);
else if (rep->RepType == X_ListInputDevices)
- SRepXListInputDevices (client, len, rep);
+ SRepXListInputDevices (client, len, (xListInputDevicesReply *)rep);
else if (rep->RepType == X_OpenDevice)
- SRepXOpenDevice (client, len, rep);
+ SRepXOpenDevice (client, len, (xOpenDeviceReply *)rep);
else if (rep->RepType == X_SetDeviceMode)
- SRepXSetDeviceMode (client, len, rep);
+ SRepXSetDeviceMode (client, len, (xSetDeviceModeReply *) rep);
else if (rep->RepType == X_GetSelectedExtensionEvents)
- SRepXGetSelectedExtensionEvents (client, len, rep);
+ SRepXGetSelectedExtensionEvents (client, len, (xGetSelectedExtensionEventsReply *) rep);
else if (rep->RepType == X_GetDeviceDontPropagateList)
- SRepXGetDeviceDontPropagateList (client, len, rep);
+ SRepXGetDeviceDontPropagateList (client, len, (xGetDeviceDontPropagateListReply *)rep);
else if (rep->RepType == X_GetDeviceMotionEvents)
- SRepXGetDeviceMotionEvents (client, len, rep);
+ SRepXGetDeviceMotionEvents (client, len, (xGetDeviceMotionEventsReply *) rep);
else if (rep->RepType == X_ChangeKeyboardDevice)
- SRepXChangeKeyboardDevice (client, len, rep);
+ SRepXChangeKeyboardDevice (client, len, (xChangeKeyboardDeviceReply *) rep);
else if (rep->RepType == X_ChangePointerDevice)
- SRepXChangePointerDevice (client, len, rep);
+ SRepXChangePointerDevice (client, len, (xChangePointerDeviceReply *)rep);
else if (rep->RepType == X_GrabDevice)
- SRepXGrabDevice (client, len, rep);
+ SRepXGrabDevice (client, len, (xGrabDeviceReply *)rep);
else if (rep->RepType == X_GetDeviceFocus)
- SRepXGetDeviceFocus (client, len, rep);
+ SRepXGetDeviceFocus (client, len, (xGetDeviceFocusReply *)rep);
else if (rep->RepType == X_GetFeedbackControl)
- SRepXGetFeedbackControl (client, len, rep);
+ SRepXGetFeedbackControl (client, len, (xGetFeedbackControlReply *)rep);
else if (rep->RepType == X_GetDeviceKeyMapping)
- SRepXGetDeviceKeyMapping (client, len, rep);
+ SRepXGetDeviceKeyMapping (client, len, (xGetDeviceKeyMappingReply *)rep);
else if (rep->RepType == X_GetDeviceModifierMapping)
- SRepXGetDeviceModifierMapping (client, len, rep);
+ SRepXGetDeviceModifierMapping (client, len, (xGetDeviceModifierMappingReply *)rep);
else if (rep->RepType == X_SetDeviceModifierMapping)
- SRepXSetDeviceModifierMapping (client, len, rep);
+ SRepXSetDeviceModifierMapping (client, len, (xSetDeviceModifierMappingReply *)rep);
else if (rep->RepType == X_GetDeviceButtonMapping)
- SRepXGetDeviceButtonMapping (client, len, rep);
+ SRepXGetDeviceButtonMapping (client, len, (xGetDeviceButtonMappingReply *)rep);
else if (rep->RepType == X_SetDeviceButtonMapping)
- SRepXSetDeviceButtonMapping (client, len, rep);
+ SRepXSetDeviceButtonMapping (client, len, (xSetDeviceButtonMappingReply *)rep);
else if (rep->RepType == X_QueryDeviceState)
- SRepXQueryDeviceState (client, len, rep);
+ SRepXQueryDeviceState (client, len, (xQueryDeviceStateReply *)rep);
else if (rep->RepType == X_SetDeviceValuators)
- SRepXSetDeviceValuators (client, len, rep);
+ SRepXSetDeviceValuators (client, len, (xSetDeviceValuatorsReply *)rep);
else if (rep->RepType == X_GetDeviceControl)
- SRepXGetDeviceControl (client, len, rep);
+ SRepXGetDeviceControl (client, len, (xGetDeviceControlReply *)rep);
else if (rep->RepType == X_ChangeDeviceControl)
- SRepXChangeDeviceControl (client, len, rep);
+ SRepXChangeDeviceControl (client, len, (xChangeDeviceControlReply *)rep);
else
{
FatalError("XINPUT confused sending swapped reply");
@@ -461,15 +503,17 @@ SReplyIDispatch (client, len, rep)
*
* Swap any events defined in this extension.
*/
+#define DO_SWAP(func,type) func ((type *)from, (type *)to)
+
void
SEventIDispatch (from, to)
xEvent *from;
xEvent *to;
- {
+{
int type = from->u.u.type & 0177;
if (type == DeviceValuator)
- SEventDeviceValuator (from, to);
+ DO_SWAP(SEventDeviceValuator, deviceValuator);
else if (type == DeviceKeyPress)
{
SKeyButtonPtrEvent (from, to);
@@ -496,9 +540,9 @@ SEventIDispatch (from, to)
to->u.keyButtonPointer.pad1 = from->u.keyButtonPointer.pad1;
}
else if (type == DeviceFocusIn)
- SEventFocus (from, to);
+ DO_SWAP(SEventFocus, deviceFocus);
else if (type == DeviceFocusOut)
- SEventFocus (from, to);
+ DO_SWAP(SEventFocus, deviceFocus);
else if (type == ProximityIn)
{
SKeyButtonPtrEvent (from, to);
@@ -510,15 +554,15 @@ SEventIDispatch (from, to)
to->u.keyButtonPointer.pad1 = from->u.keyButtonPointer.pad1;
}
else if (type == DeviceStateNotify)
- SDeviceStateNotifyEvent (from, to);
+ DO_SWAP(SDeviceStateNotifyEvent, deviceStateNotify);
else if (type == DeviceKeyStateNotify)
- SDeviceKeyStateNotifyEvent (from, to);
+ DO_SWAP(SDeviceKeyStateNotifyEvent, deviceKeyStateNotify);
else if (type == DeviceButtonStateNotify)
- SDeviceButtonStateNotifyEvent (from, to);
+ DO_SWAP(SDeviceButtonStateNotifyEvent, deviceButtonStateNotify);
else if (type == DeviceMappingNotify)
- SDeviceMappingNotifyEvent (from, to);
+ DO_SWAP(SDeviceMappingNotifyEvent, deviceMappingNotify);
else if (type == ChangeDeviceNotify)
- SChangeDeviceNotifyEvent (from, to);
+ DO_SWAP(SChangeDeviceNotifyEvent, changeDeviceNotify);
else
{
FatalError("XInputExtension: Impossible event!\n");
@@ -531,6 +575,7 @@ SEventIDispatch (from, to)
*
*/
+void
SEventDeviceValuator (from, to)
deviceValuator *from;
deviceValuator *to;
@@ -549,10 +594,11 @@ SEventDeviceValuator (from, to)
}
}
+void
SEventFocus (from, to)
deviceFocus *from;
deviceFocus *to;
- {
+{
register char n;
*to = *from;
@@ -561,10 +607,11 @@ SEventFocus (from, to)
swapl(&to->window, n);
}
+void
SDeviceStateNotifyEvent (from, to)
deviceStateNotify *from;
deviceStateNotify *to;
- {
+{
register int i;
register char n;
INT32 *ip B32;
@@ -579,30 +626,33 @@ SDeviceStateNotifyEvent (from, to)
}
}
+void
SDeviceKeyStateNotifyEvent (from, to)
deviceKeyStateNotify *from;
deviceKeyStateNotify *to;
- {
+{
register char n;
*to = *from;
swaps(&to->sequenceNumber,n);
}
+void
SDeviceButtonStateNotifyEvent (from, to)
deviceButtonStateNotify *from;
deviceButtonStateNotify *to;
- {
+{
register char n;
*to = *from;
swaps(&to->sequenceNumber,n);
}
+void
SChangeDeviceNotifyEvent (from, to)
changeDeviceNotify *from;
changeDeviceNotify *to;
- {
+{
register char n;
*to = *from;
@@ -610,10 +660,11 @@ SChangeDeviceNotifyEvent (from, to)
swapl(&to->time, n);
}
+void
SDeviceMappingNotifyEvent (from, to)
deviceMappingNotify *from;
deviceMappingNotify *to;
- {
+{
register char n;
*to = *from;
@@ -627,14 +678,11 @@ SDeviceMappingNotifyEvent (from, to)
*
*/
+void
FixExtensionEvents (extEntry)
ExtensionEntry *extEntry;
- {
- Mask mask, GetNextExtEventMask();
- void SetMaskForExtEvent();
- void SetEventInfo();
- void AllowPropagateSuppress();
- void SetExclusiveAccess();
+{
+ Mask mask;
DeviceValuator = extEntry->eventBase;
DeviceKeyPress = DeviceValuator + 1;
@@ -733,8 +781,9 @@ FixExtensionEvents (extEntry)
*
*/
+void
RestoreExtensionEvents ()
- {
+{
int i;
IReqCode = 0;
@@ -781,10 +830,11 @@ RestoreExtensionEvents ()
*/
void
-IResetProc()
+IResetProc(unused)
+ ExtensionEntry *unused;
{
- ReplySwapVector[IReqCode] = NotImplemented;
+ ReplySwapVector[IReqCode] = ReplyNotSwappd;
EventSwapVector[DeviceValuator] = NotImplemented;
EventSwapVector[DeviceKeyPress] = NotImplemented;
EventSwapVector[DeviceKeyRelease] = NotImplemented;
@@ -809,12 +859,12 @@ IResetProc()
*
*/
-int
+void
AssignTypeAndName (dev, type, name)
DeviceIntPtr dev;
Atom type;
char *name;
- {
+{
dev->type = type;
dev->name = (char *) xalloc(strlen(name)+1);
strcpy (dev->name, name);
@@ -826,7 +876,7 @@ AssignTypeAndName (dev, type, name)
*
*/
-int
+void
MakeDeviceTypeAtoms ()
{
int i;
@@ -844,9 +894,14 @@ MakeDeviceTypeAtoms ()
*/
DeviceIntPtr
+#if NeedFunctionPrototypes
+LookupDeviceIntRec (
+ CARD8 id)
+#else
LookupDeviceIntRec (id)
CARD8 id;
- {
+#endif
+{
DeviceIntPtr dev;
for (dev=inputInfo.devices; dev; dev=dev->next)