X-Git-Url: https://git.jetbrains.org/?p=idea%2Fcommunity.git;a=blobdiff_plain;f=platform%2Flang-impl%2Fsrc%2Fcom%2Fintellij%2Fapplication%2Foptions%2Fcolors%2FColorAndFontOptions.java;h=09c152e0c16d77cc4fce6e68b7d5057c11142ddd;hp=0cf3bbcd0e2e385e035cc7b284b56f8c1842d902;hb=41a29a6a5fe6e7592486c0bb2d45825beb033c06;hpb=64ba8a95434ed1c70546449837a7264341f4c82e diff --git a/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java b/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java index 0cf3bbcd0e2e..09c152e0c16d 100644 --- a/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java +++ b/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java @@ -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) {