1
0
mirror of https://github.com/systemd/systemd.git synced 2024-12-22 17:35:35 +03:00

boot: Correctly handle shift keys

This commit is contained in:
Jan Janssen 2022-08-24 11:01:02 +02:00
parent 0cf5f816f2
commit d17d0e6770

View File

@ -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 */