diff --git a/platform/platform-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java b/platform/platform-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java index 67cce4515bd2..32f5a12932c2 100644 --- a/platform/platform-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java +++ b/platform/platform-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java @@ -527,7 +527,13 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract @Override public @NotNull Configurable @NotNull [] buildConfigurables() { myDisposeCompleted = false; - initAll(); + // Skip initAll() if the shared model already contains MyColorScheme objects from another active + // ColorAndFontOptions instance (e.g. an open non-modal Settings dialog). Calling initAll() would + // wipe unsaved edits via dropSchemes(). This path is hit when Search Everywhere or other code + // enumerates configurables and triggers buildConfigurables() on a throwaway instance. + if (!hasMyColorSchemesInModel()) { + initAll(); + } List panelFactories = createPanelFactories(); @@ -669,6 +675,13 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract } } + private boolean hasMyColorSchemesInModel() { + for (EditorColorsScheme scheme : myModel.allSchemes()) { + if (scheme instanceof MyColorScheme) return true; + } + return false; + } + private void initAll() { EditorColorsScheme globalScheme = EditorColorsManager.getInstance().getGlobalScheme();