Zhiyi Zhang : comctl32/button: Use themed painting when possible for handling WM_SETTEXT.

Alexandre Julliard julliard at winehq.org
Wed Mar 3 15:47:30 CST 2021


Module: wine
Branch: master
Commit: 3c81ca838116bbe8021529b448be6ff37eb10a88
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=3c81ca838116bbe8021529b448be6ff37eb10a88

Author: Zhiyi Zhang <zzhang at codeweavers.com>
Date:   Wed Mar  3 14:48:44 2021 +0800

comctl32/button: Use themed painting when possible for handling WM_SETTEXT.

Fix an issue that themed buttons are drawn unthemed after receiving a
WM_SETTEXT message.

Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/comctl32/button.c       | 2 ++
 dlls/comctl32/tests/button.c | 3 +--
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/dlls/comctl32/button.c b/dlls/comctl32/button.c
index 0dcbb38d202..b5a9ee7f7f6 100644
--- a/dlls/comctl32/button.c
+++ b/dlls/comctl32/button.c
@@ -743,6 +743,8 @@ static LRESULT CALLBACK BUTTON_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, L
         DefWindowProcW( hWnd, WM_SETTEXT, wParam, lParam );
         if (btn_type == BS_GROUPBOX) /* Yes, only for BS_GROUPBOX */
             InvalidateRect( hWnd, NULL, TRUE );
+        else if (GetWindowTheme( hWnd ))
+            RedrawWindow( hWnd, NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW );
         else
             paint_button( infoPtr, btn_type, ODA_DRAWENTIRE );
         return 1; /* success. FIXME: check text length */
diff --git a/dlls/comctl32/tests/button.c b/dlls/comctl32/tests/button.c
index b5e145077e7..f30e9f665e5 100644
--- a/dlls/comctl32/tests/button.c
+++ b/dlls/comctl32/tests/button.c
@@ -2359,8 +2359,7 @@ static void test_visual(void)
         SelectObject(mem_dc2, mem_bitmap2);
         BitBlt(mem_dc2, 0, 0, width, height, button_dc, 0, 0, SRCCOPY);
 
-        todo_wine_if(type == BS_PUSHBOX || (is_theme_active && !(type == BS_OWNERDRAW
-                || type == BS_COMMANDLINK || type == BS_DEFCOMMANDLINK)))
+        todo_wine_if(type == BS_PUSHBOX || (is_theme_active && type == BS_GROUPBOX))
         ok(equal_dc(mem_dc1, mem_dc2, width, height), "Type %#x: Expected content unchanged.\n", type);
 
         DeleteObject(mem_bitmap2);




More information about the wine-cvs mailing list