summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorroot <root@agamemnon.b5>2007-01-13 07:33:49 -0500
committerroot <root@agamemnon.b5>2007-01-13 07:33:49 -0500
commitebb30a554fe084a50c7281defea80c38bc1b0ddd (patch)
tree808949990250808fc7f225cc00744121bbd02202
parent3d8bb262e42b1c5442aebb4048c71b4dc8ce24a0 (diff)
downloadxorg-driver-xf86-input-evdev-ebb30a554fe084a50c7281defea80c38bc1b0ddd.tar.gz
Fix a bug where we potentially wrote garbage events when LEDs change.
Support setting keyboard repeat rate/period.
-rw-r--r--src/evdev_key.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/evdev_key.c b/src/evdev_key.c
index f448e35..b806d11 100644
--- a/src/evdev_key.c
+++ b/src/evdev_key.c
@@ -269,8 +269,22 @@ EvdevKbdCtrl(DeviceIntPtr device, KeybdCtrl *ctrl)
ev[i].type = EV_LED;
ev[i].code = bits[i].code;
ev[i].value = (ctrl->leds & bits[i].xbit) > 0;
+ }
+ write(pInfo->fd, ev, sizeof(ev));
+
+ if (device->key && device->key->xkbInfo && device->key->xkbInfo->desc
+ && device->key->xkbInfo->desc->ctrls) {
+ XkbControlsRec *ctrls = device->key->xkbInfo->desc->ctrls;
+
+ ev[0].type = EV_REP;
+ ev[0].code = REP_DELAY;
+ ev[0].value = ctrls->repeat_delay;
+
+ ev[1].type = EV_REP;
+ ev[1].code = REP_PERIOD;
+ ev[1].value = ctrls->repeat_interval;
- write(pInfo->fd, ev, sizeof ev);
+ write(pInfo->fd, ev, sizeof(ev[0]) * 2);
}
}