diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/LafManagerImpl.java b/platform/platform-impl/src/com/intellij/ide/ui/laf/LafManagerImpl.java index 98364fb6c551..5c1e4f2f1094 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/LafManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/LafManagerImpl.java @@ -5,16 +5,18 @@ import com.intellij.CommonBundle; import com.intellij.icons.AllIcons; import com.intellij.ide.IdeBundle; import com.intellij.ide.WelcomeWizardUtil; -import com.intellij.ide.ui.LafManager; -import com.intellij.ide.ui.LafManagerListener; -import com.intellij.ide.ui.UISettings; -import com.intellij.ide.ui.UIThemeProvider; +import com.intellij.ide.ui.*; import com.intellij.ide.ui.laf.darcula.DarculaInstaller; import com.intellij.ide.ui.laf.darcula.DarculaLaf; import com.intellij.ide.ui.laf.darcula.DarculaLookAndFeelInfo; +import com.intellij.ide.util.PropertiesComponent; import com.intellij.openapi.Disposable; +import com.intellij.openapi.actionSystem.impl.ActionToolbarImpl; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.components.*; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.editor.colors.EditorColorsManager; +import com.intellij.openapi.editor.colors.EditorColorsScheme; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.ui.popup.util.PopupUtil; @@ -23,6 +25,7 @@ import com.intellij.openapi.util.IconLoader; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.UserDataHolder; import com.intellij.openapi.util.registry.Registry; +import com.intellij.ui.ColorUtil; import com.intellij.ui.JBColor; import com.intellij.ui.ScreenUtil; import com.intellij.ui.components.BasicOptionButtonUI; @@ -68,6 +71,9 @@ public final class LafManagerImpl extends LafManager implements PersistentStateC @NonNls private static final String ATTRIBUTE_THEME_NAME = "themeId"; @NonNls private static final String GNOME_THEME_PROPERTY_NAME = "gnome.Net/ThemeName"; + private static final String DARCULA_EDITOR_THEME_KEY = "Darcula.SavedEditorTheme"; + private static final String DEFAULT_EDITOR_THEME_KEY = "Default.SavedEditorTheme"; + @NonNls private static final String[] ourPatchableFontResources = {"Button.font", "ToggleButton.font", "RadioButton.font", "CheckBox.font", "ColorChooser.font", "ComboBox.font", "Label.font", "List.font", "MenuBar.font", "MenuItem.font", "MenuItem.acceleratorFont", "RadioButtonMenuItem.font", "CheckBoxMenuItem.font", "Menu.font", "PopupMenu.font", "OptionPane.font", @@ -400,7 +406,39 @@ public final class LafManagerImpl extends LafManager implements PersistentStateC ((UIThemeBasedLookAndFeelInfo)myCurrentLaf).dispose(); } + + final UIManager.LookAndFeelInfo oldLaf = myCurrentLaf; myCurrentLaf = ObjectUtils.chooseNotNull(lookAndFeelInfo, findLaf(lookAndFeelInfo.getClassName())); + + ApplicationManager.getApplication().invokeLater(() -> updateEditorScheme(oldLaf)); + } + + private static void updateEditorScheme(UIManager.LookAndFeelInfo oldLaf) { + boolean dark = UIUtil.isUnderDarcula(); + EditorColorsManager colorsManager = EditorColorsManager.getInstance(); + EditorColorsScheme current = colorsManager.getGlobalScheme(); + boolean wasUITheme = oldLaf instanceof UIThemeBasedLookAndFeelInfo; + if (dark != ColorUtil.isDark(current.getDefaultBackground()) || wasUITheme) { + String targetScheme = dark ? DarculaLaf.NAME : EditorColorsScheme.DEFAULT_SCHEME_NAME; + PropertiesComponent properties = PropertiesComponent.getInstance(); + String savedEditorThemeKey = dark ? DARCULA_EDITOR_THEME_KEY : DEFAULT_EDITOR_THEME_KEY; + String toSavedEditorThemeKey = dark ? DEFAULT_EDITOR_THEME_KEY : DARCULA_EDITOR_THEME_KEY; + String themeName = wasUITheme ? dark ? DarculaLaf.NAME : EditorColorsScheme.DEFAULT_SCHEME_NAME + : properties.getValue(savedEditorThemeKey); + if (themeName != null && colorsManager.getScheme(themeName) != null) { + targetScheme = themeName; + } + if (!wasUITheme) { + properties.setValue(toSavedEditorThemeKey, current.getName(), dark ? EditorColorsScheme.DEFAULT_SCHEME_NAME : DarculaLaf.NAME); + } + + EditorColorsScheme scheme = colorsManager.getScheme(targetScheme); + if (scheme != null) { + colorsManager.setGlobalScheme(scheme); + } + } + UISettings.getShadowInstance().fireUISettingsChanged(); + ActionToolbarImpl.updateAllToolbarsImmediately(); } public static void updateForDarcula(boolean isDarcula) { diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/DarculaInstaller.java b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/DarculaInstaller.java index 81bf0bf3fe17..36f52f3702ab 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/DarculaInstaller.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/DarculaInstaller.java @@ -15,23 +15,13 @@ */ package com.intellij.ide.ui.laf.darcula; -import com.intellij.ide.ui.UISettings; -import com.intellij.ide.util.PropertiesComponent; -import com.intellij.openapi.actionSystem.impl.ActionToolbarImpl; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.editor.colors.EditorColorsManager; -import com.intellij.openapi.editor.colors.EditorColorsScheme; import com.intellij.openapi.util.IconLoader; -import com.intellij.ui.ColorUtil; import com.intellij.ui.JBColor; /** * @author Konstantin Bulenkov */ public class DarculaInstaller { - private static final String DARCULA_EDITOR_THEME_KEY = "Darcula.savedEditorTheme"; - private static final String DEFAULT_EDITOR_THEME_KEY = "Default.savedEditorTheme"; - public static void uninstall() { performImpl(false); } @@ -43,31 +33,5 @@ public class DarculaInstaller { private static void performImpl(final boolean dark) { JBColor.setDark(dark); IconLoader.setUseDarkIcons(dark); - ApplicationManager.getApplication().invokeLater(() -> { - EditorColorsManager colorsManager = EditorColorsManager.getInstance(); - EditorColorsScheme current = colorsManager.getGlobalScheme(); - if (dark != ColorUtil.isDark(current.getDefaultBackground())) { - String targetScheme = dark ? DarculaLaf.NAME : EditorColorsScheme.DEFAULT_SCHEME_NAME; - PropertiesComponent properties = PropertiesComponent.getInstance(); - String savedEditorThemeKey = dark ? DARCULA_EDITOR_THEME_KEY : DEFAULT_EDITOR_THEME_KEY; - String toSavedEditorThemeKey = dark ? DEFAULT_EDITOR_THEME_KEY : DARCULA_EDITOR_THEME_KEY; - String themeName = properties.getValue(savedEditorThemeKey); - if (themeName != null && colorsManager.getScheme(themeName) != null) { - targetScheme = themeName; - } - properties.setValue(toSavedEditorThemeKey, current.getName(), dark ? EditorColorsScheme.DEFAULT_SCHEME_NAME : DarculaLaf.NAME); - - EditorColorsScheme scheme = colorsManager.getScheme(targetScheme); - if (scheme != null) { - colorsManager.setGlobalScheme(scheme); - } - } - update(); - }); - } - - protected static void update() { - UISettings.getShadowInstance().fireUISettingsChanged(); - ActionToolbarImpl.updateAllToolbarsImmediately(); } }