Prettify code

use switch statement instead of a bunch of ifs
master
Jacopo De Simoi 1 year ago
parent f82f8585ab
commit 0b8243b220
  1. 61
      src/keyboard.c

@ -508,59 +508,56 @@ static long process_descriptor(struct keyboard *kbd, uint8_t code,
break;
}
}
if (kbd->delayedphase == 1) {
switch (kbd->delayedphase) {
case 1:
if (pressed) {
// Another key is pressed; queue the event… how can I queue
// the event here?
dbg("pressed second key");
kbd->delayedcode1 = code;
kbd->delayeddescriptor1 = *d;
kbd->delayedphase = 2;
/// should now bail out
return 0;
} else {
kbd->delayedphase = 3;
kbd->delayedphase = 3; // resolve the delay
// special processing: we declare that the previous press is
// not meant to be a modifier; so we replay it, but frozen.
kbd->keyfrozenstate[kbd->delayedcode0] = 1;
dbg("1 and release: freeze and press");
process_descriptor(kbd, kbd->delayedcode0,
&kbd->delayeddescriptor0, dl, 1, time);
&kbd->delayeddescriptor0, dl, 1, time);
// since the keypress was treated as frozen, the (eventual)
// keyrelease should also be treated as frozen
kbd->keyfrozenstate[kbd->delayedcode0] = 1;
kbd->delayedphase = 0;
dbg("1 and release: freeze and run");
// then let everybody run free
}
} else if (kbd->delayedphase == 2) {
// special processing
dbg("resolve the delay");
kbd->delayedphase = 3;
break;
case 2:
kbd->delayedphase = 3; // resolve the delay
if (!pressed && code == kbd->delayedcode0) {
// this is the whole point of the delayed business
dbg("supposedly not wanting to use it as a mod");
kbd->keyfrozenstate[kbd->delayedcode0] = 1;
process_descriptor(kbd, kbd->delayedcode0,
&kbd->delayeddescriptor0, dl, 1, time);
kbd->keyfrozenstate[kbd->delayedcode0] = 1;
process_descriptor(kbd, kbd->delayedcode0,
&kbd->delayeddescriptor0, dl, 0, time);
process_descriptor(kbd, kbd->delayedcode1,
&kbd->delayeddescriptor1, dl, 1, time);
kbd->delayedphase = 0;
return 0;
} else {
dbg("supposedly wanted to use it as a modifier");
process_descriptor(kbd, kbd->delayedcode0,
&kbd->delayeddescriptor0, dl, 1, time);
process_descriptor(kbd, kbd->delayedcode1,
&kbd->delayeddescriptor1, dl, 1, time);
//.. and let go with processing of the current event
}
// this is the whole point of the delayed business
dbg("supposedly not wanting to use it as a mod");
kbd->keyfrozenstate[kbd->delayedcode0] = 1;
process_descriptor(kbd, kbd->delayedcode0,
&kbd->delayeddescriptor0, dl, 1, time);
kbd->keyfrozenstate[kbd->delayedcode0] = 1;
process_descriptor(kbd, kbd->delayedcode0,
&kbd->delayeddescriptor0, dl, 0, time);
process_descriptor(kbd, kbd->delayedcode1,
&kbd->delayeddescriptor1, dl, 1, time);
kbd->delayedphase = 0;
return 0;
} else {
process_descriptor(kbd, kbd->delayedcode0,
&kbd->delayeddescriptor0, dl, 1, time);
process_descriptor(kbd, kbd->delayedcode1,
&kbd->delayeddescriptor1, dl, 1, time);
//.. and let go with processing of the current event
}
kbd->delayedphase = 0;
default:
break;
}
switch (d->op) {

Loading…
Cancel
Save