SHDOCVW: Make IOleControl and IOleInPlaceObject interface heap based
Jacek Caban
jack at itma.pwr.wroc.pl
Tue Sep 6 13:59:10 CDT 2005
Changelog:
Make IOleControl and IOleInPlaceObject interface heap based
-------------- next part --------------
Index: dlls/shdocvw/oleobject.c
===================================================================
RCS file: /home/wine/wine/dlls/shdocvw/oleobject.c,v
retrieving revision 1.15
diff -u -p -r1.15 oleobject.c
--- dlls/shdocvw/oleobject.c 6 Sep 2005 11:41:15 -0000 1.15
+++ dlls/shdocvw/oleobject.c 6 Sep 2005 18:53:16 -0000
@@ -260,32 +260,33 @@ static const IOleObjectVtbl OleObjectVtb
* Implement the IOleInPlaceObject interface
*/
-static HRESULT WINAPI WBOIPO_QueryInterface(LPOLEINPLACEOBJECT iface,
- REFIID riid, LPVOID *ppobj)
-{
- FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid));
+#define INPLACEOBJ_THIS(iface) DEFINE_THIS(WebBrowser, OleInPlaceObject, iface)
- if (ppobj == NULL) return E_POINTER;
-
- return E_NOINTERFACE;
+static HRESULT WINAPI OleInPlaceObject_QueryInterface(IOleInPlaceObject *iface,
+ REFIID riid, LPVOID *ppobj)
+{
+ WebBrowser *This = INPLACEOBJ_THIS(iface);
+ return IWebBrowser_QueryInterface(WEBBROWSER(This), riid, ppobj);
}
-static ULONG WINAPI WBOIPO_AddRef(LPOLEINPLACEOBJECT iface)
+static ULONG WINAPI OleInPlaceObject_AddRef(IOleInPlaceObject *iface)
{
- SHDOCVW_LockModule();
-
- return 2; /* non-heap based object */
+ WebBrowser *This = INPLACEOBJ_THIS(iface);
+ return IWebBrowser_AddRef(WEBBROWSER(This));
}
-static ULONG WINAPI WBOIPO_Release(LPOLEINPLACEOBJECT iface)
+static ULONG WINAPI OleInPlaceObject_Release(IOleInPlaceObject *iface)
{
- SHDOCVW_UnlockModule();
-
- return 1; /* non-heap based object */
+ WebBrowser *This = INPLACEOBJ_THIS(iface);
+ return IWebBrowser_Release(WEBBROWSER(This));
}
-static HRESULT WINAPI WBOIPO_GetWindow(LPOLEINPLACEOBJECT iface, HWND* phwnd)
+static HRESULT WINAPI OleInPlaceObject_GetWindow(IOleInPlaceObject *iface, HWND* phwnd)
{
+ WebBrowser *This = INPLACEOBJ_THIS(iface);
+
+ FIXME("(%p)->(%p)\n", This, phwnd);
+
#if 0
/* Create a fake window to fool MFC into believing that we actually
* have an implemented browser control. Avoids the assertion.
@@ -300,132 +301,130 @@ static HRESULT WINAPI WBOIPO_GetWindow(L
TRACE ("Returning hwnd = %d\n", hwnd);
#endif
- FIXME("stub HWND* = %p\n", phwnd);
return S_OK;
}
-static HRESULT WINAPI WBOIPO_ContextSensitiveHelp(LPOLEINPLACEOBJECT iface,
- BOOL fEnterMode)
+static HRESULT WINAPI OleInPlaceObject_ContextSensitiveHelp(IOleInPlaceObject *iface,
+ BOOL fEnterMode)
{
- FIXME("stub fEnterMode = %d\n", fEnterMode);
- return S_OK;
+ WebBrowser *This = INPLACEOBJ_THIS(iface);
+ FIXME("(%p)->(%x)\n", This, fEnterMode);
+ return E_NOTIMPL;
}
-static HRESULT WINAPI WBOIPO_InPlaceDeactivate(LPOLEINPLACEOBJECT iface)
+static HRESULT WINAPI OleInPlaceObject_InPlaceDeactivate(IOleInPlaceObject *iface)
{
- FIXME("stub \n");
- return S_OK;
+ WebBrowser *This = INPLACEOBJ_THIS(iface);
+ FIXME("(%p)\n", This);
+ return E_NOTIMPL;
}
-static HRESULT WINAPI WBOIPO_UIDeactivate(LPOLEINPLACEOBJECT iface)
+static HRESULT WINAPI OleInPlaceObject_UIDeactivate(IOleInPlaceObject *iface)
{
- FIXME("stub \n");
- return S_OK;
+ WebBrowser *This = INPLACEOBJ_THIS(iface);
+ FIXME("(%p)\n", This);
+ return E_NOTIMPL;
}
-static HRESULT WINAPI WBOIPO_SetObjectRects(LPOLEINPLACEOBJECT iface,
- LPCRECT lprcPosRect, LPCRECT lprcClipRect)
+static HRESULT WINAPI OleInPlaceObject_SetObjectRects(IOleInPlaceObject *iface,
+ LPCRECT lprcPosRect, LPCRECT lprcClipRect)
{
- FIXME("stub PosRect = %p, ClipRect = %p\n", lprcPosRect, lprcClipRect);
- return S_OK;
+ WebBrowser *This = INPLACEOBJ_THIS(iface);
+ FIXME("(%p)->(%p %p)\n", This, lprcPosRect, lprcClipRect);
+ return E_NOTIMPL;
}
-static HRESULT WINAPI WBOIPO_ReactivateAndUndo(LPOLEINPLACEOBJECT iface)
+static HRESULT WINAPI OleInPlaceObject_ReactivateAndUndo(IOleInPlaceObject *iface)
{
- FIXME("stub \n");
- return S_OK;
+ WebBrowser *This = INPLACEOBJ_THIS(iface);
+ FIXME("(%p)\n", This);
+ return E_NOTIMPL;
}
-/**********************************************************************
- * IOleInPlaceObject virtual function table for IE Web Browser component
- */
+#undef INPLACEOBJ_THIS
-static const IOleInPlaceObjectVtbl WBOIPO_Vtbl =
+static const IOleInPlaceObjectVtbl OleInPlaceObjectVtbl =
{
- WBOIPO_QueryInterface,
- WBOIPO_AddRef,
- WBOIPO_Release,
- WBOIPO_GetWindow,
- WBOIPO_ContextSensitiveHelp,
- WBOIPO_InPlaceDeactivate,
- WBOIPO_UIDeactivate,
- WBOIPO_SetObjectRects,
- WBOIPO_ReactivateAndUndo
+ OleInPlaceObject_QueryInterface,
+ OleInPlaceObject_AddRef,
+ OleInPlaceObject_Release,
+ OleInPlaceObject_GetWindow,
+ OleInPlaceObject_ContextSensitiveHelp,
+ OleInPlaceObject_InPlaceDeactivate,
+ OleInPlaceObject_UIDeactivate,
+ OleInPlaceObject_SetObjectRects,
+ OleInPlaceObject_ReactivateAndUndo
};
-IOleInPlaceObjectImpl SHDOCVW_OleInPlaceObject = {&WBOIPO_Vtbl};
-
-
/**********************************************************************
* Implement the IOleControl interface
*/
-static HRESULT WINAPI WBOC_QueryInterface(LPOLECONTROL iface,
- REFIID riid, LPVOID *ppobj)
-{
- FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid));
+#define CONTROL_THIS(iface) DEFINE_THIS(WebBrowser, OleControl, iface)
- if (ppobj == NULL) return E_POINTER;
-
- return E_NOINTERFACE;
+static HRESULT WINAPI OleControl_QueryInterface(IOleControl *iface,
+ REFIID riid, LPVOID *ppobj)
+{
+ WebBrowser *This = CONTROL_THIS(iface);
+ return IWebBrowser_QueryInterface(WEBBROWSER(This), riid, ppobj);
}
-static ULONG WINAPI WBOC_AddRef(LPOLECONTROL iface)
+static ULONG WINAPI OleControl_AddRef(IOleControl *iface)
{
- SHDOCVW_LockModule();
-
- return 2; /* non-heap based object */
+ WebBrowser *This = CONTROL_THIS(iface);
+ return IWebBrowser_AddRef(WEBBROWSER(This));
}
-static ULONG WINAPI WBOC_Release(LPOLECONTROL iface)
+static ULONG WINAPI OleControl_Release(IOleControl *iface)
{
- SHDOCVW_UnlockModule();
-
- return 1; /* non-heap based object */
+ WebBrowser *This = CONTROL_THIS(iface);
+ return IWebBrowser_Release(WEBBROWSER(This));
}
-static HRESULT WINAPI WBOC_GetControlInfo(LPOLECONTROL iface, LPCONTROLINFO pCI)
+static HRESULT WINAPI OleControl_GetControlInfo(IOleControl *iface, LPCONTROLINFO pCI)
{
- FIXME("stub: LPCONTROLINFO = %p\n", pCI);
- return S_OK;
+ WebBrowser *This = CONTROL_THIS(iface);
+ FIXME("(%p)->(%p)\n", This, pCI);
+ return E_NOTIMPL;
}
-static HRESULT WINAPI WBOC_OnMnemonic(LPOLECONTROL iface, struct tagMSG *pMsg)
+static HRESULT WINAPI OleControl_OnMnemonic(IOleControl *iface, struct tagMSG *pMsg)
{
- FIXME("stub: MSG* = %p\n", pMsg);
- return S_OK;
+ WebBrowser *This = CONTROL_THIS(iface);
+ FIXME("(%p)->(%p)\n", This, pMsg);
+ return E_NOTIMPL;
}
-static HRESULT WINAPI WBOC_OnAmbientPropertyChange(LPOLECONTROL iface, DISPID dispID)
+static HRESULT WINAPI OleControl_OnAmbientPropertyChange(IOleControl *iface, DISPID dispID)
{
- FIXME("stub: DISPID = %ld\n", dispID);
- return S_OK;
+ WebBrowser *This = CONTROL_THIS(iface);
+ FIXME("(%p)->(%ld)\n", This, dispID);
+ return E_NOTIMPL;
}
-static HRESULT WINAPI WBOC_FreezeEvents(LPOLECONTROL iface, BOOL bFreeze)
+static HRESULT WINAPI OleControl_FreezeEvents(IOleControl *iface, BOOL bFreeze)
{
- FIXME("stub: bFreeze = %d\n", bFreeze);
- return S_OK;
+ WebBrowser *This = CONTROL_THIS(iface);
+ FIXME("(%p)->(%x)\n", This, bFreeze);
+ return E_NOTIMPL;
}
-/**********************************************************************
- * IOleControl virtual function table for IE Web Browser component
- */
+#undef CONTROL_THIS
-static const IOleControlVtbl WBOC_Vtbl =
+static const IOleControlVtbl OleControlVtbl =
{
- WBOC_QueryInterface,
- WBOC_AddRef,
- WBOC_Release,
- WBOC_GetControlInfo,
- WBOC_OnMnemonic,
- WBOC_OnAmbientPropertyChange,
- WBOC_FreezeEvents
+ OleControl_QueryInterface,
+ OleControl_AddRef,
+ OleControl_Release,
+ OleControl_GetControlInfo,
+ OleControl_OnMnemonic,
+ OleControl_OnAmbientPropertyChange,
+ OleControl_FreezeEvents
};
-IOleControlImpl SHDOCVW_OleControl = {&WBOC_Vtbl};
-
void WebBrowser_OleObject_Init(WebBrowser *This)
{
- This->lpOleObjectVtbl = &OleObjectVtbl;
+ This->lpOleObjectVtbl = &OleObjectVtbl;
+ This->lpOleInPlaceObjectVtbl = &OleInPlaceObjectVtbl;
+ This->lpOleControlVtbl = &OleControlVtbl;
}
Index: dlls/shdocvw/shdocvw.h
===================================================================
RCS file: /home/wine/wine/dlls/shdocvw/shdocvw.h,v
retrieving revision 1.16
diff -u -p -r1.16 shdocvw.h
--- dlls/shdocvw/shdocvw.h 6 Sep 2005 11:41:15 -0000 1.16
+++ dlls/shdocvw/shdocvw.h 6 Sep 2005 18:53:16 -0000
@@ -53,14 +53,18 @@ extern IClassFactoryImpl SHDOCVW_ClassFa
* WebBrowser declaration for SHDOCVW.DLL
*/
typedef struct {
- const IWebBrowserVtbl *lpWebBrowserVtbl;
- const IOleObjectVtbl *lpOleObjectVtbl;
+ const IWebBrowserVtbl *lpWebBrowserVtbl;
+ const IOleObjectVtbl *lpOleObjectVtbl;
+ const IOleInPlaceObjectVtbl *lpOleInPlaceObjectVtbl;
+ const IOleControlVtbl *lpOleControlVtbl;
LONG ref;
} WebBrowser;
-#define WEBBROWSER(x) ((IWebBrowser*) &(x)->lpWebBrowserVtbl)
-#define OLEOBJ(x) ((IOleObject*) &(x)->lpOleObjectVtbl)
+#define WEBBROWSER(x) ((IWebBrowser*) &(x)->lpWebBrowserVtbl)
+#define OLEOBJ(x) ((IOleObject*) &(x)->lpOleObjectVtbl)
+#define INPLACEOBJ(x) ((IOleInPlaceObject*) &(x)->lpOleInPlaceObjectVtbl)
+#define CONTROL(x) ((IOleControl*) &(x)->lpOleControlVtbl)
void WebBrowser_OleObject_Init(WebBrowser*);
@@ -154,30 +158,6 @@ typedef struct
LONG ref;
} IConnectionPointImpl;
-/**********************************************************************
- * IOleInPlaceObject declaration for SHDOCVW.DLL
- */
-typedef struct
-{
- /* IUnknown fields */
- const IOleInPlaceObjectVtbl *lpVtbl;
- DWORD ref;
-} IOleInPlaceObjectImpl;
-
-extern IOleInPlaceObjectImpl SHDOCVW_OleInPlaceObject;
-
-/**********************************************************************
- * IOleControl declaration for SHDOCVW.DLL
- */
-typedef struct
-{
- /* IUnknown fields */
- const IOleControlVtbl *lpVtbl;
- DWORD ref;
-} IOleControlImpl;
-
-extern IOleControlImpl SHDOCVW_OleControl;
-
#define DEFINE_THIS(cls,ifc,iface) ((cls*)((BYTE*)(iface)-offsetof(cls,lp ## ifc ## Vtbl)))
/**********************************************************************
Index: dlls/shdocvw/webbrowser.c
===================================================================
RCS file: /home/wine/wine/dlls/shdocvw/webbrowser.c,v
retrieving revision 1.14
diff -u -p -r1.14 webbrowser.c
--- dlls/shdocvw/webbrowser.c 6 Sep 2005 11:41:14 -0000 1.14
+++ dlls/shdocvw/webbrowser.c 6 Sep 2005 18:53:16 -0000
@@ -42,14 +42,23 @@ static HRESULT WINAPI WebBrowser_QueryIn
TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
*ppv = WEBBROWSER(This);
}else if(IsEqualGUID (&IID_IDispatch, riid)) {
- FIXME("(%p)->(IID_IDispatch %p)\n", This, ppv);
+ TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
*ppv = WEBBROWSER(This);
}else if(IsEqualGUID(&IID_IWebBrowser, riid)) {
TRACE("(%p)->(IID_IWebBrowser %p)\n", This, ppv);
*ppv = WEBBROWSER(This);
}else if(IsEqualGUID(&IID_IOleObject, riid)) {
- FIXME("(%p)->(IID_IOleObject %p)\n", This, ppv);
+ TRACE("(%p)->(IID_IOleObject %p)\n", This, ppv);
*ppv = OLEOBJ(This);
+ }else if(IsEqualGUID(&IID_IOleWindow, riid)) {
+ TRACE("(%p)->(IID_IOleWindow %p)\n", This, ppv);
+ *ppv = INPLACEOBJ(This);
+ }else if(IsEqualGUID (&IID_IOleInPlaceObject, riid)) {
+ TRACE("(%p)->(IID_IOleInPlaceObject %p)\n", This, ppv);
+ *ppv = INPLACEOBJ(This);
+ }else if(IsEqualGUID (&IID_IOleControl, riid)) {
+ FIXME("(%p)->(IID_IOleControl %p)\n", This, ppv);
+ *ppv = CONTROL(This);
}else if(IsEqualGUID (&IID_IPersistStorage, riid)) {
FIXME("(%p)->(IID_IPersistStorage %p)\n", This, ppv);
*ppv = &SHDOCVW_PersistStorage;
@@ -68,12 +77,6 @@ static HRESULT WINAPI WebBrowser_QueryIn
}else if(IsEqualGUID (&IID_IConnectionPointContainer, riid)) {
FIXME("(%p)->(IID_IConnectionPointContainer %p)\n", This, ppv);
*ppv = &SHDOCVW_ConnectionPointContainer;
- }else if(IsEqualGUID (&IID_IOleInPlaceObject, riid)) {
- FIXME("(%p)->(IID_IOleInPlaceObject %p)\n", This, ppv);
- *ppv = &SHDOCVW_OleInPlaceObject;
- }else if(IsEqualGUID (&IID_IOleControl, riid)) {
- FIXME("(%p)->(IID_IOleControl %p)\n", This, ppv);
- *ppv = &SHDOCVW_OleControl;
}
if(*ppv) {
More information about the wine-patches
mailing list