wine/dlls/shdocvw dochost.c shdocvw.h webbrowser.c
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Nov 28 14:12:50 CST 2005
ChangeSet ID: 21514
CVSROOT: /opt/cvs-commit
Module name: wine
Changes by: julliard at winehq.org 2005/11/28 14:12:49
Modified files:
dlls/shdocvw : dochost.c shdocvw.h webbrowser.c
Log message:
Jacek Caban <jacek at codeweavers.com>
Activate document object.
Patch: http://cvs.winehq.org/patch.py?id=21514
Old revision New revision Changes Path
1.4 1.5 +77 -0 wine/dlls/shdocvw/dochost.c
1.35 1.36 +4 -0 wine/dlls/shdocvw/shdocvw.h
1.29 1.30 +6 -0 wine/dlls/shdocvw/webbrowser.c
Index: wine/dlls/shdocvw/dochost.c
diff -u -p wine/dlls/shdocvw/dochost.c:1.4 wine/dlls/shdocvw/dochost.c:1.5
--- wine/dlls/shdocvw/dochost.c:1.4 28 Nov 2005 20:12:49 -0000
+++ wine/dlls/shdocvw/dochost.c 28 Nov 2005 20:12:49 -0000
@@ -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
This = GetPropW(hwnd, wszTHIS);
}
+ switch(msg) {
+ case WB_WM_NAVIGATE2:
+ return navigate2(This);
+ }
+
return DefWindowProcA(hwnd, msg, wParam, lParam);
}
Index: wine/dlls/shdocvw/shdocvw.h
diff -u -p wine/dlls/shdocvw/shdocvw.h:1.35 wine/dlls/shdocvw/shdocvw.h:1.36
--- wine/dlls/shdocvw/shdocvw.h:1.35 28 Nov 2005 20:12:50 -0000
+++ wine/dlls/shdocvw/shdocvw.h 28 Nov 2005 20:12:50 -0000
@@ -91,6 +91,8 @@ typedef struct {
IOleContainer *container;
IOleDocumentView *view;
+ LPOLESTR url;
+
/* window context */
HWND iphwnd;
@@ -152,6 +154,8 @@ HRESULT WebBrowser_Create(IUnknown*,REFI
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)))
/**********************************************************************
Index: wine/dlls/shdocvw/webbrowser.c
diff -u -p wine/dlls/shdocvw/webbrowser.c:1.29 wine/dlls/shdocvw/webbrowser.c:1.30
--- wine/dlls/shdocvw/webbrowser.c:1.29 28 Nov 2005 20:12:50 -0000
+++ wine/dlls/shdocvw/webbrowser.c 28 Nov 2005 20:12:50 -0000
@@ -128,6 +128,7 @@ static ULONG WINAPI WebBrowser_Release(I
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_Navigat
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_Navigat
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 *pOut
ret->ref = 0;
ret->document = NULL;
+ ret->url = NULL;
WebBrowser_OleObject_Init(ret);
WebBrowser_ViewObject_Init(ret);
More information about the wine-cvs
mailing list