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.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;
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();
}
}
}
+ 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) {