mirror of
https://gitlab.winehq.org/wine/wine.git
synced 2024-11-21 17:09:06 -07:00
comctl32: Send parent BN_CLICKED notification when a radio button get focused.
We need to make sure here that the button is marked pressed before it gets the focus. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56109
This commit is contained in:
parent
559f2c0bf6
commit
7f59af2684
2 changed files with 13 additions and 4 deletions
|
@ -628,15 +628,18 @@ static LRESULT CALLBACK BUTTON_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, L
|
||||||
}
|
}
|
||||||
/* fall through */
|
/* fall through */
|
||||||
case WM_LBUTTONDOWN:
|
case WM_LBUTTONDOWN:
|
||||||
|
infoPtr->state |= BUTTON_BTNPRESSED;
|
||||||
SetFocus( hWnd );
|
SetFocus( hWnd );
|
||||||
|
|
||||||
if ((btn_type == BS_SPLITBUTTON || btn_type == BS_DEFSPLITBUTTON) &&
|
if ((btn_type == BS_SPLITBUTTON || btn_type == BS_DEFSPLITBUTTON) &&
|
||||||
!(infoPtr->split_style & BCSS_NOSPLIT) &&
|
!(infoPtr->split_style & BCSS_NOSPLIT) &&
|
||||||
notify_split_button_dropdown(infoPtr, &pt, hWnd))
|
notify_split_button_dropdown(infoPtr, &pt, hWnd))
|
||||||
|
{
|
||||||
|
infoPtr->state &= ~BUTTON_BTNPRESSED;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
SetCapture( hWnd );
|
SetCapture( hWnd );
|
||||||
infoPtr->state |= BUTTON_BTNPRESSED;
|
|
||||||
SendMessageW( hWnd, BM_SETSTATE, TRUE, 0 );
|
SendMessageW( hWnd, BM_SETSTATE, TRUE, 0 );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -867,6 +870,12 @@ static LRESULT CALLBACK BUTTON_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, L
|
||||||
|
|
||||||
if (style & BS_NOTIFY)
|
if (style & BS_NOTIFY)
|
||||||
BUTTON_NOTIFY_PARENT(hWnd, BN_SETFOCUS);
|
BUTTON_NOTIFY_PARENT(hWnd, BN_SETFOCUS);
|
||||||
|
|
||||||
|
if (((btn_type == BS_RADIOBUTTON) || (btn_type == BS_AUTORADIOBUTTON)) &&
|
||||||
|
!(infoPtr->state & (BST_CHECKED | BUTTON_BTNPRESSED)))
|
||||||
|
{
|
||||||
|
BUTTON_NOTIFY_PARENT(hWnd, BN_CLICKED);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_KILLFOCUS:
|
case WM_KILLFOCUS:
|
||||||
|
|
|
@ -2521,7 +2521,7 @@ static void test_radiobutton_focus(void)
|
||||||
flush_sequences(sequences, NUM_MSG_SEQUENCES);
|
flush_sequences(sequences, NUM_MSG_SEQUENCES);
|
||||||
SendMessageA(button, WM_SETFOCUS, 0, 0);
|
SendMessageA(button, WM_SETFOCUS, 0, 0);
|
||||||
while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) DispatchMessageA(&msg);
|
while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) DispatchMessageA(&msg);
|
||||||
ok_sequence(sequences, COMBINED_SEQ_INDEX, set_focus_default_seq, "WM_SETFOCUS on default radiobutton", TRUE);
|
ok_sequence(sequences, COMBINED_SEQ_INDEX, set_focus_default_seq, "WM_SETFOCUS on default radiobutton", FALSE);
|
||||||
DestroyWindow(button);
|
DestroyWindow(button);
|
||||||
|
|
||||||
/* Test already checked button */
|
/* Test already checked button */
|
||||||
|
@ -2542,7 +2542,7 @@ static void test_radiobutton_focus(void)
|
||||||
flush_sequences(sequences, NUM_MSG_SEQUENCES);
|
flush_sequences(sequences, NUM_MSG_SEQUENCES);
|
||||||
SendMessageA(button, WM_SETFOCUS, 0, 0);
|
SendMessageA(button, WM_SETFOCUS, 0, 0);
|
||||||
while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) DispatchMessageA(&msg);
|
while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) DispatchMessageA(&msg);
|
||||||
ok_sequence(sequences, COMBINED_SEQ_INDEX, set_focus_default_seq, "WM_SETFOCUS on focused radiobutton", TRUE);
|
ok_sequence(sequences, COMBINED_SEQ_INDEX, set_focus_default_seq, "WM_SETFOCUS on focused radiobutton", FALSE);
|
||||||
DestroyWindow(button);
|
DestroyWindow(button);
|
||||||
|
|
||||||
/* Test WM_LBUTTONDOWN */
|
/* Test WM_LBUTTONDOWN */
|
||||||
|
@ -2562,7 +2562,7 @@ static void test_radiobutton_focus(void)
|
||||||
flush_sequences(sequences, NUM_MSG_SEQUENCES);
|
flush_sequences(sequences, NUM_MSG_SEQUENCES);
|
||||||
SendMessageA(button, WM_SETFOCUS, 0, 0);
|
SendMessageA(button, WM_SETFOCUS, 0, 0);
|
||||||
while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) DispatchMessageA(&msg);
|
while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) DispatchMessageA(&msg);
|
||||||
ok_sequence(sequences, COMBINED_SEQ_INDEX, set_focus_without_notify_seq, "WM_SETFOCUS on radiobutton withouth BS_NOTIFY", TRUE);
|
ok_sequence(sequences, COMBINED_SEQ_INDEX, set_focus_without_notify_seq, "WM_SETFOCUS on radiobutton withouth BS_NOTIFY", FALSE);
|
||||||
DestroyWindow(button);
|
DestroyWindow(button);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue