From: Louis Lenders xerox.xerox2000x@gmail.com
https://bugs.winehq.org/show_bug.cgi?id=55821 --- dlls/uxtheme/system.c | 17 +++++++++++++++++ dlls/uxtheme/tests/system.c | 32 ++++++++++++++++++++++++++++++++ dlls/uxtheme/uxtheme.spec | 1 + 3 files changed, 50 insertions(+)
diff --git a/dlls/uxtheme/system.c b/dlls/uxtheme/system.c index 156051406e3..f1a4d0d5566 100644 --- a/dlls/uxtheme/system.c +++ b/dlls/uxtheme/system.c @@ -1273,3 +1273,20 @@ BOOL WINAPI ShouldSystemUseDarkMode(void)
return !light_theme; } + +/********************************************************************** + * ShouldAppsUseDarkMode (UXTHEME.132) + * + * RETURNS + * Whether or not apps should use dark mode. + */ +BOOL WINAPI ShouldAppsUseDarkMode(void) +{ + DWORD light_theme = TRUE, light_theme_size = sizeof(light_theme); + + RegGetValueW(HKEY_CURRENT_USER, + L"Software\Microsoft\Windows\CurrentVersion\Themes\Personalize", + L"AppsUseLightTheme", RRF_RT_REG_DWORD, NULL, &light_theme, &light_theme_size); + + return !light_theme; +} diff --git a/dlls/uxtheme/tests/system.c b/dlls/uxtheme/tests/system.c index 197cd86f6b6..c5fc19dd86a 100644 --- a/dlls/uxtheme/tests/system.c +++ b/dlls/uxtheme/tests/system.c @@ -49,6 +49,7 @@ static HRESULT (WINAPI *pGetBufferedPaintTargetRect)(HPAINTBUFFER, RECT *); static HRESULT (WINAPI *pGetThemeIntList)(HTHEME, int, int, int, INTLIST *); static HRESULT (WINAPI *pGetThemeTransitionDuration)(HTHEME, int, int, int, int, DWORD *); static BOOL (WINAPI *pShouldSystemUseDarkMode)(void); +static BOOL (WINAPI *pShouldAppsUseDarkMode)(void);
static LONG (WINAPI *pDisplayConfigGetDeviceInfo)(DISPLAYCONFIG_DEVICE_INFO_HEADER *); static LONG (WINAPI *pDisplayConfigSetDeviceInfo)(DISPLAYCONFIG_DEVICE_INFO_HEADER *); @@ -76,6 +77,7 @@ static void init_funcs(void) HMODULE uxtheme = GetModuleHandleA("uxtheme.dll");
pShouldSystemUseDarkMode = (void *)GetProcAddress(uxtheme, MAKEINTRESOURCEA(138)); + pShouldAppsUseDarkMode = (void *)GetProcAddress(uxtheme, MAKEINTRESOURCEA(132));
#define GET_PROC(module, func) \ p##func = (void *)GetProcAddress(module, #func); \ @@ -2629,6 +2631,35 @@ static void test_ShouldSystemUseDarkMode(void) ok(result == !light_theme, "Expected value %d, got %d.\n", !light_theme, result); }
+static void test_ShouldAppsUseDarkMode(void) +{ + DWORD light_theme, light_theme_size = sizeof(light_theme), last_error; + BOOL result; + LSTATUS ls; + + if (!pShouldAppsUseDarkMode) + { + win_skip("ShouldAppsUseDarkMode() is unavailable\n"); + return; + } + + ls = RegGetValueW(HKEY_CURRENT_USER, + L"Software\Microsoft\Windows\CurrentVersion\Themes\Personalize", + L"AppsUseLightTheme", RRF_RT_REG_DWORD, NULL, &light_theme, &light_theme_size); + if (ls == ERROR_FILE_NOT_FOUND) + { + skip("AppsUseLightTheme registry value not found.\n"); + return; + } + ok(ls == 0, "RegGetValue failed: %ld.\n", ls); + + SetLastError(0xdeadbeef); + result = pShouldAppsUseDarkMode(); + last_error = GetLastError(); + ok(last_error == 0xdeadbeef, "ShouldAppsUseDarkMode set last error: %ld.\n", last_error); + ok(result == !light_theme, "Expected value %d, got %d\n", !light_theme, result); +} + START_TEST(system) { ULONG_PTR ctx_cookie; @@ -2655,6 +2686,7 @@ START_TEST(system) test_GetThemeBackgroundRegion(); test_theme(); test_ShouldSystemUseDarkMode(); + test_ShouldAppsUseDarkMode();
if (load_v6_module(&ctx_cookie, &ctx)) { diff --git a/dlls/uxtheme/uxtheme.spec b/dlls/uxtheme/uxtheme.spec index a5bfb88c49a..d31621e11a7 100644 --- a/dlls/uxtheme/uxtheme.spec +++ b/dlls/uxtheme/uxtheme.spec @@ -42,6 +42,7 @@ 61 stdcall OpenThemeDataEx(ptr wstr long) 62 stub -noname ServerClearStockObjects 63 stub -noname MarkSelection +132 stdcall -noname ShouldAppsUseDarkMode() 138 stdcall -noname ShouldSystemUseDarkMode()
# Standard functions