diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/Edit/MainTextEditor.c b/ShellPkg/Library/UefiShellDebug1CommandsLib/Edit/MainTextEditor.c index 4eb998bf5f..6832441e81 100644 --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/Edit/MainTextEditor.c +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/Edit/MainTextEditor.c @@ -1387,18 +1387,20 @@ MainCommandDisplayHelp ( continue; } - if ((KeyData.KeyState.KeyShiftState & EFI_SHIFT_STATE_VALID) == 0) { + if (((KeyData.KeyState.KeyShiftState & EFI_SHIFT_STATE_VALID) == 0) || + (KeyData.KeyState.KeyShiftState == EFI_SHIFT_STATE_VALID)) { // - // For consoles that don't support shift state reporting, + // For consoles that don't support/report shift state, // CTRL+W is translated to L'W' - L'A' + 1. // if (KeyData.Key.UnicodeChar == L'W' - L'A' + 1) { break; } - } else if (((KeyData.KeyState.KeyShiftState & (EFI_LEFT_CONTROL_PRESSED | EFI_RIGHT_CONTROL_PRESSED)) != 0) && + } else if (((KeyData.KeyState.KeyShiftState & EFI_SHIFT_STATE_VALID) != 0) && + ((KeyData.KeyState.KeyShiftState & (EFI_LEFT_CONTROL_PRESSED | EFI_RIGHT_CONTROL_PRESSED)) != 0) && ((KeyData.KeyState.KeyShiftState & ~(EFI_SHIFT_STATE_VALID | EFI_LEFT_CONTROL_PRESSED | EFI_RIGHT_CONTROL_PRESSED)) == 0)) { // - // For consoles that supports shift state reporting, + // For consoles that supports/reports shift state, // make sure that only CONTROL shift key is pressed. // if ((KeyData.Key.UnicodeChar == 'w') || (KeyData.Key.UnicodeChar == 'W')) { diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/EditMenuBar.c b/ShellPkg/Library/UefiShellDebug1CommandsLib/EditMenuBar.c index b86594bb28..58e90ac5b2 100644 --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/EditMenuBar.c +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/EditMenuBar.c @@ -183,16 +183,18 @@ MenuBarDispatchControlHotKey ( // ControlIndex = MAX_UINT16; - if ((KeyData->KeyState.KeyShiftState & EFI_SHIFT_STATE_VALID) == 0) { + if (((KeyData->KeyState.KeyShiftState & EFI_SHIFT_STATE_VALID) == 0) || + (KeyData->KeyState.KeyShiftState == EFI_SHIFT_STATE_VALID)) { // - // For those console devices that cannot report the CONTROL state, + // For consoles that don't support/report shift state, // Ctrl+A is translated to 1 (UnicodeChar). // ControlIndex = KeyData->Key.UnicodeChar; - } else if (((KeyData->KeyState.KeyShiftState & (EFI_RIGHT_CONTROL_PRESSED | EFI_LEFT_CONTROL_PRESSED)) != 0) && + } else if (((KeyData->KeyState.KeyShiftState & EFI_SHIFT_STATE_VALID) != 0) && + ((KeyData->KeyState.KeyShiftState & (EFI_RIGHT_CONTROL_PRESSED | EFI_LEFT_CONTROL_PRESSED)) != 0) && ((KeyData->KeyState.KeyShiftState & ~(EFI_SHIFT_STATE_VALID | EFI_RIGHT_CONTROL_PRESSED | EFI_LEFT_CONTROL_PRESSED)) == 0)) { // - // For those console devices that can report the CONTROL state, + // For consoles that supports/reports shift state, // make sure only CONTROL is pressed. // if ((KeyData->Key.UnicodeChar >= L'A') && (KeyData->Key.UnicodeChar <= L'Z')) { diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/MainHexEditor.c b/ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/MainHexEditor.c index 2b096d7168..a2e52ea39c 100644 --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/MainHexEditor.c +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/MainHexEditor.c @@ -134,18 +134,20 @@ HMainCommandDisplayHelp ( continue; } - if ((KeyData.KeyState.KeyShiftState & EFI_SHIFT_STATE_VALID) == 0) { + if (((KeyData.KeyState.KeyShiftState & EFI_SHIFT_STATE_VALID) == 0) || + (KeyData.KeyState.KeyShiftState == EFI_SHIFT_STATE_VALID)) { // - // For consoles that don't support shift state reporting, + // For consoles that don't support/report shift state, // CTRL+W is translated to L'W' - L'A' + 1. // if (KeyData.Key.UnicodeChar == L'W' - L'A' + 1) { break; } - } else if (((KeyData.KeyState.KeyShiftState & (EFI_LEFT_CONTROL_PRESSED | EFI_RIGHT_CONTROL_PRESSED)) != 0) && + } else if (((KeyData.KeyState.KeyShiftState & EFI_SHIFT_STATE_VALID) != 0) && + ((KeyData.KeyState.KeyShiftState & (EFI_LEFT_CONTROL_PRESSED | EFI_RIGHT_CONTROL_PRESSED)) != 0) && ((KeyData.KeyState.KeyShiftState & ~(EFI_SHIFT_STATE_VALID | EFI_LEFT_CONTROL_PRESSED | EFI_RIGHT_CONTROL_PRESSED)) == 0)) { // - // For consoles that supports shift state reporting, + // For consoles that supports/reports shift state, // make sure that only CONTROL shift key is pressed. // if ((KeyData.Key.UnicodeChar == 'w') || (KeyData.Key.UnicodeChar == 'W')) {