# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1564752758 0 # Node ID 8cf330e1e331cf284649fb558b649f05aafe2d70 # Parent 2322769acf885dfc34388b733bcfe5574a25d70e Win: Basic dark mode support functioning and enabled, the title bar and menus and file dialogs now obey the system dark mode setting for Apps. diff -r 2322769acf88 -r 8cf330e1e331 win/dw.c --- a/win/dw.c Fri Aug 02 00:44:52 2019 +0000 +++ b/win/dw.c Fri Aug 02 13:32:38 2019 +0000 @@ -673,7 +673,7 @@ #endif #ifdef AEROGLASS -int _DW_DARK_MODE_ALLOWED = FALSE; +int _DW_DARK_MODE_ALLOWED = TRUE; int _DW_DARK_MODE_SUPPORTED = FALSE; int _DW_DARK_MODE_ENABLED = FALSE; @@ -726,8 +726,12 @@ (_AllowDarkModeForApp || _SetPreferredAppMode) && _IsDarkModeAllowedForWindow && _DwmSetWindowAttribute) { _DW_DARK_MODE_SUPPORTED = TRUE; - _AllowDarkModeForApp(TRUE); + if(_AllowDarkModeForApp) + _AllowDarkModeForApp(TRUE); + else + _SetPreferredAppMode(_AllowDark); _RefreshImmersiveColorPolicyState(); + _DW_DARK_MODE_ENABLED = _ShouldAppsUseDarkMode() && !IsHighContrast(); } } } @@ -771,7 +775,10 @@ BOOL CALLBACK _dw_set_child_window_theme(HWND window, LPARAM lParam) { if(_DW_DARK_MODE_SUPPORTED) + { AllowDarkModeForWindow(window, _DW_DARK_MODE_ENABLED); + SendMessageW(window, WM_THEMECHANGED, 0, 0); + } return TRUE; } #endif @@ -2305,16 +2312,12 @@ case WM_SETTINGCHANGE: { if(_DW_DARK_MODE_SUPPORTED && IsColorSchemeChangeMessage(mp2)) - SendMessageW(hWnd, WM_THEMECHANGED, 0, 0); - } - break; - case WM_THEMECHANGED: - { - if(_DW_DARK_MODE_SUPPORTED) - { - _AllowDarkModeForWindow(hWnd, _DW_DARK_MODE_ENABLED); - if(GetParent(hWnd) == HWND_DESKTOP) - RefreshTitleBarThemeColor(hWnd); + { + _DW_DARK_MODE_ENABLED = _ShouldAppsUseDarkMode() && !IsHighContrast(); + + RefreshTitleBarThemeColor(hWnd); + _dw_set_child_window_theme(hWnd, 0); + EnumChildWindows(hWnd, _dw_set_child_window_theme, 0); } } break; @@ -4369,9 +4372,16 @@ int rc; RECT rect; - /* Try to enable dark mode support if our OS supports it */ - _dw_set_child_window_theme(handle, 0); - EnumChildWindows(handle, _dw_set_child_window_theme, 0); +#ifdef AEROGLASS + if(_DW_DARK_MODE_SUPPORTED) + { + /* Try to enable dark mode support if our OS supports it */ + _dw_set_child_window_theme(handle, 0); + EnumChildWindows(handle, _dw_set_child_window_theme, 0); + if(GetParent(handle) == HWND_DESKTOP) + RefreshTitleBarThemeColor(handle); + } +#endif GetClientRect(handle, &rect);