From 890dc6d6a05354991c832d5767228f083a01ae43 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Mon, 6 Dec 2010 18:50:35 +0100 Subject: [PATCH] mshtml: Added PluginHost's IOleInPlaceSite stub implementation. --- dlls/mshtml/pluginhost.c | 161 ++++++++++++++++++++++++++++++++++++ dlls/mshtml/pluginhost.h | 1 + dlls/mshtml/tests/activex.c | 3 + 3 files changed, 165 insertions(+) diff --git a/dlls/mshtml/pluginhost.c b/dlls/mshtml/pluginhost.c index 7e0dd0c17d8..db11c02b64b 100644 --- a/dlls/mshtml/pluginhost.c +++ b/dlls/mshtml/pluginhost.c @@ -114,6 +114,15 @@ static HRESULT WINAPI PHClientSite_QueryInterface(IOleClientSite *iface, REFIID }else if(IsEqualGUID(&IID_IDispatch, riid)) { TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv); *ppv = &This->IDispatch_iface; + }else if(IsEqualGUID(&IID_IOleWindow, riid)) { + TRACE("(%p)->(IID_IOleWindow %p)\n", This, ppv); + *ppv = &This->IOleInPlaceSiteEx_iface; + }else if(IsEqualGUID(&IID_IOleInPlaceSite, riid)) { + TRACE("(%p)->(IID_IOleInPlaceSite %p)\n", This, ppv); + *ppv = &This->IOleInPlaceSiteEx_iface; + }else if(IsEqualGUID(&IID_IOleInPlaceSiteEx, riid)) { + TRACE("(%p)->(IID_IOleInPlaceSiteEx %p)\n", This, ppv); + *ppv = &This->IOleInPlaceSiteEx_iface; }else { WARN("Unsupported interface %s\n", debugstr_guid(riid)); *ppv = NULL; @@ -385,6 +394,157 @@ static const IDispatchVtbl DispatchVtbl = { PHDispatch_Invoke }; +static inline PluginHost *impl_from_IOleInPlaceSiteEx(IOleInPlaceSiteEx *iface) +{ + return CONTAINING_RECORD(iface, PluginHost, IOleInPlaceSiteEx_iface); +} + +static HRESULT WINAPI PHInPlaceSite_QueryInterface(IOleInPlaceSiteEx *iface, REFIID riid, void **ppv) +{ + PluginHost *This = impl_from_IOleInPlaceSiteEx(iface); + return IOleClientSite_QueryInterface(&This->IOleClientSite_iface, riid, ppv); +} + +static ULONG WINAPI PHInPlaceSite_AddRef(IOleInPlaceSiteEx *iface) +{ + PluginHost *This = impl_from_IOleInPlaceSiteEx(iface); + return IOleClientSite_AddRef(&This->IOleClientSite_iface); +} + +static ULONG WINAPI PHInPlaceSite_Release(IOleInPlaceSiteEx *iface) +{ + PluginHost *This = impl_from_IOleInPlaceSiteEx(iface); + return IOleClientSite_Release(&This->IOleClientSite_iface); +} + +static HRESULT WINAPI PHInPlaceSite_GetWindow(IOleInPlaceSiteEx *iface, HWND *phwnd) +{ + PluginHost *This = impl_from_IOleInPlaceSiteEx(iface); + FIXME("(%p)->(%p)\n", This, phwnd); + return E_NOTIMPL; +} + +static HRESULT WINAPI PHInPlaceSite_ContextSensitiveHelp(IOleInPlaceSiteEx *iface, BOOL fEnterMode) +{ + PluginHost *This = impl_from_IOleInPlaceSiteEx(iface); + FIXME("(%p)->(%x)\n", This, fEnterMode); + return E_NOTIMPL; +} + +static HRESULT WINAPI PHInPlaceSite_CanInPlaceActivate(IOleInPlaceSiteEx *iface) +{ + PluginHost *This = impl_from_IOleInPlaceSiteEx(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI PHInPlaceSite_OnInPlaceActivate(IOleInPlaceSiteEx *iface) +{ + PluginHost *This = impl_from_IOleInPlaceSiteEx(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI PHInPlaceSite_OnUIActivate(IOleInPlaceSiteEx *iface) +{ + PluginHost *This = impl_from_IOleInPlaceSiteEx(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI PHInPlaceSite_GetWindowContext(IOleInPlaceSiteEx *iface, + IOleInPlaceFrame **ppFrame, IOleInPlaceUIWindow **ppDoc, RECT *lprcPosRect, + RECT *lprcClipRect, OLEINPLACEFRAMEINFO *frame_info) +{ + PluginHost *This = impl_from_IOleInPlaceSiteEx(iface); + FIXME("(%p)->(%p %p %p %p %p)\n", This, ppFrame, ppDoc, lprcPosRect, lprcClipRect, frame_info); + return E_NOTIMPL; +} + +static HRESULT WINAPI PHInPlaceSite_Scroll(IOleInPlaceSiteEx *iface, SIZE scrollExtent) +{ + PluginHost *This = impl_from_IOleInPlaceSiteEx(iface); + FIXME("(%p)->({%d %d})\n", This, scrollExtent.cx, scrollExtent.cy); + return E_NOTIMPL; +} + +static HRESULT WINAPI PHInPlaceSite_OnUIDeactivate(IOleInPlaceSiteEx *iface, BOOL fUndoable) +{ + PluginHost *This = impl_from_IOleInPlaceSiteEx(iface); + FIXME("(%p)->(%x)\n", This, fUndoable); + return E_NOTIMPL; +} + +static HRESULT WINAPI PHInPlaceSite_OnInPlaceDeactivate(IOleInPlaceSiteEx *iface) +{ + PluginHost *This = impl_from_IOleInPlaceSiteEx(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI PHInPlaceSite_DiscardUndoState(IOleInPlaceSiteEx *iface) +{ + PluginHost *This = impl_from_IOleInPlaceSiteEx(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI PHInPlaceSite_DeactivateAndUndo(IOleInPlaceSiteEx *iface) +{ + PluginHost *This = impl_from_IOleInPlaceSiteEx(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI PHInPlaceSite_OnPosRectChange(IOleInPlaceSiteEx *iface, LPCRECT lprcPosRect) +{ + PluginHost *This = impl_from_IOleInPlaceSiteEx(iface); + FIXME("(%p)->(%p)\n", This, lprcPosRect); + return E_NOTIMPL; +} + +static HRESULT WINAPI PHInPlaceSiteEx_OnInPlaceActivateEx(IOleInPlaceSiteEx *iface, BOOL *pfNoRedraw, DWORD dwFlags) +{ + PluginHost *This = impl_from_IOleInPlaceSiteEx(iface); + FIXME("(%p)->(%p %x)\n", This, pfNoRedraw, dwFlags); + return E_NOTIMPL; +} + +static HRESULT WINAPI PHInPlaceSiteEx_OnInPlaceDeactivateEx(IOleInPlaceSiteEx *iface, BOOL fNoRedraw) +{ + PluginHost *This = impl_from_IOleInPlaceSiteEx(iface); + FIXME("(%p)->(%x)\n", This, fNoRedraw); + return E_NOTIMPL; +} + +static HRESULT WINAPI PHInPlaceSiteEx_RequestUIActivate(IOleInPlaceSiteEx *iface) +{ + PluginHost *This = impl_from_IOleInPlaceSiteEx(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static const IOleInPlaceSiteExVtbl OleInPlaceSiteExVtbl = { + PHInPlaceSite_QueryInterface, + PHInPlaceSite_AddRef, + PHInPlaceSite_Release, + PHInPlaceSite_GetWindow, + PHInPlaceSite_ContextSensitiveHelp, + PHInPlaceSite_CanInPlaceActivate, + PHInPlaceSite_OnInPlaceActivate, + PHInPlaceSite_OnUIActivate, + PHInPlaceSite_GetWindowContext, + PHInPlaceSite_Scroll, + PHInPlaceSite_OnUIDeactivate, + PHInPlaceSite_OnInPlaceDeactivate, + PHInPlaceSite_DiscardUndoState, + PHInPlaceSite_DeactivateAndUndo, + PHInPlaceSite_OnPosRectChange, + PHInPlaceSiteEx_OnInPlaceActivateEx, + PHInPlaceSiteEx_OnInPlaceDeactivateEx, + PHInPlaceSiteEx_RequestUIActivate +}; + HRESULT create_plugin_host(IUnknown *unk, PluginHost **ret) { PluginHost *host; @@ -397,6 +557,7 @@ HRESULT create_plugin_host(IUnknown *unk, PluginHost **ret) host->IAdviseSinkEx_iface.lpVtbl = &AdviseSinkExVtbl; host->IPropertyNotifySink_iface.lpVtbl = &PropertyNotifySinkVtbl; host->IDispatch_iface.lpVtbl = &DispatchVtbl; + host->IOleInPlaceSiteEx_iface.lpVtbl = &OleInPlaceSiteExVtbl; host->ref = 1; diff --git a/dlls/mshtml/pluginhost.h b/dlls/mshtml/pluginhost.h index 4965d9a3d6d..077cf0cac84 100644 --- a/dlls/mshtml/pluginhost.h +++ b/dlls/mshtml/pluginhost.h @@ -23,6 +23,7 @@ typedef struct { IAdviseSinkEx IAdviseSinkEx_iface; IPropertyNotifySink IPropertyNotifySink_iface; IDispatch IDispatch_iface; + IOleInPlaceSiteEx IOleInPlaceSiteEx_iface; LONG ref; diff --git a/dlls/mshtml/tests/activex.c b/dlls/mshtml/tests/activex.c index 55e4952e414..3842bbd9ae6 100644 --- a/dlls/mshtml/tests/activex.c +++ b/dlls/mshtml/tests/activex.c @@ -93,6 +93,9 @@ static const REFIID pluginhost_iids[] = { &IID_IAdviseSinkEx, &IID_IPropertyNotifySink, &IID_IDispatch, + &IID_IOleWindow, + &IID_IOleInPlaceSite, + &IID_IOleInPlaceSiteEx, NULL };