Commit c202c3da authored by vadim.lomshakov's avatar vadim.lomshakov
Browse files

introduced ActionPopupMenu listener

parent 7c6e2280
Showing with 50 additions and 1 deletion
+50 -1
......@@ -30,6 +30,10 @@ public interface ActionPopupMenu {
*/
JPopupMenu getComponent();
String getPlace();
ActionGroup getActionGroup();
/**
* Will be used for data-context retrieval.
*/
......
......@@ -4,6 +4,7 @@
package com.intellij.openapi.actionSystem.ex;
import com.intellij.ide.DataManager;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.extensions.PluginId;
import org.jetbrains.annotations.NotNull;
......@@ -89,5 +90,7 @@ public abstract class ActionManagerEx extends ActionManager {
fireBeforeActionPerformed(action, DataManager.getInstance().getDataContext(), e);
}
}
public abstract void addActionPopupMenuListener(ActionPopupMenuListener listener, Disposable parentDisposable);
}
package com.intellij.openapi.actionSystem.ex
import com.intellij.openapi.actionSystem.ActionPopupMenu
interface ActionPopupMenuListener {
fun onActionPopupMenuCreated(menu: ActionPopupMenu) {}
fun onActionPopupMenuReleased(menu: ActionPopupMenu) {}
}
\ No newline at end of file
......@@ -29,6 +29,7 @@ import com.intellij.internal.statistic.customUsageCollectors.actions.ActionsColl
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.actionSystem.ex.ActionManagerEx;
import com.intellij.openapi.actionSystem.ex.ActionPopupMenuListener;
import com.intellij.openapi.actionSystem.ex.ActionUtil;
import com.intellij.openapi.actionSystem.ex.AnActionListener;
import com.intellij.openapi.application.*;
......@@ -126,6 +127,7 @@ public final class ActionManagerImpl extends ActionManagerEx implements Disposab
private final MultiMap<String,String> myId2GroupId = new MultiMap<>();
private final List<String> myNotRegisteredInternalActionIds = new ArrayList<>();
private final List<AnActionListener> myActionListeners = ContainerUtil.createLockFreeCopyOnWriteList();
private final List<ActionPopupMenuListener> myActionPopupMenuListeners = ContainerUtil.createLockFreeCopyOnWriteList();
private final KeymapManagerEx myKeymapManager;
private final DataManager myDataManager;
private final List<ActionPopupMenuImpl> myPopups = new ArrayList<>();
......@@ -1079,11 +1081,21 @@ public final class ActionManagerImpl extends ActionManagerEx implements Disposab
}
public void addActionPopup(final ActionPopupMenuImpl menu) {
myPopups.add(menu);
boolean added = myPopups.add(menu);
if (added) {
for (ActionPopupMenuListener listener : myActionPopupMenuListeners) {
listener.onActionPopupMenuCreated(menu);
}
}
}
public void removeActionPopup(final ActionPopupMenuImpl menu) {
final boolean removed = myPopups.remove(menu);
if (removed) {
for (ActionPopupMenuListener listener : myActionPopupMenuListeners) {
listener.onActionPopupMenuReleased(menu);
}
}
if (removed && myPopups.isEmpty()) {
flushActionPerformed();
}
......@@ -1115,6 +1127,17 @@ public final class ActionManagerImpl extends ActionManagerEx implements Disposab
return myTransparentOnlyUpdate;
}
@Override
public void addActionPopupMenuListener(ActionPopupMenuListener listener, Disposable parentDisposable) {
myActionPopupMenuListeners.add(listener);
Disposer.register(parentDisposable, new Disposable() {
@Override
public void dispose() {
myActionPopupMenuListeners.remove(listener);
}
});
}
private AnAction replaceAction(@NotNull String actionId, @NotNull AnAction newAction, @Nullable PluginId pluginId) {
AnAction oldAction = getActionOrStub(actionId);
if (oldAction != null) {
......
......@@ -66,6 +66,16 @@ public final class ActionPopupMenuImpl implements ActionPopupMenu, ApplicationAc
return myMenu;
}
@Override
public String getPlace() {
return myMenu.myPlace;
}
@Override
public ActionGroup getActionGroup() {
return myMenu.myGroup;
}
public void setDataContextProvider(@Nullable Getter<DataContext> dataContextProvider) {
myDataContextProvider = dataContextProvider;
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment