summaryrefslogtreecommitdiff
path: root/libevdev/libevdev.c
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2013-07-29 11:46:01 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2013-07-31 08:36:51 +1000
commit40493c3ff26ba25a999b4aa3a8672cf33b036c6f (patch)
tree99075937d9b0aef5f60e9c6e6785973cebcc37d2 /libevdev/libevdev.c
parentfc7c3b73a4dc4c6e1334ab8a2687e9ac7a5e8e31 (diff)
downloadlibevdev-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.c31
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;