- Added stub implementation of IOleCommandTarget.
- Store IDocHostUIHandler in HTMLDocument. - ActivateMe should be called even if GetContainer failed.
This commit is contained in:
parent
1e6fe17958
commit
4f619626b8
|
@ -30,7 +30,7 @@
|
||||||
#include "docobj.h"
|
#include "docobj.h"
|
||||||
|
|
||||||
#include "mshtml.h"
|
#include "mshtml.h"
|
||||||
#include "mshtmdid.h"
|
#include "mshtmhst.h"
|
||||||
|
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
@ -97,6 +97,9 @@ static HRESULT WINAPI HTMLDocument_QueryInterface(IHTMLDocument2 *iface, REFIID
|
||||||
}else if(IsEqualGUID(&IID_IServiceProvider, riid)) {
|
}else if(IsEqualGUID(&IID_IServiceProvider, riid)) {
|
||||||
TRACE("(%p)->(IID_IServiceProvider, %p)\n", This, ppvObject);
|
TRACE("(%p)->(IID_IServiceProvider, %p)\n", This, ppvObject);
|
||||||
*ppvObject = SERVPROV(This);
|
*ppvObject = SERVPROV(This);
|
||||||
|
}else if(IsEqualGUID(&IID_IOleCommandTarget, riid)) {
|
||||||
|
TRACE("(%p)->(IID_IOleCommandTarget, %p)\n", This, ppvObject);
|
||||||
|
*ppvObject = CMDTARGET(This);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(*ppvObject) {
|
if(*ppvObject) {
|
||||||
|
@ -126,6 +129,8 @@ static ULONG WINAPI HTMLDocument_Release(IHTMLDocument2 *iface)
|
||||||
if(!ref) {
|
if(!ref) {
|
||||||
if(This->client)
|
if(This->client)
|
||||||
IOleClientSite_Release(This->client);
|
IOleClientSite_Release(This->client);
|
||||||
|
if(This->hostui)
|
||||||
|
IDocHostUIHandler_Release(This->hostui);
|
||||||
if(This->ipsite)
|
if(This->ipsite)
|
||||||
IOleInPlaceSite_Release(This->ipsite);
|
IOleInPlaceSite_Release(This->ipsite);
|
||||||
if(This->frame)
|
if(This->frame)
|
||||||
|
|
|
@ -28,10 +28,12 @@ typedef struct {
|
||||||
const IViewObject2Vtbl *lpViewObject2Vtbl;
|
const IViewObject2Vtbl *lpViewObject2Vtbl;
|
||||||
const IOleInPlaceObjectWindowlessVtbl *lpOleInPlaceObjectWindowlessVtbl;
|
const IOleInPlaceObjectWindowlessVtbl *lpOleInPlaceObjectWindowlessVtbl;
|
||||||
const IServiceProviderVtbl *lpServiceProviderVtbl;
|
const IServiceProviderVtbl *lpServiceProviderVtbl;
|
||||||
|
const IOleCommandTargetVtbl *lpOleCommandTargetVtbl;
|
||||||
|
|
||||||
LONG ref;
|
LONG ref;
|
||||||
|
|
||||||
IOleClientSite *client;
|
IOleClientSite *client;
|
||||||
|
IDocHostUIHandler *hostui;
|
||||||
IOleInPlaceSite *ipsite;
|
IOleInPlaceSite *ipsite;
|
||||||
IOleInPlaceFrame *frame;
|
IOleInPlaceFrame *frame;
|
||||||
|
|
||||||
|
@ -53,6 +55,7 @@ typedef struct {
|
||||||
#define INPLACEOBJ(x) ((IOleInPlaceObject*) &(x)->lpOleInPlaceObjectWindowlessVtbl)
|
#define INPLACEOBJ(x) ((IOleInPlaceObject*) &(x)->lpOleInPlaceObjectWindowlessVtbl)
|
||||||
#define INPLACEWIN(x) ((IOleInPlaceObjectWindowless*) &(x)->lpOleInPlaceObjectWindowlessVtbl)
|
#define INPLACEWIN(x) ((IOleInPlaceObjectWindowless*) &(x)->lpOleInPlaceObjectWindowlessVtbl)
|
||||||
#define SERVPROV(x) ((IServiceProvider*) &(x)->lpServiceProviderVtbl)
|
#define SERVPROV(x) ((IServiceProvider*) &(x)->lpServiceProviderVtbl)
|
||||||
|
#define CMDTARGET(x) ((IOleCommandTarget*) &(x)->lpOleCommandTargetVtbl)
|
||||||
|
|
||||||
#define DEFINE_THIS(cls,ifc) cls* const This=(cls*)((char*)(iface)-offsetof(cls,lp ## ifc ## Vtbl));
|
#define DEFINE_THIS(cls,ifc) cls* const This=(cls*)((char*)(iface)-offsetof(cls,lp ## ifc ## Vtbl));
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,7 @@ static ULONG WINAPI OleObject_Release(IOleObject *iface)
|
||||||
static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite *pClientSite)
|
static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite *pClientSite)
|
||||||
{
|
{
|
||||||
HTMLDocument *This = OLEOBJ_THIS(iface);
|
HTMLDocument *This = OLEOBJ_THIS(iface);
|
||||||
IDocHostUIHandler *pDocHostUIHandler;
|
IDocHostUIHandler *pDocHostUIHandler = NULL;
|
||||||
HRESULT hres;
|
HRESULT hres;
|
||||||
|
|
||||||
TRACE("(%p)->(%p)\n", This, pClientSite);
|
TRACE("(%p)->(%p)\n", This, pClientSite);
|
||||||
|
@ -73,6 +73,9 @@ static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite
|
||||||
if(This->client)
|
if(This->client)
|
||||||
IOleClientSite_Release(This->client);
|
IOleClientSite_Release(This->client);
|
||||||
|
|
||||||
|
if(This->hostui)
|
||||||
|
IDocHostUIHandler_Release(This->hostui);
|
||||||
|
|
||||||
if(!pClientSite) {
|
if(!pClientSite) {
|
||||||
This->client = NULL;
|
This->client = NULL;
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
@ -110,6 +113,7 @@ static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite
|
||||||
|
|
||||||
IOleClientSite_AddRef(pClientSite);
|
IOleClientSite_AddRef(pClientSite);
|
||||||
This->client = pClientSite;
|
This->client = pClientSite;
|
||||||
|
This->hostui = pDocHostUIHandler;
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
@ -196,10 +200,10 @@ static HRESULT WINAPI OleObject_DoVerb(IOleObject *iface, LONG iVerb, LPMSG lpms
|
||||||
hres = IOleClientSite_GetContainer(pActiveSite, &pContainer);
|
hres = IOleClientSite_GetContainer(pActiveSite, &pContainer);
|
||||||
if(SUCCEEDED(hres)) {
|
if(SUCCEEDED(hres)) {
|
||||||
IOleContainer_LockContainer(pContainer, TRUE);
|
IOleContainer_LockContainer(pContainer, TRUE);
|
||||||
/* FIXME: Create new IOleDocumentView. See CreateView for more info. */
|
|
||||||
hres = IOleDocumentSite_ActivateMe(pDocSite, DOCVIEW(This));
|
|
||||||
IOleContainer_Release(pContainer);
|
IOleContainer_Release(pContainer);
|
||||||
}
|
}
|
||||||
|
/* FIXME: Create new IOleDocumentView. See CreateView for more info. */
|
||||||
|
hres = IOleDocumentSite_ActivateMe(pDocSite, DOCVIEW(This));
|
||||||
IOleDocumentSite_Release(pDocSite);
|
IOleDocumentSite_Release(pDocSite);
|
||||||
}else {
|
}else {
|
||||||
hres = IOleDocumentView_UIActivate(DOCVIEW(This), TRUE);
|
hres = IOleDocumentView_UIActivate(DOCVIEW(This), TRUE);
|
||||||
|
@ -417,10 +421,61 @@ static const IOleDocumentVtbl OleDocumentVtbl = {
|
||||||
OleDocument_EnumViews
|
OleDocument_EnumViews
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**********************************************************
|
||||||
|
* IOleCommandTarget implementation
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define CMDTARGET_THIS(iface) (HTMLDocument*)((char*)(iface)-offsetof(HTMLDocument,lpOleCommandTargetVtbl))
|
||||||
|
|
||||||
|
static HRESULT WINAPI OleCommandTarget_QueryInterface(IOleCommandTarget *iface, REFIID riid, void **ppv)
|
||||||
|
{
|
||||||
|
HTMLDocument *This = CMDTARGET_THIS(iface);
|
||||||
|
return IHTMLDocument2_QueryInterface(HTMLDOC(This), riid, ppv);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI OleCommandTarget_AddRef(IOleCommandTarget *iface)
|
||||||
|
{
|
||||||
|
HTMLDocument *This = CMDTARGET_THIS(iface);
|
||||||
|
return IHTMLDocument2_AddRef(HTMLDOC(This));
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI OleCommandTarget_Release(IOleCommandTarget *iface)
|
||||||
|
{
|
||||||
|
HTMLDocument *This = CMDTARGET_THIS(iface);
|
||||||
|
return IHTMLDocument_Release(HTMLDOC(This));
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI OleCommandTarget_QueryStatus(IOleCommandTarget *iface, const GUID *pguidCmdGroup,
|
||||||
|
ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText)
|
||||||
|
{
|
||||||
|
HTMLDocument *This = CMDTARGET_THIS(iface);
|
||||||
|
FIXME("(%p)->(%s %ld %p %p)\n", This, debugstr_guid(pguidCmdGroup), cCmds, prgCmds, pCmdText);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI OleCommandTarget_Exec(IOleCommandTarget *iface, const GUID *pguidCmdGroup,
|
||||||
|
DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
|
||||||
|
{
|
||||||
|
HTMLDocument *This = CMDTARGET_THIS(iface);
|
||||||
|
FIXME("(%p)->(%s %ld %ld %p %p)\n", This, debugstr_guid(pguidCmdGroup), nCmdID, nCmdexecopt,
|
||||||
|
pvaIn, pvaOut);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const IOleCommandTargetVtbl OleCommandTargetVtbl = {
|
||||||
|
OleCommandTarget_QueryInterface,
|
||||||
|
OleCommandTarget_AddRef,
|
||||||
|
OleCommandTarget_Release,
|
||||||
|
OleCommandTarget_QueryStatus,
|
||||||
|
OleCommandTarget_Exec
|
||||||
|
};
|
||||||
|
|
||||||
void HTMLDocument_OleObj_Init(HTMLDocument *This)
|
void HTMLDocument_OleObj_Init(HTMLDocument *This)
|
||||||
{
|
{
|
||||||
This->lpOleObjectVtbl = &OleObjectVtbl;
|
This->lpOleObjectVtbl = &OleObjectVtbl;
|
||||||
This->lpOleDocumentVtbl = &OleDocumentVtbl;
|
This->lpOleDocumentVtbl = &OleDocumentVtbl;
|
||||||
|
This->lpOleCommandTargetVtbl = &OleCommandTargetVtbl;
|
||||||
|
|
||||||
This->client = NULL;
|
This->client = NULL;
|
||||||
|
This->hostui = NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#include "docobj.h"
|
#include "docobj.h"
|
||||||
|
|
||||||
#include "mshtml.h"
|
#include "mshtml.h"
|
||||||
|
#include "mshtmhst.h"
|
||||||
|
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#include "docobj.h"
|
#include "docobj.h"
|
||||||
|
|
||||||
#include "mshtml.h"
|
#include "mshtml.h"
|
||||||
|
#include "mshtmhst.h"
|
||||||
|
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#include "docobj.h"
|
#include "docobj.h"
|
||||||
|
|
||||||
#include "mshtml.h"
|
#include "mshtml.h"
|
||||||
|
#include "mshtmhst.h"
|
||||||
|
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
#include "wine/unicode.h"
|
#include "wine/unicode.h"
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#include "docobj.h"
|
#include "docobj.h"
|
||||||
|
|
||||||
#include "mshtml.h"
|
#include "mshtml.h"
|
||||||
|
#include "mshtmhst.h"
|
||||||
|
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
#include "docobj.h"
|
#include "docobj.h"
|
||||||
|
|
||||||
#include "mshtml.h"
|
#include "mshtml.h"
|
||||||
|
#include "mshtmhst.h"
|
||||||
|
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue