Index: dll/cpl/appwiz/addons.c =================================================================== --- dll/cpl/appwiz/addons.c (revision 69427) +++ dll/cpl/appwiz/addons.c (working copy) @@ -59,6 +59,7 @@ static const addon_info_t *addon; static HWND install_dialog = NULL; +static IBinding *dwl_binding; static WCHAR GeckoUrl[] = L"http://svn.reactos.org/amine/wine_gecko-2.34-x86.msi"; @@ -136,6 +137,8 @@ { ULONG res; + EnableWindow(GetDlgItem(install_dialog, IDCANCEL), 0); + res = MsiInstallProductW(file_name, NULL); if(res != ERROR_SUCCESS) { ERR("MsiInstallProduct failed: %u\n", res); @@ -259,6 +262,10 @@ DWORD dwReserved, IBinding *pib) { set_status(IDS_DOWNLOADING); + + IBinding_AddRef(pib); + dwl_binding = pib; + return S_OK; } @@ -290,8 +297,16 @@ static HRESULT WINAPI InstallCallback_OnStopBinding(IBindStatusCallback *iface, HRESULT hresult, LPCWSTR szError) { + if(dwl_binding) { + IBinding_Release(dwl_binding); + dwl_binding = NULL; + } + if(FAILED(hresult)) { - ERR("Binding failed %08x\n", hresult); + if(hresult == E_ABORT) + TRACE("Binding aborted\n"); + else + ERR("Binding failed %08x\n", hresult); return S_OK; } @@ -382,6 +397,8 @@ case WM_COMMAND: switch(wParam) { case IDCANCEL: + if(dwl_binding) + IBinding_Abort(dwl_binding); EndDialog(hwnd, 0); return FALSE; @@ -388,8 +405,7 @@ case ID_DWL_INSTALL: ShowWindow(GetDlgItem(hwnd, ID_DWL_PROGRESS), SW_SHOW); EnableWindow(GetDlgItem(hwnd, ID_DWL_INSTALL), 0); - EnableWindow(GetDlgItem(hwnd, IDCANCEL), 0); /* FIXME */ - CloseHandle( CreateThread(NULL, 0, download_proc, NULL, 0, NULL)); + CloseHandle(CreateThread(NULL, 0, download_proc, NULL, 0, NULL)); return FALSE; } }