https://bugs.winehq.org/show_bug.cgi?id=55742
-- v3: uxtheme: Add ShouldAppsUseDarkMode.
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
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=138953
Your paranoid android.
=== debian11b (64 bit WoW report) ===
ws2_32: protocol.c:2476: Test succeeded inside todo block: IPv6 address is returned. protocol.c:2494: Test succeeded inside todo block: Test 0: IPv6 address is returned. protocol.c:2494: Test succeeded inside todo block: Test 1: IPv6 address is returned. protocol.c:2494: Test succeeded inside todo block: Test 2: IPv6 address is returned. protocol.c:2494: Test succeeded inside todo block: Test 3: IPv6 address is returned. protocol.c:2494: Test succeeded inside todo block: Test 4: IPv6 address is returned. protocol.c:2494: Test succeeded inside todo block: Test 5: IPv6 address is returned. protocol.c:2494: Test succeeded inside todo block: Test 12: IPv6 address is returned. protocol.c:2494: Test succeeded inside todo block: Test 13: IPv6 address is returned. protocol.c:2494: Test succeeded inside todo block: Test 14: IPv6 address is returned. protocol.c:2494: Test succeeded inside todo block: Test 15: IPv6 address is returned. protocol.c:2494: Test succeeded inside todo block: Test 16: IPv6 address is returned. protocol.c:2494: Test succeeded inside todo block: Test 28: IPv6 address is returned. protocol.c:2494: Test succeeded inside todo block: Test 29: IPv6 address is returned.
Hi, looks like you did it! Could you please add the Wine-Bug: tag as well?