diff --git a/platform/platform-resources/src/META-INF/XmlActions.xml b/platform/platform-resources/src/META-INF/XmlActions.xml
index c403d2edd8e9..76fc1b31cb6e 100644
--- a/platform/platform-resources/src/META-INF/XmlActions.xml
+++ b/platform/platform-resources/src/META-INF/XmlActions.xml
@@ -73,16 +73,22 @@
-
-
+
+
+
+
diff --git a/xml/impl/src/com/intellij/ide/browsers/actions/BaseWebBrowserAction.java b/xml/impl/src/com/intellij/ide/browsers/actions/BaseWebBrowserAction.java
index a5aa565896ce..ed373314c355 100644
--- a/xml/impl/src/com/intellij/ide/browsers/actions/BaseWebBrowserAction.java
+++ b/xml/impl/src/com/intellij/ide/browsers/actions/BaseWebBrowserAction.java
@@ -1,6 +1,9 @@
package com.intellij.ide.browsers.actions;
-import com.intellij.ide.browsers.*;
+import com.intellij.ide.browsers.BrowsersConfiguration;
+import com.intellij.ide.browsers.OpenInBrowserRequest;
+import com.intellij.ide.browsers.WebBrowser;
+import com.intellij.ide.browsers.WebBrowserUrlProvider;
import com.intellij.openapi.actionSystem.ActionPlaces;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.Shortcut;
@@ -11,7 +14,7 @@ import com.intellij.openapi.util.Pair;
import com.intellij.xml.util.HtmlUtil;
import org.jetbrains.annotations.NotNull;
-public class BaseWebBrowserAction extends DumbAwareAction {
+final class BaseWebBrowserAction extends DumbAwareAction {
private final WebBrowser browser;
public BaseWebBrowserAction(@NotNull WebBrowser browser) {
@@ -20,10 +23,6 @@ public class BaseWebBrowserAction extends DumbAwareAction {
this.browser = browser;
}
- public BaseWebBrowserAction(@NotNull BrowsersConfiguration.BrowserFamily family) {
- this(WebBrowser.getStandardBrowser(family));
- }
-
@Override
public void update(final AnActionEvent e) {
if (!BrowsersConfiguration.getInstance().getBrowserSettings(browser.getFamily()).isActive()) {
@@ -32,7 +31,7 @@ public class BaseWebBrowserAction extends DumbAwareAction {
return;
}
- Pair result = OpenFileInDefaultBrowserAction.doUpdate(e);
+ Pair result = OpenInBrowserBaseGroupAction.doUpdate(e);
if (result == null) {
return;
}
diff --git a/xml/impl/src/com/intellij/ide/browsers/actions/OpenFileInDefaultBrowserAction.java b/xml/impl/src/com/intellij/ide/browsers/actions/OpenFileInDefaultBrowserAction.java
index 48086f1e808a..e78f3c15e125 100644
--- a/xml/impl/src/com/intellij/ide/browsers/actions/OpenFileInDefaultBrowserAction.java
+++ b/xml/impl/src/com/intellij/ide/browsers/actions/OpenFileInDefaultBrowserAction.java
@@ -18,7 +18,6 @@ package com.intellij.ide.browsers.actions;
import com.intellij.icons.AllIcons;
import com.intellij.ide.GeneralSettings;
import com.intellij.ide.browsers.*;
-import com.intellij.ide.browsers.impl.WebBrowserServiceImpl;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
@@ -34,7 +33,6 @@ import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
-import com.intellij.testFramework.LightVirtualFile;
import com.intellij.ui.ColoredListCellRenderer;
import com.intellij.ui.components.JBList;
import com.intellij.util.Consumer;
@@ -53,30 +51,11 @@ import java.util.Collection;
public class OpenFileInDefaultBrowserAction extends DumbAwareAction {
private static final Logger LOG = Logger.getInstance(OpenFileInDefaultBrowserAction.class);
- @Nullable
- public static Pair doUpdate(AnActionEvent event) {
- OpenInBrowserRequest request = createRequest(event.getDataContext());
- boolean applicable = false;
- WebBrowserUrlProvider provider = null;
- if (request != null) {
- applicable = HtmlUtil.isHtmlFile(request.getFile()) && !(request.getVirtualFile() instanceof LightVirtualFile);
- if (!applicable) {
- provider = WebBrowserServiceImpl.getProvider(request);
- applicable = provider != null;
- }
- }
-
- Presentation presentation = event.getPresentation();
- presentation.setVisible(applicable);
- presentation.setVisible(applicable);
- return applicable ? Pair.create(request, provider) : null;
- }
-
@Override
public void update(AnActionEvent e) {
Presentation presentation = e.getPresentation();
- Pair result = doUpdate(e);
+ Pair result = OpenInBrowserBaseGroupAction.doUpdate(e);
if (result == null) {
return;
}
diff --git a/xml/impl/src/com/intellij/ide/browsers/actions/OpenInBrowserBaseGroupAction.java b/xml/impl/src/com/intellij/ide/browsers/actions/OpenInBrowserBaseGroupAction.java
new file mode 100644
index 000000000000..90c956cc0cce
--- /dev/null
+++ b/xml/impl/src/com/intellij/ide/browsers/actions/OpenInBrowserBaseGroupAction.java
@@ -0,0 +1,96 @@
+package com.intellij.ide.browsers.actions;
+
+import com.intellij.icons.AllIcons;
+import com.intellij.ide.browsers.BrowsersConfiguration;
+import com.intellij.ide.browsers.OpenInBrowserRequest;
+import com.intellij.ide.browsers.WebBrowser;
+import com.intellij.ide.browsers.WebBrowserUrlProvider;
+import com.intellij.ide.browsers.impl.WebBrowserServiceImpl;
+import com.intellij.openapi.actionSystem.*;
+import com.intellij.openapi.project.DumbAware;
+import com.intellij.openapi.util.Pair;
+import com.intellij.testFramework.LightVirtualFile;
+import com.intellij.xml.util.HtmlUtil;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+public abstract class OpenInBrowserBaseGroupAction extends ActionGroup implements DumbAware {
+ public static final DataKey OPEN_IN_BROWSER_REQUEST = DataKey.create("OPEN_IN_BROWSER_REQUEST");
+
+ private OpenFileInDefaultBrowserAction myDefaultBrowserAction;
+
+ protected OpenInBrowserBaseGroupAction(boolean popup) {
+ super(null, popup);
+ }
+
+ @Nullable
+ public static Pair doUpdate(@NotNull AnActionEvent event) {
+ OpenInBrowserRequest request = OpenFileInDefaultBrowserAction.createRequest(event.getDataContext());
+ boolean applicable = false;
+ WebBrowserUrlProvider provider = null;
+ if (request != null) {
+ applicable = HtmlUtil.isHtmlFile(request.getFile()) && !(request.getVirtualFile() instanceof LightVirtualFile);
+ if (!applicable) {
+ provider = WebBrowserServiceImpl.getProvider(request);
+ applicable = provider != null;
+ }
+ }
+
+ Presentation presentation = event.getPresentation();
+ presentation.setVisible(applicable);
+ presentation.setVisible(applicable);
+ return applicable ? Pair.create(request, provider) : null;
+ }
+
+ @NotNull
+ @Override
+ public AnAction[] getChildren(@Nullable AnActionEvent e) {
+ if (e == null) {
+ return EMPTY_ARRAY;
+ }
+
+ Pair result = doUpdate(e);
+ if (result == null) {
+ return EMPTY_ARRAY;
+ }
+
+ return computeActions();
+ }
+
+ @NotNull
+ private AnAction[] computeActions() {
+ List browsers = BrowsersConfiguration.getInstance().getActive();
+ boolean addDefaultBrowser = isPopup();
+ int offset = addDefaultBrowser ? 1 : 0;
+ AnAction[] actions = new AnAction[browsers.size() + offset];
+
+ if (addDefaultBrowser) {
+ if (myDefaultBrowserAction == null) {
+ myDefaultBrowserAction = new OpenFileInDefaultBrowserAction();
+ myDefaultBrowserAction.getTemplatePresentation().setText("Default");
+ myDefaultBrowserAction.getTemplatePresentation().setIcon(AllIcons.Nodes.PpWeb);
+ }
+ actions[0] = myDefaultBrowserAction;
+ }
+
+ for (int i = 0, size = browsers.size(); i < size; i++) {
+ WebBrowser browser = browsers.get(i);
+ actions[i + offset] = new BaseWebBrowserAction(browser);
+ }
+ return actions;
+ }
+
+ public static final class OpenInBrowserGroupAction extends OpenInBrowserBaseGroupAction implements DumbAware {
+ public OpenInBrowserGroupAction() {
+ super(true);
+ }
+ }
+
+ public static final class OpenInBrowserEditorContextBarGroupAction extends OpenInBrowserBaseGroupAction {
+ public OpenInBrowserEditorContextBarGroupAction() {
+ super(false);
+ }
+ }
+}
\ No newline at end of file
diff --git a/xml/impl/src/com/intellij/ide/browsers/actions/OpenInBrowserGroupAction.java b/xml/impl/src/com/intellij/ide/browsers/actions/OpenInBrowserGroupAction.java
deleted file mode 100644
index c4039948921b..000000000000
--- a/xml/impl/src/com/intellij/ide/browsers/actions/OpenInBrowserGroupAction.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.intellij.ide.browsers.actions;
-
-import com.intellij.ide.browsers.BrowsersConfiguration;
-import com.intellij.ide.browsers.WebBrowser;
-import com.intellij.openapi.actionSystem.ActionGroup;
-import com.intellij.openapi.actionSystem.AnAction;
-import com.intellij.openapi.actionSystem.AnActionEvent;
-import com.intellij.openapi.project.DumbAware;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.List;
-
-public final class OpenInBrowserGroupAction extends ActionGroup implements DumbAware {
- private AnAction[] myActions;
-
- public OpenInBrowserGroupAction() {
- super(null, true);
- }
-
- @NotNull
- @Override
- public AnAction[] getChildren(@Nullable AnActionEvent e) {
- if (myActions == null) {
- myActions = computeActions();
- }
- return myActions;
- }
-
- @NotNull
- private static AnAction[] computeActions() {
- List browsers = BrowsersConfiguration.getInstance().getActive();
- AnAction[] actions = new AnAction[browsers.size()];
- for (int i = 0, size = browsers.size(); i < size; i++) {
- WebBrowser browser = browsers.get(i);
- actions[i] = new BaseWebBrowserAction(browser);
- }
- return actions;
- }
-}
\ No newline at end of file