2008-04-11 12:45:31 +00:00
|
|
|
/*
|
|
|
|
* Copyright 2005 Jacek Caban
|
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Lesser General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with this library; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "mshtml_private.h"
|
|
|
|
|
2010-03-06 11:42:03 +00:00
|
|
|
#define DOCHOST_DOCCANNAVIGATE 0
|
|
|
|
|
2013-05-19 21:21:20 +00:00
|
|
|
typedef struct {
|
|
|
|
IEnumUnknown IEnumUnknown_iface;
|
|
|
|
LONG ref;
|
|
|
|
} EnumUnknown;
|
|
|
|
|
|
|
|
static inline EnumUnknown *impl_from_IEnumUnknown(IEnumUnknown *iface)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(iface, EnumUnknown, IEnumUnknown_iface);
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI EnumUnknown_QueryInterface(IEnumUnknown *iface, REFIID riid, void **ppv)
|
|
|
|
{
|
|
|
|
EnumUnknown *This = impl_from_IEnumUnknown(iface);
|
|
|
|
|
|
|
|
if(IsEqualGUID(&IID_IUnknown, riid)) {
|
|
|
|
TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
|
|
|
|
*ppv = &This->IEnumUnknown_iface;
|
|
|
|
}else if(IsEqualGUID(&IID_IEnumUnknown, riid)) {
|
|
|
|
TRACE("(%p)->(IID_IEnumUnknown %p)\n", This, ppv);
|
|
|
|
*ppv = &This->IEnumUnknown_iface;
|
|
|
|
}else {
|
|
|
|
WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
|
|
|
|
*ppv = NULL;
|
|
|
|
return E_NOINTERFACE;
|
|
|
|
}
|
|
|
|
|
|
|
|
IUnknown_AddRef((IUnknown*)*ppv);
|
|
|
|
return S_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
static ULONG WINAPI EnumUnknown_AddRef(IEnumUnknown *iface)
|
|
|
|
{
|
|
|
|
EnumUnknown *This = impl_from_IEnumUnknown(iface);
|
|
|
|
LONG ref = InterlockedIncrement(&This->ref);
|
|
|
|
|
|
|
|
TRACE("(%p) ref=%d\n", This, ref);
|
|
|
|
|
|
|
|
return ref;
|
|
|
|
}
|
|
|
|
|
|
|
|
static ULONG WINAPI EnumUnknown_Release(IEnumUnknown *iface)
|
|
|
|
{
|
|
|
|
EnumUnknown *This = impl_from_IEnumUnknown(iface);
|
|
|
|
LONG ref = InterlockedDecrement(&This->ref);
|
|
|
|
|
|
|
|
TRACE("(%p) ref=%d\n", This, ref);
|
|
|
|
|
|
|
|
if(!ref)
|
|
|
|
heap_free(This);
|
|
|
|
|
|
|
|
return ref;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI EnumUnknown_Next(IEnumUnknown *iface, ULONG celt, IUnknown **rgelt, ULONG *pceltFetched)
|
|
|
|
{
|
|
|
|
EnumUnknown *This = impl_from_IEnumUnknown(iface);
|
|
|
|
|
|
|
|
TRACE("(%p)->(%u %p %p)\n", This, celt, rgelt, pceltFetched);
|
|
|
|
|
|
|
|
/* FIXME: It's not clear if we should ever return something here */
|
|
|
|
if(pceltFetched)
|
|
|
|
*pceltFetched = 0;
|
|
|
|
return S_FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI EnumUnknown_Skip(IEnumUnknown *iface, ULONG celt)
|
|
|
|
{
|
|
|
|
EnumUnknown *This = impl_from_IEnumUnknown(iface);
|
|
|
|
FIXME("(%p)->(%u)\n", This, celt);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI EnumUnknown_Reset(IEnumUnknown *iface)
|
|
|
|
{
|
|
|
|
EnumUnknown *This = impl_from_IEnumUnknown(iface);
|
|
|
|
FIXME("(%p)\n", This);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI EnumUnknown_Clone(IEnumUnknown *iface, IEnumUnknown **ppenum)
|
|
|
|
{
|
|
|
|
EnumUnknown *This = impl_from_IEnumUnknown(iface);
|
|
|
|
FIXME("(%p)->(%p)\n", This, ppenum);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static const IEnumUnknownVtbl EnumUnknownVtbl = {
|
|
|
|
EnumUnknown_QueryInterface,
|
|
|
|
EnumUnknown_AddRef,
|
|
|
|
EnumUnknown_Release,
|
|
|
|
EnumUnknown_Next,
|
|
|
|
EnumUnknown_Skip,
|
|
|
|
EnumUnknown_Reset,
|
|
|
|
EnumUnknown_Clone
|
|
|
|
};
|
|
|
|
|
2008-04-11 12:45:31 +00:00
|
|
|
/**********************************************************
|
|
|
|
* IOleObject implementation
|
|
|
|
*/
|
|
|
|
|
2013-05-19 21:21:20 +00:00
|
|
|
static inline HTMLDocument *impl_from_IOleObject(IOleObject *iface)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(iface, HTMLDocument, IOleObject_iface);
|
|
|
|
}
|
2008-04-11 12:45:31 +00:00
|
|
|
|
2013-05-19 21:21:20 +00:00
|
|
|
static HRESULT WINAPI OleObject_QueryInterface(IOleObject *iface, REFIID riid, void **ppv)
|
2008-04-11 12:45:31 +00:00
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleObject(iface);
|
|
|
|
return htmldoc_query_interface(This, riid, ppv);
|
2008-04-11 12:45:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static ULONG WINAPI OleObject_AddRef(IOleObject *iface)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleObject(iface);
|
|
|
|
return htmldoc_addref(This);
|
2008-04-11 12:45:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static ULONG WINAPI OleObject_Release(IOleObject *iface)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleObject(iface);
|
|
|
|
return htmldoc_release(This);
|
2008-04-11 12:45:31 +00:00
|
|
|
}
|
|
|
|
|
2009-10-20 19:28:02 +00:00
|
|
|
static void update_hostinfo(HTMLDocumentObj *This, DOCHOSTUIINFO *hostinfo)
|
2008-07-08 16:39:29 +00:00
|
|
|
{
|
|
|
|
nsIScrollable *scrollable;
|
|
|
|
nsresult nsres;
|
|
|
|
|
|
|
|
if(!This->nscontainer)
|
|
|
|
return;
|
|
|
|
|
|
|
|
nsres = nsIWebBrowser_QueryInterface(This->nscontainer->webbrowser, &IID_nsIScrollable, (void**)&scrollable);
|
|
|
|
if(NS_SUCCEEDED(nsres)) {
|
|
|
|
nsres = nsIScrollable_SetDefaultScrollbarPreferences(scrollable, ScrollOrientation_Y,
|
|
|
|
(hostinfo->dwFlags & DOCHOSTUIFLAG_SCROLL_NO) ? Scrollbar_Never : Scrollbar_Always);
|
|
|
|
if(NS_FAILED(nsres))
|
|
|
|
ERR("Could not set default Y scrollbar prefs: %08x\n", nsres);
|
|
|
|
|
|
|
|
nsres = nsIScrollable_SetDefaultScrollbarPreferences(scrollable, ScrollOrientation_X,
|
|
|
|
hostinfo->dwFlags & DOCHOSTUIFLAG_SCROLL_NO ? Scrollbar_Never : Scrollbar_Auto);
|
|
|
|
if(NS_FAILED(nsres))
|
|
|
|
ERR("Could not set default X scrollbar prefs: %08x\n", nsres);
|
|
|
|
|
|
|
|
nsIScrollable_Release(scrollable);
|
|
|
|
}else {
|
|
|
|
ERR("Could not get nsIScrollable: %08x\n", nsres);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-05-19 21:21:20 +00:00
|
|
|
/* Calls undocumented 84 cmd of CGID_ShellDocView */
|
|
|
|
void call_docview_84(HTMLDocumentObj *doc)
|
|
|
|
{
|
|
|
|
IOleCommandTarget *olecmd;
|
|
|
|
VARIANT var;
|
|
|
|
HRESULT hres;
|
|
|
|
|
|
|
|
if(!doc->client)
|
|
|
|
return;
|
|
|
|
|
|
|
|
hres = IOleClientSite_QueryInterface(doc->client, &IID_IOleCommandTarget, (void**)&olecmd);
|
|
|
|
if(FAILED(hres))
|
|
|
|
return;
|
|
|
|
|
|
|
|
VariantInit(&var);
|
|
|
|
hres = IOleCommandTarget_Exec(olecmd, &CGID_ShellDocView, 84, 0, NULL, &var);
|
|
|
|
IOleCommandTarget_Release(olecmd);
|
|
|
|
if(SUCCEEDED(hres) && V_VT(&var) != VT_NULL)
|
|
|
|
FIXME("handle result\n");
|
|
|
|
}
|
|
|
|
|
2014-04-26 18:30:09 +00:00
|
|
|
void set_document_navigation(HTMLDocumentObj *doc, BOOL doc_can_navigate)
|
|
|
|
{
|
|
|
|
VARIANT var;
|
|
|
|
|
|
|
|
if(!doc->client_cmdtrg)
|
|
|
|
return;
|
|
|
|
|
|
|
|
if(doc_can_navigate) {
|
|
|
|
V_VT(&var) = VT_UNKNOWN;
|
|
|
|
V_UNKNOWN(&var) = (IUnknown*)&doc->basedoc.window->base.IHTMLWindow2_iface;
|
|
|
|
}
|
|
|
|
|
|
|
|
IOleCommandTarget_Exec(doc->client_cmdtrg, &CGID_DocHostCmdPriv, DOCHOST_DOCCANNAVIGATE, 0,
|
|
|
|
doc_can_navigate ? &var : NULL, NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void load_settings(HTMLDocumentObj *doc)
|
|
|
|
{
|
|
|
|
nsIMarkupDocumentViewer *markup_document_viewer;
|
|
|
|
nsIContentViewer *content_viewer;
|
|
|
|
nsIDocShell *doc_shell;
|
|
|
|
HKEY settings_key;
|
|
|
|
DWORD val, size;
|
|
|
|
LONG res;
|
|
|
|
nsresult nsres;
|
|
|
|
|
|
|
|
static const WCHAR ie_keyW[] = {
|
|
|
|
'S','O','F','T','W','A','R','E','\\',
|
|
|
|
'M','i','c','r','o','s','o','f','t','\\',
|
|
|
|
'I','n','t','e','r','n','e','t',' ','E','x','p','l','o','r','e','r',0};
|
|
|
|
static const WCHAR zoomW[] = {'Z','o','o','m',0};
|
|
|
|
static const WCHAR zoom_factorW[] = {'Z','o','o','m','F','a','c','t','o','r',0};
|
|
|
|
|
|
|
|
res = RegOpenKeyW(HKEY_CURRENT_USER, ie_keyW, &settings_key);
|
|
|
|
if(res != ERROR_SUCCESS)
|
|
|
|
return;
|
|
|
|
|
|
|
|
size = sizeof(val);
|
|
|
|
res = RegGetValueW(settings_key, zoomW, zoom_factorW, RRF_RT_REG_DWORD, NULL, &val, &size);
|
|
|
|
RegCloseKey(settings_key);
|
|
|
|
if(res != ERROR_SUCCESS)
|
|
|
|
return;
|
|
|
|
|
|
|
|
TRACE("Setting ZoomFactor to %u\n", val);
|
|
|
|
|
|
|
|
nsres = get_nsinterface((nsISupports*)doc->nscontainer->navigation, &IID_nsIDocShell, (void**)&doc_shell);
|
|
|
|
assert(nsres == NS_OK);
|
|
|
|
|
|
|
|
nsres = nsIDocShell_GetContentViewer(doc_shell, &content_viewer);
|
|
|
|
assert(nsres == NS_OK && content_viewer);
|
|
|
|
|
|
|
|
nsres = nsISupports_QueryInterface(content_viewer, &IID_nsIMarkupDocumentViewer, (void**)&markup_document_viewer);
|
|
|
|
nsISupports_Release(content_viewer);
|
|
|
|
assert(nsres == NS_OK);
|
|
|
|
|
|
|
|
nsres = nsIMarkupDocumentViewer_SetFullZoom(markup_document_viewer, (float)val/100000);
|
|
|
|
if(NS_FAILED(nsres))
|
|
|
|
ERR("SetFullZoom failed: %08x\n", nsres);
|
|
|
|
|
|
|
|
nsIDocShell_Release(doc_shell);
|
|
|
|
}
|
|
|
|
|
2008-04-11 12:45:31 +00:00
|
|
|
static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite *pClientSite)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleObject(iface);
|
2008-04-11 12:45:31 +00:00
|
|
|
IOleCommandTarget *cmdtrg = NULL;
|
Sync avifil, credui, crypt32, cryptdlg, cryptui, dnsapi, gdiplus, hhctrl, hnetcfg, iccvid, imaadp32, imm32, jscript, localspl, localui, mapi32, mciavi32, mcicda, mciqtz32, mciseq, mciwave, mshtml, msrle32, msvfw32, msvidc32, msxml3, oleacc, oleaut32 to Wine 1.2rc5 (Samuel Serapion, small changes by me)
Remove Esperanto and Walon languages from comctl32, comdlg32, mpr, msi, shlwapi, wininet
svn path=/trunk/; revision=47920
2010-07-01 11:09:47 +00:00
|
|
|
IOleWindow *ole_window;
|
2013-10-07 14:22:37 +00:00
|
|
|
IBrowserService *browser_service;
|
2010-03-06 11:42:03 +00:00
|
|
|
BOOL hostui_setup;
|
2008-04-11 12:45:31 +00:00
|
|
|
VARIANT silent;
|
Sync avifil, credui, crypt32, cryptdlg, cryptui, dnsapi, gdiplus, hhctrl, hnetcfg, iccvid, imaadp32, imm32, jscript, localspl, localui, mapi32, mciavi32, mcicda, mciqtz32, mciseq, mciwave, mshtml, msrle32, msvfw32, msvidc32, msxml3, oleacc, oleaut32 to Wine 1.2rc5 (Samuel Serapion, small changes by me)
Remove Esperanto and Walon languages from comctl32, comdlg32, mpr, msi, shlwapi, wininet
svn path=/trunk/; revision=47920
2010-07-01 11:09:47 +00:00
|
|
|
HWND hwnd;
|
2008-04-11 12:45:31 +00:00
|
|
|
HRESULT hres;
|
|
|
|
|
|
|
|
TRACE("(%p)->(%p)\n", This, pClientSite);
|
|
|
|
|
2009-10-20 19:28:02 +00:00
|
|
|
if(pClientSite == This->doc_obj->client)
|
2008-04-11 12:45:31 +00:00
|
|
|
return S_OK;
|
|
|
|
|
2009-10-20 19:28:02 +00:00
|
|
|
if(This->doc_obj->client) {
|
|
|
|
IOleClientSite_Release(This->doc_obj->client);
|
|
|
|
This->doc_obj->client = NULL;
|
|
|
|
This->doc_obj->usermode = UNKNOWN_USERMODE;
|
2008-04-11 12:45:31 +00:00
|
|
|
}
|
|
|
|
|
2013-05-19 21:21:20 +00:00
|
|
|
if(This->doc_obj->client_cmdtrg) {
|
|
|
|
IOleCommandTarget_Release(This->doc_obj->client_cmdtrg);
|
|
|
|
This->doc_obj->client_cmdtrg = NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(This->doc_obj->hostui && !This->doc_obj->custom_hostui) {
|
2009-10-20 19:28:02 +00:00
|
|
|
IDocHostUIHandler_Release(This->doc_obj->hostui);
|
|
|
|
This->doc_obj->hostui = NULL;
|
2008-04-11 12:45:31 +00:00
|
|
|
}
|
|
|
|
|
2013-05-19 21:21:20 +00:00
|
|
|
if(This->doc_obj->doc_object_service) {
|
|
|
|
IDocObjectService_Release(This->doc_obj->doc_object_service);
|
|
|
|
This->doc_obj->doc_object_service = NULL;
|
|
|
|
}
|
|
|
|
|
2013-10-07 14:22:37 +00:00
|
|
|
if(This->doc_obj->webbrowser) {
|
|
|
|
IUnknown_Release(This->doc_obj->webbrowser);
|
|
|
|
This->doc_obj->webbrowser = NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(This->doc_obj->browser_service) {
|
|
|
|
IUnknown_Release(This->doc_obj->browser_service);
|
|
|
|
This->doc_obj->browser_service = NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(This->doc_obj->travel_log) {
|
|
|
|
ITravelLog_Release(This->doc_obj->travel_log);
|
|
|
|
This->doc_obj->travel_log = NULL;
|
|
|
|
}
|
|
|
|
|
2009-10-20 19:28:02 +00:00
|
|
|
memset(&This->doc_obj->hostinfo, 0, sizeof(DOCHOSTUIINFO));
|
2008-04-11 12:45:31 +00:00
|
|
|
|
|
|
|
if(!pClientSite)
|
|
|
|
return S_OK;
|
|
|
|
|
Sync avifil, credui, crypt32, cryptdlg, cryptui, dnsapi, gdiplus, hhctrl, hnetcfg, iccvid, imaadp32, imm32, jscript, localspl, localui, mapi32, mciavi32, mcicda, mciqtz32, mciseq, mciwave, mshtml, msrle32, msvfw32, msvidc32, msxml3, oleacc, oleaut32 to Wine 1.2rc5 (Samuel Serapion, small changes by me)
Remove Esperanto and Walon languages from comctl32, comdlg32, mpr, msi, shlwapi, wininet
svn path=/trunk/; revision=47920
2010-07-01 11:09:47 +00:00
|
|
|
IOleClientSite_AddRef(pClientSite);
|
|
|
|
This->doc_obj->client = pClientSite;
|
|
|
|
|
2010-03-06 11:42:03 +00:00
|
|
|
hostui_setup = This->doc_obj->hostui_setup;
|
|
|
|
|
2013-05-19 21:21:20 +00:00
|
|
|
if(!This->doc_obj->hostui) {
|
|
|
|
IDocHostUIHandler *uihandler;
|
|
|
|
|
|
|
|
This->doc_obj->custom_hostui = FALSE;
|
|
|
|
|
|
|
|
hres = IOleClientSite_QueryInterface(pClientSite, &IID_IDocHostUIHandler, (void**)&uihandler);
|
|
|
|
if(SUCCEEDED(hres))
|
|
|
|
This->doc_obj->hostui = uihandler;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(This->doc_obj->hostui) {
|
2008-04-11 12:45:31 +00:00
|
|
|
DOCHOSTUIINFO hostinfo;
|
|
|
|
LPOLESTR key_path = NULL, override_key_path = NULL;
|
2013-05-19 21:21:20 +00:00
|
|
|
IDocHostUIHandler2 *uihandler2;
|
Sync avifil, credui, crypt32, cryptdlg, cryptui, dnsapi, gdiplus, hhctrl, hnetcfg, iccvid, imaadp32, imm32, jscript, localspl, localui, mapi32, mciavi32, mcicda, mciqtz32, mciseq, mciwave, mshtml, msrle32, msvfw32, msvidc32, msxml3, oleacc, oleaut32 to Wine 1.2rc5 (Samuel Serapion, small changes by me)
Remove Esperanto and Walon languages from comctl32, comdlg32, mpr, msi, shlwapi, wininet
svn path=/trunk/; revision=47920
2010-07-01 11:09:47 +00:00
|
|
|
|
2008-04-11 12:45:31 +00:00
|
|
|
memset(&hostinfo, 0, sizeof(DOCHOSTUIINFO));
|
|
|
|
hostinfo.cbSize = sizeof(DOCHOSTUIINFO);
|
2013-05-19 21:21:20 +00:00
|
|
|
hres = IDocHostUIHandler_GetHostInfo(This->doc_obj->hostui, &hostinfo);
|
2008-04-11 12:45:31 +00:00
|
|
|
if(SUCCEEDED(hres)) {
|
|
|
|
TRACE("hostinfo = {%u %08x %08x %s %s}\n",
|
|
|
|
hostinfo.cbSize, hostinfo.dwFlags, hostinfo.dwDoubleClick,
|
|
|
|
debugstr_w(hostinfo.pchHostCss), debugstr_w(hostinfo.pchHostNS));
|
2009-10-20 19:28:02 +00:00
|
|
|
update_hostinfo(This->doc_obj, &hostinfo);
|
|
|
|
This->doc_obj->hostinfo = hostinfo;
|
2008-04-11 12:45:31 +00:00
|
|
|
}
|
|
|
|
|
2010-03-06 11:42:03 +00:00
|
|
|
if(!hostui_setup) {
|
2013-05-19 21:21:20 +00:00
|
|
|
hres = IDocHostUIHandler_GetOptionKeyPath(This->doc_obj->hostui, &key_path, 0);
|
2008-04-11 12:45:31 +00:00
|
|
|
if(hres == S_OK && key_path) {
|
|
|
|
if(key_path[0]) {
|
|
|
|
/* FIXME: use key_path */
|
2014-04-26 18:30:09 +00:00
|
|
|
FIXME("key_path = %s\n", debugstr_w(key_path));
|
2008-04-11 12:45:31 +00:00
|
|
|
}
|
|
|
|
CoTaskMemFree(key_path);
|
|
|
|
}
|
|
|
|
|
2013-05-19 21:21:20 +00:00
|
|
|
hres = IDocHostUIHandler_QueryInterface(This->doc_obj->hostui, &IID_IDocHostUIHandler2,
|
|
|
|
(void**)&uihandler2);
|
2008-04-11 12:45:31 +00:00
|
|
|
if(SUCCEEDED(hres)) {
|
2013-05-19 21:21:20 +00:00
|
|
|
hres = IDocHostUIHandler2_GetOverrideKeyPath(uihandler2, &override_key_path, 0);
|
2008-04-11 12:45:31 +00:00
|
|
|
if(hres == S_OK && override_key_path && override_key_path[0]) {
|
|
|
|
if(override_key_path[0]) {
|
|
|
|
/*FIXME: use override_key_path */
|
2014-04-26 18:30:09 +00:00
|
|
|
FIXME("override_key_path = %s\n", debugstr_w(override_key_path));
|
2008-04-11 12:45:31 +00:00
|
|
|
}
|
|
|
|
CoTaskMemFree(override_key_path);
|
|
|
|
}
|
2013-05-19 21:21:20 +00:00
|
|
|
IDocHostUIHandler2_Release(uihandler2);
|
2008-04-11 12:45:31 +00:00
|
|
|
}
|
|
|
|
|
2010-03-06 11:42:03 +00:00
|
|
|
This->doc_obj->hostui_setup = TRUE;
|
2008-04-11 12:45:31 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-04-26 18:30:09 +00:00
|
|
|
load_settings(This->doc_obj);
|
|
|
|
|
2008-04-11 12:45:31 +00:00
|
|
|
/* Native calls here GetWindow. What is it for?
|
|
|
|
* We don't have anything to do with it here (yet). */
|
Sync avifil, credui, crypt32, cryptdlg, cryptui, dnsapi, gdiplus, hhctrl, hnetcfg, iccvid, imaadp32, imm32, jscript, localspl, localui, mapi32, mciavi32, mcicda, mciqtz32, mciseq, mciwave, mshtml, msrle32, msvfw32, msvidc32, msxml3, oleacc, oleaut32 to Wine 1.2rc5 (Samuel Serapion, small changes by me)
Remove Esperanto and Walon languages from comctl32, comdlg32, mpr, msi, shlwapi, wininet
svn path=/trunk/; revision=47920
2010-07-01 11:09:47 +00:00
|
|
|
hres = IOleClientSite_QueryInterface(pClientSite, &IID_IOleWindow, (void**)&ole_window);
|
|
|
|
if(SUCCEEDED(hres)) {
|
|
|
|
IOleWindow_GetWindow(ole_window, &hwnd);
|
|
|
|
IOleWindow_Release(ole_window);
|
2008-04-11 12:45:31 +00:00
|
|
|
}
|
|
|
|
|
2013-10-07 14:22:37 +00:00
|
|
|
hres = do_query_service((IUnknown*)pClientSite, &IID_IShellBrowser,
|
|
|
|
&IID_IBrowserService, (void**)&browser_service);
|
|
|
|
if(SUCCEEDED(hres)) {
|
|
|
|
ITravelLog *travel_log;
|
|
|
|
|
|
|
|
This->doc_obj->browser_service = (IUnknown*)browser_service;
|
|
|
|
|
|
|
|
hres = IBrowserService_GetTravelLog(browser_service, &travel_log);
|
|
|
|
if(SUCCEEDED(hres))
|
|
|
|
This->doc_obj->travel_log = travel_log;
|
|
|
|
}else {
|
|
|
|
browser_service = NULL;
|
|
|
|
}
|
|
|
|
|
2008-04-11 12:45:31 +00:00
|
|
|
hres = IOleClientSite_QueryInterface(pClientSite, &IID_IOleCommandTarget, (void**)&cmdtrg);
|
|
|
|
if(SUCCEEDED(hres)) {
|
|
|
|
VARIANT var;
|
|
|
|
OLECMD cmd = {OLECMDID_SETPROGRESSTEXT, 0};
|
|
|
|
|
2013-05-19 21:21:20 +00:00
|
|
|
This->doc_obj->client_cmdtrg = cmdtrg;
|
|
|
|
|
2010-03-06 11:42:03 +00:00
|
|
|
if(!hostui_setup) {
|
2013-05-19 21:21:20 +00:00
|
|
|
IDocObjectService *doc_object_service;
|
|
|
|
IWebBrowser2 *wb;
|
|
|
|
|
2014-04-26 18:30:09 +00:00
|
|
|
set_document_navigation(This->doc_obj, TRUE);
|
2013-05-19 21:21:20 +00:00
|
|
|
|
2013-10-07 14:22:37 +00:00
|
|
|
if(browser_service) {
|
2013-05-19 21:21:20 +00:00
|
|
|
hres = IBrowserService_QueryInterface(browser_service,
|
|
|
|
&IID_IDocObjectService, (void**)&doc_object_service);
|
|
|
|
if(SUCCEEDED(hres)) {
|
|
|
|
This->doc_obj->doc_object_service = doc_object_service;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Some embedding routines, esp. in regards to use of IDocObjectService, differ if
|
|
|
|
* embedder supports IWebBrowserApp.
|
|
|
|
*/
|
|
|
|
hres = do_query_service((IUnknown*)pClientSite, &IID_IWebBrowserApp, &IID_IWebBrowser2, (void**)&wb);
|
2013-10-07 14:22:37 +00:00
|
|
|
if(SUCCEEDED(hres))
|
|
|
|
This->doc_obj->webbrowser = (IUnknown*)wb;
|
2013-05-19 21:21:20 +00:00
|
|
|
}
|
|
|
|
}
|
2010-03-06 11:42:03 +00:00
|
|
|
}
|
|
|
|
|
2013-05-19 21:21:20 +00:00
|
|
|
call_docview_84(This->doc_obj);
|
|
|
|
|
2008-04-11 12:45:31 +00:00
|
|
|
IOleCommandTarget_QueryStatus(cmdtrg, NULL, 1, &cmd, NULL);
|
|
|
|
|
|
|
|
V_VT(&var) = VT_I4;
|
|
|
|
V_I4(&var) = 0;
|
|
|
|
IOleCommandTarget_Exec(cmdtrg, NULL, OLECMDID_SETPROGRESSMAX,
|
|
|
|
OLECMDEXECOPT_DONTPROMPTUSER, &var, NULL);
|
|
|
|
IOleCommandTarget_Exec(cmdtrg, NULL, OLECMDID_SETPROGRESSPOS,
|
|
|
|
OLECMDEXECOPT_DONTPROMPTUSER, &var, NULL);
|
|
|
|
}
|
|
|
|
|
2009-10-20 19:28:02 +00:00
|
|
|
if(This->doc_obj->usermode == UNKNOWN_USERMODE)
|
2013-05-19 21:21:20 +00:00
|
|
|
IOleControl_OnAmbientPropertyChange(&This->IOleControl_iface, DISPID_AMBIENT_USERMODE);
|
2008-04-11 12:45:31 +00:00
|
|
|
|
2013-05-19 21:21:20 +00:00
|
|
|
IOleControl_OnAmbientPropertyChange(&This->IOleControl_iface,
|
|
|
|
DISPID_AMBIENT_OFFLINEIFNOTCONNECTED);
|
2008-04-11 12:45:31 +00:00
|
|
|
|
2009-10-20 19:28:02 +00:00
|
|
|
hres = get_client_disp_property(This->doc_obj->client, DISPID_AMBIENT_SILENT, &silent);
|
2008-04-11 12:45:31 +00:00
|
|
|
if(SUCCEEDED(hres)) {
|
|
|
|
if(V_VT(&silent) != VT_BOOL)
|
2013-05-19 21:21:20 +00:00
|
|
|
WARN("silent = %s\n", debugstr_variant(&silent));
|
2008-04-11 12:45:31 +00:00
|
|
|
else if(V_BOOL(&silent))
|
|
|
|
FIXME("silent == true\n");
|
|
|
|
}
|
|
|
|
|
2013-05-19 21:21:20 +00:00
|
|
|
IOleControl_OnAmbientPropertyChange(&This->IOleControl_iface, DISPID_AMBIENT_USERAGENT);
|
|
|
|
IOleControl_OnAmbientPropertyChange(&This->IOleControl_iface, DISPID_AMBIENT_PALETTE);
|
2008-04-11 12:45:31 +00:00
|
|
|
|
|
|
|
return S_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleObject_GetClientSite(IOleObject *iface, IOleClientSite **ppClientSite)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleObject(iface);
|
2008-04-11 12:45:31 +00:00
|
|
|
|
|
|
|
TRACE("(%p)->(%p)\n", This, ppClientSite);
|
|
|
|
|
|
|
|
if(!ppClientSite)
|
|
|
|
return E_INVALIDARG;
|
|
|
|
|
2009-10-20 19:28:02 +00:00
|
|
|
if(This->doc_obj->client)
|
|
|
|
IOleClientSite_AddRef(This->doc_obj->client);
|
|
|
|
*ppClientSite = This->doc_obj->client;
|
2008-04-11 12:45:31 +00:00
|
|
|
|
|
|
|
return S_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleObject_SetHostNames(IOleObject *iface, LPCOLESTR szContainerApp, LPCOLESTR szContainerObj)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleObject(iface);
|
2008-04-11 12:45:31 +00:00
|
|
|
FIXME("(%p)->(%s %s)\n", This, debugstr_w(szContainerApp), debugstr_w(szContainerObj));
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleObject_Close(IOleObject *iface, DWORD dwSaveOption)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleObject(iface);
|
2008-04-11 12:45:31 +00:00
|
|
|
|
|
|
|
TRACE("(%p)->(%08x)\n", This, dwSaveOption);
|
|
|
|
|
|
|
|
if(dwSaveOption == OLECLOSE_PROMPTSAVE)
|
|
|
|
FIXME("OLECLOSE_PROMPTSAVE not implemented\n");
|
|
|
|
|
2009-10-20 19:28:02 +00:00
|
|
|
if(This->doc_obj->in_place_active)
|
2013-05-19 21:21:20 +00:00
|
|
|
IOleInPlaceObjectWindowless_InPlaceDeactivate(&This->IOleInPlaceObjectWindowless_iface);
|
2008-04-11 12:45:31 +00:00
|
|
|
|
2009-10-20 19:28:02 +00:00
|
|
|
HTMLDocument_LockContainer(This->doc_obj, FALSE);
|
2010-01-18 16:27:14 +00:00
|
|
|
|
|
|
|
if(This->advise_holder)
|
|
|
|
IOleAdviseHolder_SendOnClose(This->advise_holder);
|
2008-04-11 12:45:31 +00:00
|
|
|
|
|
|
|
return S_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleObject_SetMoniker(IOleObject *iface, DWORD dwWhichMoniker, IMoniker *pmk)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleObject(iface);
|
2008-04-11 12:45:31 +00:00
|
|
|
FIXME("(%p %d %p)->()\n", This, dwWhichMoniker, pmk);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleObject_GetMoniker(IOleObject *iface, DWORD dwAssign, DWORD dwWhichMoniker, IMoniker **ppmk)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleObject(iface);
|
2008-04-11 12:45:31 +00:00
|
|
|
FIXME("(%p)->(%d %d %p)\n", This, dwAssign, dwWhichMoniker, ppmk);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleObject_InitFromData(IOleObject *iface, IDataObject *pDataObject, BOOL fCreation,
|
|
|
|
DWORD dwReserved)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleObject(iface);
|
2008-04-11 12:45:31 +00:00
|
|
|
FIXME("(%p)->(%p %x %d)\n", This, pDataObject, fCreation, dwReserved);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleObject_GetClipboardData(IOleObject *iface, DWORD dwReserved, IDataObject **ppDataObject)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleObject(iface);
|
2008-04-11 12:45:31 +00:00
|
|
|
FIXME("(%p)->(%d %p)\n", This, dwReserved, ppDataObject);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleObject_DoVerb(IOleObject *iface, LONG iVerb, LPMSG lpmsg, IOleClientSite *pActiveSite,
|
|
|
|
LONG lindex, HWND hwndParent, LPCRECT lprcPosRect)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleObject(iface);
|
2008-04-11 12:45:31 +00:00
|
|
|
IOleDocumentSite *pDocSite;
|
|
|
|
HRESULT hres;
|
|
|
|
|
|
|
|
TRACE("(%p)->(%d %p %p %d %p %p)\n", This, iVerb, lpmsg, pActiveSite, lindex, hwndParent, lprcPosRect);
|
|
|
|
|
|
|
|
if(iVerb != OLEIVERB_SHOW && iVerb != OLEIVERB_UIACTIVATE && iVerb != OLEIVERB_INPLACEACTIVATE) {
|
|
|
|
FIXME("iVerb = %d not supported\n", iVerb);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(!pActiveSite)
|
2009-10-20 19:28:02 +00:00
|
|
|
pActiveSite = This->doc_obj->client;
|
2008-04-11 12:45:31 +00:00
|
|
|
|
|
|
|
hres = IOleClientSite_QueryInterface(pActiveSite, &IID_IOleDocumentSite, (void**)&pDocSite);
|
|
|
|
if(SUCCEEDED(hres)) {
|
2009-10-20 19:28:02 +00:00
|
|
|
HTMLDocument_LockContainer(This->doc_obj, TRUE);
|
2008-04-11 12:45:31 +00:00
|
|
|
|
|
|
|
/* FIXME: Create new IOleDocumentView. See CreateView for more info. */
|
2013-05-19 21:21:20 +00:00
|
|
|
hres = IOleDocumentSite_ActivateMe(pDocSite, &This->IOleDocumentView_iface);
|
2008-04-11 12:45:31 +00:00
|
|
|
IOleDocumentSite_Release(pDocSite);
|
|
|
|
}else {
|
2013-05-19 21:21:20 +00:00
|
|
|
hres = IOleDocumentView_UIActivate(&This->IOleDocumentView_iface, TRUE);
|
2008-04-11 12:45:31 +00:00
|
|
|
if(SUCCEEDED(hres)) {
|
|
|
|
if(lprcPosRect) {
|
|
|
|
RECT rect; /* We need to pass rect as not const pointer */
|
|
|
|
rect = *lprcPosRect;
|
2013-05-19 21:21:20 +00:00
|
|
|
IOleDocumentView_SetRect(&This->IOleDocumentView_iface, &rect);
|
2008-04-11 12:45:31 +00:00
|
|
|
}
|
2013-05-19 21:21:20 +00:00
|
|
|
IOleDocumentView_Show(&This->IOleDocumentView_iface, TRUE);
|
2008-04-11 12:45:31 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return hres;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleObject_EnumVerbs(IOleObject *iface, IEnumOLEVERB **ppEnumOleVerb)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleObject(iface);
|
2008-04-11 12:45:31 +00:00
|
|
|
FIXME("(%p)->(%p)\n", This, ppEnumOleVerb);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleObject_Update(IOleObject *iface)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleObject(iface);
|
2008-04-11 12:45:31 +00:00
|
|
|
FIXME("(%p)\n", This);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleObject_IsUpToDate(IOleObject *iface)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleObject(iface);
|
2008-04-11 12:45:31 +00:00
|
|
|
FIXME("(%p)\n", This);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleObject_GetUserClassID(IOleObject *iface, CLSID *pClsid)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleObject(iface);
|
2008-04-11 12:45:31 +00:00
|
|
|
|
|
|
|
TRACE("(%p)->(%p)\n", This, pClsid);
|
|
|
|
|
|
|
|
if(!pClsid)
|
|
|
|
return E_INVALIDARG;
|
|
|
|
|
|
|
|
*pClsid = CLSID_HTMLDocument;
|
|
|
|
return S_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleObject_GetUserType(IOleObject *iface, DWORD dwFormOfType, LPOLESTR *pszUserType)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleObject(iface);
|
2008-04-11 12:45:31 +00:00
|
|
|
FIXME("(%p)->(%d %p)\n", This, dwFormOfType, pszUserType);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleObject_SetExtent(IOleObject *iface, DWORD dwDrawAspect, SIZEL *psizel)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleObject(iface);
|
2008-04-11 12:45:31 +00:00
|
|
|
FIXME("(%p)->(%d %p)\n", This, dwDrawAspect, psizel);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleObject_GetExtent(IOleObject *iface, DWORD dwDrawAspect, SIZEL *psizel)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleObject(iface);
|
2008-04-11 12:45:31 +00:00
|
|
|
FIXME("(%p)->(%d %p)\n", This, dwDrawAspect, psizel);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleObject_Advise(IOleObject *iface, IAdviseSink *pAdvSink, DWORD *pdwConnection)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleObject(iface);
|
2010-01-18 16:27:14 +00:00
|
|
|
TRACE("(%p)->(%p %p)\n", This, pAdvSink, pdwConnection);
|
|
|
|
|
|
|
|
if(!pdwConnection)
|
|
|
|
return E_INVALIDARG;
|
|
|
|
|
|
|
|
if(!pAdvSink) {
|
|
|
|
*pdwConnection = 0;
|
|
|
|
return E_INVALIDARG;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(!This->advise_holder) {
|
|
|
|
CreateOleAdviseHolder(&This->advise_holder);
|
|
|
|
if(!This->advise_holder)
|
|
|
|
return E_OUTOFMEMORY;
|
|
|
|
}
|
|
|
|
|
|
|
|
return IOleAdviseHolder_Advise(This->advise_holder, pAdvSink, pdwConnection);
|
2008-04-11 12:45:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleObject_Unadvise(IOleObject *iface, DWORD dwConnection)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleObject(iface);
|
2010-01-18 16:27:14 +00:00
|
|
|
TRACE("(%p)->(%d)\n", This, dwConnection);
|
|
|
|
|
|
|
|
if(!This->advise_holder)
|
|
|
|
return OLE_E_NOCONNECTION;
|
|
|
|
|
|
|
|
return IOleAdviseHolder_Unadvise(This->advise_holder, dwConnection);
|
2008-04-11 12:45:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleObject_EnumAdvise(IOleObject *iface, IEnumSTATDATA **ppenumAdvise)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleObject(iface);
|
2010-01-18 16:27:14 +00:00
|
|
|
|
|
|
|
if(!This->advise_holder) {
|
|
|
|
*ppenumAdvise = NULL;
|
|
|
|
return S_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
return IOleAdviseHolder_EnumAdvise(This->advise_holder, ppenumAdvise);
|
2008-04-11 12:45:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleObject_GetMiscStatus(IOleObject *iface, DWORD dwAspect, DWORD *pdwStatus)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleObject(iface);
|
2008-04-11 12:45:31 +00:00
|
|
|
FIXME("(%p)->(%d %p)\n", This, dwAspect, pdwStatus);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleObject_SetColorScheme(IOleObject *iface, LOGPALETTE *pLogpal)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleObject(iface);
|
2008-04-11 12:45:31 +00:00
|
|
|
FIXME("(%p)->(%p)\n", This, pLogpal);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static const IOleObjectVtbl OleObjectVtbl = {
|
|
|
|
OleObject_QueryInterface,
|
|
|
|
OleObject_AddRef,
|
|
|
|
OleObject_Release,
|
|
|
|
OleObject_SetClientSite,
|
|
|
|
OleObject_GetClientSite,
|
|
|
|
OleObject_SetHostNames,
|
|
|
|
OleObject_Close,
|
|
|
|
OleObject_SetMoniker,
|
|
|
|
OleObject_GetMoniker,
|
|
|
|
OleObject_InitFromData,
|
|
|
|
OleObject_GetClipboardData,
|
|
|
|
OleObject_DoVerb,
|
|
|
|
OleObject_EnumVerbs,
|
|
|
|
OleObject_Update,
|
|
|
|
OleObject_IsUpToDate,
|
|
|
|
OleObject_GetUserClassID,
|
|
|
|
OleObject_GetUserType,
|
|
|
|
OleObject_SetExtent,
|
|
|
|
OleObject_GetExtent,
|
|
|
|
OleObject_Advise,
|
|
|
|
OleObject_Unadvise,
|
|
|
|
OleObject_EnumAdvise,
|
|
|
|
OleObject_GetMiscStatus,
|
|
|
|
OleObject_SetColorScheme
|
|
|
|
};
|
|
|
|
|
|
|
|
/**********************************************************
|
|
|
|
* IOleDocument implementation
|
|
|
|
*/
|
|
|
|
|
2013-05-19 21:21:20 +00:00
|
|
|
static inline HTMLDocument *impl_from_IOleDocument(IOleDocument *iface)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(iface, HTMLDocument, IOleDocument_iface);
|
|
|
|
}
|
2008-04-11 12:45:31 +00:00
|
|
|
|
2013-05-19 21:21:20 +00:00
|
|
|
static HRESULT WINAPI OleDocument_QueryInterface(IOleDocument *iface, REFIID riid, void **ppv)
|
2008-04-11 12:45:31 +00:00
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleDocument(iface);
|
|
|
|
return htmldoc_query_interface(This, riid, ppv);
|
2008-04-11 12:45:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static ULONG WINAPI OleDocument_AddRef(IOleDocument *iface)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleDocument(iface);
|
|
|
|
return htmldoc_addref(This);
|
2008-04-11 12:45:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static ULONG WINAPI OleDocument_Release(IOleDocument *iface)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleDocument(iface);
|
|
|
|
return htmldoc_release(This);
|
2008-04-11 12:45:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleDocument_CreateView(IOleDocument *iface, IOleInPlaceSite *pIPSite, IStream *pstm,
|
|
|
|
DWORD dwReserved, IOleDocumentView **ppView)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleDocument(iface);
|
2008-04-11 12:45:31 +00:00
|
|
|
HRESULT hres;
|
|
|
|
|
|
|
|
TRACE("(%p)->(%p %p %d %p)\n", This, pIPSite, pstm, dwReserved, ppView);
|
|
|
|
|
|
|
|
if(!ppView)
|
|
|
|
return E_INVALIDARG;
|
|
|
|
|
|
|
|
/* FIXME:
|
|
|
|
* Windows implementation creates new IOleDocumentView when function is called for the
|
|
|
|
* first time and returns E_FAIL when it is called for the second time, but it doesn't matter
|
|
|
|
* if the application uses returned interfaces, passed to ActivateMe or returned by
|
|
|
|
* QueryInterface, so there is no reason to create new interface. This needs more testing.
|
|
|
|
*/
|
|
|
|
|
|
|
|
if(pIPSite) {
|
2013-05-19 21:21:20 +00:00
|
|
|
hres = IOleDocumentView_SetInPlaceSite(&This->IOleDocumentView_iface, pIPSite);
|
2008-04-11 12:45:31 +00:00
|
|
|
if(FAILED(hres))
|
|
|
|
return hres;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(pstm)
|
|
|
|
FIXME("pstm is not supported\n");
|
|
|
|
|
2013-05-19 21:21:20 +00:00
|
|
|
IOleDocumentView_AddRef(&This->IOleDocumentView_iface);
|
|
|
|
*ppView = &This->IOleDocumentView_iface;
|
2008-04-11 12:45:31 +00:00
|
|
|
return S_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleDocument_GetDocMiscStatus(IOleDocument *iface, DWORD *pdwStatus)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleDocument(iface);
|
2008-04-11 12:45:31 +00:00
|
|
|
FIXME("(%p)->(%p)\n", This, pdwStatus);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleDocument_EnumViews(IOleDocument *iface, IEnumOleDocumentViews **ppEnum,
|
|
|
|
IOleDocumentView **ppView)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleDocument(iface);
|
2008-04-11 12:45:31 +00:00
|
|
|
FIXME("(%p)->(%p %p)\n", This, ppEnum, ppView);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static const IOleDocumentVtbl OleDocumentVtbl = {
|
|
|
|
OleDocument_QueryInterface,
|
|
|
|
OleDocument_AddRef,
|
|
|
|
OleDocument_Release,
|
|
|
|
OleDocument_CreateView,
|
|
|
|
OleDocument_GetDocMiscStatus,
|
|
|
|
OleDocument_EnumViews
|
|
|
|
};
|
|
|
|
|
|
|
|
/**********************************************************
|
|
|
|
* IOleControl implementation
|
|
|
|
*/
|
|
|
|
|
2013-05-19 21:21:20 +00:00
|
|
|
static inline HTMLDocument *impl_from_IOleControl(IOleControl *iface)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(iface, HTMLDocument, IOleControl_iface);
|
|
|
|
}
|
2008-04-11 12:45:31 +00:00
|
|
|
|
|
|
|
static HRESULT WINAPI OleControl_QueryInterface(IOleControl *iface, REFIID riid, void **ppv)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleControl(iface);
|
|
|
|
return htmldoc_query_interface(This, riid, ppv);
|
2008-04-11 12:45:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static ULONG WINAPI OleControl_AddRef(IOleControl *iface)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleControl(iface);
|
|
|
|
return htmldoc_addref(This);
|
2008-04-11 12:45:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static ULONG WINAPI OleControl_Release(IOleControl *iface)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleControl(iface);
|
|
|
|
return htmldoc_release(This);
|
2008-04-11 12:45:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleControl_GetControlInfo(IOleControl *iface, CONTROLINFO *pCI)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleControl(iface);
|
2008-04-11 12:45:31 +00:00
|
|
|
FIXME("(%p)->(%p)\n", This, pCI);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleControl_OnMnemonic(IOleControl *iface, MSG *pMsg)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleControl(iface);
|
2008-04-11 12:45:31 +00:00
|
|
|
FIXME("(%p)->(%p)\n", This, pMsg);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
HRESULT get_client_disp_property(IOleClientSite *client, DISPID dispid, VARIANT *res)
|
|
|
|
{
|
|
|
|
IDispatch *disp = NULL;
|
|
|
|
DISPPARAMS dispparams = {NULL, 0};
|
|
|
|
UINT err;
|
|
|
|
HRESULT hres;
|
|
|
|
|
|
|
|
hres = IOleClientSite_QueryInterface(client, &IID_IDispatch, (void**)&disp);
|
|
|
|
if(FAILED(hres)) {
|
|
|
|
TRACE("Could not get IDispatch\n");
|
|
|
|
return hres;
|
|
|
|
}
|
|
|
|
|
|
|
|
VariantInit(res);
|
|
|
|
|
|
|
|
hres = IDispatch_Invoke(disp, dispid, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
|
|
|
|
DISPATCH_PROPERTYGET, &dispparams, res, NULL, &err);
|
|
|
|
|
|
|
|
IDispatch_Release(disp);
|
|
|
|
|
|
|
|
return hres;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT on_change_dlcontrol(HTMLDocument *This)
|
|
|
|
{
|
|
|
|
VARIANT res;
|
|
|
|
HRESULT hres;
|
|
|
|
|
2009-10-20 19:28:02 +00:00
|
|
|
hres = get_client_disp_property(This->doc_obj->client, DISPID_AMBIENT_DLCONTROL, &res);
|
2008-04-11 12:45:31 +00:00
|
|
|
if(SUCCEEDED(hres))
|
|
|
|
FIXME("unsupported dlcontrol %08x\n", V_I4(&res));
|
|
|
|
|
|
|
|
return S_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleControl_OnAmbientPropertyChange(IOleControl *iface, DISPID dispID)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleControl(iface);
|
2009-10-20 19:28:02 +00:00
|
|
|
IOleClientSite *client;
|
2008-04-11 12:45:31 +00:00
|
|
|
VARIANT res;
|
|
|
|
HRESULT hres;
|
|
|
|
|
2009-10-20 19:28:02 +00:00
|
|
|
client = This->doc_obj->client;
|
|
|
|
if(!client) {
|
|
|
|
TRACE("client = NULL\n");
|
2008-04-11 12:45:31 +00:00
|
|
|
return S_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch(dispID) {
|
|
|
|
case DISPID_AMBIENT_USERMODE:
|
|
|
|
TRACE("(%p)->(DISPID_AMBIENT_USERMODE)\n", This);
|
2009-10-20 19:28:02 +00:00
|
|
|
hres = get_client_disp_property(client, DISPID_AMBIENT_USERMODE, &res);
|
2008-04-11 12:45:31 +00:00
|
|
|
if(FAILED(hres))
|
|
|
|
return S_OK;
|
|
|
|
|
|
|
|
if(V_VT(&res) == VT_BOOL) {
|
|
|
|
if(V_BOOL(&res)) {
|
2009-10-20 19:28:02 +00:00
|
|
|
This->doc_obj->usermode = BROWSEMODE;
|
2008-04-11 12:45:31 +00:00
|
|
|
}else {
|
|
|
|
FIXME("edit mode is not supported\n");
|
2009-10-20 19:28:02 +00:00
|
|
|
This->doc_obj->usermode = EDITMODE;
|
2008-04-11 12:45:31 +00:00
|
|
|
}
|
|
|
|
}else {
|
2013-05-19 21:21:20 +00:00
|
|
|
FIXME("usermode=%s\n", debugstr_variant(&res));
|
2008-04-11 12:45:31 +00:00
|
|
|
}
|
|
|
|
return S_OK;
|
|
|
|
case DISPID_AMBIENT_DLCONTROL:
|
|
|
|
TRACE("(%p)->(DISPID_AMBIENT_DLCONTROL)\n", This);
|
|
|
|
return on_change_dlcontrol(This);
|
|
|
|
case DISPID_AMBIENT_OFFLINEIFNOTCONNECTED:
|
|
|
|
TRACE("(%p)->(DISPID_AMBIENT_OFFLINEIFNOTCONNECTED)\n", This);
|
|
|
|
on_change_dlcontrol(This);
|
2009-10-20 19:28:02 +00:00
|
|
|
hres = get_client_disp_property(client, DISPID_AMBIENT_OFFLINEIFNOTCONNECTED, &res);
|
2008-04-11 12:45:31 +00:00
|
|
|
if(FAILED(hres))
|
|
|
|
return S_OK;
|
|
|
|
|
|
|
|
if(V_VT(&res) == VT_BOOL) {
|
|
|
|
if(V_BOOL(&res)) {
|
|
|
|
FIXME("offline connection is not supported\n");
|
|
|
|
hres = E_FAIL;
|
|
|
|
}
|
|
|
|
}else {
|
2013-05-19 21:21:20 +00:00
|
|
|
FIXME("offlineconnected=%s\n", debugstr_variant(&res));
|
2008-04-11 12:45:31 +00:00
|
|
|
}
|
|
|
|
return S_OK;
|
|
|
|
case DISPID_AMBIENT_SILENT:
|
|
|
|
TRACE("(%p)->(DISPID_AMBIENT_SILENT)\n", This);
|
|
|
|
on_change_dlcontrol(This);
|
2009-10-20 19:28:02 +00:00
|
|
|
hres = get_client_disp_property(client, DISPID_AMBIENT_SILENT, &res);
|
2008-04-11 12:45:31 +00:00
|
|
|
if(FAILED(hres))
|
|
|
|
return S_OK;
|
|
|
|
|
|
|
|
if(V_VT(&res) == VT_BOOL) {
|
|
|
|
if(V_BOOL(&res)) {
|
|
|
|
FIXME("silent mode is not supported\n");
|
|
|
|
hres = E_FAIL;
|
|
|
|
}
|
|
|
|
}else {
|
2013-05-19 21:21:20 +00:00
|
|
|
FIXME("silent=%s\n", debugstr_variant(&res));
|
2008-04-11 12:45:31 +00:00
|
|
|
}
|
|
|
|
return S_OK;
|
|
|
|
case DISPID_AMBIENT_USERAGENT:
|
|
|
|
TRACE("(%p)->(DISPID_AMBIENT_USERAGENT)\n", This);
|
2009-10-20 19:28:02 +00:00
|
|
|
hres = get_client_disp_property(client, DISPID_AMBIENT_USERAGENT, &res);
|
2008-04-11 12:45:31 +00:00
|
|
|
if(FAILED(hres))
|
|
|
|
return S_OK;
|
|
|
|
|
|
|
|
FIXME("not supported AMBIENT_USERAGENT\n");
|
|
|
|
hres = E_FAIL;
|
|
|
|
return S_OK;
|
|
|
|
case DISPID_AMBIENT_PALETTE:
|
|
|
|
TRACE("(%p)->(DISPID_AMBIENT_PALETTE)\n", This);
|
2009-10-20 19:28:02 +00:00
|
|
|
hres = get_client_disp_property(client, DISPID_AMBIENT_PALETTE, &res);
|
2008-04-11 12:45:31 +00:00
|
|
|
if(FAILED(hres))
|
|
|
|
return S_OK;
|
|
|
|
|
|
|
|
FIXME("not supported AMBIENT_PALETTE\n");
|
|
|
|
hres = E_FAIL;
|
|
|
|
return S_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
FIXME("(%p) unsupported dispID=%d\n", This, dispID);
|
|
|
|
return E_FAIL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleControl_FreezeEvents(IOleControl *iface, BOOL bFreeze)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IOleControl(iface);
|
2008-04-11 12:45:31 +00:00
|
|
|
FIXME("(%p)->(%x)\n", This, bFreeze);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static const IOleControlVtbl OleControlVtbl = {
|
|
|
|
OleControl_QueryInterface,
|
|
|
|
OleControl_AddRef,
|
|
|
|
OleControl_Release,
|
|
|
|
OleControl_GetControlInfo,
|
|
|
|
OleControl_OnMnemonic,
|
|
|
|
OleControl_OnAmbientPropertyChange,
|
|
|
|
OleControl_FreezeEvents
|
|
|
|
};
|
|
|
|
|
2010-01-18 16:27:14 +00:00
|
|
|
/**********************************************************
|
|
|
|
* IObjectWithSite implementation
|
|
|
|
*/
|
|
|
|
|
2013-05-19 21:21:20 +00:00
|
|
|
static inline HTMLDocument *impl_from_IObjectWithSite(IObjectWithSite *iface)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(iface, HTMLDocument, IObjectWithSite_iface);
|
|
|
|
}
|
2010-01-18 16:27:14 +00:00
|
|
|
|
2013-05-19 21:21:20 +00:00
|
|
|
static HRESULT WINAPI ObjectWithSite_QueryInterface(IObjectWithSite *iface, REFIID riid, void **ppv)
|
2010-01-18 16:27:14 +00:00
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IObjectWithSite(iface);
|
|
|
|
return htmldoc_query_interface(This, riid, ppv);
|
2010-01-18 16:27:14 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static ULONG WINAPI ObjectWithSite_AddRef(IObjectWithSite *iface)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IObjectWithSite(iface);
|
|
|
|
return htmldoc_addref(This);
|
2010-01-18 16:27:14 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static ULONG WINAPI ObjectWithSite_Release(IObjectWithSite *iface)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IObjectWithSite(iface);
|
|
|
|
return htmldoc_release(This);
|
2010-01-18 16:27:14 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI ObjectWithSite_SetSite(IObjectWithSite *iface, IUnknown *pUnkSite)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IObjectWithSite(iface);
|
2010-01-18 16:27:14 +00:00
|
|
|
FIXME("(%p)->(%p)\n", This, pUnkSite);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI ObjectWithSite_GetSite(IObjectWithSite* iface, REFIID riid, PVOID *ppvSite)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
HTMLDocument *This = impl_from_IObjectWithSite(iface);
|
2010-01-18 16:27:14 +00:00
|
|
|
FIXME("(%p)->(%p)\n", This, ppvSite);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static const IObjectWithSiteVtbl ObjectWithSiteVtbl = {
|
|
|
|
ObjectWithSite_QueryInterface,
|
|
|
|
ObjectWithSite_AddRef,
|
|
|
|
ObjectWithSite_Release,
|
|
|
|
ObjectWithSite_SetSite,
|
|
|
|
ObjectWithSite_GetSite
|
|
|
|
};
|
|
|
|
|
2013-05-19 21:21:20 +00:00
|
|
|
/**********************************************************
|
|
|
|
* IOleContainer implementation
|
|
|
|
*/
|
|
|
|
|
|
|
|
static inline HTMLDocument *impl_from_IOleContainer(IOleContainer *iface)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(iface, HTMLDocument, IOleContainer_iface);
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleContainer_QueryInterface(IOleContainer *iface, REFIID riid, void **ppv)
|
|
|
|
{
|
|
|
|
HTMLDocument *This = impl_from_IOleContainer(iface);
|
|
|
|
return htmldoc_query_interface(This, riid, ppv);
|
|
|
|
}
|
|
|
|
|
|
|
|
static ULONG WINAPI OleContainer_AddRef(IOleContainer *iface)
|
|
|
|
{
|
|
|
|
HTMLDocument *This = impl_from_IOleContainer(iface);
|
|
|
|
return htmldoc_addref(This);
|
|
|
|
}
|
|
|
|
|
|
|
|
static ULONG WINAPI OleContainer_Release(IOleContainer *iface)
|
|
|
|
{
|
|
|
|
HTMLDocument *This = impl_from_IOleContainer(iface);
|
|
|
|
return htmldoc_release(This);
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleContainer_ParseDisplayName(IOleContainer *iface, IBindCtx *pbc, LPOLESTR pszDisplayName,
|
|
|
|
ULONG *pchEaten, IMoniker **ppmkOut)
|
|
|
|
{
|
|
|
|
HTMLDocument *This = impl_from_IOleContainer(iface);
|
|
|
|
FIXME("(%p)->(%p %s %p %p)\n", This, pbc, debugstr_w(pszDisplayName), pchEaten, ppmkOut);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleContainer_EnumObjects(IOleContainer *iface, DWORD grfFlags, IEnumUnknown **ppenum)
|
|
|
|
{
|
|
|
|
HTMLDocument *This = impl_from_IOleContainer(iface);
|
|
|
|
EnumUnknown *ret;
|
|
|
|
|
|
|
|
TRACE("(%p)->(%x %p)\n", This, grfFlags, ppenum);
|
|
|
|
|
|
|
|
ret = heap_alloc(sizeof(*ret));
|
|
|
|
if(!ret)
|
|
|
|
return E_OUTOFMEMORY;
|
|
|
|
|
|
|
|
ret->IEnumUnknown_iface.lpVtbl = &EnumUnknownVtbl;
|
|
|
|
ret->ref = 1;
|
|
|
|
|
|
|
|
*ppenum = &ret->IEnumUnknown_iface;
|
|
|
|
return S_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI OleContainer_LockContainer(IOleContainer *iface, BOOL fLock)
|
|
|
|
{
|
|
|
|
HTMLDocument *This = impl_from_IOleContainer(iface);
|
|
|
|
FIXME("(%p)->(%x)\n", This, fLock);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static const IOleContainerVtbl OleContainerVtbl = {
|
|
|
|
OleContainer_QueryInterface,
|
|
|
|
OleContainer_AddRef,
|
|
|
|
OleContainer_Release,
|
|
|
|
OleContainer_ParseDisplayName,
|
|
|
|
OleContainer_EnumObjects,
|
|
|
|
OleContainer_LockContainer
|
|
|
|
};
|
|
|
|
|
|
|
|
static inline HTMLDocumentObj *impl_from_ITargetContainer(ITargetContainer *iface)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(iface, HTMLDocumentObj, ITargetContainer_iface);
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TargetContainer_QueryInterface(ITargetContainer *iface, REFIID riid, void **ppv)
|
|
|
|
{
|
|
|
|
HTMLDocumentObj *This = impl_from_ITargetContainer(iface);
|
|
|
|
return ICustomDoc_QueryInterface(&This->ICustomDoc_iface, riid, ppv);
|
|
|
|
}
|
|
|
|
|
|
|
|
static ULONG WINAPI TargetContainer_AddRef(ITargetContainer *iface)
|
|
|
|
{
|
|
|
|
HTMLDocumentObj *This = impl_from_ITargetContainer(iface);
|
|
|
|
return ICustomDoc_AddRef(&This->ICustomDoc_iface);
|
|
|
|
}
|
|
|
|
|
|
|
|
static ULONG WINAPI TargetContainer_Release(ITargetContainer *iface)
|
|
|
|
{
|
|
|
|
HTMLDocumentObj *This = impl_from_ITargetContainer(iface);
|
|
|
|
return ICustomDoc_Release(&This->ICustomDoc_iface);
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TargetContainer_GetFrameUrl(ITargetContainer *iface, LPWSTR *ppszFrameSrc)
|
|
|
|
{
|
|
|
|
HTMLDocumentObj *This = impl_from_ITargetContainer(iface);
|
|
|
|
FIXME("(%p)->(%p)\n", This, ppszFrameSrc);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI TargetContainer_GetFramesContainer(ITargetContainer *iface, IOleContainer **ppContainer)
|
|
|
|
{
|
|
|
|
HTMLDocumentObj *This = impl_from_ITargetContainer(iface);
|
|
|
|
|
|
|
|
TRACE("(%p)->(%p)\n", This, ppContainer);
|
|
|
|
|
|
|
|
/* NOTE: we should return wrapped interface here */
|
|
|
|
IOleContainer_AddRef(&This->basedoc.IOleContainer_iface);
|
|
|
|
*ppContainer = &This->basedoc.IOleContainer_iface;
|
|
|
|
return S_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
static const ITargetContainerVtbl TargetContainerVtbl = {
|
|
|
|
TargetContainer_QueryInterface,
|
|
|
|
TargetContainer_AddRef,
|
|
|
|
TargetContainer_Release,
|
|
|
|
TargetContainer_GetFrameUrl,
|
|
|
|
TargetContainer_GetFramesContainer
|
|
|
|
};
|
|
|
|
|
|
|
|
void TargetContainer_Init(HTMLDocumentObj *This)
|
|
|
|
{
|
|
|
|
This->ITargetContainer_iface.lpVtbl = &TargetContainerVtbl;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**********************************************************
|
|
|
|
* IObjectSafety implementation
|
|
|
|
*/
|
|
|
|
|
|
|
|
static inline HTMLDocument *impl_from_IObjectSafety(IObjectSafety *iface)
|
|
|
|
{
|
|
|
|
return CONTAINING_RECORD(iface, HTMLDocument, IObjectSafety_iface);
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI ObjectSafety_QueryInterface(IObjectSafety *iface, REFIID riid, void **ppv)
|
|
|
|
{
|
|
|
|
HTMLDocument *This = impl_from_IObjectSafety(iface);
|
|
|
|
return htmldoc_query_interface(This, riid, ppv);
|
|
|
|
}
|
|
|
|
|
|
|
|
static ULONG WINAPI ObjectSafety_AddRef(IObjectSafety *iface)
|
|
|
|
{
|
|
|
|
HTMLDocument *This = impl_from_IObjectSafety(iface);
|
|
|
|
return htmldoc_addref(This);
|
|
|
|
}
|
|
|
|
|
|
|
|
static ULONG WINAPI ObjectSafety_Release(IObjectSafety *iface)
|
|
|
|
{
|
|
|
|
HTMLDocument *This = impl_from_IObjectSafety(iface);
|
|
|
|
return htmldoc_release(This);
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI ObjectSafety_GetInterfaceSafetyOptions(IObjectSafety *iface,
|
|
|
|
REFIID riid, DWORD *pdwSupportedOptions, DWORD *pdwEnabledOptions)
|
|
|
|
{
|
|
|
|
HTMLDocument *This = impl_from_IObjectSafety(iface);
|
|
|
|
FIXME("(%p)->(%s %p %p)\n", This, debugstr_guid(riid), pdwSupportedOptions, pdwEnabledOptions);
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI ObjectSafety_SetInterfaceSafetyOptions(IObjectSafety *iface,
|
|
|
|
REFIID riid, DWORD dwOptionSetMask, DWORD dwEnabledOptions)
|
|
|
|
{
|
|
|
|
HTMLDocument *This = impl_from_IObjectSafety(iface);
|
|
|
|
FIXME("(%p)->(%s %x %x)\n", This, debugstr_guid(riid), dwOptionSetMask, dwEnabledOptions);
|
|
|
|
|
|
|
|
if(IsEqualGUID(&IID_IPersistMoniker, riid) &&
|
|
|
|
dwOptionSetMask==INTERFACESAFE_FOR_UNTRUSTED_DATA &&
|
|
|
|
dwEnabledOptions==INTERFACESAFE_FOR_UNTRUSTED_DATA)
|
|
|
|
return S_OK;
|
|
|
|
|
|
|
|
return E_NOTIMPL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static const IObjectSafetyVtbl ObjectSafetyVtbl = {
|
|
|
|
ObjectSafety_QueryInterface,
|
|
|
|
ObjectSafety_AddRef,
|
|
|
|
ObjectSafety_Release,
|
|
|
|
ObjectSafety_GetInterfaceSafetyOptions,
|
|
|
|
ObjectSafety_SetInterfaceSafetyOptions
|
|
|
|
};
|
|
|
|
|
2009-10-20 19:28:02 +00:00
|
|
|
void HTMLDocument_LockContainer(HTMLDocumentObj *This, BOOL fLock)
|
2008-04-11 12:45:31 +00:00
|
|
|
{
|
|
|
|
IOleContainer *container;
|
|
|
|
HRESULT hres;
|
|
|
|
|
|
|
|
if(!This->client || This->container_locked == fLock)
|
|
|
|
return;
|
|
|
|
|
|
|
|
hres = IOleClientSite_GetContainer(This->client, &container);
|
|
|
|
if(SUCCEEDED(hres)) {
|
|
|
|
IOleContainer_LockContainer(container, fLock);
|
|
|
|
This->container_locked = fLock;
|
|
|
|
IOleContainer_Release(container);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void HTMLDocument_OleObj_Init(HTMLDocument *This)
|
|
|
|
{
|
2013-05-19 21:21:20 +00:00
|
|
|
This->IOleObject_iface.lpVtbl = &OleObjectVtbl;
|
|
|
|
This->IOleDocument_iface.lpVtbl = &OleDocumentVtbl;
|
|
|
|
This->IOleControl_iface.lpVtbl = &OleControlVtbl;
|
|
|
|
This->IObjectWithSite_iface.lpVtbl = &ObjectWithSiteVtbl;
|
|
|
|
This->IOleContainer_iface.lpVtbl = &OleContainerVtbl;
|
|
|
|
This->IObjectSafety_iface.lpVtbl = &ObjectSafetyVtbl;
|
2008-04-11 12:45:31 +00:00
|
|
|
}
|