From: Jan Janssen Date: Wed, 24 Aug 2022 09:01:02 +0000 (+0200) Subject: boot: Correctly handle shift keys X-Git-Tag: v252-rc1~232^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d17d0e67707c8630750eca07f175911543fabffb;p=thirdparty%2Fsystemd.git boot: Correctly handle shift keys --- diff --git a/src/boot/efi/console.c b/src/boot/efi/console.c index f61199ccfd8..14c0008afb4 100644 --- a/src/boot/efi/console.c +++ b/src/boot/efi/console.c @@ -132,14 +132,19 @@ EFI_STATUS console_key_read(uint64_t *key, uint64_t timeout_usec) { if (FLAGS_SET(keydata.KeyState.KeyShiftState, EFI_SHIFT_STATE_VALID)) { /* Do not distinguish between left and right keys (set both flags). */ - if (keydata.KeyState.KeyShiftState & EFI_SHIFT_PRESSED) - shift |= EFI_SHIFT_PRESSED; if (keydata.KeyState.KeyShiftState & EFI_CONTROL_PRESSED) shift |= EFI_CONTROL_PRESSED; if (keydata.KeyState.KeyShiftState & EFI_ALT_PRESSED) shift |= EFI_ALT_PRESSED; if (keydata.KeyState.KeyShiftState & EFI_LOGO_PRESSED) shift |= EFI_LOGO_PRESSED; + + /* Shift is not supposed to be reported for keys that can be represented as uppercase + * unicode chars (Shift+f is reported as F instead). Some firmware does it anyway, so + * filter those out. */ + if ((keydata.KeyState.KeyShiftState & EFI_SHIFT_PRESSED) && + keydata.Key.UnicodeChar == 0) + shift |= EFI_SHIFT_PRESSED; } /* 32 bit modifier keys + 16 bit scan code + 16 bit unicode */