IDEA-156624 Unable to assign mouse wheel shortcut

This commit is contained in:
Sergey Malenkov
2016-05-25 22:28:45 +03:00
parent ed75183f81
commit 24aecfcc60
4 changed files with 28 additions and 55 deletions
@@ -76,12 +76,9 @@ public class KeymapUtil {
if (!acceleratorText.isEmpty()) {
s += ", " + acceleratorText;
}
} else if (shortcut instanceof PressureShortcut) {
s += shortcut.toString();
}
else if (shortcut instanceof MouseShortcut) {
MouseShortcut mouseShortcut = (MouseShortcut)shortcut;
s = getMouseShortcutText(mouseShortcut.getButton(), mouseShortcut.getModifiers(), mouseShortcut.getClickCount());
s = getMouseShortcutText((MouseShortcut)shortcut);
}
else if (shortcut instanceof KeyboardModifierGestureShortcut) {
final KeyboardModifierGestureShortcut gestureShortcut = (KeyboardModifierGestureShortcut)shortcut;
@@ -106,6 +103,11 @@ public class KeymapUtil {
}
}
public static String getMouseShortcutText(@NotNull MouseShortcut shortcut) {
if (shortcut instanceof PressureShortcut) return shortcut.toString();
return getMouseShortcutText(shortcut.getButton(), shortcut.getModifiers(), shortcut.getClickCount());
}
/**
* @param button target mouse button
* @param modifiers modifiers used within the target click
@@ -17,17 +17,19 @@ package com.intellij.openapi.keymap.impl.ui;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.actionSystem.MouseShortcut;
import com.intellij.openapi.actionSystem.PressureShortcut;
import com.intellij.openapi.keymap.KeyMapBundle;
import com.intellij.openapi.keymap.Keymap;
import com.intellij.openapi.keymap.KeymapUtil;
import com.intellij.util.ui.JBUI;
import com.intellij.util.ui.UIUtil;
import javax.swing.*;
import java.awt.*;
import java.awt.BorderLayout;
import java.awt.Component;
import java.util.Arrays;
import java.util.Collection;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
/**
* @author Vladimir Kondratyev
@@ -66,16 +68,9 @@ final class MouseShortcutDialog extends ShortcutDialog<MouseShortcut> {
myText.setForeground(MouseShortcutPanel.FOREGROUND);
myText.setText(KeyMapBundle.message("dialog.mouse.pad.default.text"));
}
else if (shortcut instanceof PressureShortcut) {
myText.setForeground(UIUtil.getLabelForeground());
myText.setText(KeyMapBundle.message("dialog.mouse.pad.shortcut.text", shortcut.toString()));
}
else {
myText.setForeground(UIUtil.getLabelForeground());
myText.setText(KeyMapBundle.message("dialog.mouse.pad.shortcut.text", KeymapUtil.getMouseShortcutText(
shortcut.getButton(),
shortcut.getModifiers(),
shortcut.getClickCount())));
myText.setText(KeyMapBundle.message("dialog.mouse.pad.shortcut.text", KeymapUtil.getMouseShortcutText(shortcut)));
}
}
@@ -16,14 +16,12 @@
package com.intellij.openapi.keymap.impl.ui;
import com.intellij.openapi.actionSystem.MouseShortcut;
import com.intellij.openapi.actionSystem.PressureShortcut;
import com.intellij.openapi.actionSystem.Shortcut;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.ui.JBColor;
import com.intellij.ui.mac.MacGestureSupportForMouseShortcutPanel;
import java.awt.*;
import java.awt.BorderLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseWheelEvent;
@@ -37,34 +35,33 @@ public final class MouseShortcutPanel extends ShortcutPanel<MouseShortcut> {
static final JBColor BORDER = new JBColor(0xDEDEDE, 0x383B3D);
private final int myClickCount;
private boolean myPressureTouch = false;
private MouseShortcut myMouseShortcut = null;
private final MouseAdapter myMouseListener = new MouseAdapter() {
@Override
public void mouseWheelMoved(MouseWheelEvent event) {
mousePressed(event);
setShortcutIfNeeded(toMouseShortcut(event));
}
@Override
public void mousePressed(MouseEvent event) {
myPressureTouch = false;
myMouseShortcut = toMouseShortcut(event);
}
private MouseShortcut toMouseShortcut(MouseEvent event) {
int button = MouseShortcut.getButton(event);
int clickCount = event instanceof MouseWheelEvent ? 1 : event.getClickCount();
if (0 <= button && clickCount <= myClickCount) {
int modifiers = event.getModifiersEx();
myMouseShortcut = new MouseShortcut(button, modifiers, clickCount);
return new MouseShortcut(button, modifiers, clickCount);
}
return null;
}
@Override
public void mouseReleased(MouseEvent event) {
event.consume();
if (myPressureTouch) {
return;
}
setShortcut(myMouseShortcut);
setShortcutIfNeeded(myMouseShortcut);
}
};
@@ -74,28 +71,20 @@ public final class MouseShortcutPanel extends ShortcutPanel<MouseShortcut> {
addMouseListener(myMouseListener);
addMouseWheelListener(myMouseListener);
if (SystemInfo.isJavaVersionAtLeast("1.8") && SystemInfo.isMacIntel64 && SystemInfo.isJetbrainsJvm && Registry.is("ide.mac.forceTouch")) {
new MacGestureSupportForMouseShortcutPanel(this, new Runnable() {
@Override
public void run() {
myPressureTouch = true;
}
});
new MacGestureSupportForMouseShortcutPanel(this, () -> myMouseShortcut = null);
}
setBackground(BACKGROUND);
setOpaque(true);
}
void setShortcut(MouseShortcut shortcut) {
Shortcut old = getShortcut();
public void setShortcut(MouseShortcut shortcut) {
MouseShortcut old = getShortcut();
if (old != null || shortcut != null) {
super.setShortcut(shortcut);
}
}
public void setShortcut(PressureShortcut shortcut) {
Shortcut old = getShortcut();
if (old != null || shortcut != null) {
super.setShortcut(shortcut);
}
private void setShortcutIfNeeded(MouseShortcut shortcut) {
if (shortcut != null) setShortcut(shortcut);
}
}
@@ -19,7 +19,6 @@ import com.intellij.icons.AllIcons;
import com.intellij.ide.IdeEventQueue;
import com.intellij.openapi.actionSystem.KeyboardShortcut;
import com.intellij.openapi.actionSystem.MouseShortcut;
import com.intellij.openapi.actionSystem.PressureShortcut;
import com.intellij.openapi.actionSystem.Shortcut;
import com.intellij.openapi.keymap.KeyMapBundle;
import com.intellij.openapi.keymap.KeymapUtil;
@@ -68,27 +67,15 @@ final class ShortcutFilteringPanel extends JPanel {
if (ShortcutFilteringPanel.this == event.getSource()) {
if (value instanceof KeyboardShortcut) {
KeyboardShortcut shortcut = (KeyboardShortcut)value;
myMousePanel.setShortcut((MouseShortcut)null);
myMousePanel.setShortcut(null);
myKeyboardPanel.setShortcut(shortcut);
if (null != shortcut.getSecondKeyStroke()) {
myKeyboardPanel.mySecondStrokeEnable.setSelected(true);
}
}
else if (value instanceof PressureShortcut) {
String text = "Power Touch";
MouseShortcut shortcut = (PressureShortcut)value;
myMousePanel.setShortcut(shortcut);
myKeyboardPanel.setShortcut(null);
myKeyboardPanel.myFirstStroke.setText(text);
myKeyboardPanel.mySecondStroke.setText(null);
myKeyboardPanel.mySecondStroke.setEnabled(false);
}
else {
MouseShortcut shortcut = value instanceof MouseShortcut ? (MouseShortcut)value : null;
String text = shortcut == null ? null : KeymapUtil.getMouseShortcutText(
shortcut.getButton(),
shortcut.getModifiers(),
shortcut.getClickCount());
String text = shortcut == null ? null : KeymapUtil.getMouseShortcutText(shortcut);
myMousePanel.setShortcut(shortcut);
myKeyboardPanel.setShortcut(null);
myKeyboardPanel.myFirstStroke.setText(text);