From feafb02666e1d33be57efa648f2b1e147e67a27a Mon Sep 17 00:00:00 2001 From: Vassiliy Kudryashov Date: Wed, 14 Mar 2012 18:35:00 +0400 Subject: [PATCH] IDEA-68331 Mouse 4/Mouse 5 button not detected --- .../intellij/openapi/keymap/KeymapUtil.java | 39 ++++++------------- .../keymap/impl/IdeMouseEventDispatcher.java | 6 +++ .../openapi/keymap/impl/KeymapImpl.java | 20 +--------- .../src/messages/KeyMapBundle.properties | 6 +-- 4 files changed, 21 insertions(+), 50 deletions(-) diff --git a/platform/platform-api/src/com/intellij/openapi/keymap/KeymapUtil.java b/platform/platform-api/src/com/intellij/openapi/keymap/KeymapUtil.java index f835adb1faae..8d7d8d0398f5 100644 --- a/platform/platform-api/src/com/intellij/openapi/keymap/KeymapUtil.java +++ b/platform/platform-api/src/com/intellij/openapi/keymap/KeymapUtil.java @@ -55,6 +55,8 @@ public class KeymapUtil { @NonNls private static final String BUTTON1 = "button1"; @NonNls private static final String BUTTON2 = "button2"; @NonNls private static final String BUTTON3 = "button3"; + @NonNls private static final String BUTTON4 = "button4"; + @NonNls private static final String BUTTON5 = "button5"; @NonNls private static final String DOUBLE_CLICK = "doubleClick"; private static final Set ourTooltipKeys = new HashSet(); @@ -114,34 +116,9 @@ public class KeymapUtil { * @return string representation of passed mouse shortcut. */ public static String getMouseShortcutText(int button, @JdkConstants.InputEventMask int modifiers, int clickCount) { - // Modal keys - - final int buttonNum; - - if (MouseEvent.BUTTON1 == button) { - buttonNum = 1; - } - else if (MouseEvent.BUTTON2 == button) { - buttonNum = 2; - } - else if (MouseEvent.BUTTON3 == button) { - buttonNum = 3; - } - else if (MouseEvent.NOBUTTON == button || -1 == button) { - buttonNum = 0; - // do nothing - } - else { - buttonNum = button; - } - - if (clickCount == 1) { - return KeyMapBundle.message("mouse.click.shortcut.text", getModifiersText(mapNewModifiers(modifiers)), buttonNum); - } - else if (clickCount == 2) { - return KeyMapBundle.message("mouse.double.click.shortcut.text", getModifiersText(mapNewModifiers(modifiers)), buttonNum); - } - else { + if (clickCount < 3) { + return KeyMapBundle.message("mouse." + (clickCount == 1? "" : "double.") + "click.shortcut.text", getModifiersText(mapNewModifiers(modifiers)), button); + } else { throw new IllegalStateException("unknown clickCount: " + clickCount); } } @@ -271,6 +248,12 @@ public class KeymapUtil { else if (BUTTON3.equals(token)) { button = MouseEvent.BUTTON3; } + else if (BUTTON4.equals(token)) { + button = MouseEvent.BUTTON3 + 1; + } + else if (BUTTON5.equals(token)) { + button = MouseEvent.BUTTON3 + 2; + } else if (DOUBLE_CLICK.equals(token)) { clickCount = 2; } diff --git a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/IdeMouseEventDispatcher.java b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/IdeMouseEventDispatcher.java index cf6f53ac30aa..ac3d5472b2ad 100644 --- a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/IdeMouseEventDispatcher.java +++ b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/IdeMouseEventDispatcher.java @@ -143,6 +143,10 @@ public final class IdeMouseEventDispatcher { ignore = true; } + if (e.getID() == MouseEvent.MOUSE_PRESSED && e.getButton() > 3) { + return true; + } + final JRootPane root = findRoot(e); if (root != null) { final Integer lastId = myRootPane2BlockedId.get(root); @@ -206,6 +210,8 @@ public final class IdeMouseEventDispatcher { e.consume(); } } + if (actions.length > 0 && e.isConsumed()) + return true; } return false; } diff --git a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/KeymapImpl.java b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/KeymapImpl.java index 3441358e9575..770a25651400 100644 --- a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/KeymapImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/KeymapImpl.java @@ -70,9 +70,6 @@ public class KeymapImpl implements Keymap, ExternalizableScheme { @NonNls private static final String META = "meta"; @NonNls private static final String ALT = "alt"; @NonNls private static final String ALT_GRAPH = "altGraph"; - @NonNls private static final String BUTTON1 = "button1"; - @NonNls private static final String BUTTON2 = "button2"; - @NonNls private static final String BUTTON3 = "button3"; @NonNls private static final String DOUBLE_CLICK = "doubleClick"; @NonNls private static final String VIRTUAL_KEY_PREFIX = "VK_"; @NonNls private static final String EDITOR_ACTION_PREFIX = "Editor"; @@ -792,22 +789,7 @@ public class KeymapImpl implements Keymap, ExternalizableScheme { // button - int button = shortcut.getButton(); - if (MouseEvent.BUTTON1 == button) { - buffer.append(BUTTON1); - buffer.append(' '); - } - else if (MouseEvent.BUTTON2 == button) { - buffer.append(BUTTON2); - buffer.append(' '); - } - else if (MouseEvent.BUTTON3 == button) { - buffer.append(BUTTON3); - buffer.append(' '); - } - else { - buffer.append("button").append(button); - } + buffer.append("button").append(shortcut.getButton()).append(' '); if (shortcut.getClickCount() > 1) { buffer.append(DOUBLE_CLICK); diff --git a/platform/platform-resources-en/src/messages/KeyMapBundle.properties b/platform/platform-resources-en/src/messages/KeyMapBundle.properties index 6adb0b11b22c..378d46104f28 100644 --- a/platform/platform-resources-en/src/messages/KeyMapBundle.properties +++ b/platform/platform-resources-en/src/messages/KeyMapBundle.properties @@ -87,9 +87,9 @@ quick.list.panel.description.label=Description: quick.list.panel.display.name.label=Display name: no.actions=No actions -#0 - modifiers (with + for windows or empty str), 1 - button num (1 - left, 2 - center, 3 - right 0 - no button) -mouse.click.shortcut.text={0}Button{1} Click -mouse.double.click.shortcut.text={0}Button{1} Double-Click +#0 - modifiers (with + for windows or empty str), 1 - button num (1 - left, 2 - center, 3 - right, 4 - back, 5 - forward, 0 - no button) +mouse.click.shortcut.text={0}{1,choice,1#Button1|2#Button2|3#Button3|4#Back|5#Forward} Click +mouse.double.click.shortcut.text={0}{1,choice,1#Button1|2#Button2|3#Button3|4#Back|5#Forward} Double-Click configuration.all.keymaps.should.have.non.empty.names.error.message=All keymaps should have non empty names configuration.all.keymaps.should.have.unique.names.error.message=All keymaps should have unique names