Xi: handle requests through a dispatch handler.
Same principle as e.g. in the RandR extension, rather than having a load of
    if (type == XI_whatever)
use an array of function pointers.
			
			
This commit is contained in:
		
							parent
							
								
									cb8cb87bc6
								
							
						
					
					
						commit
						6015b7a812
					
				
							
								
								
									
										299
									
								
								Xi/extinit.c
								
								
								
								
							
							
						
						
									
										299
									
								
								Xi/extinit.c
								
								
								
								
							| 
						 | 
				
			
			@ -166,6 +166,109 @@ static struct dev_type
 | 
			
		|||
CARD8 event_base[numInputClasses];
 | 
			
		||||
XExtEventInfo EventInfo[32];
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Dispatch vector. Functions defined in here will be called when the matching
 | 
			
		||||
 * request arrives.
 | 
			
		||||
 */
 | 
			
		||||
static int (*ProcIVector[])(ClientPtr) = {
 | 
			
		||||
        NULL,                                   /*  0 */
 | 
			
		||||
	ProcXGetExtensionVersion,               /*  1 */
 | 
			
		||||
	ProcXListInputDevices,                  /*  2 */
 | 
			
		||||
	ProcXOpenDevice,                        /*  3 */
 | 
			
		||||
	ProcXCloseDevice,                       /*  4 */
 | 
			
		||||
	ProcXSetDeviceMode,                     /*  5 */
 | 
			
		||||
	ProcXSelectExtensionEvent,              /*  6 */
 | 
			
		||||
	ProcXGetSelectedExtensionEvents,        /*  7 */
 | 
			
		||||
	ProcXChangeDeviceDontPropagateList,     /*  8 */
 | 
			
		||||
	ProcXGetDeviceDontPropagateList,        /*  9 */
 | 
			
		||||
	ProcXGetDeviceMotionEvents,             /* 10 */
 | 
			
		||||
	ProcXChangeKeyboardDevice,              /* 11 */
 | 
			
		||||
	ProcXChangePointerDevice,               /* 12 */
 | 
			
		||||
	ProcXGrabDevice,                        /* 13 */
 | 
			
		||||
	ProcXUngrabDevice,                      /* 14 */
 | 
			
		||||
	ProcXGrabDeviceKey,                     /* 15 */
 | 
			
		||||
	ProcXUngrabDeviceKey,                   /* 16 */
 | 
			
		||||
	ProcXGrabDeviceButton,                  /* 17 */
 | 
			
		||||
	ProcXUngrabDeviceButton,                /* 18 */
 | 
			
		||||
	ProcXAllowDeviceEvents,                 /* 19 */
 | 
			
		||||
	ProcXGetDeviceFocus,                    /* 20 */
 | 
			
		||||
	ProcXSetDeviceFocus,                    /* 21 */
 | 
			
		||||
	ProcXGetFeedbackControl,                /* 22 */
 | 
			
		||||
	ProcXChangeFeedbackControl,             /* 23 */
 | 
			
		||||
	ProcXGetDeviceKeyMapping,               /* 24 */
 | 
			
		||||
	ProcXChangeDeviceKeyMapping,            /* 25 */
 | 
			
		||||
	ProcXGetDeviceModifierMapping,          /* 26 */
 | 
			
		||||
	ProcXSetDeviceModifierMapping,          /* 27 */
 | 
			
		||||
	ProcXGetDeviceButtonMapping,            /* 28 */
 | 
			
		||||
	ProcXSetDeviceButtonMapping,            /* 29 */
 | 
			
		||||
	ProcXQueryDeviceState,                  /* 30 */
 | 
			
		||||
	ProcXSendExtensionEvent,                /* 31 */
 | 
			
		||||
	ProcXDeviceBell,                        /* 32 */
 | 
			
		||||
	ProcXSetDeviceValuators,                /* 33 */
 | 
			
		||||
	ProcXGetDeviceControl,                  /* 34 */
 | 
			
		||||
	ProcXChangeDeviceControl,               /* 35 */
 | 
			
		||||
        ProcXQueryDevicePointer,                /* 36 */
 | 
			
		||||
        ProcXWarpDevicePointer,                 /* 37 */
 | 
			
		||||
        ProcXChangeDeviceCursor,                /* 38 */
 | 
			
		||||
        ProcXChangeDeviceHierarchy,             /* 39 */
 | 
			
		||||
        ProcXiSelectEvent,                      /* 40 */
 | 
			
		||||
        ProcXChangeWindowAccess,                /* 41 */
 | 
			
		||||
        ProcXQueryWindowAccess,                 /* 42 */
 | 
			
		||||
        ProcXSetClientPointer,                  /* 43 */
 | 
			
		||||
        ProcXGetClientPointer,                  /* 44 */
 | 
			
		||||
        ProcXExtendedGrabDevice                 /* 45 */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* For swapped clients */
 | 
			
		||||
static int (*SProcIVector[])(ClientPtr) = {
 | 
			
		||||
        NULL,                                    /*  0 */
 | 
			
		||||
	SProcXGetExtensionVersion,               /*  1 */
 | 
			
		||||
	SProcXListInputDevices,                  /*  2 */
 | 
			
		||||
	SProcXOpenDevice,                        /*  3 */
 | 
			
		||||
	SProcXCloseDevice,                       /*  4 */
 | 
			
		||||
	SProcXSetDeviceMode,                     /*  5 */
 | 
			
		||||
	SProcXSelectExtensionEvent,              /*  6 */
 | 
			
		||||
	SProcXGetSelectedExtensionEvents,        /*  7 */
 | 
			
		||||
	SProcXChangeDeviceDontPropagateList,     /*  8 */
 | 
			
		||||
	SProcXGetDeviceDontPropagateList,        /*  9 */
 | 
			
		||||
	SProcXGetDeviceMotionEvents,             /* 10 */
 | 
			
		||||
	SProcXChangeKeyboardDevice,              /* 11 */
 | 
			
		||||
	SProcXChangePointerDevice,               /* 12 */
 | 
			
		||||
	SProcXGrabDevice,                        /* 13 */
 | 
			
		||||
	SProcXUngrabDevice,                      /* 14 */
 | 
			
		||||
	SProcXGrabDeviceKey,                     /* 15 */
 | 
			
		||||
	SProcXUngrabDeviceKey,                   /* 16 */
 | 
			
		||||
	SProcXGrabDeviceButton,                  /* 17 */
 | 
			
		||||
	SProcXUngrabDeviceButton,                /* 18 */
 | 
			
		||||
	SProcXAllowDeviceEvents,                 /* 19 */
 | 
			
		||||
	SProcXGetDeviceFocus,                    /* 20 */
 | 
			
		||||
	SProcXSetDeviceFocus,                    /* 21 */
 | 
			
		||||
	SProcXGetFeedbackControl,                /* 22 */
 | 
			
		||||
	SProcXChangeFeedbackControl,             /* 23 */
 | 
			
		||||
	SProcXGetDeviceKeyMapping,               /* 24 */
 | 
			
		||||
	SProcXChangeDeviceKeyMapping,            /* 25 */
 | 
			
		||||
	SProcXGetDeviceModifierMapping,          /* 26 */
 | 
			
		||||
	SProcXSetDeviceModifierMapping,          /* 27 */
 | 
			
		||||
	SProcXGetDeviceButtonMapping,            /* 28 */
 | 
			
		||||
	SProcXSetDeviceButtonMapping,            /* 29 */
 | 
			
		||||
	SProcXQueryDeviceState,                  /* 30 */
 | 
			
		||||
	SProcXSendExtensionEvent,                /* 31 */
 | 
			
		||||
	SProcXDeviceBell,                        /* 32 */
 | 
			
		||||
	SProcXSetDeviceValuators,                /* 33 */
 | 
			
		||||
	SProcXGetDeviceControl,                  /* 34 */
 | 
			
		||||
	SProcXChangeDeviceControl,               /* 35 */
 | 
			
		||||
        SProcXQueryDevicePointer,                /* 36 */
 | 
			
		||||
        SProcXWarpDevicePointer,                 /* 37 */
 | 
			
		||||
        SProcXChangeDeviceCursor,                /* 38 */
 | 
			
		||||
        SProcXChangeDeviceHierarchy,             /* 39 */
 | 
			
		||||
        SProcXiSelectEvent,                      /* 40 */
 | 
			
		||||
        SProcXChangeWindowAccess,                /* 41 */
 | 
			
		||||
        SProcXQueryWindowAccess,                 /* 42 */
 | 
			
		||||
        SProcXSetClientPointer,                  /* 43 */
 | 
			
		||||
        SProcXGetClientPointer,                  /* 44 */
 | 
			
		||||
        SProcXExtendedGrabDevice                 /* 45 */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*****************************************************************
 | 
			
		||||
 *
 | 
			
		||||
 * Globals referenced elsewhere in the server.
 | 
			
		||||
| 
						 | 
				
			
			@ -246,100 +349,10 @@ static int
 | 
			
		|||
ProcIDispatch(ClientPtr client)
 | 
			
		||||
{
 | 
			
		||||
    REQUEST(xReq);
 | 
			
		||||
    if (stuff->data == X_GetExtensionVersion)
 | 
			
		||||
	return (ProcXGetExtensionVersion(client));
 | 
			
		||||
    if (stuff->data == X_ListInputDevices)
 | 
			
		||||
	return (ProcXListInputDevices(client));
 | 
			
		||||
    else if (stuff->data == X_OpenDevice)
 | 
			
		||||
	return (ProcXOpenDevice(client));
 | 
			
		||||
    else if (stuff->data == X_CloseDevice)
 | 
			
		||||
	return (ProcXCloseDevice(client));
 | 
			
		||||
    else if (stuff->data == X_SetDeviceMode)
 | 
			
		||||
	return (ProcXSetDeviceMode(client));
 | 
			
		||||
    else if (stuff->data == X_SelectExtensionEvent)
 | 
			
		||||
	return (ProcXSelectExtensionEvent(client));
 | 
			
		||||
    else if (stuff->data == X_GetSelectedExtensionEvents)
 | 
			
		||||
	return (ProcXGetSelectedExtensionEvents(client));
 | 
			
		||||
    else if (stuff->data == X_ChangeDeviceDontPropagateList)
 | 
			
		||||
	return (ProcXChangeDeviceDontPropagateList(client));
 | 
			
		||||
    else if (stuff->data == X_GetDeviceDontPropagateList)
 | 
			
		||||
	return (ProcXGetDeviceDontPropagateList(client));
 | 
			
		||||
    else if (stuff->data == X_GetDeviceMotionEvents)
 | 
			
		||||
	return (ProcXGetDeviceMotionEvents(client));
 | 
			
		||||
    else if (stuff->data == X_ChangeKeyboardDevice)
 | 
			
		||||
	return (ProcXChangeKeyboardDevice(client));
 | 
			
		||||
    else if (stuff->data == X_ChangePointerDevice)
 | 
			
		||||
	return (ProcXChangePointerDevice(client));
 | 
			
		||||
    else if (stuff->data == X_GrabDevice)
 | 
			
		||||
	return (ProcXGrabDevice(client));
 | 
			
		||||
    else if (stuff->data == X_UngrabDevice)
 | 
			
		||||
	return (ProcXUngrabDevice(client));
 | 
			
		||||
    else if (stuff->data == X_GrabDeviceKey)
 | 
			
		||||
	return (ProcXGrabDeviceKey(client));
 | 
			
		||||
    else if (stuff->data == X_UngrabDeviceKey)
 | 
			
		||||
	return (ProcXUngrabDeviceKey(client));
 | 
			
		||||
    else if (stuff->data == X_GrabDeviceButton)
 | 
			
		||||
	return (ProcXGrabDeviceButton(client));
 | 
			
		||||
    else if (stuff->data == X_UngrabDeviceButton)
 | 
			
		||||
	return (ProcXUngrabDeviceButton(client));
 | 
			
		||||
    else if (stuff->data == X_AllowDeviceEvents)
 | 
			
		||||
	return (ProcXAllowDeviceEvents(client));
 | 
			
		||||
    else if (stuff->data == X_GetDeviceFocus)
 | 
			
		||||
	return (ProcXGetDeviceFocus(client));
 | 
			
		||||
    else if (stuff->data == X_SetDeviceFocus)
 | 
			
		||||
	return (ProcXSetDeviceFocus(client));
 | 
			
		||||
    else if (stuff->data == X_GetFeedbackControl)
 | 
			
		||||
	return (ProcXGetFeedbackControl(client));
 | 
			
		||||
    else if (stuff->data == X_ChangeFeedbackControl)
 | 
			
		||||
	return (ProcXChangeFeedbackControl(client));
 | 
			
		||||
    else if (stuff->data == X_GetDeviceKeyMapping)
 | 
			
		||||
	return (ProcXGetDeviceKeyMapping(client));
 | 
			
		||||
    else if (stuff->data == X_ChangeDeviceKeyMapping)
 | 
			
		||||
	return (ProcXChangeDeviceKeyMapping(client));
 | 
			
		||||
    else if (stuff->data == X_GetDeviceModifierMapping)
 | 
			
		||||
	return (ProcXGetDeviceModifierMapping(client));
 | 
			
		||||
    else if (stuff->data == X_SetDeviceModifierMapping)
 | 
			
		||||
	return (ProcXSetDeviceModifierMapping(client));
 | 
			
		||||
    else if (stuff->data == X_GetDeviceButtonMapping)
 | 
			
		||||
	return (ProcXGetDeviceButtonMapping(client));
 | 
			
		||||
    else if (stuff->data == X_SetDeviceButtonMapping)
 | 
			
		||||
	return (ProcXSetDeviceButtonMapping(client));
 | 
			
		||||
    else if (stuff->data == X_QueryDeviceState)
 | 
			
		||||
	return (ProcXQueryDeviceState(client));
 | 
			
		||||
    else if (stuff->data == X_SendExtensionEvent)
 | 
			
		||||
	return (ProcXSendExtensionEvent(client));
 | 
			
		||||
    else if (stuff->data == X_DeviceBell)
 | 
			
		||||
	return (ProcXDeviceBell(client));
 | 
			
		||||
    else if (stuff->data == X_SetDeviceValuators)
 | 
			
		||||
	return (ProcXSetDeviceValuators(client));
 | 
			
		||||
    else if (stuff->data == X_GetDeviceControl)
 | 
			
		||||
	return (ProcXGetDeviceControl(client));
 | 
			
		||||
    else if (stuff->data == X_ChangeDeviceControl)
 | 
			
		||||
	return (ProcXChangeDeviceControl(client));
 | 
			
		||||
    else if (stuff->data == X_QueryDevicePointer)
 | 
			
		||||
        return (ProcXQueryDevicePointer(client));
 | 
			
		||||
    else if (stuff->data == X_WarpDevicePointer)
 | 
			
		||||
        return (ProcXWarpDevicePointer(client));
 | 
			
		||||
    else if (stuff->data == X_ChangeDeviceCursor)
 | 
			
		||||
        return (ProcXChangeDeviceCursor(client));
 | 
			
		||||
    else if (stuff->data == X_ChangeDeviceHierarchy)
 | 
			
		||||
        return (ProcXChangeDeviceHierarchy(client));
 | 
			
		||||
    else if (stuff->data == X_XiSelectEvent)
 | 
			
		||||
        return (ProcXiSelectEvent(client));
 | 
			
		||||
    else if (stuff->data == X_ChangeWindowAccess)
 | 
			
		||||
        return (ProcXChangeWindowAccess(client));
 | 
			
		||||
    else if (stuff->data == X_QueryWindowAccess)
 | 
			
		||||
        return ProcXQueryWindowAccess(client);
 | 
			
		||||
    else if (stuff->data == X_SetClientPointer)
 | 
			
		||||
        return ProcXSetClientPointer(client);
 | 
			
		||||
    else if (stuff->data == X_GetClientPointer)
 | 
			
		||||
        return ProcXGetClientPointer(client);
 | 
			
		||||
    else if (stuff->data == X_ExtendedGrabDevice)
 | 
			
		||||
        return ProcXExtendedGrabDevice(client);
 | 
			
		||||
    else {
 | 
			
		||||
	SendErrorToClient(client, IReqCode, stuff->data, 0, BadRequest);
 | 
			
		||||
    }
 | 
			
		||||
    return (BadRequest);
 | 
			
		||||
    if (stuff->data > IREQUESTS || !ProcIVector[stuff->data])
 | 
			
		||||
        return BadRequest;
 | 
			
		||||
 | 
			
		||||
    return (*ProcIVector[stuff->data])(client);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*******************************************************************************
 | 
			
		||||
| 
						 | 
				
			
			@ -355,100 +368,10 @@ static int
 | 
			
		|||
SProcIDispatch(ClientPtr client)
 | 
			
		||||
{
 | 
			
		||||
    REQUEST(xReq);
 | 
			
		||||
    if (stuff->data == X_GetExtensionVersion)
 | 
			
		||||
	return (SProcXGetExtensionVersion(client));
 | 
			
		||||
    if (stuff->data == X_ListInputDevices)
 | 
			
		||||
	return (SProcXListInputDevices(client));
 | 
			
		||||
    else if (stuff->data == X_OpenDevice)
 | 
			
		||||
	return (SProcXOpenDevice(client));
 | 
			
		||||
    else if (stuff->data == X_CloseDevice)
 | 
			
		||||
	return (SProcXCloseDevice(client));
 | 
			
		||||
    else if (stuff->data == X_SetDeviceMode)
 | 
			
		||||
	return (SProcXSetDeviceMode(client));
 | 
			
		||||
    else if (stuff->data == X_SelectExtensionEvent)
 | 
			
		||||
	return (SProcXSelectExtensionEvent(client));
 | 
			
		||||
    else if (stuff->data == X_GetSelectedExtensionEvents)
 | 
			
		||||
	return (SProcXGetSelectedExtensionEvents(client));
 | 
			
		||||
    else if (stuff->data == X_ChangeDeviceDontPropagateList)
 | 
			
		||||
	return (SProcXChangeDeviceDontPropagateList(client));
 | 
			
		||||
    else if (stuff->data == X_GetDeviceDontPropagateList)
 | 
			
		||||
	return (SProcXGetDeviceDontPropagateList(client));
 | 
			
		||||
    else if (stuff->data == X_GetDeviceMotionEvents)
 | 
			
		||||
	return (SProcXGetDeviceMotionEvents(client));
 | 
			
		||||
    else if (stuff->data == X_ChangeKeyboardDevice)
 | 
			
		||||
	return (SProcXChangeKeyboardDevice(client));
 | 
			
		||||
    else if (stuff->data == X_ChangePointerDevice)
 | 
			
		||||
	return (SProcXChangePointerDevice(client));
 | 
			
		||||
    else if (stuff->data == X_GrabDevice)
 | 
			
		||||
	return (SProcXGrabDevice(client));
 | 
			
		||||
    else if (stuff->data == X_UngrabDevice)
 | 
			
		||||
	return (SProcXUngrabDevice(client));
 | 
			
		||||
    else if (stuff->data == X_GrabDeviceKey)
 | 
			
		||||
	return (SProcXGrabDeviceKey(client));
 | 
			
		||||
    else if (stuff->data == X_UngrabDeviceKey)
 | 
			
		||||
	return (SProcXUngrabDeviceKey(client));
 | 
			
		||||
    else if (stuff->data == X_GrabDeviceButton)
 | 
			
		||||
	return (SProcXGrabDeviceButton(client));
 | 
			
		||||
    else if (stuff->data == X_UngrabDeviceButton)
 | 
			
		||||
	return (SProcXUngrabDeviceButton(client));
 | 
			
		||||
    else if (stuff->data == X_AllowDeviceEvents)
 | 
			
		||||
	return (SProcXAllowDeviceEvents(client));
 | 
			
		||||
    else if (stuff->data == X_GetDeviceFocus)
 | 
			
		||||
	return (SProcXGetDeviceFocus(client));
 | 
			
		||||
    else if (stuff->data == X_SetDeviceFocus)
 | 
			
		||||
	return (SProcXSetDeviceFocus(client));
 | 
			
		||||
    else if (stuff->data == X_GetFeedbackControl)
 | 
			
		||||
	return (SProcXGetFeedbackControl(client));
 | 
			
		||||
    else if (stuff->data == X_ChangeFeedbackControl)
 | 
			
		||||
	return (SProcXChangeFeedbackControl(client));
 | 
			
		||||
    else if (stuff->data == X_GetDeviceKeyMapping)
 | 
			
		||||
	return (SProcXGetDeviceKeyMapping(client));
 | 
			
		||||
    else if (stuff->data == X_ChangeDeviceKeyMapping)
 | 
			
		||||
	return (SProcXChangeDeviceKeyMapping(client));
 | 
			
		||||
    else if (stuff->data == X_GetDeviceModifierMapping)
 | 
			
		||||
	return (SProcXGetDeviceModifierMapping(client));
 | 
			
		||||
    else if (stuff->data == X_SetDeviceModifierMapping)
 | 
			
		||||
	return (SProcXSetDeviceModifierMapping(client));
 | 
			
		||||
    else if (stuff->data == X_GetDeviceButtonMapping)
 | 
			
		||||
	return (SProcXGetDeviceButtonMapping(client));
 | 
			
		||||
    else if (stuff->data == X_SetDeviceButtonMapping)
 | 
			
		||||
	return (SProcXSetDeviceButtonMapping(client));
 | 
			
		||||
    else if (stuff->data == X_QueryDeviceState)
 | 
			
		||||
	return (SProcXQueryDeviceState(client));
 | 
			
		||||
    else if (stuff->data == X_SendExtensionEvent)
 | 
			
		||||
	return (SProcXSendExtensionEvent(client));
 | 
			
		||||
    else if (stuff->data == X_DeviceBell)
 | 
			
		||||
	return (SProcXDeviceBell(client));
 | 
			
		||||
    else if (stuff->data == X_SetDeviceValuators)
 | 
			
		||||
	return (SProcXSetDeviceValuators(client));
 | 
			
		||||
    else if (stuff->data == X_GetDeviceControl)
 | 
			
		||||
	return (SProcXGetDeviceControl(client));
 | 
			
		||||
    else if (stuff->data == X_ChangeDeviceControl)
 | 
			
		||||
	return (SProcXChangeDeviceControl(client));
 | 
			
		||||
    else if (stuff->data == X_QueryDevicePointer)
 | 
			
		||||
	return (SProcXQueryDevicePointer(client));
 | 
			
		||||
    else if (stuff->data == X_WarpDevicePointer)
 | 
			
		||||
	return (SProcXWarpDevicePointer(client));
 | 
			
		||||
    else if (stuff->data == X_ChangeDeviceCursor)
 | 
			
		||||
        return (SProcXChangeDeviceCursor(client));
 | 
			
		||||
    else if (stuff->data == X_ChangeDeviceHierarchy)
 | 
			
		||||
        return (SProcXChangeDeviceHierarchy(client));
 | 
			
		||||
    else if (stuff->data == X_XiSelectEvent)
 | 
			
		||||
        return (SProcXiSelectEvent(client));
 | 
			
		||||
    else if (stuff->data == X_ChangeWindowAccess)
 | 
			
		||||
        return (SProcXChangeWindowAccess(client));
 | 
			
		||||
    else if (stuff->data == X_QueryWindowAccess)
 | 
			
		||||
        return SProcXQueryWindowAccess(client);
 | 
			
		||||
    else if (stuff->data == X_SetClientPointer)
 | 
			
		||||
        return SProcXSetClientPointer(client);
 | 
			
		||||
    else if (stuff->data == X_GetClientPointer)
 | 
			
		||||
        return SProcXGetClientPointer(client);
 | 
			
		||||
    else if (stuff->data == X_ExtendedGrabDevice)
 | 
			
		||||
        return SProcXExtendedGrabDevice(client);
 | 
			
		||||
    else {
 | 
			
		||||
	SendErrorToClient(client, IReqCode, stuff->data, 0, BadRequest);
 | 
			
		||||
    }
 | 
			
		||||
    return (BadRequest);
 | 
			
		||||
    if (stuff->data > IREQUESTS || !SProcIVector[stuff->data])
 | 
			
		||||
        return BadRequest;
 | 
			
		||||
 | 
			
		||||
    return (*SProcIVector[stuff->data])(client);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**********************************************************************
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue