]10;aquamarine4diff --git a/src/winmain.c b/src/winmain.c index 8d221b4..20f219b 100644 --- a/src/winmain.c +++ b/src/winmain.c @@ -193,7 +193,8 @@ static HRESULT (WINAPI * pSetWindowCompositionAttribute)(HWND, void *) = 0; static BOOL (WINAPI * pSystemParametersInfo)(UINT, UINT, PVOID, UINT) = 0; static BOOLEAN (WINAPI * pShouldAppsUseDarkMode)(void) = 0; /* undocumented */ -static BOOLEAN (WINAPI * pShouldSystUseDarkMode)(void) = 0; /* undocumented */ +static BOOLEAN (WINAPI * pAllowDarkModeForApp)(BOOLEAN) = 0; /* undocumented */ +static void (WINAPI * pFlushMenuThemes)(void) = 0; /* undocumented */ static HRESULT (WINAPI * pSetWindowTheme)(HWND, const wchar_t *, const wchar_t *) = 0; #define HTHEME HANDLE @@ -243,10 +244,13 @@ load_dwm_funcs(void) if (uxtheme) { pShouldAppsUseDarkMode = (void *)GetProcAddress(uxtheme, MAKEINTRESOURCEA(132)); /* ordinal */ - pShouldSystUseDarkMode = - (void *)GetProcAddress(uxtheme, MAKEINTRESOURCEA(138)); /* ordinal */ + pAllowDarkModeForApp = + (void *)GetProcAddress(uxtheme, MAKEINTRESOURCEA(135)); /* ordinal */ + pFlushMenuThemes = + (void *)GetProcAddress(uxtheme, MAKEINTRESOURCEA(136)); /* ordinal */ pSetWindowTheme = (void *)GetProcAddress(uxtheme, "SetWindowTheme"); + pOpenThemeData = (void *)GetProcAddress(uxtheme, "OpenThemeData"); pCloseThemeData = @@ -4937,19 +4941,23 @@ main(int argc, char *argv[]) trace_winsize("createwindow"); // Dark mode support - if (pShouldSystUseDarkMode) { + if (pAllowDarkModeForApp) + pAllowDarkModeForApp(1); + if (pShouldAppsUseDarkMode) { HIGHCONTRASTW hc; hc.cbSize = sizeof hc; pSystemParametersInfo(SPI_GETHIGHCONTRAST, sizeof hc, &hc, 0); //printf("High Contrast scheme <%ls>\n", hc.lpszDefaultScheme); - if (!(hc.dwFlags & HCF_HIGHCONTRASTON) && pShouldSystUseDarkMode()) { + if (!(hc.dwFlags & HCF_HIGHCONTRASTON) && pShouldAppsUseDarkMode()) { pSetWindowTheme(wnd, W("DarkMode_Explorer"), NULL); BOOL dark = 1; // set DWMWA_USE_IMMERSIVE_DARK_MODE - pDwmSetWindowAttribute(wnd, 20, &dark, sizeof dark); - pDwmSetWindowAttribute(wnd, 19, &dark, sizeof dark); + if (pDwmSetWindowAttribute(wnd, 20, &dark, sizeof dark)) + pDwmSetWindowAttribute(wnd, 19, &dark, sizeof dark); + if (0 && pFlushMenuThemes) + pFlushMenuThemes(); } } ]110