diff --git a/ChangeLog b/ChangeLog index 797b50874..1c29001a4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2009-09-24 Robert Millan + + Fix "lost keypress" bug in at_keyboard. + + * term/i386/pc/at_keyboard.c (grub_at_keyboard_checkkey): New function. + Checks for readyness of input buffer (without flushing it). + (grub_at_keyboard_term): Use grub_at_keyboard_checkkey() rather + than grub_at_keyboard_getkey_noblock() for `checkkey' struct member. + 2009-09-24 Robert Millan * util/i386/pc/grub-mkimage.c (generate_image): Enclose BIOS-specific diff --git a/term/i386/pc/at_keyboard.c b/term/i386/pc/at_keyboard.c index 1ab41d8fd..cf30e7242 100644 --- a/term/i386/pc/at_keyboard.c +++ b/term/i386/pc/at_keyboard.c @@ -189,6 +189,13 @@ grub_at_keyboard_getkey_noblock (void) return key; } +static int +grub_at_keyboard_checkkey (void) +{ + /* FIXME: this will be triggered by BREAK events. */ + return KEYBOARD_ISREADY (grub_inb (KEYBOARD_REG_STATUS)) ? 1 : -1; +} + static int grub_at_keyboard_getkey (void) { @@ -220,8 +227,7 @@ static struct grub_term_input grub_at_keyboard_term = .name = "at_keyboard", .init = grub_keyboard_controller_init, .fini = grub_keyboard_controller_fini, - /* FIXME: This routine flushes input buffer, and it shouldn't. */ - .checkkey = grub_at_keyboard_getkey_noblock, + .checkkey = grub_at_keyboard_checkkey, .getkey = grub_at_keyboard_getkey, };