Hi, I forgot to include the changes since V2:
1. Cleaned up the commit message according to Peter's comments. 2. Switched to using the XI_VERIFY_VALUATORS macro in case the compiler failed to inline the xf86VerifyValuators function, which would provide a non-informative error message. On Tue, 2009-07-28 at 07:20 +0200, Mcfadden Oliver (Nokia-D/Helsinki) wrote: > From: Oliver McFadden <[email protected]> > > xf86PostKeyboardEvent also makes use of xf86PostKeyEventP to avoid code > duplication, and the valuator verification has been split into the > XI_VERIFY_VALUATORS macro. > --- > I only intend to use xf86PostButtonEventP in xf86-input-evdev, however, > for the sake of symmetry (and possible future use) I have added pointer > versions of all the VA args functions. > > hw/xfree86/common/xf86Xinput.c | 137 +++++++++++++++++++++++---------------- > hw/xfree86/common/xf86Xinput.h | 16 +++++ > 2 files changed, 97 insertions(+), 56 deletions(-) > > diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c > index b4169cf..9a75d67 100644 > --- a/hw/xfree86/common/xf86Xinput.c > +++ b/hw/xfree86/common/xf86Xinput.c > @@ -712,11 +712,7 @@ xf86PostMotionEvent(DeviceIntPtr device, > int i = 0; > static int valuators[MAX_VALUATORS]; > > - if (num_valuators > MAX_VALUATORS) { > - xf86Msg(X_ERROR, "%s: num_valuator %d is greater than" > - " MAX_VALUATORS\n", __FUNCTION__, num_valuators); > - return; > - } > + XI_VERIFY_VALUATORS(num_valuators); > > va_start(var, num_valuators); > for (i = 0; i < num_valuators; i++) > @@ -740,11 +736,7 @@ xf86PostMotionEventP(DeviceIntPtr device, > int index; > int flags = 0; > > - if (num_valuators > MAX_VALUATORS) { > - xf86Msg(X_ERROR, "%s: num_valuator %d is greater than" > - " MAX_VALUATORS\n", __FUNCTION__, num_valuators); > - return; > - } > + XI_VERIFY_VALUATORS(num_valuators); > > if (is_absolute) > flags = POINTER_ABSOLUTE; > @@ -800,21 +792,32 @@ xf86PostProximityEvent(DeviceIntPtr device, > ...) > { > va_list var; > - int i, nevents; > + int i; > int valuators[MAX_VALUATORS]; > > - > - if (num_valuators > MAX_VALUATORS) { > - xf86Msg(X_ERROR, "%s: num_valuator %d is greater than" > - " MAX_VALUATORS\n", __FUNCTION__, num_valuators); > - return; > - } > + XI_VERIFY_VALUATORS(num_valuators); > > va_start(var, num_valuators); > for (i = 0; i < num_valuators; i++) > valuators[i] = va_arg(var, int); > va_end(var); > > + xf86PostProximityEventP(device, is_in, first_valuator, num_valuators, > + valuators); > + > +} > + > +void > +xf86PostProximityEventP(DeviceIntPtr device, > + int is_in, > + int first_valuator, > + int num_valuators, > + int *valuators) > +{ > + int i, nevents; > + > + XI_VERIFY_VALUATORS(num_valuators); > + > GetEventList(&xf86Events); > nevents = GetProximityEvents(xf86Events, device, > is_in ? ProximityIn : ProximityOut, > @@ -835,7 +838,7 @@ xf86PostButtonEvent(DeviceIntPtr device, > { > va_list var; > int valuators[MAX_VALUATORS]; > - int i = 0, nevents = 0; > + int i = 0; > int index; > > #if XFreeXDGA > @@ -845,17 +848,41 @@ xf86PostButtonEvent(DeviceIntPtr device, > return; > } > #endif > - if (num_valuators > MAX_VALUATORS) { > - xf86Msg(X_ERROR, "%s: num_valuator %d is greater than" > - " MAX_VALUATORS\n", __FUNCTION__, num_valuators); > - return; > - } > + > + XI_VERIFY_VALUATORS(num_valuators); > > va_start(var, num_valuators); > for (i = 0; i < num_valuators; i++) > valuators[i] = va_arg(var, int); > va_end(var); > > + xf86PostButtonEventP(device, is_absolute, button, is_down, > first_valuator, > + num_valuators, valuators); > + > +} > + > +void > +xf86PostButtonEventP(DeviceIntPtr device, > + int is_absolute, > + int button, > + int is_down, > + int first_valuator, > + int num_valuators, > + int *valuators) > +{ > + int i = 0, nevents = 0; > + int index; > + > +#if XFreeXDGA > + if (miPointerGetScreen(device)) { > + index = miPointerGetScreen(device)->myNum; > + if (DGAStealButtonEvent(device, index, button, is_down)) > + return; > + } > +#endif > + > + XI_VERIFY_VALUATORS(num_valuators); > + > GetEventList(&xf86Events); > nevents = GetPointerEvents(xf86Events, device, > is_down ? ButtonPress : ButtonRelease, button, > @@ -877,7 +904,7 @@ xf86PostKeyEvent(DeviceIntPtr device, > ...) > { > va_list var; > - int i = 0, nevents = 0; > + int i = 0; > static int valuators[MAX_VALUATORS]; > > /* instil confidence in the user */ > @@ -885,18 +912,37 @@ xf86PostKeyEvent(DeviceIntPtr device, > "badly south after this message, then xf86PostKeyEvent is " > "broken.\n"); > > - if (num_valuators > MAX_VALUATORS) { > - xf86Msg(X_ERROR, "%s: num_valuator %d is greater than" > - " MAX_VALUATORS\n", __FUNCTION__, num_valuators); > - return; > - } > + XI_VERIFY_VALUATORS(num_valuators); > > - if (is_absolute) { > - va_start(var, num_valuators); > - for (i = 0; i < num_valuators; i++) > - valuators[i] = va_arg(var, int); > - va_end(var); > + va_start(var, num_valuators); > + for (i = 0; i < num_valuators; i++) > + valuators[i] = va_arg(var, int); > + va_end(var); > + > + xf86PostKeyEventP(device, key_code, is_down, is_absolute, first_valuator, > + num_valuators, valuators); > + > +} > + > +void > +xf86PostKeyEventP(DeviceIntPtr device, > + unsigned int key_code, > + int is_down, > + int is_absolute, > + int first_valuator, > + int num_valuators, > + int *valuators) > +{ > + int i = 0, nevents = 0; > + > + /* instil confidence in the user */ > + DebugF("this function has never been tested properly. if things go > quite " > + "badly south after this message, then xf86PostKeyEvent is " > + "broken.\n"); > + > + XI_VERIFY_VALUATORS(num_valuators); > > + if (is_absolute) { > GetEventList(&xf86Events); > nevents = GetKeyboardValuatorEvents(xf86Events, device, > is_down ? KeyPress : KeyRelease, > @@ -918,28 +964,7 @@ xf86PostKeyboardEvent(DeviceIntPtr device, > unsigned int key_code, > int is_down) > { > - int nevents = 0, i = 0; > - int index; > - > -#if XFreeXDGA > - DeviceIntPtr pointer; > - > - /* Some pointers send key events, paired device is wrong then. */ > - pointer = IsPointerDevice(device) ? device : GetPairedDevice(device); > - > - if (miPointerGetScreen(pointer)) { > - index = miPointerGetScreen(pointer)->myNum; > - if (DGAStealKeyEvent(device, index, key_code, is_down)) > - return; > - } > -#endif > - > - GetEventList(&xf86Events); > - nevents = GetKeyboardEvents(xf86Events, device, > - is_down ? KeyPress : KeyRelease, key_code); > - > - for (i = 0; i < nevents; i++) > - mieqEnqueue(device, (InternalEvent*)((xf86Events + i)->event)); > + xf86PostKeyEventP(device, key_code, is_down, 0, 0, 0, NULL); > } > > LocalDevicePtr > diff --git a/hw/xfree86/common/xf86Xinput.h b/hw/xfree86/common/xf86Xinput.h > index 0ad5664..b1b88ac 100644 > --- a/hw/xfree86/common/xf86Xinput.h > +++ b/hw/xfree86/common/xf86Xinput.h > @@ -80,6 +80,14 @@ > #define XI_PRIVATE(dev) \ > (((LocalDevicePtr)((dev)->public.devicePrivate))->private) > > +/* Valuator verification macro */ > +#define XI_VERIFY_VALUATORS(num_valuators) > \ > + if (num_valuators > MAX_VALUATORS) { > \ > + xf86Msg(X_ERROR, "%s: num_valuator %d is greater than" > \ > + " MAX_VALUATORS\n", __FUNCTION__, num_valuators); > \ > + return; > \ > + } > + > /* Stupid API backwards-compatibility. */ > #define TS_Raw 60 > #define TS_Scaled 61 > @@ -158,12 +166,20 @@ extern _X_EXPORT void xf86PostMotionEventP(DeviceIntPtr > device, int is_absolute, > int first_valuator, int num_valuators, int *valuators); > extern _X_EXPORT void xf86PostProximityEvent(DeviceIntPtr device, int is_in, > int first_valuator, int num_valuators, ...); > +extern _X_EXPORT void xf86PostProximityEventP(DeviceIntPtr device, int > is_in, int first_valuator, > + int num_valuators, int *valuators); > extern _X_EXPORT void xf86PostButtonEvent(DeviceIntPtr device, int > is_absolute, int button, > int is_down, int first_valuator, int num_valuators, > ...); > +extern _X_EXPORT void xf86PostButtonEventP(DeviceIntPtr device, int > is_absolute, int button, > + int is_down, int first_valuator, int num_valuators, > + int *valuators); > extern _X_EXPORT void xf86PostKeyEvent(DeviceIntPtr device, unsigned int > key_code, int is_down, > int is_absolute, int first_valuator, int num_valuators, > ...); > +extern _X_EXPORT void xf86PostKeyEventP(DeviceIntPtr device, unsigned int > key_code, int is_down, > + int is_absolute, int first_valuator, int num_valuators, > + int *valuators); > extern _X_EXPORT void xf86PostKeyboardEvent(DeviceIntPtr device, unsigned > int key_code, > int is_down); > extern _X_EXPORT int xf86ActivateDevice(LocalDevicePtr local); _______________________________________________ xorg-devel mailing list [email protected] http://lists.x.org/mailman/listinfo/xorg-devel
