Search in sources :

Example 1 with ShortcutTextField

use of com.intellij.openapi.keymap.impl.ui.ShortcutTextField in project intellij-community by JetBrains.

the class IdeKeyEventDispatcher method dispatchKeyEvent.

/**
   * @return {@code true} if and only if the passed event is already dispatched by the
   * {@code IdeKeyEventDispatcher} and there is no need for any other processing of the event.
   */
public boolean dispatchKeyEvent(final KeyEvent e) {
    if (myDisposed)
        return false;
    KeyboardLayoutUtil.storeAsciiForChar(e);
    if (e.isConsumed()) {
        return false;
    }
    if (isSpeedSearchEditing(e)) {
        return false;
    }
    // http://www.jetbrains.net/jira/browse/IDEADEV-12372
    if (e.getKeyCode() == KeyEvent.VK_CONTROL) {
        if (e.getID() == KeyEvent.KEY_PRESSED) {
            myLeftCtrlPressed = e.getKeyLocation() == KeyEvent.KEY_LOCATION_LEFT;
        } else if (e.getID() == KeyEvent.KEY_RELEASED) {
            myLeftCtrlPressed = false;
        }
    } else if (e.getKeyCode() == KeyEvent.VK_ALT) {
        if (e.getID() == KeyEvent.KEY_PRESSED) {
            myRightAltPressed = e.getKeyLocation() == KeyEvent.KEY_LOCATION_RIGHT;
        } else if (e.getID() == KeyEvent.KEY_RELEASED) {
            myRightAltPressed = false;
        }
    }
    KeyboardFocusManager focusManager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
    Component focusOwner = focusManager.getFocusOwner();
    // shortcuts should not work in shortcut setup fields
    if (focusOwner instanceof ShortcutTextField) {
        return false;
    }
    if (focusOwner instanceof JTextComponent && ((JTextComponent) focusOwner).isEditable()) {
        if (e.getKeyChar() != KeyEvent.CHAR_UNDEFINED && e.getKeyCode() != KeyEvent.VK_ESCAPE) {
            MacUIUtil.hideCursor();
        }
    }
    MenuSelectionManager menuSelectionManager = MenuSelectionManager.defaultManager();
    MenuElement[] selectedPath = menuSelectionManager.getSelectedPath();
    if (selectedPath.length > 0) {
        if (!(selectedPath[0] instanceof ComboPopup)) {
            // The following couple of lines of code is a PATCH!!!
            // It is needed to ignore ENTER KEY_TYPED events which sometimes can reach editor when an action
            // is invoked from main menu via Enter key.
            setState(KeyState.STATE_PROCESSED);
            setPressedWasProcessed(true);
            return false;
        }
    }
    // Keymap shortcuts (i.e. not local shortcuts) should work only in:
    // - main frame
    // - floating focusedWindow
    // - when there's an editor in contexts
    Window focusedWindow = focusManager.getFocusedWindow();
    boolean isModalContext = focusedWindow != null && isModalContext(focusedWindow);
    //EA-39114
    if (ApplicationManager.getApplication() == null)
        return false;
    final DataManager dataManager = DataManager.getInstance();
    if (dataManager == null)
        return false;
    DataContext dataContext = dataManager.getDataContext();
    myContext.setDataContext(dataContext);
    myContext.setFocusOwner(focusOwner);
    myContext.setModalContext(isModalContext);
    myContext.setInputEvent(e);
    try {
        if (getState() == KeyState.STATE_INIT) {
            return inInitState();
        } else if (getState() == KeyState.STATE_PROCESSED) {
            return inProcessedState();
        } else if (getState() == KeyState.STATE_WAIT_FOR_SECOND_KEYSTROKE) {
            return inWaitForSecondStrokeState();
        } else if (getState() == KeyState.STATE_SECOND_STROKE_IN_PROGRESS) {
            return inSecondStrokeInProgressState();
        } else if (getState() == KeyState.STATE_KEY_GESTURE_PROCESSOR) {
            return myKeyGestureProcessor.process();
        } else {
            throw new IllegalStateException("state = " + getState());
        }
    } finally {
        myContext.clear();
    }
}
Also used : ShortcutTextField(com.intellij.openapi.keymap.impl.ui.ShortcutTextField) JTextComponent(javax.swing.text.JTextComponent) DataManager(com.intellij.ide.DataManager) ComboPopup(javax.swing.plaf.basic.ComboPopup) JTextComponent(javax.swing.text.JTextComponent)

Aggregations

DataManager (com.intellij.ide.DataManager)1 ShortcutTextField (com.intellij.openapi.keymap.impl.ui.ShortcutTextField)1 ComboPopup (javax.swing.plaf.basic.ComboPopup)1 JTextComponent (javax.swing.text.JTextComponent)1