in idea-plugin/src/main/java/com/jetbrains/ide/streamdeck/keymap/ShortcutTextField.java [51:93]
protected void processKeyEvent(KeyEvent e) {
int keyCode = e.getKeyCode();
if (getFocusTraversalKeysEnabled() && e.getModifiers() == 0 && e.getModifiersEx() == 0) {
if (keyCode == KeyEvent.VK_ESCAPE || (keyCode == KeyEvent.VK_ENTER && myKeyStroke != null)) {
super.processKeyEvent(e);
return;
}
}
final boolean isNotModifierKey = keyCode != KeyEvent.VK_SHIFT &&
keyCode != KeyEvent.VK_ALT &&
keyCode != KeyEvent.VK_CONTROL &&
keyCode != KeyEvent.VK_ALT_GRAPH &&
keyCode != KeyEvent.VK_META &&
!absolutelyUnknownKey(e);
if (isNotModifierKey) {
// NOTE: when user presses 'Alt + Right' at Linux the IDE can receive next sequence KeyEvents: ALT_PRESSED -> RIGHT_RELEASED -> ALT_RELEASED
// RIGHT_PRESSED can be skipped, it depends on WM
if (
e.getID() == KeyEvent.KEY_PRESSED
|| (e.getID() == KeyEvent.KEY_RELEASED &&
SystemInfo.isLinux && (e.isAltDown() || e.isAltGraphDown()) && myLastPressedKeyCode != keyCode) // press-event was skipped
) {
setKeyStroke(KeyStrokeAdapter.getDefaultKeyStroke(e));
}
if (e.getID() == KeyEvent.KEY_PRESSED)
myLastPressedKeyCode = keyCode;
}
// Ensure TAB/Shift-TAB work as focus traversal keys, otherwise
// there is no proper way to move the focus outside the text field.
if (!getFocusTraversalKeysEnabled() && ScreenReader.isActive()) {
setFocusTraversalKeysEnabled(true);
try {
KeyboardFocusManager.getCurrentKeyboardFocusManager().processKeyEvent(this, e);
}
finally {
setFocusTraversalKeysEnabled(false);
}
}
}