Added stub implementation of IOleControl.
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c
index 142751b..55d2d52 100644
--- a/dlls/mshtml/htmldoc.c
+++ b/dlls/mshtml/htmldoc.c
@@ -102,6 +102,9 @@
}else if(IsEqualGUID(&IID_IOleCommandTarget, riid)) {
TRACE("(%p)->(IID_IOleCommandTarget, %p)\n", This, ppvObject);
*ppvObject = CMDTARGET(This);
+ }else if(IsEqualGUID(&IID_IOleControl, riid)) {
+ TRACE("(%p)->(IID_IOleControl, %p)\n", This, ppvObject);
+ *ppvObject = CONTROL(This);
}
if(*ppvObject) {
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index d79ea47..5e558ff 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -40,6 +40,7 @@
const IOleInPlaceObjectWindowlessVtbl *lpOleInPlaceObjectWindowlessVtbl;
const IServiceProviderVtbl *lpServiceProviderVtbl;
const IOleCommandTargetVtbl *lpOleCommandTargetVtbl;
+ const IOleControlVtbl *lpOleControlVtbl;
LONG ref;
@@ -84,6 +85,7 @@
#define INPLACEWIN(x) ((IOleInPlaceObjectWindowless*) &(x)->lpOleInPlaceObjectWindowlessVtbl)
#define SERVPROV(x) ((IServiceProvider*) &(x)->lpServiceProviderVtbl)
#define CMDTARGET(x) ((IOleCommandTarget*) &(x)->lpOleCommandTargetVtbl)
+#define CONTROL(x) ((IOleControl*) &(x)->lpOleControlVtbl)
#define DEFINE_THIS(cls,ifc,iface) ((cls*)((BYTE*)(iface)-offsetof(cls,lp ## ifc ## Vtbl)))
diff --git a/dlls/mshtml/oleobj.c b/dlls/mshtml/oleobj.c
index b02ea2d..b01f0f0 100644
--- a/dlls/mshtml/oleobj.c
+++ b/dlls/mshtml/oleobj.c
@@ -764,6 +764,8 @@
return OLECMDERR_E_UNKNOWNGROUP;
}
+#undef CMDTARGET_THIS
+
static const IOleCommandTargetVtbl OleCommandTargetVtbl = {
OleCommandTarget_QueryInterface,
OleCommandTarget_AddRef,
@@ -772,11 +774,76 @@
OleCommandTarget_Exec
};
+/**********************************************************
+ * IOleControl implementation
+ */
+
+#define CONTROL_THIS(iface) DEFINE_THIS(HTMLDocument, OleControl, iface)
+
+static HRESULT WINAPI OleControl_QueryInterface(IOleControl *iface, REFIID riid, void **ppv)
+{
+ HTMLDocument *This = CONTROL_THIS(iface);
+ return IHTMLDocument2_QueryInterface(HTMLDOC(This), riid, ppv);
+}
+
+static ULONG WINAPI OleControl_AddRef(IOleControl *iface)
+{
+ HTMLDocument *This = CONTROL_THIS(iface);
+ return IHTMLDocument2_AddRef(HTMLDOC(This));
+}
+
+static ULONG WINAPI OleControl_Release(IOleControl *iface)
+{
+ HTMLDocument *This = CONTROL_THIS(iface);
+ return IHTMLDocument_Release(HTMLDOC(This));
+}
+
+static HRESULT WINAPI OleControl_GetControlInfo(IOleControl *iface, CONTROLINFO *pCI)
+{
+ HTMLDocument *This = CONTROL_THIS(iface);
+ FIXME("(%p)->(%p)\n", This, pCI);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI OleControl_OnMnemonic(IOleControl *iface, MSG *pMsg)
+{
+ HTMLDocument *This = CONTROL_THIS(iface);
+ FIXME("(%p)->(%p)\n", This, pMsg);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI OleControl_OnAmbientPropertyChange(IOleControl *iface, DISPID dispID)
+{
+ HTMLDocument *This = CONTROL_THIS(iface);
+ FIXME("(%p)->(%ld)\n", This, dispID);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI OleControl_FreezeEvents(IOleControl *iface, BOOL bFreeze)
+{
+ HTMLDocument *This = CONTROL_THIS(iface);
+ FIXME("(%p)->(%x)\n", This, bFreeze);
+ return E_NOTIMPL;
+}
+
+#undef CONTROL_THIS
+
+static const IOleControlVtbl OleControlVtbl = {
+ OleControl_QueryInterface,
+ OleControl_AddRef,
+ OleControl_Release,
+ OleControl_GetControlInfo,
+ OleControl_OnMnemonic,
+ OleControl_OnAmbientPropertyChange,
+ OleControl_FreezeEvents
+};
+
void HTMLDocument_OleObj_Init(HTMLDocument *This)
{
This->lpOleObjectVtbl = &OleObjectVtbl;
This->lpOleDocumentVtbl = &OleDocumentVtbl;
This->lpOleCommandTargetVtbl = &OleCommandTargetVtbl;
+ This->lpOleControlVtbl = &OleControlVtbl;
This->client = NULL;
This->hostui = NULL;