Work out a default repeat for all keys Our early exit in ApplyInterpsToKey meant we weren't hitting the code that's supposed to set a sensible default autorepeat value for most keys. Signed-off-by: Daniel Stone <daniel@fooishbar.org>
diff --git a/src/xkbcomp/compat.c b/src/xkbcomp/compat.c
index 51b58a6..4765da4 100644
--- a/src/xkbcomp/compat.c
+++ b/src/xkbcomp/compat.c
@@ -973,9 +973,7 @@ ApplyInterpsToKey(struct xkb_keymap *keymap, xkb_keycode_t key)
if (num_acts)
num_acts = XkbKeyNumGroups(keymap, key) * width;
acts = XkbcResizeKeyActions(keymap, key, num_acts);
- if (!num_acts)
- return true;
- else if (!acts)
+ if (num_acts && !acts)
return false;
for (group = 0; group < XkbKeyNumGroups(keymap, key); group++) {
@@ -988,8 +986,10 @@ ApplyInterpsToKey(struct xkb_keymap *keymap, xkb_keycode_t key)
/* Infer default key behaviours from the base level. */
if (group == 0 && level == 0) {
if (!(keymap->server->explicit[key] & XkbExplicitAutoRepeatMask) &&
- (!interp || interp->flags & XkbSI_AutoRepeat))
- keymap->ctrls->per_key_repeat[key / 8] |= (1 << (key % 8));
+ (!interp || interp->flags & XkbSI_AutoRepeat)) {
+ keymap->ctrls->per_key_repeat[key / 8] |= (1 << (key % 8));
+ keymap->server->explicit[key] |= XkbExplicitAutoRepeatMask;
+ }
if (!(keymap->server->explicit[key] & XkbExplicitBehaviorMask) &&
interp && (interp->flags & XkbSI_LockingKey))
keymap->server->behaviors[key].type = XkbKB_Lock;