protected void processKeyEvent()

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);
      }
    }
  }