AT keyboards can produce "fake" shift keys on some extended events. It's not necessary to process these artificial events as the actual extended keys are detected directly.
Signed-off-by: Kevin O'Connor kevin@koconnor.net --- src/kbd.c | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/src/kbd.c b/src/kbd.c index a75adc3..ff962cf 100644 --- a/src/kbd.c +++ b/src/kbd.c @@ -430,10 +430,16 @@ __process_key(u8 scancode) return; case 0x2a: /* L Shift press */ case 0xaa: /* L Shift release */ + if (flags1 & KF1_LAST_E0) + // Ignore fake shifts + return; kbd_set_flag(key_release, KF0_LSHIFT, 0, 0); return; case 0x36: /* R Shift press */ case 0xb6: /* R Shift release */ + if (flags1 & KF1_LAST_E0) + // Ignore fake shifts + return; kbd_set_flag(key_release, KF0_RSHIFT, 0, 0); return; case 0x1d: /* Ctrl press */