diff --git a/platform/platform-api/src/com/intellij/ide/BrowserSettingsProvider.java b/platform/platform-api/src/com/intellij/ide/BrowserSettingsProvider.java
index 01f628bb0e4f..63576284ba03 100644
--- a/platform/platform-api/src/com/intellij/ide/BrowserSettingsProvider.java
+++ b/platform/platform-api/src/com/intellij/ide/BrowserSettingsProvider.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -21,8 +21,6 @@ import com.intellij.openapi.options.UnnamedConfigurable;
* @author spleaner
*/
public abstract class BrowserSettingsProvider implements UnnamedConfigurable {
- public void disposeUIResources() {
- }
-
- public void applySettingsFromWindowsRegistry() {}
+ @Override
+ public void disposeUIResources() { }
}
diff --git a/platform/platform-impl/src/com/intellij/ide/BrowserSettingsPanel.java b/platform/platform-impl/src/com/intellij/ide/BrowserSettingsPanel.java
index 54a77de5aa90..0a66235679e3 100644
--- a/platform/platform-impl/src/com/intellij/ide/BrowserSettingsPanel.java
+++ b/platform/platform-impl/src/com/intellij/ide/BrowserSettingsPanel.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -111,21 +111,6 @@ public class BrowserSettingsPanel extends JPanel {
for (BrowserSettingsProvider settingsProvider : mySettingsProviders) {
outerPanel.add(settingsProvider.createComponent());
}
- if (SystemInfo.isWindows) {
- JPanel wrapperPanel = new JPanel(new BorderLayout());
- JButton registryButton = new JButton("Retrieve settings from Windows registry");
- registryButton.setMnemonic('W');
- registryButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- for (BrowserSettingsProvider settingsProvider : mySettingsProviders) {
- settingsProvider.applySettingsFromWindowsRegistry();
- }
- }
- });
- wrapperPanel.add(registryButton, BorderLayout.EAST);
- outerPanel.add(wrapperPanel);
- }
add(outerPanel, BorderLayout.NORTH);
}
diff --git a/platform/platform-resources-en/src/messages/XmlBundle.properties b/platform/platform-resources-en/src/messages/XmlBundle.properties
index e581c3658a20..04ed0e5f9dbe 100644
--- a/platform/platform-resources-en/src/messages/XmlBundle.properties
+++ b/platform/platform-resources-en/src/messages/XmlBundle.properties
@@ -248,4 +248,6 @@ zen.coding.incorrect.abbreviation.error=Incorrect abbreviation
title.cannot.create.html.file=Cannot create HTML file
new.html.file.action=HTML File
new.html.file.action.description=Creates new HTML file
-html5.outline.mode=HTML5 Outline
\ No newline at end of file
+html5.outline.mode=HTML5 Outline
+
+read.win.registry=Retrieve settings from &Windows registry
diff --git a/platform/platform-resources/src/META-INF/XmlPlugin.xml b/platform/platform-resources/src/META-INF/XmlPlugin.xml
index f8aa0b319f3e..5bf0b9d30736 100644
--- a/platform/platform-resources/src/META-INF/XmlPlugin.xml
+++ b/platform/platform-resources/src/META-INF/XmlPlugin.xml
@@ -375,7 +375,7 @@
-
+
diff --git a/xml/impl/src/com/intellij/ide/browsers/BrowsersConfiguration.java b/xml/impl/src/com/intellij/ide/browsers/BrowsersConfiguration.java
index fa4a3c37be9e..3eafa6e21725 100644
--- a/xml/impl/src/com/intellij/ide/browsers/BrowsersConfiguration.java
+++ b/xml/impl/src/com/intellij/ide/browsers/BrowsersConfiguration.java
@@ -24,7 +24,6 @@ import com.intellij.openapi.components.*;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.openapi.util.io.FileUtil;
-import com.intellij.openapi.util.io.WindowsRegistryUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.containers.HashMap;
import com.intellij.util.xmlb.SkipDefaultValuesSerializationFilters;
@@ -38,7 +37,6 @@ import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.io.File;
import java.util.ArrayList;
-import java.util.EnumMap;
import java.util.List;
import java.util.Map;
@@ -255,50 +253,4 @@ public class BrowsersConfiguration implements PersistentStateComponent
return null;
}
-
- /**
- * Gets data from Windows registry, may take some time to run (up to ~300ms)
- *
- * @return Map[BrowserFamily -> "path to .exe"]
- */
- @NotNull
- public static EnumMap getWindowsBrowsersEXE() {
- EnumMap map = new EnumMap(BrowserFamily.class);
- if (SystemInfo.isWindows) {
- List sections = WindowsRegistryUtil.readRegistryBranch("HKEY_LOCAL_MACHINE\\SOFTWARE\\Clients\\StartMenuInternet");
- for (String section : sections) {
- BrowserFamily family = getFamily(section);
- if (family == null) {
- continue; //We ignore "unknown" browsers like Maxthon, RockMelt, SeaMonkey, Deepnet Explorer, Avant Browser etc.
- }
- String pathToExe = WindowsRegistryUtil.readRegistryDefault(
- "HKLM\\SOFTWARE\\Clients\\StartMenuInternet\\" + section + "\\shell\\open\\command");
- if (pathToExe != null) {
- map.put(family, pathToExe);
- }
- }
- }
- return map;
- }
-
- @Nullable
- private static BrowserFamily getFamily(String registryName) {
- registryName = registryName.toLowerCase();
- if (registryName.contains("firefox")) {
- return BrowserFamily.FIREFOX;
- }
- if (registryName.contains("iexplore")) {
- return BrowserFamily.EXPLORER;
- }
- if (registryName.contains("opera")) {
- return BrowserFamily.OPERA;
- }
- if (registryName.contains("safari")) {
- return BrowserFamily.SAFARI;
- }
- if (registryName.contains("google")) {
- return BrowserFamily.CHROME;
- }
- return null;
- }
}
diff --git a/xml/impl/src/com/intellij/ide/browsers/WebBrowsersPanel.java b/xml/impl/src/com/intellij/ide/browsers/WebBrowsersPanel.java
index e5f53e7f8268..a7debbe2c2c2 100644
--- a/xml/impl/src/com/intellij/ide/browsers/WebBrowsersPanel.java
+++ b/xml/impl/src/com/intellij/ide/browsers/WebBrowsersPanel.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,13 +16,14 @@
package com.intellij.ide.browsers;
import com.intellij.ide.IdeBundle;
+import com.intellij.ide.browsers.impl.BrowserConfigurationHelper;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
+import com.intellij.openapi.options.ShowSettingsUtil;
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.SystemInfo;
-import com.intellij.openapi.options.ShowSettingsUtil;
import com.intellij.ui.IdeBorderFactory;
import com.intellij.util.containers.HashMap;
import com.intellij.xml.XmlBundle;
@@ -32,7 +33,6 @@ import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
-import java.util.EnumMap;
import java.util.Map;
import java.util.concurrent.ExecutionException;
@@ -60,6 +60,8 @@ public class WebBrowsersPanel extends JPanel {
createIndividualSettings(BrowsersConfiguration.BrowserFamily.SAFARI, mySettingsPanel);
createIndividualSettings(BrowsersConfiguration.BrowserFamily.CHROME, mySettingsPanel);
createIndividualSettings(BrowsersConfiguration.BrowserFamily.OPERA, mySettingsPanel);
+
+ createPlatformSpecificAction(mySettingsPanel);
}
private void createIndividualSettings(@NotNull final BrowsersConfiguration.BrowserFamily family, final JPanel container) {
@@ -125,53 +127,62 @@ public class WebBrowsersPanel extends JPanel {
if (settings == null) {
settings = family.createBrowserSpecificSettings();
}
-
- if (ShowSettingsUtil.getInstance().editConfigurable(mySettingsPanel, settings.createConfigurable())) {
+ if (settings != null && ShowSettingsUtil.getInstance().editConfigurable(mySettingsPanel, settings.createConfigurable())) {
myConfiguration.updateBrowserSpecificSettings(family, settings);
}
}
- public void applySettingsFromWindowsRegistry() {
- if (!SystemInfo.isWindows) {
- return;
- }
- ApplicationManager.getApplication()
- .executeOnPooledThread(new SwingWorker, Void>() {
+ private void createPlatformSpecificAction(JPanel container) {
+ if (SystemInfo.isWindows) {
+ JButton registryButton = new JButton(XmlBundle.message("read.win.registry"));
+ registryButton.addActionListener(new ActionListener() {
@Override
- protected EnumMap doInBackground() throws Exception {
- return BrowsersConfiguration.getWindowsBrowsersEXE();
- }
-
- @Override
- protected void done() {
- EnumMap map = null;
- try {
- map = get();
- }
- catch (InterruptedException ignored) {
- }
- catch (ExecutionException ignored) {
- }
- if (myBrowserSettingsMap == null) {
- return;//we are disposed
- }
- if (map != null && !map.isEmpty()) {
- for (BrowsersConfiguration.BrowserFamily family : BrowsersConfiguration.BrowserFamily.values()) {
- Pair pair = myBrowserSettingsMap.get(family);
- String pathToExe = map.get(family);
- if (pathToExe != null) {
- pair.first.setSelected(true);
- pair.second.setText(pathToExe);
- }
- else {
- pair.first.setSelected(false);
- }
- }
- }
+ public void actionPerformed(ActionEvent e) {
+ applySettingsFromWindowsRegistry();
}
});
+
+ JPanel panel = new JPanel(new BorderLayout());
+ panel.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0));
+ panel.add(registryButton, BorderLayout.EAST);
+ container.add(panel);
+ }
}
+ private void applySettingsFromWindowsRegistry() {
+ ApplicationManager.getApplication().executeOnPooledThread(new SwingWorker