feat: three-way color mode (Light/Dark/System) replacing the DarkMode bool - #701
Merged
Conversation
added 2 commits
August 28, 2026 09:05
…if the system is still in darkmode
… bool (#698) The Preferences setting is now a ColorMode enum serialized as a string. Old settings files migrate on load: DarkMode=true -> Dark, false -> Light (unchecked meant forced light per #698); an explicit ColorMode always wins. The Settings dialog offers the three choices in a dropdown, and startup maps System to SystemColorMode.System so follow-OS behavior is available again.
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #698
What
Replaces the boolean Dark Mode preference with a three-way Color mode setting:
SystemColorMode.Classic), ignores the Windows themeSystemColorMode.Dark)SystemColorMode.System)The Settings dialog now shows a "Color mode (restart required)" dropdown in the Defaults group instead of the old checkbox (labels localized in en/de/zh-CN).
Why
#698: with the old bool, unchecked used to mean "follow the OS", so users on a dark Windows theme could never force light mode. The interim fix mapped unchecked to forced light — which in turn made "follow the OS" unreachable. The enum offers all three behaviors explicitly.
Migration
ColorModeis stored as a string ("Light"/"Dark"/"System") via the sameStringEnumConverterpattern as the other settings enums.hilightGroupList):DarkMode: true→Dark,DarkMode: false→Light(unchecked meant forced light per the ruling on Support for Light mode #698).ColorModekey always wins over a leftoverDarkModekey, regardless of JSON key order; the legacy key is never written back.Light, preserving current behavior bit-for-bit.Tests
Six new NUnit tests (
PreferencesColorModeTests) cover legacy migration in both directions, the default, key-order precedence, and serialization round-trip. Full suite: 1057 passed, 0 failed.