Author: rharabien Date: Tue Feb 14 14:17:18 2012 New Revision: 55593
URL: http://svn.reactos.org/svn/reactos?rev=55593&view=rev Log: [COMCTL32] - If no control or one of wizard buttons has focus in PROPSHEET_SetWizButtons, set focus to default wizard button. Tested in Win2k3. Worse fix was already in diff but wasn't applied.
Modified: trunk/reactos/dll/win32/comctl32/comctl32_ros.diff trunk/reactos/dll/win32/comctl32/propsheet.c
Modified: trunk/reactos/dll/win32/comctl32/comctl32_ros.diff URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/comctl32/comctl32... ============================================================================== --- trunk/reactos/dll/win32/comctl32/comctl32_ros.diff [iso-8859-1] (original) +++ trunk/reactos/dll/win32/comctl32/comctl32_ros.diff [iso-8859-1] Tue Feb 14 14:17:18 2012 @@ -125,37 +125,17 @@ =================================================================== --- propsheet.c (revision 38890) +++ propsheet.c (working copy) -@@ -2417,6 +2417,29 @@ - return FALSE; - } - -+BOOL CALLBACK -+EnumChildProc(HWND hwnd, LPARAM lParam) -+{ -+ WCHAR szType[20]; -+ RealGetWindowClassW(hwnd, szType, 20); -+ -+ if (strcmpW(szType, WC_EDITW) == 0) -+ { -+ if (IsWindowEnabled(hwnd) && IsWindowVisible(hwnd)) -+ { -+ SetFocus(hwnd); -+ return FALSE; -+ } -+ } -+ else -+ { -+ EnumChildWindows(hwnd, EnumChildProc, 0); -+ } -+ -+ return TRUE; -+} -+ -+ - /****************************************************************************** - * PROPSHEET_SetWizButtons - * -@@ -2438,17 +2461,6 @@ +@@ -2425,6 +2425,9 @@ + HWND hwndBack = GetDlgItem(hwndDlg, IDC_BACK_BUTTON); + HWND hwndNext = GetDlgItem(hwndDlg, IDC_NEXT_BUTTON); + HWND hwndFinish = GetDlgItem(hwndDlg, IDC_FINISH_BUTTON); ++ HWND hwndCancel = GetDlgItem(hwndDlg, IDCANCEL); ++ INT iDefItem = 0; ++ HWND hwndFocus; + + TRACE("%d\n", dwFlags); + +@@ -2432,17 +2435,6 @@ EnableWindow(hwndNext, FALSE); EnableWindow(hwndFinish, FALSE);
@@ -173,35 +153,26 @@ if (dwFlags & PSWIZB_BACK) EnableWindow(hwndBack, TRUE);
-@@ -2478,6 +2490,31 @@ +@@ -2472,6 +2464,22 @@ } else if (!(dwFlags & PSWIZB_DISABLEDFINISH)) EnableWindow(hwndFinish, TRUE); + -+ /* set the default pushbutton to an enabled button and give it focus */ ++ /* set the default pushbutton to an enabled button */ + if (((dwFlags & PSWIZB_FINISH) || psInfo->hasFinish) && !(dwFlags & PSWIZB_DISABLEDFINISH)) -+ { -+ SendMessageW(hwndDlg, DM_SETDEFID, IDC_FINISH_BUTTON, 0); -+ SetFocus(hwndFinish); -+ } ++ iDefItem = IDC_FINISH_BUTTON; + else if (dwFlags & PSWIZB_NEXT) -+ { -+ SendMessageW(hwndDlg, DM_SETDEFID, IDC_NEXT_BUTTON, 0); -+ SetFocus(hwndNext); -+ } ++ iDefItem = IDC_NEXT_BUTTON; + else if (dwFlags & PSWIZB_BACK) -+ { -+ SendMessageW(hwndDlg, DM_SETDEFID, IDC_BACK_BUTTON, 0); -+ SetFocus(hwndBack); -+ } ++ iDefItem = IDC_BACK_BUTTON; + else -+ { -+ SendMessageW(hwndDlg, DM_SETDEFID, IDCANCEL, 0); -+ SetFocus(GetDlgItem(hwndDlg, IDCANCEL)); -+ } -+ -+ /* Now try to find an edit control that deserves focus */ -+ EnumChildWindows(PropSheet_GetCurrentPageHwnd(hwndDlg), EnumChildProc, 0); ++ iDefItem = IDCANCEL; ++ SendMessageW(hwndDlg, DM_SETDEFID, iDefItem, 0); ++ ++ /* Set focus if no control has it */ ++ hwndFocus = GetFocus(); ++ if (!hwndFocus || hwndFocus == hwndCancel) ++ SetFocus(GetDlgItem(hwndDlg, iDefItem)); }
/******************************************************************************
Modified: trunk/reactos/dll/win32/comctl32/propsheet.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/comctl32/propshee... ============================================================================== --- trunk/reactos/dll/win32/comctl32/propsheet.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/comctl32/propsheet.c [iso-8859-1] Tue Feb 14 14:17:18 2012 @@ -2425,23 +2425,15 @@ HWND hwndBack = GetDlgItem(hwndDlg, IDC_BACK_BUTTON); HWND hwndNext = GetDlgItem(hwndDlg, IDC_NEXT_BUTTON); HWND hwndFinish = GetDlgItem(hwndDlg, IDC_FINISH_BUTTON); + HWND hwndCancel = GetDlgItem(hwndDlg, IDCANCEL); + INT iDefItem = 0; + HWND hwndFocus;
TRACE("%d\n", dwFlags);
EnableWindow(hwndBack, FALSE); EnableWindow(hwndNext, FALSE); EnableWindow(hwndFinish, FALSE); - - /* set the default pushbutton to an enabled button */ - if (((dwFlags & PSWIZB_FINISH) || psInfo->hasFinish) && !(dwFlags & PSWIZB_DISABLEDFINISH)) - SendMessageW(hwndDlg, DM_SETDEFID, IDC_FINISH_BUTTON, 0); - else if (dwFlags & PSWIZB_NEXT) - SendMessageW(hwndDlg, DM_SETDEFID, IDC_NEXT_BUTTON, 0); - else if (dwFlags & PSWIZB_BACK) - SendMessageW(hwndDlg, DM_SETDEFID, IDC_BACK_BUTTON, 0); - else - SendMessageW(hwndDlg, DM_SETDEFID, IDCANCEL, 0); -
if (dwFlags & PSWIZB_BACK) EnableWindow(hwndBack, TRUE); @@ -2472,6 +2464,22 @@ } else if (!(dwFlags & PSWIZB_DISABLEDFINISH)) EnableWindow(hwndFinish, TRUE); + + /* set the default pushbutton to an enabled button */ + if (((dwFlags & PSWIZB_FINISH) || psInfo->hasFinish) && !(dwFlags & PSWIZB_DISABLEDFINISH)) + iDefItem = IDC_FINISH_BUTTON; + else if (dwFlags & PSWIZB_NEXT) + iDefItem = IDC_NEXT_BUTTON; + else if (dwFlags & PSWIZB_BACK) + iDefItem = IDC_BACK_BUTTON; + else + iDefItem = IDCANCEL; + SendMessageW(hwndDlg, DM_SETDEFID, iDefItem, 0); + + /* Set focus if no control has it */ + hwndFocus = GetFocus(); + if (!hwndFocus || hwndFocus == hwndCancel) + SetFocus(GetDlgItem(hwndDlg, iDefItem)); }
/******************************************************************************