diff --git a/platform/platform-api/src/com/intellij/openapi/actionSystem/ActionPlaces.java b/platform/platform-api/src/com/intellij/openapi/actionSystem/ActionPlaces.java index bf696d360906..2b6cbed6b1ec 100644 --- a/platform/platform-api/src/com/intellij/openapi/actionSystem/ActionPlaces.java +++ b/platform/platform-api/src/com/intellij/openapi/actionSystem/ActionPlaces.java @@ -17,6 +17,7 @@ package com.intellij.openapi.actionSystem; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.Set; @@ -28,6 +29,7 @@ import java.util.Set; public abstract class ActionPlaces { public static final String UNKNOWN = "unknown"; public static final String TOOLBAR = "toolbar"; + public static final String POPUP = "popup"; /** * consider to use {@link #isMainMenuOrActionSearch(String)} instead @@ -156,7 +158,7 @@ public abstract class ActionPlaces { } private static final Set ourPopupPlaces = ContainerUtil.newHashSet( - EDITOR_POPUP, EDITOR_TAB_POPUP, COMMANDER_POPUP, + POPUP, EDITOR_POPUP, EDITOR_TAB_POPUP, COMMANDER_POPUP, PROJECT_VIEW_POPUP, FAVORITES_VIEW_POPUP, SCOPE_VIEW_POPUP, TESTTREE_VIEW_POPUP, TESTSTATISTICS_VIEW_POPUP, TYPE_HIERARCHY_VIEW_POPUP, METHOD_HIERARCHY_VIEW_POPUP, CALL_HIERARCHY_VIEW_POPUP, J2EE_ATTRIBUTES_VIEW_POPUP, J2EE_VIEW_POPUP, USAGE_VIEW_POPUP, STRUCTURE_VIEW_POPUP, TODO_VIEW_POPUP, COMPILER_MESSAGES_POPUP, ANT_MESSAGES_POPUP, ANT_EXPLORER_POPUP, UPDATE_POPUP, @@ -167,7 +169,14 @@ public abstract class ActionPlaces { V8_CPU_PROFILING_POPUP, V8_HEAP_PROFILING_POPUP, V8_HEAP_PROFILING_POPUP, RUN_DASHBOARD_POPUP ); + private static final String POPUP_PREFIX = "popup@"; + public static boolean isPopupPlace(@NotNull String place) { - return ourPopupPlaces.contains(place); + return ourPopupPlaces.contains(place) || place.startsWith(POPUP_PREFIX); + } + + @NotNull + public static String getActionGroupPopupPlace(@Nullable String actionId) { + return actionId == null ? POPUP : POPUP_PREFIX + actionId; } } 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 33be3d45a3df..d37363803cda 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 @@ -571,9 +571,12 @@ public final class IdeKeyEventDispatcher implements Disposable { DataContext ctx = actionEvent.getDataContext(); if (action instanceof ActionGroup && !((ActionGroup)action).canBePerformed(ctx)) { ActionGroup group = (ActionGroup)action; - JBPopupFactory.getInstance() - .createActionGroupPopup(group.getTemplatePresentation().getText(), group, ctx, JBPopupFactory.ActionSelectionAid.SPEEDSEARCH, false) - .showInBestPositionFor(ctx); + String groupId = ActionManager.getInstance().getId(action); + JBPopupFactory.getInstance().createActionGroupPopup( + group.getTemplatePresentation().getText(), group, ctx, + JBPopupFactory.ActionSelectionAid.SPEEDSEARCH, + false, null, -1, null, ActionPlaces.getActionGroupPopupPlace(groupId)) + .showInBestPositionFor(ctx); } else { ActionUtil.performActionDumbAware(action, actionEvent);