Index: dll/win32/syssetup/wizard.c =================================================================== --- dll/win32/syssetup/wizard.c (revision 69696) +++ dll/win32/syssetup/wizard.c (working copy) @@ -438,6 +438,42 @@ return (res == ERROR_SUCCESS); } +static void +DrawAttnRectangle(HWND hwndDlg, HDC hdc, int control_id, BOOL attn) +{ + HPEN pen; + HGDIOBJ oldPen, oldBrush; + RECT rc; + DWORD col = attn ? RGB(255,0,0) : GetSysColor(COLOR_BTNFACE); + GetWindowRect(GetDlgItem(hwndDlg, control_id), &rc); + MapWindowPoints(HWND_DESKTOP, hwndDlg, (LPPOINT)&rc, 2); + InflateRect(&rc, 2, 2); + pen = CreatePen(PS_SOLID, 1, col); + oldPen = SelectObject(hdc, pen); + oldBrush = SelectObject(hdc, GetStockObject(NULL_BRUSH)); + Rectangle(hdc, rc.left, rc.top, rc.right, rc.bottom); + SelectObject(hdc, oldBrush); + SelectObject(hdc, oldPen); + DeleteObject(pen); +} + +static BOOL g_NextEnabled = 0; +static void +EnableNextWithUsername(HWND hwndDlg, BOOL force) +{ + INT nLength = SendDlgItemMessage(hwndDlg, IDC_OWNERNAME, WM_GETTEXTLENGTH, 0, 0); + BOOL enable = nLength > 0; + if(enable != g_NextEnabled || force) + { + HDC hdc; + g_NextEnabled = enable; + PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK | (g_NextEnabled ? PSWIZB_NEXT: 0)); + hdc = GetDC(hwndDlg); + DrawAttnRectangle(hwndDlg, hdc, IDC_OWNERNAME, !g_NextEnabled); + ReleaseDC(hwndDlg, hdc); + } +} + static INT_PTR CALLBACK OwnerPageDlgProc(HWND hwndDlg, UINT uMsg, @@ -462,6 +498,19 @@ } break; + case WM_COMMAND: + { + EnableNextWithUsername(hwndDlg, FALSE); + } + break; + case WM_PAINT: + { + PAINTSTRUCT ps; + HDC hdc = BeginPaint(hwndDlg, &ps); + DrawAttnRectangle(hwndDlg, hdc, IDC_OWNERNAME, !g_NextEnabled); + EndPaint(hwndDlg, &ps); + } + break; case WM_NOTIFY: { @@ -471,9 +520,9 @@ { case PSN_SETACTIVE: /* Enable the Back and Next buttons */ - PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK | PSWIZB_NEXT); if (SetupData.UnattendSetup) { + PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK | PSWIZB_NEXT); SendMessage(GetDlgItem(hwndDlg, IDC_OWNERNAME), WM_SETTEXT, 0, (LPARAM)SetupData.OwnerName); SendMessage(GetDlgItem(hwndDlg, IDC_OWNERORGANIZATION), WM_SETTEXT, 0, (LPARAM)SetupData.OwnerOrganization); if (WriteOwnerSettings(SetupData.OwnerName, SetupData.OwnerOrganization)) @@ -482,6 +531,7 @@ return TRUE; } } + EnableNextWithUsername(hwndDlg, TRUE); break; case PSN_WIZNEXT: