From 57feca3f95772ba29e37b3319653b8467d91df0e Mon Sep 17 00:00:00 2001 From: "Vassiliy.Kudryashov" Date: Mon, 19 Oct 2015 16:48:54 +0300 Subject: [PATCH] IDEA-146128 "Select Run/Debug Configuration" do nothing when navigation bar hidden --- .../actions/RunConfigurationsComboBoxAction.java | 14 ++++++++++++++ .../openapi/actionSystem/ex/ComboBoxAction.java | 16 ++++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/execution/actions/RunConfigurationsComboBoxAction.java b/platform/lang-impl/src/com/intellij/execution/actions/RunConfigurationsComboBoxAction.java index f6875db37420..fd1f2862f6ad 100644 --- a/platform/lang-impl/src/com/intellij/execution/actions/RunConfigurationsComboBoxAction.java +++ b/platform/lang-impl/src/com/intellij/execution/actions/RunConfigurationsComboBoxAction.java @@ -30,6 +30,8 @@ import com.intellij.openapi.project.DumbAwareAction; import com.intellij.openapi.project.IndexNotReadyException; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Condition; +import com.intellij.openapi.wm.ex.WindowManagerEx; +import com.intellij.openapi.wm.impl.IdeFrameImpl; import com.intellij.ui.IdeBorderFactory; import com.intellij.ui.SizedIcon; import com.intellij.ui.components.panels.NonOpaquePanel; @@ -50,6 +52,18 @@ public class RunConfigurationsComboBoxAction extends ComboBoxAction implements D public static final Icon CHECKED_SELECTED_ICON = new SizedIcon(AllIcons.Actions.Checked_selected, 16, 16); public static final Icon EMPTY_ICON = EmptyIcon.ICON_16; + @Override + public void actionPerformed(AnActionEvent e) { + if (e.getPresentation().getClientProperty(CUSTOM_COMPONENT_PROPERTY) == null) { + Project project = e.getProject(); + IdeFrameImpl frame = project != null ? WindowManagerEx.getInstanceEx().getFrame(project) : null; + if (frame != null) { + e.getPresentation().putClientProperty(CUSTOM_COMPONENT_PROPERTY, frame.getComponent()); + } + } + super.actionPerformed(e); + } + @Override public void update(AnActionEvent e) { Presentation presentation = e.getPresentation(); diff --git a/platform/platform-api/src/com/intellij/openapi/actionSystem/ex/ComboBoxAction.java b/platform/platform-api/src/com/intellij/openapi/actionSystem/ex/ComboBoxAction.java index c54bddeb35f7..25340daa659f 100644 --- a/platform/platform-api/src/com/intellij/openapi/actionSystem/ex/ComboBoxAction.java +++ b/platform/platform-api/src/com/intellij/openapi/actionSystem/ex/ComboBoxAction.java @@ -22,6 +22,7 @@ import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.keymap.KeymapUtil; +import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.popup.JBPopup; import com.intellij.openapi.ui.popup.JBPopupFactory; import com.intellij.openapi.ui.popup.ListPopup; @@ -58,7 +59,7 @@ public abstract class ComboBoxAction extends AnAction implements CustomComponent @Override public void actionPerformed(AnActionEvent e) { - ComboBoxButton button = (ComboBoxButton)e.getPresentation().getClientProperty(CUSTOM_COMPONENT_PROPERTY); + JComponent button = (JComponent)e.getPresentation().getClientProperty(CUSTOM_COMPONENT_PROPERTY); if (button == null) { Component contextComponent = e.getData(PlatformDataKeys.CONTEXT_COMPONENT); JRootPane rootPane = UIUtil.getParentOfType(JRootPane.class, contextComponent); @@ -74,7 +75,18 @@ public abstract class ComboBoxAction extends AnAction implements CustomComponent if (button == null) return; } if (!button.isShowing()) return; - button.showPopup(); + if (button instanceof ComboBoxButton) { + ((ComboBoxButton)button).showPopup(); + } else { + DataContext context = e.getDataContext(); + Project project = e.getProject(); + if (project == null) return; + DefaultActionGroup group = createPopupActionGroup(button); + ListPopup popup = JBPopupFactory.getInstance().createActionGroupPopup( + myPopupTitle, group, context, false, shouldShowDisabledActions(), false, null, getMaxRows(), getPreselectCondition()); + popup.setMinimumSize(new Dimension(getMinWidth(), getMinHeight())); + popup.showCenteredInCurrentWindow(project); + } } @Override