diff options
| author | Peter Hutterer <peter.hutterer@who-t.net> | 2013-07-29 11:46:01 +1000 |
|---|---|---|
| committer | Peter Hutterer <peter.hutterer@who-t.net> | 2013-07-31 08:36:51 +1000 |
| commit | 40493c3ff26ba25a999b4aa3a8672cf33b036c6f (patch) | |
| tree | 99075937d9b0aef5f60e9c6e6785973cebcc37d2 /libevdev/libevdev.c | |
| parent | fc7c3b73a4dc4c6e1334ab8a2687e9ac7a5e8e31 (diff) | |
| download | libevdev-40493c3ff26ba25a999b4aa3a8672cf33b036c6f.tar.gz | |
When enabling EV_REP, set the delay/period values
Just enabling EV_REP sets them to zero, but when enabling them directly,
a value is required.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
Diffstat (limited to 'libevdev/libevdev.c')
| -rw-r--r-- | libevdev/libevdev.c | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/libevdev/libevdev.c b/libevdev/libevdev.c index 6b8559b..c5bae3f 100644 --- a/libevdev/libevdev.c +++ b/libevdev/libevdev.c @@ -826,8 +826,16 @@ libevdev_enable_event_type(struct libevdev *dev, unsigned int type) if (type > EV_MAX) return -1; + if (libevdev_has_event_type(dev, type)) + return 0; + set_bit(dev->bits, type); + if (type == EV_REP) { + int delay = 0, period = 0; + libevdev_enable_event_code(dev, EV_REP, REP_DELAY, &delay); + libevdev_enable_event_code(dev, EV_REP, REP_PERIOD, &period); + } return 0; } @@ -852,13 +860,19 @@ libevdev_enable_event_code(struct libevdev *dev, unsigned int type, if (libevdev_enable_event_type(dev, type)) return -1; - if (type != EV_ABS && data != NULL) - return -1; - else if (type == EV_ABS && data == NULL) - return -1; - - if (type == EV_SYN) - return 0; + switch(type) { + case EV_SYN: + return 0; + case EV_ABS: + case EV_REP: + if (data == NULL) + return -1; + break; + default: + if (data != NULL) + return -1; + break; + } max = type_to_mask(dev, type, &mask); @@ -870,6 +884,9 @@ libevdev_enable_event_code(struct libevdev *dev, unsigned int type, if (type == EV_ABS) { const struct input_absinfo *abs = data; dev->abs_info[code] = *abs; + } else if (type == EV_REP) { + const int *value = data; + dev->rep_values[code] = *value; } return 0; |
