bool g_darkModeSupported = false;
bool g_darkModeEnabled = false;
int darkModeForced = 0;
+int darkModeDetect = 0;
DWORD g_buildNumber = 0;
fnSetWindowCompositionAttribute _SetWindowCompositionAttribute = nullptr;
COLORREF dark_text_color, dark_bg_color;
+int GetAppDarkModeState(void)
+{
+ if (!_ShouldAppsUseDarkMode) {
+ return -1;
+ }
+ return _ShouldAppsUseDarkMode() ? 1 : 0;
+}
+
bool AllowDarkModeForWindow(HWND hWnd, bool allow)
{
if (g_darkModeSupported)
{
g_darkModeSupported = true;
- if (darkModeForced > 0) {
- AllowDarkModeForApp(PreferredAppMode::ForceDark);
- } else if (darkModeForced < 0) {
- AllowDarkModeForApp(PreferredAppMode::ForceLight);
- } else if (enable == -1 || enable == 1) {
- AllowDarkModeForApp(PreferredAppMode::AllowDark);
- } else {
- AllowDarkModeForApp(PreferredAppMode::Default);
+ if (!darkModeDetect) {
+ if (darkModeForced > 0) {
+ AllowDarkModeForApp(PreferredAppMode::ForceDark);
+ } else if (darkModeForced < 0) {
+ AllowDarkModeForApp(PreferredAppMode::ForceLight);
+ } else if (enable == -1 || enable == 1) {
+ AllowDarkModeForApp(PreferredAppMode::AllowDark);
+ } else {
+ AllowDarkModeForApp(PreferredAppMode::Default);
+ }
+ } else if (darkModeDetect < 0) {
+ if (_ShouldAppsUseDarkMode()) {
+ AllowDarkModeForApp(PreferredAppMode::ForceDark);
+ } else {
+ AllowDarkModeForApp(PreferredAppMode::ForceLight);
+ }
}
+
_RefreshImmersiveColorPolicyState();
g_darkModeEnabled = _ShouldAppsUseDarkMode() && !IsHighContrast();
if (g_darkModeEnabled && enable < -1) {
- AllowDarkModeForApp(PreferredAppMode::ForceDark);
+ if (darkModeDetect < 0) {
+ AllowDarkModeForApp(PreferredAppMode::ForceDark);
+ }
}
if (!g_darkModeEnabled && enable > 0 && darkModeForced >= 0) {
- AllowDarkModeForApp(PreferredAppMode::ForceDark);
+ if (darkModeDetect < 0) {
+ AllowDarkModeForApp(PreferredAppMode::ForceDark);
+ }
_RefreshImmersiveColorPolicyState();
g_darkModeEnabled = _ShouldAppsUseDarkMode() && !IsHighContrast();
}
}
if (!enable && g_darkModeSupported) {
- AllowDarkModeForApp(PreferredAppMode::Default);
+ if (darkModeDetect < 0) {
+ AllowDarkModeForApp(PreferredAppMode::Default);
+ }
if (_RefreshImmersiveColorPolicyState != NULL) {
_RefreshImmersiveColorPolicyState();
}
extern bool g_darkModeSupported;
extern bool g_darkModeEnabled;
-extern int darkModeForced;
+extern int darkModeForced, darkModeDetect;
extern COLORREF dark_text_color, dark_bg_color;;
bool AllowDarkModeForWindow(HWND hWnd, bool allow);
void SubclassListViewControl(HWND hListView);
void SubclassTreeViewControl(HWND hListView);
void SubclassButtonControl(HWND hwnd);
-void SubClassStatusBar(HWND hwnd);
\ No newline at end of file
+void SubClassStatusBar(HWND hwnd);
+int GetAppDarkModeState(void);
darkModeForced = 1;
} else if (!_tcsicmp(np, _T("light"))) {
darkModeForced = -1;
+ } else if (!_tcsicmp(np, _T("default"))) {
+ darkModeDetect = -1;
}
return 2;
}
void InitializeDarkMode(void)
{
static int initialized = -10;
+ static int dmdetect = -10;
int v = -1;
regqueryint(NULL, _T("GUIDarkMode"), &v);
if (rp_isactive()) {
- v = -2;
+ darkModeDetect = 1;
+ }
+ if (darkModeDetect) {
+ int dms = GetAppDarkModeState();
+ if (dms != dmdetect) {
+ dmdetect = dms;
+ initialized = -10;
+ }
+ v = -1;
}
if (darkModeForced) {
v = 1;
}
-
if (initialized != v) {
InitDarkMode(v);
write_log("dark mode supported: %d enabled: %d\n", g_darkModeSupported, g_darkModeEnabled);