Module: wine Branch: master Commit: 2cf2d8fed27bd384fc4c84563902441bf4b371b0 URL: http://source.winehq.org/git/wine.git/?a=commit;h=2cf2d8fed27bd384fc4c845639...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Mar 3 14:56:56 2010 +0100
mshtml: Call Exec(DOCHOST_DOCCANNAVIGATE) from IOleObject::SetClientSite.
---
dlls/mshtml/mshtml_private.h | 2 +- dlls/mshtml/oleobj.c | 17 +++++++++++++++-- dlls/mshtml/tests/htmldoc.c | 6 +++--- 3 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 30d1edb..5a409b3 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -398,7 +398,7 @@ struct HTMLDocumentObj { BOOL in_place_active; BOOL ui_active; BOOL window_active; - BOOL has_key_path; + BOOL hostui_setup; BOOL container_locked; BOOL focus; INT download_state; diff --git a/dlls/mshtml/oleobj.c b/dlls/mshtml/oleobj.c index 3dec3dc..a33f479 100644 --- a/dlls/mshtml/oleobj.c +++ b/dlls/mshtml/oleobj.c @@ -34,9 +34,13 @@ #include "wine/debug.h"
#include "mshtml_private.h" +#include "initguid.h"
WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
+DEFINE_OLEGUID(CGID_DocHostCmdPriv, 0x000214D4L, 0, 0); +#define DOCHOST_DOCCANNAVIGATE 0 + /********************************************************** * IOleObject implementation */ @@ -92,6 +96,7 @@ static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite HTMLDocument *This = OLEOBJ_THIS(iface); IDocHostUIHandler *pDocHostUIHandler = NULL; IOleCommandTarget *cmdtrg = NULL; + BOOL hostui_setup; VARIANT silent; HRESULT hres;
@@ -116,6 +121,8 @@ static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite if(!pClientSite) return S_OK;
+ hostui_setup = This->doc_obj->hostui_setup; + hres = IOleObject_QueryInterface(pClientSite, &IID_IDocHostUIHandler, (void**)&pDocHostUIHandler); if(SUCCEEDED(hres)) { DOCHOSTUIINFO hostinfo; @@ -133,7 +140,7 @@ static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite This->doc_obj->hostinfo = hostinfo; }
- if(!This->doc_obj->has_key_path) { + if(!hostui_setup) { hres = IDocHostUIHandler_GetOptionKeyPath(pDocHostUIHandler, &key_path, 0); if(hres == S_OK && key_path) { if(key_path[0]) { @@ -157,7 +164,7 @@ static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite IDocHostUIHandler2_Release(pDocHostUIHandler2); }
- This->doc_obj->has_key_path = TRUE; + This->doc_obj->hostui_setup = TRUE; } }
@@ -179,6 +186,12 @@ static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite VARIANT var; OLECMD cmd = {OLECMDID_SETPROGRESSTEXT, 0};
+ if(!hostui_setup) { + V_VT(&var) = VT_UNKNOWN; + V_UNKNOWN(&var) = (IUnknown*)HTMLWINDOW2(This->window); + IOleCommandTarget_Exec(cmdtrg, &CGID_DocHostCmdPriv, DOCHOST_DOCCANNAVIGATE, 0, &var, NULL); + } + IOleCommandTarget_QueryStatus(cmdtrg, NULL, 1, &cmd, NULL);
V_VT(&var) = VT_I4; diff --git a/dlls/mshtml/tests/htmldoc.c b/dlls/mshtml/tests/htmldoc.c index 20f9e74..c4c41a8 100644 --- a/dlls/mshtml/tests/htmldoc.c +++ b/dlls/mshtml/tests/htmldoc.c @@ -3142,7 +3142,7 @@ static void test_Load(IPersistMoniker *persist, IMoniker *mon) CHECK_CALLED(GetOptionKeyPath); CHECK_CALLED(GetOverrideKeyPath); CHECK_CALLED(GetWindow); - todo_wine CHECK_CALLED(Exec_DOCCANNAVIGATE); + CHECK_CALLED(Exec_DOCCANNAVIGATE); CHECK_CALLED(QueryStatus_SETPROGRESSTEXT); CHECK_CALLED(Exec_SETPROGRESSMAX); CHECK_CALLED(Exec_SETPROGRESSPOS); @@ -3865,7 +3865,7 @@ static void test_ClientSite(IOleObject *oleobj, DWORD flags) } CHECK_CALLED(GetWindow); if(flags & CLIENTSITE_EXPECTPATH) - todo_wine CHECK_CALLED(Exec_DOCCANNAVIGATE); + CHECK_CALLED(Exec_DOCCANNAVIGATE); CHECK_CALLED(QueryStatus_SETPROGRESSTEXT); CHECK_CALLED(Exec_SETPROGRESSMAX); CHECK_CALLED(Exec_SETPROGRESSPOS); @@ -4987,7 +4987,7 @@ static void test_UIActivate(BOOL do_load, BOOL use_ipsex, BOOL use_ipsw) CHECK_CALLED(GetOptionKeyPath); CHECK_CALLED(GetOverrideKeyPath); CHECK_CALLED(GetWindow); - todo_wine CHECK_CALLED(Exec_DOCCANNAVIGATE); + CHECK_CALLED(Exec_DOCCANNAVIGATE); CHECK_CALLED(QueryStatus_SETPROGRESSTEXT); CHECK_CALLED(Exec_SETPROGRESSMAX); CHECK_CALLED(Exec_SETPROGRESSPOS);