mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-58896 Multi-stroke keys partly broken [refix]
This commit is contained in:
@@ -493,6 +493,10 @@ public class KeymapImpl implements Keymap, ExternalizableScheme {
|
||||
return ids;
|
||||
}
|
||||
|
||||
public boolean isActionBound(@NotNull final String actionId) {
|
||||
return getKeymapManager().getBoundActions().contains(actionId);
|
||||
}
|
||||
|
||||
public Shortcut[] getShortcuts(String actionId) {
|
||||
KeymapManagerEx keymapManager = getKeymapManager();
|
||||
if (keymapManager.getBoundActions().contains(actionId)) {
|
||||
|
||||
@@ -23,9 +23,11 @@ import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.keymap.KeyMapBundle;
|
||||
import com.intellij.openapi.keymap.Keymap;
|
||||
import com.intellij.openapi.keymap.KeymapUtil;
|
||||
import com.intellij.openapi.keymap.impl.KeymapImpl;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.IconLoader;
|
||||
import com.intellij.openapi.util.registry.Registry;
|
||||
import com.intellij.ui.ColoredTreeCellRenderer;
|
||||
import com.intellij.ui.LayeredIcon;
|
||||
import com.intellij.ui.ScrollPaneFactory;
|
||||
@@ -58,6 +60,7 @@ public class ActionsTree {
|
||||
private final JScrollPane myComponent;
|
||||
private Keymap myKeymap;
|
||||
private Group myMainGroup = new Group("", null, null);
|
||||
private boolean myShowBoundActions = Registry.is("keymap.show.alias.actions");
|
||||
|
||||
@NonNls
|
||||
private static final String ROOT = "ROOT";
|
||||
@@ -73,6 +76,7 @@ public class ActionsTree {
|
||||
Keymap originalKeymap = myKeymap != null ? myKeymap.getParent() : null;
|
||||
Icon icon = null;
|
||||
String text;
|
||||
boolean bound = false;
|
||||
if (value instanceof DefaultMutableTreeNode) {
|
||||
Object userObject = ((DefaultMutableTreeNode)value).getUserObject();
|
||||
boolean changed;
|
||||
@@ -88,6 +92,7 @@ public class ActionsTree {
|
||||
}
|
||||
else if (userObject instanceof String) {
|
||||
String actionId = (String)userObject;
|
||||
bound = myShowBoundActions && ((KeymapImpl)myKeymap).isActionBound(actionId);
|
||||
AnAction action = ActionManager.getInstance().getActionOrStub(actionId);
|
||||
if (action != null) {
|
||||
text = action.getTemplatePresentation().getText();
|
||||
@@ -133,6 +138,10 @@ public class ActionsTree {
|
||||
else {
|
||||
foreground = UIUtil.getTreeForeground();
|
||||
}
|
||||
|
||||
if (bound) {
|
||||
foreground = Color.MAGENTA;
|
||||
}
|
||||
}
|
||||
SearchUtil.appendFragments(myFilter, text, Font.PLAIN, foreground, selected ? UIUtil.getTreeSelectionBackground() : UIUtil.getTreeTextBackground(), this);
|
||||
}
|
||||
|
||||
+36
-8
@@ -28,13 +28,16 @@ import com.intellij.openapi.keymap.KeyMapBundle;
|
||||
import com.intellij.openapi.keymap.Keymap;
|
||||
import com.intellij.openapi.keymap.KeymapExtension;
|
||||
import com.intellij.openapi.keymap.ex.KeymapManagerEx;
|
||||
import com.intellij.openapi.keymap.impl.KeymapImpl;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.openapi.util.IconLoader;
|
||||
import com.intellij.openapi.util.registry.Registry;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.tree.DefaultMutableTreeNode;
|
||||
@@ -113,6 +116,25 @@ public class ActionsTreeUtil {
|
||||
return group;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static Condition<AnAction> wrapFilter(@Nullable final Condition<AnAction> filter, final Keymap keymap, final ActionManager actionManager) {
|
||||
if (Registry.is("keymap.show.alias.actions")) return filter;
|
||||
|
||||
return new Condition<AnAction>() {
|
||||
@Override
|
||||
public boolean value(final AnAction action) {
|
||||
if (action == null) return false;
|
||||
final String id = action instanceof ActionStub ? ((ActionStub)action).getId() : actionManager.getId(action);
|
||||
if (id != null) {
|
||||
boolean actionBound = isActionBound(keymap, id);
|
||||
return filter == null ? !actionBound : !actionBound && filter.value(action);
|
||||
}
|
||||
|
||||
return filter == null ? true : filter.value(action);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private static void fillGroupIgnorePopupFlag(ActionGroup actionGroup, Group group, Condition<AnAction> filtered) {
|
||||
AnAction[] mainMenuTopGroups = actionGroup instanceof DefaultActionGroup
|
||||
? ((DefaultActionGroup)actionGroup).getChildActionsOrStubs()
|
||||
@@ -126,7 +148,6 @@ public class ActionsTreeUtil {
|
||||
}
|
||||
|
||||
public static Group createGroup(ActionGroup actionGroup, boolean ignore, Condition<AnAction> filtered) {
|
||||
|
||||
return createGroup(actionGroup, getName(actionGroup), null, null, ignore, filtered);
|
||||
}
|
||||
|
||||
@@ -222,6 +243,12 @@ public class ActionsTreeUtil {
|
||||
return group;
|
||||
}
|
||||
|
||||
private static boolean isActionBound(final Keymap keymap, final String id) {
|
||||
if (keymap == null) return false;
|
||||
Keymap parent = keymap.getParent();
|
||||
return ((KeymapImpl)keymap).isActionBound(id) || (parent != null && ((KeymapImpl)parent).isActionBound(id));
|
||||
}
|
||||
|
||||
private static void addEditorActions(final Condition<AnAction> filtered,
|
||||
final DefaultActionGroup editorGroup,
|
||||
final ArrayList<String> ids) {
|
||||
@@ -397,20 +424,21 @@ public class ActionsTreeUtil {
|
||||
final String filter,
|
||||
final boolean forceFiltering,
|
||||
final Condition<AnAction> filtered) {
|
||||
final Condition<AnAction> wrappedFilter = wrapFilter(filtered, keymap, ActionManager.getInstance());
|
||||
Group mainGroup = new Group(KeyMapBundle.message("all.actions.group.title"), null, null);
|
||||
mainGroup.addGroup(createEditorActionsGroup(filtered));
|
||||
mainGroup.addGroup(createMainMenuGroup(filtered));
|
||||
mainGroup.addGroup(createEditorActionsGroup(wrappedFilter));
|
||||
mainGroup.addGroup(createMainMenuGroup(wrappedFilter));
|
||||
for (KeymapExtension extension : Extensions.getExtensions(KeymapExtension.EXTENSION_POINT_NAME)) {
|
||||
final Group group = createExtensionGroup(filtered, project, extension);
|
||||
final Group group = createExtensionGroup(wrappedFilter, project, extension);
|
||||
if (group != null) {
|
||||
mainGroup.addGroup(group);
|
||||
}
|
||||
}
|
||||
mainGroup.addGroup(createMacrosGroup(filtered));
|
||||
mainGroup.addGroup(createQuickListsGroup(filtered, filter, forceFiltering, quickLists));
|
||||
final Group otherGroup = createOtherGroup(filtered, mainGroup, keymap);
|
||||
mainGroup.addGroup(createMacrosGroup(wrappedFilter));
|
||||
mainGroup.addGroup(createQuickListsGroup(wrappedFilter, filter, forceFiltering, quickLists));
|
||||
final Group otherGroup = createOtherGroup(wrappedFilter, mainGroup, keymap);
|
||||
mainGroup.addGroup(otherGroup);
|
||||
mainGroup.addGroup(createPluginsActionsGroup(filtered, otherGroup));
|
||||
mainGroup.addGroup(createPluginsActionsGroup(wrappedFilter, otherGroup));
|
||||
if (!StringUtil.isEmpty(filter) || filtered != null) {
|
||||
final ArrayList list = mainGroup.getChildren();
|
||||
for (Iterator i = list.iterator(); i.hasNext();) {
|
||||
|
||||
@@ -733,6 +733,9 @@
|
||||
<action id="ActivateChangesToolWindow">
|
||||
<keyboard-shortcut first-keystroke="alt 9"/>
|
||||
</action>
|
||||
<action id="NewElement">
|
||||
<keyboard-shortcut first-keystroke="alt INSERT"/>
|
||||
</action>
|
||||
<action id="NewElementSamePlace">
|
||||
<keyboard-shortcut first-keystroke="control alt INSERT"/>
|
||||
</action>
|
||||
|
||||
@@ -177,7 +177,12 @@
|
||||
<action id="ActivateMessagesToolWindow">
|
||||
<keyboard-shortcut first-keystroke="meta 0"/>
|
||||
</action>
|
||||
<action id="ActivateProjectToolWindow">
|
||||
<action id="NewElement">
|
||||
<keyboard-shortcut first-keystroke="meta N"/>
|
||||
<keyboard-shortcut first-keystroke="control N"/>
|
||||
<keyboard-shortcut first-keystroke="control ENTER"/>
|
||||
</action>
|
||||
<action id="ActivateProjectToolWindow">
|
||||
<keyboard-shortcut first-keystroke="meta 1"/>
|
||||
</action>
|
||||
<action id="ActivateCommanderToolWindow">
|
||||
|
||||
@@ -205,6 +205,10 @@
|
||||
<action id="ActivateChangesToolWindow">
|
||||
<keyboard-shortcut first-keystroke="meta 9"/>
|
||||
</action>
|
||||
<action id="NewElement">
|
||||
<keyboard-shortcut first-keystroke="control N"/>
|
||||
<keyboard-shortcut first-keystroke="control ENTER"/>
|
||||
</action>
|
||||
<action id="Generate">
|
||||
<keyboard-shortcut first-keystroke="control N"/>
|
||||
<keyboard-shortcut first-keystroke="control ENTER"/>
|
||||
|
||||
@@ -226,7 +226,7 @@
|
||||
<action id="MoveStatementUp">
|
||||
<keyboard-shortcut first-keystroke="shift alt UP" />
|
||||
</action>
|
||||
<action id="Generate">
|
||||
<action id="NewElement">
|
||||
<keyboard-shortcut first-keystroke="alt INSERT" />
|
||||
<keyboard-shortcut first-keystroke="control N" />
|
||||
</action>
|
||||
|
||||
@@ -108,6 +108,9 @@
|
||||
<mouse-shortcut keystroke="ctrl button1"/>
|
||||
<mouse-shortcut keystroke="button2"/>
|
||||
</action>
|
||||
<action id="NewElement">
|
||||
<keyboard-shortcut first-keystroke="alt INSERT"/>
|
||||
</action>
|
||||
<action id="FindPrevious">
|
||||
<keyboard-shortcut first-keystroke="shift F3"/>
|
||||
</action>
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
<add-to-group group-id="FileOpenGroup" anchor="first"/>
|
||||
</group>
|
||||
|
||||
<action id="NewElement" class="com.intellij.ide.actions.NewElementAction" use-shortcut-of="Generate">
|
||||
<action id="NewElement" class="com.intellij.ide.actions.NewElementAction">
|
||||
<add-to-group group-id="PlatformOpenProjectGroup" anchor="after" relative-to-action="NewDirectoryProject"/>
|
||||
</action>
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
|
||||
<add-to-group group-id="FileOpenGroup" anchor="first"/>
|
||||
</group>
|
||||
<action id="NewElement" class="com.intellij.ide.actions.NewElementAction" use-shortcut-of="Generate">
|
||||
<action id="NewElement" class="com.intellij.ide.actions.NewElementAction">
|
||||
<add-to-group group-id="OpenProjectGroup" anchor="after" relative-to-action="NewModule"/>
|
||||
</action>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user