diff --git a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionButton.java b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionButton.java index d7da95e37a21..a8b1979f2575 100644 --- a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionButton.java +++ b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionButton.java @@ -13,6 +13,10 @@ import com.intellij.openapi.actionSystem.ex.CustomComponentAction; import com.intellij.openapi.application.impl.LaterInvocator; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.keymap.KeymapUtil; +import com.intellij.openapi.ui.popup.JBPopup; +import com.intellij.openapi.ui.popup.JBPopupAdapter; +import com.intellij.openapi.ui.popup.LightweightWindowEvent; +import com.intellij.openapi.ui.popup.StackingPopupDispatcher; import com.intellij.openapi.util.IconLoader; import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; @@ -137,7 +141,18 @@ public class ActionButton extends JComponent implements ActionButtonComponent, A if (component != null && !component.isShowing()) { return; } + JBPopup prevLast = StackingPopupDispatcher.getInstance().getPopupStream().reduce((a, b) -> b).orElse(null); actionPerformed(event); + JBPopup curLast = StackingPopupDispatcher.getInstance().getPopupStream().reduce((a, b) -> b).orElse(null); + if (curLast != null && curLast != prevLast) { + ((ActionManagerImpl)manager).addActionPopup(curLast); + curLast.addListener(new JBPopupAdapter() { + @Override + public void onClosed(LightweightWindowEvent event) { + ((ActionManagerImpl)manager).removeActionPopup(curLast); + } + }); + } manager.queueActionPerformedEvent(myAction, dataContext, event); if (event.getInputEvent() instanceof MouseEvent) { ToolbarClicksCollector.record(myAction, myPlace);