From 2cf2d8fed27bd384fc4c84563902441bf4b371b0 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Wed, 3 Mar 2010 14:56:56 +0100 Subject: [PATCH] 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 30d1edbee5f..5a409b3cae5 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 3dec3dc62dd..a33f4793ed8 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 20f9e748e27..c4c41a8b423 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);