Module: wine Branch: refs/heads/master Commit: 8b69bf72da5f94ba9385e8e43ce83e3e417a4185 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=8b69bf72da5f94ba9385e8e4...
Author: Jacek Caban jacek@codeweavers.com Date: Thu May 25 18:39:26 2006 +0200
urlmon: Added Switch implementation.
---
dlls/urlmon/binding.c | 30 ++++++++++++++++++++++++++++-- 1 files changed, 28 insertions(+), 2 deletions(-)
diff --git a/dlls/urlmon/binding.c b/dlls/urlmon/binding.c index bc43174..859057f 100644 --- a/dlls/urlmon/binding.c +++ b/dlls/urlmon/binding.c @@ -78,6 +78,7 @@ #define SERVPROV(x) ((IServiceProvider* #define STREAM(x) ((IStream*) &(x)->lpStreamVtbl)
#define WM_MK_ONPROGRESS (WM_USER+100) +#define WM_MK_CONTINUE (WM_USER+101)
typedef struct { Binding *binding; @@ -87,6 +88,11 @@ typedef struct { LPWSTR status_text; } on_progress_data;
+typedef struct { + Binding *binding; + PROTOCOLDATA *data; +} switch_data; + static LRESULT WINAPI notif_wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { @@ -104,6 +110,15 @@ static LRESULT WINAPI notif_wnd_proc(HWN
return 0; } + case WM_MK_CONTINUE: { + switch_data *data = (switch_data*)lParam; + + IInternetProtocol_Continue(data->binding->protocol, data->data); + + IBinding_Release(BINDING(data->binding)); + HeapFree(GetProcessHeap(), 0, data); + return 0; + } }
return DefWindowProcW(hwnd, msg, wParam, lParam); @@ -631,8 +646,19 @@ static HRESULT WINAPI InternetProtocolSi PROTOCOLDATA *pProtocolData) { Binding *This = PROTSINK_THIS(iface); - FIXME("(%p)->(%p)\n", This, pProtocolData); - return E_NOTIMPL; + switch_data *data; + + TRACE("(%p)->(%p)\n", This, pProtocolData); + + data = HeapAlloc(GetProcessHeap(), 0, sizeof(switch_data)); + + IBinding_AddRef(BINDING(This)); + data->binding = This; + data->data = pProtocolData; + + PostMessageW(This->notif_hwnd, WM_MK_CONTINUE, 0, (LPARAM)data); + + return S_OK; }
static HRESULT WINAPI InternetProtocolSink_ReportProgress(IInternetProtocolSink *iface,