From 7e9906f6ff8f29c67582cb549fce8c032b788dfe Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Thu, 30 Apr 2015 16:43:27 +0300 Subject: [PATCH] IDEA-135540 process extended key code --- .../openapi/keymap/impl/IdeKeyEventDispatcher.java | 11 +++++++++-- .../openapi/keymap/impl/ui/ShortcutTextField.java | 10 +--------- .../src/com/intellij/ui/KeyStrokeAdapter.java | 13 +++++++++++++ 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/IdeKeyEventDispatcher.java b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/IdeKeyEventDispatcher.java index c8212fe82848..0ccfa47069fc 100644 --- a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/IdeKeyEventDispatcher.java +++ b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/IdeKeyEventDispatcher.java @@ -53,6 +53,7 @@ import com.intellij.openapi.wm.impl.IdeFrameImpl; import com.intellij.openapi.wm.impl.IdeGlassPaneEx; import com.intellij.ui.ColoredListCellRenderer; import com.intellij.ui.ComponentWithMnemonics; +import com.intellij.ui.KeyStrokeAdapter; import com.intellij.ui.SimpleTextAttributes; import com.intellij.ui.components.JBOptionButton; import com.intellij.ui.popup.list.ListPopupImpl; @@ -339,7 +340,10 @@ public final class IdeKeyEventDispatcher implements Disposable { return false; } - KeyStroke originalKeyStroke=KeyStroke.getKeyStrokeForEvent(e); + KeyStroke originalKeyStroke = KeyStrokeAdapter.getDefaultKeyStroke(e); + if (originalKeyStroke == null) { + return false; + } KeyStroke keyStroke=getKeyStrokeWithoutMouseModifiers(originalKeyStroke); updateCurrentContext(myContext.getFoundComponent(), new KeyboardShortcut(myFirstKeyStroke, keyStroke), myContext.isModalContext()); @@ -406,7 +410,10 @@ public final class IdeKeyEventDispatcher implements Disposable { } } - KeyStroke originalKeyStroke=KeyStroke.getKeyStrokeForEvent(e); + KeyStroke originalKeyStroke = KeyStrokeAdapter.getDefaultKeyStroke(e); + if (originalKeyStroke == null) { + return false; + } KeyStroke keyStroke=getKeyStrokeWithoutMouseModifiers(originalKeyStroke); if (myKeyGestureProcessor.processInitState()) { diff --git a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/ui/ShortcutTextField.java b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/ui/ShortcutTextField.java index 92818d52ae2d..19dfd08e3c57 100644 --- a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/ui/ShortcutTextField.java +++ b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/ui/ShortcutTextField.java @@ -22,7 +22,6 @@ */ package com.intellij.openapi.keymap.impl.ui; -import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.registry.Registry; import com.intellij.ui.KeyStrokeAdapter; @@ -49,14 +48,7 @@ public class ShortcutTextField extends JTextField { ){ return; } - // On Windows and Mac it is preferable to use normal key code here - // see java.awt.event.KeyEvent.getExtendedKeyCode - boolean extendedKeyCodeFirst = !SystemInfo.isWindows && !SystemInfo.isMac; - KeyStroke stroke = KeyStrokeAdapter.getKeyStroke(e, extendedKeyCodeFirst); - if (stroke == null) { - stroke = KeyStrokeAdapter.getKeyStroke(e, !extendedKeyCodeFirst); - } - setKeyStroke(stroke); + setKeyStroke(KeyStrokeAdapter.getDefaultKeyStroke(e)); } } diff --git a/platform/platform-impl/src/com/intellij/ui/KeyStrokeAdapter.java b/platform/platform-impl/src/com/intellij/ui/KeyStrokeAdapter.java index 4190cdc9087b..b5f13ac91f7e 100644 --- a/platform/platform-impl/src/com/intellij/ui/KeyStrokeAdapter.java +++ b/platform/platform-impl/src/com/intellij/ui/KeyStrokeAdapter.java @@ -15,6 +15,7 @@ */ package com.intellij.ui; +import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.registry.Registry; import javax.swing.*; @@ -73,6 +74,18 @@ public class KeyStrokeAdapter implements KeyListener { } } + /** + * @param event the specified key event to process + * @return a key stroke or {@code null} if it is not applicable + * @see KeyStroke#getKeyStrokeForEvent(KeyEvent) + */ + public static KeyStroke getDefaultKeyStroke(KeyEvent event) { + // On Windows and Mac it is preferable to use normal key code here + boolean extendedKeyCodeFirst = !SystemInfo.isWindows && !SystemInfo.isMac; + KeyStroke stroke = getKeyStroke(event, extendedKeyCodeFirst); + return stroke != null ? stroke : getKeyStroke(event, !extendedKeyCodeFirst); + } + /** * @param event the specified key event to process * @param extended {@code true} if extended key code should be used