[PATCH 1/2] user32: Move the auto radio button group logic from BM_SETCHECK to WM_LBUTTONUP handler.
Dmitry Timoshkov
dmitry at baikal.ru
Sun Nov 25 11:58:00 CST 2018
This patch also changes the logic to get the control style with WM_GETDLGCODE
instead of GetWindowLong to make the message test pass.
Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
---
dlls/user32/button.c | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
diff --git a/dlls/user32/button.c b/dlls/user32/button.c
index 9255a46343..9a011ba266 100644
--- a/dlls/user32/button.c
+++ b/dlls/user32/button.c
@@ -309,7 +309,7 @@ LRESULT ButtonWndProc_common(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam,
SendMessageW( hWnd, BM_SETCHECK, !(state & BST_CHECKED), 0 );
break;
case BS_AUTORADIOBUTTON:
- SendMessageW( hWnd, BM_SETCHECK, TRUE, 0 );
+ BUTTON_CheckAutoRadioButton( hWnd );
break;
case BS_AUTO3STATE:
SendMessageW( hWnd, BM_SETCHECK,
@@ -475,8 +475,6 @@ LRESULT ButtonWndProc_common(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam,
set_button_state( hWnd, (state & ~3) | wParam );
paint_button( hWnd, btn_type, ODA_SELECT );
}
- if ((btn_type == BS_AUTORADIOBUTTON) && (wParam == BST_CHECKED) && (style & WS_CHILD))
- BUTTON_CheckAutoRadioButton( hWnd );
break;
case BM_GETSTATE:
@@ -961,13 +959,12 @@ static void BUTTON_CheckAutoRadioButton( HWND hwnd )
parent = GetParent(hwnd);
/* make sure that starting control is not disabled or invisible */
- start = sibling = GetNextDlgGroupItem( parent, hwnd, TRUE );
+ start = sibling = hwnd;
do
{
if (!sibling) break;
- if ((hwnd != sibling) &&
- ((GetWindowLongW( sibling, GWL_STYLE) & BS_TYPEMASK) == BS_AUTORADIOBUTTON))
- SendMessageW( sibling, BM_SETCHECK, BST_UNCHECKED, 0 );
+ if (SendMessageW( sibling, WM_GETDLGCODE, 0, 0 ) == (DLGC_BUTTON | DLGC_RADIOBUTTON))
+ SendMessageW( sibling, BM_SETCHECK, sibling == hwnd ? BST_CHECKED : BST_UNCHECKED, 0 );
sibling = GetNextDlgGroupItem( parent, sibling, FALSE );
} while (sibling != start);
}
--
2.17.1
More information about the wine-devel
mailing list