diff --git a/dlls/comctl32/propsheet.c b/dlls/comctl32/propsheet.c index 0d76297381..e767444888 100644 --- a/dlls/comctl32/propsheet.c +++ b/dlls/comctl32/propsheet.c @@ -1549,6 +1549,7 @@ static BOOL PROPSHEET_ShowPage(HWND hwndDlg, int index, PropSheetInfo * psInfo) { HWND hwndTabCtrl; HWND hwndLineHeader; + HWND control; LPCPROPSHEETPAGEW ppshpage; TRACE("active_page %d, index %d\n", psInfo->active_page, index); @@ -1569,6 +1570,10 @@ static BOOL PROPSHEET_ShowPage(HWND hwndDlg, int index, PropSheetInfo * psInfo) { PROPSHEET_SetTitleW(hwndDlg, psInfo->ppshheader.dwFlags, psInfo->proppage[index].pszText); + + control = GetNextDlgTabItem(psInfo->proppage[index].hwndPage, NULL, FALSE); + if(control != NULL) + SetFocus(control); } if (psInfo->active_page != -1) @@ -1631,7 +1636,11 @@ static BOOL PROPSHEET_Back(HWND hwndDlg) if (idx >= 0 && idx < psInfo->nPages) { if (PROPSHEET_CanSetCurSel(hwndDlg)) + { + SetFocus(GetDlgItem(hwndDlg, IDC_BACK_BUTTON)); + SendMessageW(hwndDlg, DM_SETDEFID, IDC_BACK_BUTTON, 0); PROPSHEET_SetCurSel(hwndDlg, idx, -1, 0); + } } return TRUE; } @@ -1669,7 +1678,11 @@ static BOOL PROPSHEET_Next(HWND hwndDlg) if (idx < psInfo->nPages ) { if (PROPSHEET_CanSetCurSel(hwndDlg) != FALSE) + { + SetFocus(GetDlgItem(hwndDlg, IDC_NEXT_BUTTON)); + SendMessageW(hwndDlg, DM_SETDEFID, IDC_NEXT_BUTTON, 0); PROPSHEET_SetCurSel(hwndDlg, idx, 1, 0); + } } return TRUE; @@ -3408,6 +3421,7 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) /* set up the Next and Back buttons by default */ PROPSHEET_SetWizButtons(hwnd, PSWIZB_BACK|PSWIZB_NEXT); + SetFocus(GetDlgItem(hwnd, IDC_NEXT_BUTTON)); /* Set up fonts */ SystemParametersInfoW (SPI_GETICONTITLELOGFONT, 0, &logFont, 0); @@ -3494,6 +3508,10 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) PROPSHEET_UnChanged(hwnd, NULL); + /* wizards set their focus during init */ + if (psInfo->ppshheader.dwFlags & INTRNL_ANY_WIZARD) + return FALSE; + return TRUE; }