Index: src/ch/UpdaterDlg.cpp =================================================================== diff -u -N -rb82ebc5caf998dbfd61370968f0438d8fb74897a -r07a3be49b0c7e5599eb89c2f9da9a9272cc1558a --- src/ch/UpdaterDlg.cpp (.../UpdaterDlg.cpp) (revision b82ebc5caf998dbfd61370968f0438d8fb74897a) +++ src/ch/UpdaterDlg.cpp (.../UpdaterDlg.cpp) (revision 07a3be49b0c7e5599eb89c2f9da9a9272cc1558a) @@ -45,6 +45,11 @@ fmt.SetParam(_t("%site"), _T(PRODUCT_SITE)); m_ctlText.SetWindowText(fmt); + // disable button initially + CWnd* pWnd = GetDlgItem(IDC_OPEN_WEBPAGE_BUTTON); + if(pWnd) + pWnd->EnableWindow(FALSE); + if(!m_bBackgroundMode) ShowWindow(SW_SHOW); @@ -60,19 +65,23 @@ void CUpdaterDlg::OnBnClickedOpenWebpageButton() { - CString str; - str.Format(_T("Opening a browser with address %s..."), (PCTSTR)m_ucChecker.GetDownloadAddress()); - LOG_DEBUG(str); + CString strDownloadAddr = m_ucChecker.GetDownloadAddress(); + if(!strDownloadAddr.IsEmpty()) + { + CString str; + str.Format(_T("Opening a browser with address %s..."), (PCTSTR)strDownloadAddr); + LOG_DEBUG(str); - str.Format(_T("url.dll,FileProtocolHandler %s"), (PCTSTR)m_ucChecker.GetDownloadAddress()); - ulong_t ulRes = (ulong_t)ShellExecute(NULL, _T("open"), _T("rundll32.exe"), str, NULL, SW_SHOW); + str.Format(_T("url.dll,FileProtocolHandler %s"), (PCTSTR)strDownloadAddr); + ulong_t ulRes = (ulong_t)ShellExecute(NULL, _T("open"), _T("rundll32.exe"), str, NULL, SW_SHOW); - str.Format(_T("ShellExecute returned %lu"), ulRes); - LOG_DEBUG(str); + str.Format(_T("ShellExecute returned %lu"), ulRes); + LOG_DEBUG(str); - // close the dialog if succeeded; 32 is some arbitrary value from ms docs - if(ulRes > 32) - CUpdaterDlg::OnOK(); + // close the dialog if succeeded; 32 is some arbitrary value from ms docs + if(ulRes > 32) + CUpdaterDlg::OnOK(); + } } void CUpdaterDlg::OnTimer(UINT_PTR nIDEvent) @@ -84,6 +93,7 @@ CUpdateChecker::ECheckResult eResult = m_ucChecker.GetResult(); CString strFmt; EBkModeResult eBkMode = eRes_None; + bool bEnableButton = false; if(eResult != m_eLastState) { @@ -111,17 +121,20 @@ case CUpdateChecker::eResult_RemoteVersionOlder: TRACE(_T("CUpdateChecker::eResult_RemoteVersionOlder\n")); eBkMode = eRes_Exit; + bEnableButton = true; // eBkMode = eRes_Show; // for debugging purposes only strFmt = rResManager.LoadString(IDS_UPDATER_OLD_VERSION_STRING); break; case CUpdateChecker::eResult_VersionCurrent: TRACE(_T("CUpdateChecker::eResult_VersionCurrent\n")); eBkMode = eRes_Exit; + bEnableButton = true; strFmt = rResManager.LoadString(IDS_UPDATER_EQUAL_VERSION_STRING); break; case CUpdateChecker::eResult_RemoteVersionNewer: TRACE(_T("CUpdateChecker::eResult_RemoteVersionNewer\n")); eBkMode = eRes_Show; + bEnableButton = true; strFmt = rResManager.LoadString(IDS_UPDATER_NEW_VERSION_STRING); break; default: @@ -138,6 +151,11 @@ m_ctlText.SetWindowText(fmt); + // Update button state + CWnd* pWnd = GetDlgItem(IDC_OPEN_WEBPAGE_BUTTON); + if(pWnd) + pWnd->EnableWindow(bEnableButton); + m_eLastState = eResult; // handle background mode