From 8da0ff2d51086666d10ca7330d428e8610a4a0e3 Mon Sep 17 00:00:00 2001 From: Oliver McFadden Date: Tue, 28 Jul 2009 08:20:37 +0300 Subject: [PATCH] xf86Xinput: Add the xf86Post(Proximity|Button|Key)EventP helper functions. xf86PostKeyboardEvent also makes use of xf86PostKeyEventP to avoid code duplication, and the valuator verification has been split into the XI_VERIFY_VALUATORS macro. Signed-off-by: Peter Hutterer --- hw/xfree86/common/xf86Xinput.c | 134 ++++++++++++++++++--------------- hw/xfree86/common/xf86Xinput.h | 16 ++++ 2 files changed, 91 insertions(+), 59 deletions(-) diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c index 7b5904eaa..210f5bff1 100644 --- a/hw/xfree86/common/xf86Xinput.c +++ b/hw/xfree86/common/xf86Xinput.c @@ -713,11 +713,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++) @@ -741,11 +737,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; @@ -801,21 +793,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, @@ -836,6 +839,29 @@ xf86PostButtonEvent(DeviceIntPtr device, { va_list var; int valuators[MAX_VALUATORS]; + int i = 0; + + 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; @@ -846,16 +872,8 @@ 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; - } - va_start(var, num_valuators); - for (i = 0; i < num_valuators; i++) - valuators[i] = va_arg(var, int); - va_end(var); + XI_VERIFY_VALUATORS(num_valuators); GetEventList(&xf86Events); nevents = GetPointerEvents(xf86Events, device, @@ -878,7 +896,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 */ @@ -886,18 +904,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); + + 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) { - va_start(var, num_valuators); - for (i = 0; i < num_valuators; i++) - valuators[i] = va_arg(var, int); - va_end(var); - GetEventList(&xf86Events); nevents = GetKeyboardValuatorEvents(xf86Events, device, is_down ? KeyPress : KeyRelease, @@ -919,28 +956,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 0ad56649b..b1b88ac8e 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);