Merge remote-tracking branch 'origin/master' into develar/is
[idea/community.git] / platform / lang-impl / src / com / intellij / application / options / colors / ColorAndFontOptions.java
index 0cf3bbcd0e2e385e035cc7b284b56f8c1842d902..09c152e0c16d77cc4fce6e68b7d5057c11142ddd 100644 (file)
@@ -23,9 +23,11 @@ import com.intellij.ide.ui.LafManager;
 import com.intellij.ide.ui.laf.LafManagerImpl;
 import com.intellij.ide.ui.laf.darcula.DarculaInstaller;
 import com.intellij.ide.ui.laf.darcula.DarculaLookAndFeelInfo;
+import com.intellij.ide.util.PropertiesComponent;
 import com.intellij.openapi.Disposable;
 import com.intellij.openapi.application.ApplicationBundle;
-import com.intellij.openapi.application.ex.ApplicationInfoEx;
+import com.intellij.openapi.application.ApplicationNamesInfo;
+import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.editor.colors.ColorKey;
 import com.intellij.openapi.editor.colors.EditorColorsManager;
 import com.intellij.openapi.editor.colors.EditorColorsScheme;
@@ -41,6 +43,7 @@ import com.intellij.openapi.options.SearchableConfigurable;
 import com.intellij.openapi.options.colors.*;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.project.ProjectManager;
+import com.intellij.openapi.ui.DialogWrapper;
 import com.intellij.openapi.ui.Messages;
 import com.intellij.openapi.util.Comparing;
 import com.intellij.openapi.util.Disposer;
@@ -262,28 +265,8 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract
         EditorColorsManagerImpl.schemeChangedOrSwitched();
       }
 
-      final boolean dark = ColorUtil.isDark(activeOriginalScheme.getDefaultBackground());
-      final String productName = ApplicationInfoEx.getInstanceEx().getFullApplicationName();
-      final LafManager lafManager = LafManager.getInstance();
-      if (dark && !UIUtil.isUnderDarcula()) {
-        if (Messages.showYesNoDialog(
-          "Looks like you have set a dark editor theme. Would you like to set dark theme for entire " + productName,
-          "Change " + productName + " theme?",
-          Messages.getQuestionIcon()) == Messages.YES) {
-          lafManager.setCurrentLookAndFeel(new DarculaLookAndFeelInfo());
-          DarculaInstaller.install();
-        }
-      } else if (!dark && UIUtil.isUnderDarcula()) {
-        if (lafManager instanceof LafManagerImpl
-            &&
-            Messages.showYesNoDialog(
-              "Looks like you have set a bright editor theme. Would you like to set bright theme for entire " + productName,
-              "Change " + productName + " theme",
-              Messages.getQuestionIcon()) == Messages.YES) {
-          lafManager.setCurrentLookAndFeel(((LafManagerImpl)lafManager).getDefaultLaf());
-          DarculaInstaller.uninstall();
-        }
-      }
+      final boolean isEditorThemeDark = ColorUtil.isDark(activeOriginalScheme.getDefaultBackground());
+      changeLafIfNecessary(isEditorThemeDark);
 
       reset();
     }
@@ -292,6 +275,53 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract
     }
   }
 
+  private static void changeLafIfNecessary(boolean isDarkEditorTheme) {
+    String propKey = "change.laf.on.editor.theme.change";
+    String value = PropertiesComponent.getInstance().getValue(propKey);
+    if ("false".equals(value)) return;
+    boolean applyAlways = "true".equals(value);
+    DialogWrapper.DoNotAskOption doNotAskOption = new DialogWrapper.DoNotAskOption.Adapter() {
+      @Override
+      public void rememberChoice(boolean isSelected, int exitCode) {
+        if (isSelected) {
+          PropertiesComponent.getInstance().setValue(propKey, Boolean.toString(exitCode == Messages.YES));
+        }
+      }
+
+      @Override
+      public boolean shouldSaveOptionsOnCancel() {
+        return true;
+      }
+    };
+
+    final String productName = ApplicationNamesInfo.getInstance().getFullProductName();
+    final LafManager lafManager = LafManager.getInstance();
+    if (isDarkEditorTheme && !UIUtil.isUnderDarcula()) {
+      if (applyAlways || Messages.showYesNoDialog(
+        "Looks like you have set a dark editor theme. Would you like to set dark theme for entire " + productName,
+        "Change " + productName + " theme", Messages.YES_BUTTON, Messages.NO_BUTTON,
+        Messages.getQuestionIcon(), doNotAskOption) == Messages.YES) {
+        lafManager.setCurrentLookAndFeel(new DarculaLookAndFeelInfo());
+        lafManager.updateUI();
+        //noinspection SSBasedInspection
+        SwingUtilities.invokeLater(DarculaInstaller::install);
+      }
+    } else if (!isDarkEditorTheme && UIUtil.isUnderDarcula()) {
+
+      if (lafManager instanceof LafManagerImpl
+          &&
+          (applyAlways || Messages.showYesNoDialog(
+            "Looks like you have set a bright editor theme. Would you like to set bright theme for entire " + productName,
+            "Change " + productName + " theme", Messages.YES_BUTTON, Messages.NO_BUTTON,
+            Messages.getQuestionIcon(), doNotAskOption) == Messages.YES)) {
+        lafManager.setCurrentLookAndFeel(((LafManagerImpl)lafManager).getDefaultLaf());
+        lafManager.updateUI();
+        //noinspection SSBasedInspection
+        SwingUtilities.invokeLater(DarculaInstaller::uninstall);
+      }
+    }
+  }
+
   private boolean myIsReset = false;
 
   private void resetSchemesCombo(Object source) {