Module: wine Branch: master Commit: 6c5d4cb07e6ddc578cd8f6b359f51c76c6231113 URL: http://source.winehq.org/git/wine.git/?a=commit;h=6c5d4cb07e6ddc578cd8f6b359... Author: Piotr Caban <piotr(a)codeweavers.com> Date: Wed Feb 4 15:05:07 2015 +0100 user32: Only use DIALOGINFO->hwndFocus to store last focus of inactive windows. --- dlls/user32/dialog.c | 8 ++++---- dlls/user32/tests/dialog.c | 13 ++++++++++++- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/dlls/user32/dialog.c b/dlls/user32/dialog.c index 497d545..3b48fbb 100644 --- a/dlls/user32/dialog.c +++ b/dlls/user32/dialog.c @@ -704,10 +704,10 @@ static HWND DIALOG_CreateIndirect( HINSTANCE hInst, LPCVOID dlgTemplate, /* By returning TRUE, app has requested a default focus assignment. * WM_INITDIALOG may have changed the tab order, so find the first * tabstop control again. */ - dlgInfo->hwndFocus = GetNextDlgTabItem( hwnd, 0, FALSE ); - if (!dlgInfo->hwndFocus) dlgInfo->hwndFocus = GetNextDlgGroupItem( hwnd, 0, FALSE ); - if( dlgInfo->hwndFocus ) - SetFocus( dlgInfo->hwndFocus ); + focus = GetNextDlgTabItem( hwnd, 0, FALSE ); + if (!focus) focus = GetNextDlgGroupItem( hwnd, 0, FALSE ); + if (focus) + SetFocus( focus ); } } diff --git a/dlls/user32/tests/dialog.c b/dlls/user32/tests/dialog.c index 63e76f7..3488f31 100644 --- a/dlls/user32/tests/dialog.c +++ b/dlls/user32/tests/dialog.c @@ -1227,7 +1227,12 @@ static void test_DisabledDialogTest(void) static INT_PTR CALLBACK messageBoxFontDlgWinProc (HWND hDlg, UINT uiMsg, WPARAM wParam, LPARAM lParam) { - return (uiMsg == WM_INITDIALOG); + if (uiMsg == WM_INITDIALOG) { + SetFocus(hDlg); + return 1; + } + + return 0; } static void test_MessageBoxFontTest(void) @@ -1337,6 +1342,12 @@ static void test_SaveRestoreFocus(void) foundId = GetWindowLongPtrA(GetFocus(), GWLP_ID); ok (foundId == 1000, "First edit box should have gained focus on dialog creation. Expected: %d, Found: %ld\n", 1000, foundId); + SetFocus(GetNextDlgTabItem(hDlg, GetFocus(), FALSE)); + SendMessageA(hDlg, WM_ACTIVATE, MAKEWPARAM(WA_ACTIVE, 0), 0); + foundId = GetWindowLongPtrA(GetFocus(), GWLP_ID); + ok (foundId == 1001, "First edit box should have regained focus after dialog reactivation. Expected: %d, Found: %ld\n", 1001, foundId); + SetFocus(GetNextDlgTabItem(hDlg, NULL, FALSE)); + /* de- then reactivate the dialog */ SendMessageA(hDlg, WM_ACTIVATE, MAKEWPARAM(WA_INACTIVE, 0), 0); SendMessageA(hDlg, WM_ACTIVATE, MAKEWPARAM(WA_ACTIVE, 0), 0);