mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-01 18:58:29 +00:00
uxtheme: Add ShouldSystemUseDarkMode.
This commit is contained in:
parent
26471dd00e
commit
91e54e5f6d
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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))
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue