From dfd11b53109bc65e52eeb98fe60cf667946e78a8 Mon Sep 17 00:00:00 2001 From: Dart Vanya Date: Thu, 12 Dec 2024 11:29:55 +0300 Subject: [PATCH] fix graph automatic theme switching --- SystemInformer/chdlg.c | 2 +- SystemInformer/mainwnd.c | 3 +++ SystemInformer/options.c | 11 ++++++----- phlib/colorbox.c | 3 ++- phlib/delayhook.c | 14 +++++++------- phlib/theme.c | 9 ++++++++- plugins/ExtendedTools/objprp.c | 9 +++++---- plugins/NetworkTools/whois.c | 21 --------------------- 8 files changed, 32 insertions(+), 40 deletions(-) diff --git a/SystemInformer/chdlg.c b/SystemInformer/chdlg.c index 812fcdabb079..d0388a53188d 100644 --- a/SystemInformer/chdlg.c +++ b/SystemInformer/chdlg.c @@ -570,7 +570,7 @@ INT_PTR CALLBACK PhChooseNewPageDlgProc( if (PhEnableThemeSupport) { - SetDCBrushColor(hdc, RGB(50, 50, 50)); + SetDCBrushColor(hdc, PhMakeColorBrighter(PhThemeWindowBackgroundColor, 7)); // RGB(50, 50, 50) FillRect(hdc, &clientRect, PhGetStockBrush(DC_BRUSH)); clientRect.bottom = clientRect.top + 1; SetDCBrushColor(hdc, PhThemeWindowForegroundColor); diff --git a/SystemInformer/mainwnd.c b/SystemInformer/mainwnd.c index b5915bee142b..b5590bf055f2 100644 --- a/SystemInformer/mainwnd.c +++ b/SystemInformer/mainwnd.c @@ -654,6 +654,9 @@ static NTSTATUS PhMwpReInitializeThemeThread( PhEnableThemeAcrylicWindowSupport = PhEnableThemeAcrylicWindowSupport && PhEnableThemeSupport && PhIsThemeTransparencyEnabled(); + PhSetIntegerSetting(L"GraphColorMode", PhEnableThemeSupport); // HACK switch to dark theme. (dmex) + PhCsGraphColorMode = PhGetIntegerSetting(L"GraphColorMode"); + PhReInitializeTheme(PhEnableThemeSupport); PhInvokeCallback(PhGetGeneralCallback(GeneralCallbackSettingsUpdated), NULL); diff --git a/SystemInformer/options.c b/SystemInformer/options.c index 8b3168db48eb..be5c5f3c685b 100644 --- a/SystemInformer/options.c +++ b/SystemInformer/options.c @@ -1554,6 +1554,12 @@ static VOID PhpOptionsNotifyChangeCallback( if (PhEnableThemeSupport != oldTheme || PhEnableThemeAcrylicWindowSupport != oldAcrylicWindowSupport) { + if (PhEnableThemeSupport != oldTheme) + { + PhSetIntegerSetting(L"GraphColorMode", PhEnableThemeSupport); // HACK switch to dark theme. (dmex) + PhCsGraphColorMode = PhGetIntegerSetting(L"GraphColorMode"); + } + PhReInitializeTheme(PhEnableThemeSupport); } @@ -1735,11 +1741,6 @@ static VOID PhpAdvancedPageSave( SetSettingForLvItemCheck(listViewHandle, PHP_OPTIONS_INDEX_PROPAGATE_CPU_USAGE, L"PropagateCpuUsage"); SetSettingForLvItemCheck(listViewHandle, PHP_OPTIONS_INDEX_SHOW_ADVANCED_OPTIONS, L"EnableAdvancedOptions"); - if (PhEnableThemeSupport) - { - PhSetIntegerSetting(L"GraphColorMode", 1); // HACK switch to dark theme. (dmex) - } - WriteCurrentUserRun( ListView_GetCheckState(listViewHandle, PHP_OPTIONS_INDEX_START_ATLOGON) == BST_CHECKED, ListView_GetCheckState(listViewHandle, PHP_OPTIONS_INDEX_START_HIDDEN) == BST_CHECKED diff --git a/phlib/colorbox.c b/phlib/colorbox.c index 870b80338b36..e7c773d7e24b 100644 --- a/phlib/colorbox.c +++ b/phlib/colorbox.c @@ -94,7 +94,8 @@ UINT_PTR CALLBACK PhpColorBoxDlgHookProc( PhCenterWindow(hwndDlg, GetParent(hwndDlg)); - PhInitializeWindowThemeEx(hwndDlg, !!context->EnableThemeSupport); + if (context->EnableThemeSupport) + PhInitializeWindowThemeEx(hwndDlg, TRUE); } break; case WM_CTLCOLORBTN: diff --git a/phlib/delayhook.c b/phlib/delayhook.c index fdf6df7f88f6..68e36fc6c08f 100644 --- a/phlib/delayhook.c +++ b/phlib/delayhook.c @@ -1850,15 +1850,15 @@ HRESULT CALLBACK ThemeTaskDialogCallbackHook( { HRESULT result = S_OK; - PTASKDIALOG_CALLBACK_WRAP CallbackData = (PTASKDIALOG_CALLBACK_WRAP)dwRefData; + PTASKDIALOG_CALLBACK_WRAP callbackData = (PTASKDIALOG_CALLBACK_WRAP)dwRefData; if (uMsg == TDN_DIALOG_CONSTRUCTED) // Called on each new page, including the first one. { PhInitializeTaskDialogTheme(hwndDlg, hwndDlg); } - if (CallbackData->pfCallback) - result = CallbackData->pfCallback(hwndDlg, uMsg, wParam, lParam, CallbackData->lpCallbackData); + if (callbackData->pfCallback) + result = callbackData->pfCallback(hwndDlg, uMsg, wParam, lParam, callbackData->lpCallbackData); return result; } @@ -1871,12 +1871,12 @@ HRESULT WINAPI PhTaskDialogIndirectHook( _Out_opt_ BOOL* pfVerificationFlagChecked ) { - TASKDIALOG_CALLBACK_WRAP CallbackData; - CallbackData.pfCallback = pTaskConfig->pfCallback; - CallbackData.lpCallbackData = pTaskConfig->lpCallbackData; + TASKDIALOG_CALLBACK_WRAP callbackData; + callbackData.pfCallback = pTaskConfig->pfCallback; + callbackData.lpCallbackData = pTaskConfig->lpCallbackData; TASKDIALOGCONFIG myConfig = *pTaskConfig; myConfig.pfCallback = ThemeTaskDialogCallbackHook; - myConfig.lpCallbackData = (LONG_PTR)&CallbackData; + myConfig.lpCallbackData = (LONG_PTR)&callbackData; return DefaultTaskDialogIndirect(&myConfig, pnButton, pnRadioButton, pfVerificationFlagChecked); } diff --git a/phlib/theme.c b/phlib/theme.c index 05e12150357d..536a9c5172b6 100644 --- a/phlib/theme.c +++ b/phlib/theme.c @@ -20,6 +20,7 @@ #include #include #include +#include typedef struct _PHP_THEME_WINDOW_TAB_CONTEXT { @@ -739,8 +740,14 @@ BOOLEAN CALLBACK PhpThemeWindowEnumChildWindows( SetWindowPos(WindowHandle, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOOWNERZORDER | SWP_FRAMECHANGED); -#define EM_SETBKGNDCOLOR (WM_USER + 67) + CHARFORMAT cf = { sizeof(CHARFORMAT) }; + cf.dwMask = CFM_COLOR; + cf.dwEffects = enableThemeSupport ? 0 : CFE_AUTOCOLOR; + if (enableThemeSupport) cf.crTextColor = PhThemeWindowTextColor; + SendMessage(WindowHandle, EM_SETBKGNDCOLOR, 0, enableThemeSupport ? PhMakeColorBrighter(PhThemeWindowForegroundColor, 2) : GetSysColor(COLOR_WINDOW)); // RGB(30, 30, 30) + SendMessage(WindowHandle, EM_SETCHARFORMAT, SCF_DEFAULT, (LPARAM)&cf); + PhWindowThemeSetDarkMode(WindowHandle, enableThemeSupport); } else if (PhEqualStringZ(windowClassName, PH_TREENEW_CLASSNAME, FALSE)) diff --git a/plugins/ExtendedTools/objprp.c b/plugins/ExtendedTools/objprp.c index 2dec3290cdef..03bb496434c6 100644 --- a/plugins/ExtendedTools/objprp.c +++ b/plugins/ExtendedTools/objprp.c @@ -271,6 +271,7 @@ typedef enum _ET_OBJECT_POOLTYPE { #define OBJECT_CHILD_HANDLEPROP_WINDOW 1 #define OBJECT_CORRECT_HANDLES_COUNT(real_count) ((ULONG)(real_count) - 1) +#define OBJECT_HANDLES_CONTEXT_TAG (ULONG)'OBJH' typedef struct _ET_GENERAL_PAGE_CONTEXT { WNDPROC OldWndProc; @@ -287,7 +288,7 @@ LRESULT CALLBACK EtpGeneralPageWindowSubclassProc( { PET_GENERAL_PAGE_CONTEXT context; - if (!(context = PhGetWindowContext(hWnd, 'OBJH'))) + if (!(context = PhGetWindowContext(hWnd, OBJECT_HANDLES_CONTEXT_TAG))) return FALSE; WNDPROC oldWndProc = context->OldWndProc; @@ -303,7 +304,7 @@ LRESULT CALLBACK EtpGeneralPageWindowSubclassProc( else if (uMsg == WM_NCDESTROY) { PhSetWindowProcedure(hWnd, oldWndProc); - PhRemoveWindowContext(hWnd, 'OBJH'); + PhRemoveWindowContext(hWnd, OBJECT_HANDLES_CONTEXT_TAG); PhFree(context); } @@ -312,7 +313,7 @@ LRESULT CALLBACK EtpGeneralPageWindowSubclassProc( VOID EtHandlePropertiesWindowInitialized( _In_ PVOID Parameter - ) +) { static INT EtListViewRowCache[OBJECT_GENERAL_INDEX_MAXIMUM]; @@ -340,7 +341,7 @@ VOID EtHandlePropertiesWindowInitialized( PET_GENERAL_PAGE_CONTEXT pageContext = PhAllocateZero(sizeof(ET_GENERAL_PAGE_CONTEXT)); pageContext->OldWndProc = PhGetWindowProcedure(generalPage); pageContext->ParentWindow = context->ParentWindow; - PhSetWindowContext(generalPage, 'OBJH', pageContext); + PhSetWindowContext(generalPage, OBJECT_HANDLES_CONTEXT_TAG, pageContext); PhSetWindowProcedure(generalPage, EtpGeneralPageWindowSubclassProc); EtObjectManagerShowHandlesPage = FALSE; diff --git a/plugins/NetworkTools/whois.c b/plugins/NetworkTools/whois.c index be40bbfbd085..3ae17f4bbb68 100644 --- a/plugins/NetworkTools/whois.c +++ b/plugins/NetworkTools/whois.c @@ -20,27 +20,6 @@ VOID RichEditSetText( _In_ PWSTR Text ) { - if (PhIsThemeSupportEnabled()) - { - CHARFORMAT cf; - - memset(&cf, 0, sizeof(CHARFORMAT)); - cf.cbSize = sizeof(CHARFORMAT); - cf.dwMask = CFM_COLOR; - - switch (PhGetIntegerSetting(L"GraphColorMode")) - { - case 0: // New colors - cf.crTextColor = RGB(0x0, 0x0, 0x0); - break; - case 1: // Old colors - cf.crTextColor = RGB(0xff, 0xff, 0xff); - break; - } - - SendMessage(RichEditHandle, EM_SETCHARFORMAT, SCF_DEFAULT, (LPARAM)&cf); - } - SetFocus(RichEditHandle); SendMessage(RichEditHandle, WM_SETREDRAW, FALSE, 0); SendMessage(RichEditHandle, EM_SETSEL, 0, -1); // -2