changeset 1970:8cf330e1e331

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.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Fri, 02 Aug 2019 13:32:38 +0000
parents 2322769acf88
children d39f4f9bed26
files win/dw.c
diffstat 1 files changed, 25 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- 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);