diff --git a/platform/platform-impl/src/com/intellij/ui/ScrollPaneActions.java b/platform/platform-impl/src/com/intellij/ui/ScrollPaneActions.java
index 37f01d7adbbf..2879acbeb80d 100644
--- a/platform/platform-impl/src/com/intellij/ui/ScrollPaneActions.java
+++ b/platform/platform-impl/src/com/intellij/ui/ScrollPaneActions.java
@@ -15,52 +15,24 @@
*/
package com.intellij.ui;
-import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
-import com.intellij.util.ui.UIUtil;
-import javax.swing.Action;
-import javax.swing.ActionMap;
+import javax.swing.JComponent;
import javax.swing.JScrollPane;
-import java.awt.Component;
-import java.awt.KeyboardFocusManager;
-import java.awt.event.ActionEvent;
-import static com.intellij.openapi.actionSystem.PlatformDataKeys.CONTEXT_COMPONENT;
+import static com.intellij.util.ui.UIUtil.getParentOfType;
/**
* @author Sergey.Malenkov
*/
-public abstract class ScrollPaneActions extends AnAction {
- private final String mySwingActionId;
-
+public abstract class ScrollPaneActions extends SwingActionDelegate {
private ScrollPaneActions(String actionId) {
- mySwingActionId = actionId;
+ super(actionId);
}
@Override
- public void update(AnActionEvent event) {
- JScrollPane pane = getScrollPane(event);
- event.getPresentation().setEnabled(pane != null && null != getSwingAction(pane));
- }
-
- @Override
- public void actionPerformed(AnActionEvent event) {
- JScrollPane pane = getScrollPane(event);
- if (pane == null) return;
- Action action = getSwingAction(pane);
- if (action == null) return;
- action.actionPerformed(new ActionEvent(pane, ActionEvent.ACTION_PERFORMED, mySwingActionId));
- }
-
- private JScrollPane getScrollPane(AnActionEvent event) {
- Component component = event.getData(CONTEXT_COMPONENT);
- return UIUtil.getParentOfType(JScrollPane.class, component);
- }
-
- private Action getSwingAction(JScrollPane pane) {
- ActionMap map = pane.getActionMap();
- return map == null ? null : map.get(mySwingActionId);
+ protected JComponent getComponent(AnActionEvent event) {
+ return getParentOfType(JScrollPane.class, super.getComponent(event));
}
public static final class Home extends ScrollPaneActions {
diff --git a/platform/platform-impl/src/com/intellij/ui/SwingActionDelegate.java b/platform/platform-impl/src/com/intellij/ui/SwingActionDelegate.java
new file mode 100644
index 000000000000..51fc87933ce2
--- /dev/null
+++ b/platform/platform-impl/src/com/intellij/ui/SwingActionDelegate.java
@@ -0,0 +1,46 @@
+package com.intellij.ui;
+
+import com.intellij.openapi.actionSystem.AnAction;
+import com.intellij.openapi.actionSystem.AnActionEvent;
+
+import javax.swing.Action;
+import javax.swing.ActionMap;
+import javax.swing.JComponent;
+import java.awt.event.ActionEvent;
+
+import static com.intellij.openapi.actionSystem.PlatformDataKeys.CONTEXT_COMPONENT;
+import static com.intellij.util.ui.UIUtil.getParentOfType;
+
+/**
+ * @author Sergey.Malenkov
+ */
+public class SwingActionDelegate extends AnAction {
+ private final String mySwingActionId;
+
+ protected SwingActionDelegate(String actionId) {
+ setEnabledInModalContext(true);
+ mySwingActionId = actionId;
+ }
+
+ protected JComponent getComponent(AnActionEvent event) {
+ return getParentOfType(JComponent.class, event.getData(CONTEXT_COMPONENT));
+ }
+
+ @Override
+ public final void update(AnActionEvent event) {
+ event.getPresentation().setEnabled(null != getSwingAction(getComponent(event)));
+ }
+
+ @Override
+ public final void actionPerformed(AnActionEvent event) {
+ JComponent component = getComponent(event);
+ Action action = getSwingAction(component);
+ if (action != null) action.actionPerformed(new ActionEvent(component, ActionEvent.ACTION_PERFORMED, mySwingActionId));
+ }
+
+ private Action getSwingAction(JComponent component) {
+ if (component == null) return null;
+ ActionMap map = component.getActionMap();
+ return map == null ? null : map.get(mySwingActionId);
+ }
+}
diff --git a/platform/platform-resources/src/idea/PlatformActions.xml b/platform/platform-resources/src/idea/PlatformActions.xml
index 4d17cdf880c3..839fe3ddc7af 100644
--- a/platform/platform-resources/src/idea/PlatformActions.xml
+++ b/platform/platform-resources/src/idea/PlatformActions.xml
@@ -22,16 +22,36 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+