From 55a82fdaf7ff365b0dedebe04b51aa67aa8c6b85 Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Tue, 24 Apr 2018 00:06:55 +0300 Subject: [PATCH] make AbstractPopups work as ActionPopupMenus from floating toolbars (cherry picked from commit fe379917ed0cc596afe69fb021de9a3cb50a6dde) --- .../openapi/actionSystem/impl/ActionButton.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) 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);