1
0
mirror of https://github.com/wine-mirror/wine synced 2024-07-01 07:14:31 +00:00

uxtheme: Add ShouldSystemUseDarkMode.

This commit is contained in:
Helix Graziani 2023-09-26 20:03:44 -04:00 committed by Alexandre Julliard
parent 26471dd00e
commit 91e54e5f6d
3 changed files with 51 additions and 0 deletions

View File

@ -1256,3 +1256,20 @@ BOOL WINAPI ThemeHooksRemove(void)
UnregisterUserApiHook();
return TRUE;
}
/**********************************************************************
* ShouldSystemUseDarkMode (UXTHEME.138)
*
* RETURNS
* Whether or not the system should use dark mode.
*/
BOOL WINAPI ShouldSystemUseDarkMode(void)
{
DWORD light_theme = TRUE, light_theme_size = sizeof(light_theme);
RegGetValueW(HKEY_CURRENT_USER,
L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize",
L"SystemUsesLightTheme", RRF_RT_REG_DWORD, NULL, &light_theme, &light_theme_size);
return !light_theme;
}

View File

@ -48,6 +48,7 @@ static HDC (WINAPI *pGetBufferedPaintTargetDC)(HPAINTBUFFER);
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 LONG (WINAPI *pDisplayConfigGetDeviceInfo)(DISPLAYCONFIG_DEVICE_INFO_HEADER *);
static LONG (WINAPI *pDisplayConfigSetDeviceInfo)(DISPLAYCONFIG_DEVICE_INFO_HEADER *);
@ -74,6 +75,8 @@ static void init_funcs(void)
HMODULE gdi32 = GetModuleHandleA("gdi32.dll");
HMODULE uxtheme = GetModuleHandleA("uxtheme.dll");
pShouldSystemUseDarkMode = (void *)GetProcAddress(uxtheme, MAKEINTRESOURCEA(138));
#define GET_PROC(module, func) \
p##func = (void *)GetProcAddress(module, #func); \
if (!p##func) \
@ -2597,6 +2600,35 @@ static void test_theme(void)
DestroyWindow(hwnd);
}
static void test_ShouldSystemUseDarkMode(void)
{
DWORD light_theme, light_theme_size = sizeof(light_theme), last_error;
BOOL result;
LSTATUS ls;
if (!pShouldSystemUseDarkMode)
{
win_skip("ShouldSystemUseDarkMode() is unavailable.\n");
return;
}
ls = RegGetValueW(HKEY_CURRENT_USER,
L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize",
L"SystemUsesLightTheme", RRF_RT_REG_DWORD, NULL, &light_theme, &light_theme_size);
if (ls == ERROR_FILE_NOT_FOUND)
{
light_theme = 1;
ls = 0;
}
ok(ls == 0, "RegGetValue failed: %ld.\n", ls);
SetLastError(0xdeadbeef);
result = pShouldSystemUseDarkMode();
last_error = GetLastError();
ok(last_error == 0xdeadbeef, "ShouldSystemUseDarkMode 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;
@ -2622,6 +2654,7 @@ START_TEST(system)
test_DrawThemeBackgroundEx();
test_GetThemeBackgroundRegion();
test_theme();
test_ShouldSystemUseDarkMode();
if (load_v6_module(&ctx_cookie, &ctx))
{

View File

@ -42,6 +42,7 @@
61 stdcall OpenThemeDataEx(ptr wstr long)
62 stub -noname ServerClearStockObjects
63 stub -noname MarkSelection
138 stdcall -noname ShouldSystemUseDarkMode()
# Standard functions
@ stdcall BeginBufferedAnimation(ptr ptr ptr long ptr ptr ptr ptr)