diff --git a/boot/freeldr/freeldr/ui/directui.c b/boot/freeldr/freeldr/ui/directui.c index 352f8309fc5..a602700988c 100644 --- a/boot/freeldr/freeldr/ui/directui.c +++ b/boot/freeldr/freeldr/ui/directui.c @@ -556,6 +556,31 @@ UiDisplayMenu(IN PCSTR MenuHeader, ULONG CurrentClockSecond; ULONG KeyPress; + /* + * Before taking any default action if there is no timeout, + * check whether the supplied key filter callback function + * may handle a specific user keypress. If it does, the + * timeout is cancelled. + */ + if (!MenuTimeOut && KeyPressFilter && MachConsKbHit()) + { + /* Get the key */ + KeyPress = MachConsGetCh(); + + /* Is it extended? Then get the extended key */ + if (!KeyPress) KeyPress = MachConsGetCh(); + + /* + * Call the supplied key filter callback function to see + * if it is going to handle this keypress. + */ + if (KeyPressFilter(KeyPress)) + { + /* It processed the key character, cancel the timeout */ + MenuTimeOut = -1; + } + } + /* Check if there's no timeout */ if (!MenuTimeOut) { diff --git a/boot/freeldr/freeldr/ui/tuimenu.c b/boot/freeldr/freeldr/ui/tuimenu.c index fa950b3ccf3..86690af784d 100644 --- a/boot/freeldr/freeldr/ui/tuimenu.c +++ b/boot/freeldr/freeldr/ui/tuimenu.c @@ -30,8 +30,40 @@ TuiDisplayMenu(PCSTR MenuHeader, ULONG CurrentClockSecond; ULONG KeyPress; + // + // Before taking any default action if there is no timeout, + // check whether the supplied key filter callback function + // may handle a specific user keypress. If it does, the + // timeout is cancelled. + // + if (!MenuTimeOut && KeyPressFilter && MachConsKbHit()) + { + // + // Get the key + // + KeyPress = MachConsGetCh(); + + // + // Is it extended? Then get the extended key + // + if (!KeyPress) KeyPress = MachConsGetCh(); + + // + // Call the supplied key filter callback function to see + // if it is going to handle this keypress. + // + if (KeyPressFilter(KeyPress)) + { + // + // It processed the key character, cancel the timeout + // + MenuTimeOut = -1; + } + } + // // Check if there's no timeout + // if (!MenuTimeOut) { //