Skip to content

Commit 25c003b

Browse files
committed
Add dark theme tooltip support winsiderss#98
1 parent 7db3dfc commit 25c003b

File tree

1 file changed

+68
-13
lines changed

1 file changed

+68
-13
lines changed

phlib/theme.c

Lines changed: 68 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -353,18 +353,39 @@ VOID PhInitializeThemeWindowFrame(
353353
_In_ HWND WindowHandle
354354
)
355355
{
356+
#define DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1 19
357+
#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE
358+
#define DWMWA_USE_IMMERSIVE_DARK_MODE 20
359+
#endif
360+
356361
if (WindowsVersion >= WINDOWS_10_RS5 && DwmSetWindowAttribute_I)
357362
{
358363
switch (PhpThemeColorMode)
359364
{
360365
case 0: // New colors
361-
DwmSetWindowAttribute_I(WindowHandle, 0x13, &(BOOL){ FALSE }, sizeof(BOOL));
366+
{
367+
if (FAILED(DwmSetWindowAttribute_I(WindowHandle, DWMWA_USE_IMMERSIVE_DARK_MODE, &(BOOL){ FALSE }, sizeof(BOOL))))
368+
{
369+
DwmSetWindowAttribute_I(WindowHandle, DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1, &(BOOL){ FALSE }, sizeof(BOOL));
370+
}
371+
}
362372
break;
363373
case 1: // Old colors
364-
DwmSetWindowAttribute_I(WindowHandle, 0x13, &(BOOL){ TRUE }, sizeof(BOOL));
374+
{
375+
if (FAILED(DwmSetWindowAttribute_I(WindowHandle, DWMWA_USE_IMMERSIVE_DARK_MODE, &(BOOL){ TRUE }, sizeof(BOOL))))
376+
{
377+
DwmSetWindowAttribute_I(WindowHandle, DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1, &(BOOL){ TRUE }, sizeof(BOOL));
378+
}
379+
}
365380
break;
366381
}
367382
}
383+
384+
//WINDOWCOMPOSITIONATTRIBDATA data;
385+
//data.Attrib = WCA_USEDARKMODECOLORS;
386+
//data.pvData = &(BOOL){ TRUE };
387+
//data.cbData = sizeof(BOOL);
388+
//SetWindowCompositionAttribute(WindowHandle, &data);
368389
}
369390

370391
VOID PhInitializeThemeWindowHeader(
@@ -478,26 +499,26 @@ BOOLEAN CALLBACK PhpThemeWindowEnumChildWindows(
478499
{
479500
PhInitializeWindowTheme(WindowHandle, TRUE);
480501
}
481-
else if (PhEqualStringZ(windowClassName, L"Button", FALSE))
502+
else if (PhEqualStringZ(windowClassName, WC_BUTTON, FALSE))
482503
{
483504
if ((PhGetWindowStyle(WindowHandle) & BS_GROUPBOX) == BS_GROUPBOX)
484505
{
485506
PhInitializeThemeWindowGroupBox(WindowHandle);
486507
}
487508
}
488-
else if (PhEqualStringZ(windowClassName, L"SysTabControl32", FALSE))
509+
else if (PhEqualStringZ(windowClassName, WC_TABCONTROL, FALSE))
489510
{
490511
PhInitializeThemeWindowTabControl(WindowHandle);
491512
}
492-
else if (PhEqualStringZ(windowClassName, L"msctls_statusbar32", FALSE))
513+
else if (PhEqualStringZ(windowClassName, STATUSCLASSNAME, FALSE))
493514
{
494515
PhInitializeWindowThemeStatusBar(WindowHandle);
495516
}
496-
else if (PhEqualStringZ(windowClassName, L"Edit", TRUE))
517+
else if (PhEqualStringZ(windowClassName, WC_EDIT, TRUE))
497518
{
498519
PhInitializeThemeWindowEditControl(WindowHandle);
499520
}
500-
else if (PhEqualStringZ(windowClassName, L"ScrollBar", FALSE))
521+
else if (PhEqualStringZ(windowClassName, WC_SCROLLBAR, FALSE))
501522
{
502523
if (WindowsVersion >= WINDOWS_10_RS5)
503524
{
@@ -512,21 +533,25 @@ BOOLEAN CALLBACK PhpThemeWindowEnumChildWindows(
512533
}
513534
}
514535
}
515-
else if (PhEqualStringZ(windowClassName, L"SysHeader32", TRUE))
536+
else if (PhEqualStringZ(windowClassName, WC_HEADER, TRUE))
516537
{
517538
PhInitializeThemeWindowHeader(WindowHandle);
518539
}
519-
else if (PhEqualStringZ(windowClassName, L"SysListView32", FALSE))
540+
else if (PhEqualStringZ(windowClassName, WC_LISTVIEW, FALSE))
520541
{
521542
if (WindowsVersion >= WINDOWS_10_RS5)
522543
{
544+
HWND tooltipWindow = ListView_GetToolTips(WindowHandle);
545+
523546
switch (PhpThemeColorMode)
524547
{
525548
case 0: // New colors
526549
PhSetControlTheme(WindowHandle, L"explorer");
550+
PhSetControlTheme(tooltipWindow, L"");
527551
break;
528552
case 1: // Old colors
529553
PhSetControlTheme(WindowHandle, L"DarkMode_Explorer");
554+
PhSetControlTheme(tooltipWindow, L"DarkMode_Explorer");
530555
break;
531556
}
532557
}
@@ -560,8 +585,23 @@ BOOLEAN CALLBACK PhpThemeWindowEnumChildWindows(
560585

561586
//InvalidateRect(WindowHandle, NULL, FALSE);
562587
}
563-
else if (PhEqualStringZ(windowClassName, L"SysTreeView32", FALSE))
588+
else if (PhEqualStringZ(windowClassName, WC_TREEVIEW, FALSE))
564589
{
590+
if (WindowsVersion >= WINDOWS_10_RS5)
591+
{
592+
HWND tooltipWindow = TreeView_GetToolTips(WindowHandle);
593+
594+
switch (PhpThemeColorMode)
595+
{
596+
case 0: // New colors
597+
PhSetControlTheme(tooltipWindow, L"");
598+
break;
599+
case 1: // Old colors
600+
PhSetControlTheme(tooltipWindow, L"DarkMode_Explorer");
601+
break;
602+
}
603+
}
604+
565605
switch (PhpThemeColorMode)
566606
{
567607
case 0: // New colors
@@ -599,6 +639,21 @@ BOOLEAN CALLBACK PhpThemeWindowEnumChildWindows(
599639
}
600640
else if (PhEqualStringZ(windowClassName, L"PhTreeNew", FALSE))
601641
{
642+
if (WindowsVersion >= WINDOWS_10_RS5)
643+
{
644+
HWND tooltipWindow = TreeNew_GetTooltips(WindowHandle);
645+
646+
switch (PhpThemeColorMode)
647+
{
648+
case 0: // New colors
649+
PhSetControlTheme(tooltipWindow, L"");
650+
break;
651+
case 1: // Old colors
652+
PhSetControlTheme(tooltipWindow, L"DarkMode_Explorer");
653+
break;
654+
}
655+
}
656+
602657
if (PhpThemeBorderEnable)
603658
PhSetWindowExStyle(WindowHandle, WS_EX_CLIENTEDGE, WS_EX_CLIENTEDGE);
604659
else
@@ -641,7 +696,7 @@ BOOLEAN CALLBACK PhpReInitializeThemeWindowEnumChildWindows(
641696

642697
//dprintf("PhpReInitializeThemeWindowEnumChildWindows: %S\r\n", windowClassName);
643698

644-
if (PhEqualStringZ(windowClassName, L"SysListView32", FALSE))
699+
if (PhEqualStringZ(windowClassName, WC_LISTVIEW, FALSE))
645700
{
646701
if (WindowsVersion >= WINDOWS_10_RS5)
647702
{
@@ -670,7 +725,7 @@ BOOLEAN CALLBACK PhpReInitializeThemeWindowEnumChildWindows(
670725
break;
671726
}
672727
}
673-
else if (PhEqualStringZ(windowClassName, L"ScrollBar", FALSE))
728+
else if (PhEqualStringZ(windowClassName, WC_SCROLLBAR, FALSE))
674729
{
675730
if (WindowsVersion >= WINDOWS_10_RS5)
676731
{
@@ -697,7 +752,7 @@ BOOLEAN CALLBACK PhpReInitializeThemeWindowEnumChildWindows(
697752
break;
698753
}
699754
}
700-
else if (PhEqualStringZ(windowClassName, L"Edit", FALSE))
755+
else if (PhEqualStringZ(windowClassName, WC_EDIT, FALSE))
701756
{
702757
SendMessage(WindowHandle, WM_THEMECHANGED, 0, 0); // searchbox.c
703758
}

0 commit comments

Comments
 (0)