- Fix high keycodes (>256)
- Fix rollover behaviour for symbols which share the same keycode (e.g [/{)
master
Raheman Vaiya 5 years ago
parent 46c201d5ce
commit d8bc7c83cb
  1. 15
      src/main.c

@ -397,6 +397,7 @@ static void process_event(struct keyboard *kbd, struct input_event *ev)
switch(d->action) {
struct layer *layer;
uint32_t keyseq;
uint16_t keycode;
case ACTION_OVERLOAD:
keyseq = d->arg.keyseq;
@ -409,7 +410,7 @@ static void process_event(struct keyboard *kbd, struct input_event *ev)
layer->active = 0;
if(lastd == d) { //If tapped
uint16_t key = keyseq & 0xFF;
uint16_t key = keyseq & 0xFFFF;
mods |= keyseq >> 16;
setmods(mods);
@ -471,13 +472,19 @@ static void process_event(struct keyboard *kbd, struct input_event *ev)
break;
case ACTION_KEYSEQ:
mods |= d->arg.keyseq >> 16;
keycode = d->arg.keyseq & 0xFFFF;
if(pressed) {
setmods(mods);
send_key(d->arg.keyseq & 0xFF, 1);
//Account for the possibility that a version of the key
//with a different modifier set is already depressed (e.g [/{)
if(keystate[keycode])
send_key(keycode, 0);
send_key(keycode, 1);
} else {
reify_layer_mods(kbd);
send_key(d->arg.keyseq & 0xFF, 0);
send_key(keycode, 0);
}
goto keyseq_cleanup;
@ -490,7 +497,7 @@ static void process_event(struct keyboard *kbd, struct input_event *ev)
for(i = 0; i < sz;i++) {
uint32_t seq = macro[i];
uint16_t mods = macro[i] >> 16;
uint16_t key = macro[i] & 0xFF;
uint16_t key = macro[i] & 0xFFFF;
if(mods & MOD_TIMEOUT) {
usleep(GET_TIMEOUT(seq)*1000);

Loading…
Cancel
Save