diff --git a/dlls/comctl32/button.c b/dlls/comctl32/button.c index 0a8bdf17139..0078bd0fc61 100644 --- a/dlls/comctl32/button.c +++ b/dlls/comctl32/button.c @@ -815,7 +815,12 @@ static LRESULT CALLBACK BUTTON_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, L case WM_SETFOCUS: TRACE("WM_SETFOCUS %p\n",hWnd); infoPtr->state |= BST_FOCUS; - paint_button( infoPtr, btn_type, ODA_FOCUS ); + + if (btn_type == BS_OWNERDRAW) + paint_button( infoPtr, btn_type, ODA_FOCUS ); + else + InvalidateRect(hWnd, NULL, FALSE); + if (style & BS_NOTIFY) BUTTON_NOTIFY_PARENT(hWnd, BN_SETFOCUS); break; diff --git a/dlls/comctl32/tests/button.c b/dlls/comctl32/tests/button.c index e7789dc29a2..dd05a98d2dd 100644 --- a/dlls/comctl32/tests/button.c +++ b/dlls/comctl32/tests/button.c @@ -782,12 +782,11 @@ static void test_button_messages(void) set_test_cd_ret(CDRF_DODEFAULT); set_test_cd_state(CDIS_FOCUS); - todo = button[i].style != BS_OWNERDRAW; ok(GetFocus() == 0, "expected focus 0, got %p\n", GetFocus()); SetFocus(hwnd); SendMessageA(hwnd, WM_APP, 0, 0); /* place a separator mark here */ while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) DispatchMessageA(&msg); - ok_sequence(sequences, COMBINED_SEQ_INDEX, button[i].setfocus, "SetFocus(hwnd) on a button", todo); + ok_sequence(sequences, COMBINED_SEQ_INDEX, button[i].setfocus, "SetFocus(hwnd) on a button", FALSE); check_cd_seq(cd_setfocus_type, "SetFocus(hwnd)"); set_test_cd_state(0);