If a dialog with the DS_CONTROL style is not visible then ignore
default focus assignment.
This commit is contained in:
parent
827154e451
commit
5415686935
|
@ -716,6 +716,31 @@ static LRESULT CALLBACK delayFocusDlgWinProc (HWND hDlg, UINT uiMsg, WPARAM wPar
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static LRESULT CALLBACK focusDlgWinProc (HWND hDlg, UINT uiMsg, WPARAM wParam,
|
||||
LPARAM lParam)
|
||||
{
|
||||
switch (uiMsg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
return TRUE;
|
||||
|
||||
case WM_COMMAND:
|
||||
if (LOWORD(wParam) == IDCANCEL)
|
||||
{
|
||||
EndDialog(hDlg, LOWORD(wParam));
|
||||
return TRUE;
|
||||
}
|
||||
else if (LOWORD(wParam) == 200)
|
||||
{
|
||||
if (HIWORD(wParam) == EN_SETFOCUS)
|
||||
g_hwndInitialFocusT1 = (HWND)lParam;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Helper for InitialFocusTest */
|
||||
static const char * GetHwndString(HWND hw)
|
||||
{
|
||||
|
@ -800,6 +825,28 @@ static void InitialFocusTest (void)
|
|||
"Expected the second button (%p), got %s (%p).\n",
|
||||
g_hwndButton2, GetHwndString(g_hwndInitialFocusT2),
|
||||
g_hwndInitialFocusT2);
|
||||
|
||||
/* Test 3:
|
||||
* If the dialog has DS_CONTROL and it's not visible then we shouldn't change focus */
|
||||
{
|
||||
HWND hDlg;
|
||||
HRSRC hResource;
|
||||
HANDLE hTemplate;
|
||||
DLGTEMPLATE* pTemplate;
|
||||
|
||||
hResource = FindResourceA(g_hinst,"FOCUS_TEST_DIALOG", (LPSTR)RT_DIALOG);
|
||||
hTemplate = LoadResource(g_hinst, hResource);
|
||||
pTemplate = (LPDLGTEMPLATEA)LockResource(hTemplate);
|
||||
|
||||
g_hwndInitialFocusT1 = 0;
|
||||
hDlg = CreateDialogIndirectParamW(g_hinst, pTemplate, NULL, (DLGPROC)focusDlgWinProc,0);
|
||||
ok (hDlg != 0, "Failed to create test dialog.\n");
|
||||
|
||||
ok ((g_hwndInitialFocusT1 == 0),
|
||||
"Focus should not be set for an invisible DS_CONTROL dialog %p.\n", g_hwndInitialFocusT1);
|
||||
|
||||
DestroyWindow(hDlg);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -67,3 +67,11 @@ CLASS "TestDialog"
|
|||
FONT 8, "System"
|
||||
{
|
||||
}
|
||||
|
||||
FOCUS_TEST_DIALOG DIALOG DISCARDABLE 0, 0, 60, 30
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_CONTROL
|
||||
CAPTION "Test dialog"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
{
|
||||
EDITTEXT 200,4,4,50,14
|
||||
}
|
||||
|
|
|
@ -664,7 +664,8 @@ static HWND DIALOG_CreateIndirect( HINSTANCE hInst, LPCVOID dlgTemplate,
|
|||
{
|
||||
/* Send initialisation messages and set focus */
|
||||
|
||||
if (SendMessageW( hwnd, WM_INITDIALOG, (WPARAM)dlgInfo->hwndFocus, param ))
|
||||
if (SendMessageW( hwnd, WM_INITDIALOG, (WPARAM)dlgInfo->hwndFocus, param ) &&
|
||||
((~template.style & DS_CONTROL) || (template.style & WS_VISIBLE)))
|
||||
{
|
||||
/* By returning TRUE, app has requested a default focus assignment */
|
||||
dlgInfo->hwndFocus = GetNextDlgTabItem( hwnd, 0, FALSE);
|
||||
|
|
Loading…
Reference in New Issue