Activate document object.
This commit is contained in:
parent
1b1880b074
commit
eea60a6672
|
@ -18,11 +18,83 @@
|
|||
|
||||
#include "wine/debug.h"
|
||||
#include "shdocvw.h"
|
||||
#include "hlink.h"
|
||||
#include "exdispid.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
|
||||
|
||||
static ATOM doc_view_atom = 0;
|
||||
|
||||
static void navigate_complete(WebBrowser *This)
|
||||
{
|
||||
IDispatch *disp, *docdisp = NULL;
|
||||
DISPPARAMS dispparams;
|
||||
VARIANTARG params[2];
|
||||
VARIANT url;
|
||||
HRESULT hres;
|
||||
|
||||
hres = IOleClientSite_QueryInterface(This->client, &IID_IDispatch, (void**)&disp);
|
||||
if(FAILED(hres))
|
||||
return;
|
||||
|
||||
hres = IUnknown_QueryInterface(This->document, &IID_IDispatch, (void**)&docdisp);
|
||||
if(FAILED(hres))
|
||||
FIXME("Could not get IDispatch interface\n");
|
||||
|
||||
dispparams.cArgs = 2;
|
||||
dispparams.cNamedArgs = 0;
|
||||
dispparams.rgdispidNamedArgs = NULL;
|
||||
dispparams.rgvarg = params;
|
||||
|
||||
V_VT(params) = (VT_BYREF|VT_VARIANT);
|
||||
V_BYREF(params) = &url;
|
||||
|
||||
V_VT(params+1) = VT_DISPATCH;
|
||||
V_DISPATCH(params+1) = docdisp;
|
||||
|
||||
V_VT(&url) = VT_BSTR;
|
||||
V_BSTR(&url) = This->url;
|
||||
|
||||
IDispatch_Invoke(disp, DISPID_NAVIGATECOMPLETE2, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
|
||||
DISPATCH_METHOD, &dispparams, NULL, NULL, NULL);
|
||||
IDispatch_Invoke(disp, DISPID_DOCUMENTCOMPLETE, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
|
||||
DISPATCH_METHOD, &dispparams, NULL, NULL, NULL);
|
||||
|
||||
IDispatch_Release(disp);
|
||||
if(docdisp)
|
||||
IDispatch_Release(docdisp);
|
||||
}
|
||||
|
||||
static LRESULT navigate2(WebBrowser *This)
|
||||
{
|
||||
IHlinkTarget *hlink;
|
||||
HRESULT hres;
|
||||
|
||||
TRACE("(%p)\n", This);
|
||||
|
||||
if(!This->document) {
|
||||
WARN("document == NULL\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
hres = IUnknown_QueryInterface(This->document, &IID_IHlinkTarget, (void**)&hlink);
|
||||
if(FAILED(hres)) {
|
||||
FIXME("Could not get IHlinkTarget interface\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
hres = IHlinkTarget_Navigate(hlink, 0, NULL);
|
||||
IHlinkTarget_Release(hlink);
|
||||
if(FAILED(hres)) {
|
||||
FIXME("Navigate failed\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
navigate_complete(This);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static LRESULT WINAPI doc_view_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
WebBrowser *This;
|
||||
|
@ -37,6 +109,11 @@ static LRESULT WINAPI doc_view_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM l
|
|||
This = GetPropW(hwnd, wszTHIS);
|
||||
}
|
||||
|
||||
switch(msg) {
|
||||
case WB_WM_NAVIGATE2:
|
||||
return navigate2(This);
|
||||
}
|
||||
|
||||
return DefWindowProcA(hwnd, msg, wParam, lParam);
|
||||
}
|
||||
|
||||
|
|
|
@ -91,6 +91,8 @@ typedef struct {
|
|||
IOleContainer *container;
|
||||
IOleDocumentView *view;
|
||||
|
||||
LPOLESTR url;
|
||||
|
||||
/* window context */
|
||||
|
||||
HWND iphwnd;
|
||||
|
@ -152,6 +154,8 @@ HRESULT WebBrowser_Create(IUnknown*,REFIID,void**);
|
|||
|
||||
void create_doc_view_hwnd(WebBrowser *This);
|
||||
|
||||
#define WB_WM_NAVIGATE2 (WM_USER+100)
|
||||
|
||||
#define DEFINE_THIS(cls,ifc,iface) ((cls*)((BYTE*)(iface)-offsetof(cls,lp ## ifc ## Vtbl)))
|
||||
|
||||
/**********************************************************************
|
||||
|
|
|
@ -128,6 +128,7 @@ static ULONG WINAPI WebBrowser_Release(IWebBrowser2 *iface)
|
|||
WebBrowser_Events_Destroy(This);
|
||||
WebBrowser_ClientSite_Destroy(This);
|
||||
|
||||
SysFreeString(This->url);
|
||||
HeapFree(GetProcessHeap(), 0, This);
|
||||
SHDOCVW_UnlockModule();
|
||||
}
|
||||
|
@ -551,6 +552,8 @@ static HRESULT WINAPI WebBrowser_Navigate2(IWebBrowser2 *iface, VARIANT *URL, VA
|
|||
return hres;
|
||||
}
|
||||
|
||||
This->url = SysAllocString(V_BSTR(URL));
|
||||
|
||||
hres = IUnknown_QueryInterface(This->document, &IID_IOleObject, (void**)&oleobj);
|
||||
if(FAILED(hres))
|
||||
return hres;
|
||||
|
@ -558,6 +561,8 @@ static HRESULT WINAPI WebBrowser_Navigate2(IWebBrowser2 *iface, VARIANT *URL, VA
|
|||
hres = IOleObject_SetClientSite(oleobj, CLIENTSITE(This));
|
||||
IOleObject_Release(oleobj);
|
||||
|
||||
PostMessageW(This->doc_view_hwnd, WB_WM_NAVIGATE2, 0, 0);
|
||||
|
||||
return hres;
|
||||
}
|
||||
|
||||
|
@ -783,6 +788,7 @@ HRESULT WebBrowser_Create(IUnknown *pOuter, REFIID riid, void **ppv)
|
|||
ret->ref = 0;
|
||||
|
||||
ret->document = NULL;
|
||||
ret->url = NULL;
|
||||
|
||||
WebBrowser_OleObject_Init(ret);
|
||||
WebBrowser_ViewObject_Init(ret);
|
||||
|
|
Loading…
Reference in New Issue