[PATCH evdev] Use an array for the proximity bits.
Peter Hutterer
peter.hutterer at who-t.net
Tue Oct 19 17:47:11 PDT 2010
Instead of two lists that need to be kept in sync, just store the bits in an
array and run through them.
Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
src/evdev.c | 51 +++++++++++++++++++++++++++++----------------------
1 files changed, 29 insertions(+), 22 deletions(-)
diff --git a/src/evdev.c b/src/evdev.c
index 0cf01ab..626bb43 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -95,6 +95,18 @@ static char *evdevDefaults[] = {
NULL
};
+/* Any of those triggers a proximity event */
+static int proximity_bits[] = {
+ BTN_TOOL_PEN,
+ BTN_TOOL_RUBBER,
+ BTN_TOOL_BRUSH,
+ BTN_TOOL_PENCIL,
+ BTN_TOOL_AIRBRUSH,
+ BTN_TOOL_FINGER,
+ BTN_TOOL_MOUSE,
+ BTN_TOOL_LENS,
+};
+
static int EvdevOn(DeviceIntPtr);
static int EvdevCacheCompare(InputInfoPtr pInfo, BOOL compare);
static void EvdevKbdCtrl(DeviceIntPtr device, KeybdCtrl *ctrl);
@@ -646,7 +658,7 @@ EvdevProcessAbsoluteMotionEvent(InputInfoPtr pInfo, struct input_event *ev)
static void
EvdevProcessKeyEvent(InputInfoPtr pInfo, struct input_event *ev)
{
- int value;
+ int value, i;
EvdevPtr pEvdev = pInfo->private;
/* Get the signed value, earlier kernels had this as unsigned */
@@ -657,19 +669,16 @@ EvdevProcessKeyEvent(InputInfoPtr pInfo, struct input_event *ev)
if (value == 2)
return;
- switch (ev->code) {
- /* keep this list in sync with InitProximityClassDeviceStruct */
- case BTN_TOOL_PEN:
- case BTN_TOOL_RUBBER:
- case BTN_TOOL_BRUSH:
- case BTN_TOOL_PENCIL:
- case BTN_TOOL_AIRBRUSH:
- case BTN_TOOL_FINGER:
- case BTN_TOOL_MOUSE:
- case BTN_TOOL_LENS:
+ for (i = 0; i < ArrayLength(proximity_bits); i++)
+ {
+ if (ev->code == proximity_bits[i])
+ {
EvdevProcessProximityEvent(pInfo, ev);
- break;
+ return;
+ }
+ }
+ switch (ev->code) {
case BTN_TOUCH:
if (!(pEvdev->flags & (EVDEV_TOUCHSCREEN | EVDEV_TABLET)))
break;
@@ -1331,16 +1340,14 @@ EvdevAddAbsClass(DeviceIntPtr device)
free(atoms);
- /* keep this list in sync with EvdevProcessKeyEvent */
- if (TestBit(BTN_TOOL_PEN, pEvdev->key_bitmask) ||
- TestBit(BTN_TOOL_RUBBER, pEvdev->key_bitmask) ||
- TestBit(BTN_TOOL_BRUSH, pEvdev->key_bitmask) ||
- TestBit(BTN_TOOL_PENCIL, pEvdev->key_bitmask) ||
- TestBit(BTN_TOOL_AIRBRUSH, pEvdev->key_bitmask) ||
- TestBit(BTN_TOOL_FINGER, pEvdev->key_bitmask) ||
- TestBit(BTN_TOOL_MOUSE, pEvdev->key_bitmask) ||
- TestBit(BTN_TOOL_LENS, pEvdev->key_bitmask))
- InitProximityClassDeviceStruct(device);
+ for (i = 0; i < ArrayLength(proximity_bits); i++)
+ {
+ if (TestBit(proximity_bits[i], pEvdev->key_bitmask))
+ {
+ InitProximityClassDeviceStruct(device);
+ break;
+ }
+ }
if (!InitPtrFeedbackClassDeviceStruct(device, EvdevPtrCtrlProc))
return !Success;
--
1.7.2.3
Cheers,
Peter
More information about the xorg-devel
mailing list