overload: Fix hold behaviour for keys bound to the overloaded key (#534)

master
Raheman Vaiya 3 years ago
parent b96bcbbeb3
commit a830187f55
  1. 11
      src/keyboard.c
  2. 9
      t/overload-same-key.t
  3. 2
      t/test.conf

@ -496,9 +496,10 @@ static long process_descriptor(struct keyboard *kbd, uint8_t code,
struct macro *macro; struct macro *macro;
struct descriptor *action; struct descriptor *action;
uint8_t mods; uint8_t mods;
uint8_t new_code;
case OP_KEYSEQUENCE: case OP_KEYSEQUENCE:
code = d->args[0].code; new_code = d->args[0].code;
mods = d->args[1].mods; mods = d->args[1].mods;
if (pressed) { if (pressed) {
@ -507,15 +508,15 @@ static long process_descriptor(struct keyboard *kbd, uint8_t code,
* to be actuated next to each other * to be actuated next to each other
* E.G [/{ * E.G [/{
*/ */
if (kbd->keystate[code]) if (kbd->keystate[new_code])
send_key(kbd, code, 0); send_key(kbd, new_code, 0);
update_mods(kbd, dl, mods); update_mods(kbd, dl, mods);
send_key(kbd, code, 1); send_key(kbd, new_code, 1);
clear_oneshot(kbd); clear_oneshot(kbd);
} else { } else {
send_key(kbd, code, 0); send_key(kbd, new_code, 0);
update_mods(kbd, -1, 0); update_mods(kbd, -1, 0);
} }

@ -0,0 +1,9 @@
z down
/ down
/ up
z up
control down
z down
z up
control up

@ -43,6 +43,8 @@ o = overloadt(control, a, 10)
= = timeout(a, 300, b) = = timeout(a, 300, b)
\ = 😄 \ = 😄
[ = togglem(control, macro(one)) [ = togglem(control, macro(one))
z = overload(control, enter)
/ = z
[altgr] [altgr]

Loading…
Cancel
Save