From: Joachim Henze Date: Sun, 22 Sep 2019 19:17:10 +0000 (+0200) Subject: [COMCTL32] Workaround v6 button redraw regressions CORE-13278 & CORE-16093 X-Git-Tag: 0.4.14-dev~32 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=a40331b0f4c0a423fae101dfc976376d7c7db647 [COMCTL32] Workaround v6 button redraw regressions CORE-13278 & CORE-16093 Most likely not correct, as it breaks comctl32:buttonv6 tests https://reactos.org/testman/compare.php?ids=68146,68147 But greatly eliminates perceived flickering when hovering with the mouse about buttons in unthemed mode. We suffered from these regressions for years and nobody did find a proper solution, therefore it's time to at least workaround them. The patch did not expose any new real-world-issues after I retested the whole rapps suite against it in 0.4.12RCs. I committed the same workaround already into 0.4.12-RC-30-g 9513c9bf12926e82c6956910366e661539789933 CORE-13278 was once introduced/unhidden by SVN 73806 == c607de714cefce7ce0acc2cdf15837f3bcf3d6dd CORE-16093 was once introduced/unhidden by SVN 74149 == 301c47607451bbf47331983f842cb9470bfe53e5 --- diff --git a/dll/win32/comctl32/button.c b/dll/win32/comctl32/button.c index 1b345180870..37dab409b0d 100644 --- a/dll/win32/comctl32/button.c +++ b/dll/win32/comctl32/button.c @@ -842,7 +842,9 @@ static LRESULT CALLBACK BUTTON_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, L nmhotitem.dwFlags = HICF_ENTERING; SendMessageW(GetParent(hWnd), WM_NOTIFY, nmhotitem.hdr.idFrom, (LPARAM)&nmhotitem); - InvalidateRect(hWnd, NULL, TRUE); + theme = GetWindowTheme( hWnd ); + if (theme) + InvalidateRect(hWnd, NULL, TRUE); } if(!TrackMouseEvent(&mouse_event) || !(mouse_event.dwFlags&TME_LEAVE)) @@ -896,7 +898,9 @@ static LRESULT CALLBACK BUTTON_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, L nmhotitem.dwFlags = HICF_LEAVING; SendMessageW(GetParent(hWnd), WM_NOTIFY, nmhotitem.hdr.idFrom, (LPARAM)&nmhotitem); - InvalidateRect(hWnd, NULL, TRUE); + theme = GetWindowTheme( hWnd ); + if (theme) + InvalidateRect(hWnd, NULL, TRUE); } break; #else