Module: wine Branch: master Commit: 2c9774f002521adc6da7bd07274052f111536697 URL: http://source.winehq.org/git/wine.git/?a=commit;h=2c9774f002521adc6da7bd0727...
Author: Jacek Caban jacek@codeweavers.com Date: Fri Sep 20 16:36:19 2013 +0200
appwiz.cpl: Allow cancelling download of addons.
---
dlls/appwiz.cpl/addons.c | 20 ++++++++++++++++++-- 1 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/dlls/appwiz.cpl/addons.c b/dlls/appwiz.cpl/addons.c index be6fb6d..b278a4a 100644 --- a/dlls/appwiz.cpl/addons.c +++ b/dlls/appwiz.cpl/addons.c @@ -106,6 +106,7 @@ static const addon_info_t *addon;
static HWND install_dialog = NULL; static LPWSTR url = NULL; +static IBinding *dwl_binding;
static WCHAR * (CDECL *p_wine_get_dos_file_name)(const char*); static const WCHAR kernel32_dllW[] = {'k','e','r','n','e','l','3','2','.','d','l','l',0}; @@ -185,6 +186,8 @@ static enum install_res install_file(const WCHAR *file_name) { ULONG res;
+ EnableWindow(GetDlgItem(install_dialog, IDCANCEL), 0); + res = MsiInstallProductW(file_name, NULL); if(res != ERROR_SUCCESS) { ERR("MsiInstallProduct failed: %u\n", res); @@ -437,6 +440,10 @@ static HRESULT WINAPI InstallCallback_OnStartBinding(IBindStatusCallback *iface, DWORD dwReserved, IBinding *pib) { set_status(IDS_DOWNLOADING); + + IBinding_AddRef(pib); + dwl_binding = pib; + return S_OK; }
@@ -468,8 +475,16 @@ static HRESULT WINAPI InstallCallback_OnProgress(IBindStatusCallback *iface, ULO 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; }
@@ -660,13 +675,14 @@ static INT_PTR CALLBACK installer_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARA case WM_COMMAND: switch(wParam) { case IDCANCEL: + if(dwl_binding) + IBinding_Abort(dwl_binding); EndDialog(hwnd, 0); return FALSE;
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)); return FALSE; }