Jacek Caban : mshtml: Added PluginHost' s IPropertyNotifySink stub implementation.

Alexandre Julliard julliard at winehq.org
Mon Dec 6 13:18:34 CST 2010


Module: wine
Branch: master
Commit: ec29487f1239f8f1f8315cee7e87fe5b92d5f5b2
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ec29487f1239f8f1f8315cee7e87fe5b92d5f5b2

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Dec  6 18:49:49 2010 +0100

mshtml: Added PluginHost's IPropertyNotifySink stub implementation.

---

 dlls/mshtml/pluginhost.c    |   55 ++++++++++++++++++++++++++++++++++++++++--
 dlls/mshtml/pluginhost.h    |    1 +
 dlls/mshtml/tests/activex.c |    3 +-
 3 files changed, 55 insertions(+), 4 deletions(-)

diff --git a/dlls/mshtml/pluginhost.c b/dlls/mshtml/pluginhost.c
index 1111071..7853899 100644
--- a/dlls/mshtml/pluginhost.c
+++ b/dlls/mshtml/pluginhost.c
@@ -64,7 +64,7 @@ static void activate_plugin(PluginHost *host)
         container.pClientSite = &host->IOleClientSite_iface;
         container.dwAmbientFlags = QACONTAINER_SUPPORTSMNEMONICS|QACONTAINER_MESSAGEREFLECT|QACONTAINER_USERMODE;
         container.pAdviseSink = &host->IAdviseSinkEx_iface;
-        container.pPropertyNotifySink = NULL; /* FIXME */
+        container.pPropertyNotifySink = &host->IPropertyNotifySink_iface;
 
         hres = IQuickActivate_QuickActivate(quick_activate, &container, &control);
         if(FAILED(hres))
@@ -108,6 +108,9 @@ static HRESULT WINAPI PHClientSite_QueryInterface(IOleClientSite *iface, REFIID
     }else if(IsEqualGUID(&IID_IAdviseSinkEx, riid)) {
         TRACE("(%p)->(IID_IAdviseSinkEx %p)\n", This, ppv);
         *ppv = &This->IAdviseSinkEx_iface;
+    }else if(IsEqualGUID(&IID_IPropertyNotifySink, riid)) {
+        TRACE("(%p)->(IID_IPropertyNotifySink %p)\n", This, ppv);
+        *ppv = &This->IPropertyNotifySink_iface;
     }else {
         WARN("Unsupported interface %s\n", debugstr_guid(riid));
         *ppv = NULL;
@@ -270,6 +273,51 @@ static const IAdviseSinkExVtbl AdviseSinkExVtbl = {
     PHAdviseSinkEx_OnViewStatusChange
 };
 
+static inline PluginHost *impl_from_IPropertyNotifySink(IPropertyNotifySink *iface)
+{
+    return CONTAINING_RECORD(iface, PluginHost, IPropertyNotifySink_iface);
+}
+
+static HRESULT WINAPI PHPropertyNotifySink_QueryInterface(IPropertyNotifySink *iface, REFIID riid, void **ppv)
+{
+    PluginHost *This = impl_from_IPropertyNotifySink(iface);
+    return IOleClientSite_QueryInterface(&This->IOleClientSite_iface, riid, ppv);
+}
+
+static ULONG WINAPI PHPropertyNotifySink_AddRef(IPropertyNotifySink *iface)
+{
+    PluginHost *This = impl_from_IPropertyNotifySink(iface);
+    return IOleClientSite_AddRef(&This->IOleClientSite_iface);
+}
+
+static ULONG WINAPI PHPropertyNotifySink_Release(IPropertyNotifySink *iface)
+{
+    PluginHost *This = impl_from_IPropertyNotifySink(iface);
+    return IOleClientSite_Release(&This->IOleClientSite_iface);
+}
+
+static HRESULT WINAPI PHPropertyNotifySink_OnChanged(IPropertyNotifySink *iface, DISPID dispID)
+{
+    PluginHost *This = impl_from_IPropertyNotifySink(iface);
+    FIXME("(%p)->(%d)\n", This, dispID);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI PHPropertyNotifySink_OnRequestEdit(IPropertyNotifySink *iface, DISPID dispID)
+{
+    PluginHost *This = impl_from_IPropertyNotifySink(iface);
+    FIXME("(%p)->(%d)\n", This, dispID);
+    return E_NOTIMPL;
+}
+
+static const IPropertyNotifySinkVtbl PropertyNotifySinkVtbl = {
+    PHPropertyNotifySink_QueryInterface,
+    PHPropertyNotifySink_AddRef,
+    PHPropertyNotifySink_Release,
+    PHPropertyNotifySink_OnChanged,
+    PHPropertyNotifySink_OnRequestEdit
+};
+
 HRESULT create_plugin_host(IUnknown *unk, PluginHost **ret)
 {
     PluginHost *host;
@@ -278,8 +326,9 @@ HRESULT create_plugin_host(IUnknown *unk, PluginHost **ret)
     if(!host)
         return E_OUTOFMEMORY;
 
-    host->IOleClientSite_iface.lpVtbl = &OleClientSiteVtbl;
-    host->IAdviseSinkEx_iface.lpVtbl  = &AdviseSinkExVtbl;
+    host->IOleClientSite_iface.lpVtbl      = &OleClientSiteVtbl;
+    host->IAdviseSinkEx_iface.lpVtbl       = &AdviseSinkExVtbl;
+    host->IPropertyNotifySink_iface.lpVtbl = &PropertyNotifySinkVtbl;
 
     host->ref = 1;
 
diff --git a/dlls/mshtml/pluginhost.h b/dlls/mshtml/pluginhost.h
index 91c6323..236587a 100644
--- a/dlls/mshtml/pluginhost.h
+++ b/dlls/mshtml/pluginhost.h
@@ -21,6 +21,7 @@ typedef struct HTMLObjectElement HTMLObjectElement;
 typedef struct {
     IOleClientSite       IOleClientSite_iface;
     IAdviseSinkEx        IAdviseSinkEx_iface;
+    IPropertyNotifySink  IPropertyNotifySink_iface;
 
     LONG ref;
 
diff --git a/dlls/mshtml/tests/activex.c b/dlls/mshtml/tests/activex.c
index 384b738..4682c11 100644
--- a/dlls/mshtml/tests/activex.c
+++ b/dlls/mshtml/tests/activex.c
@@ -181,7 +181,6 @@ static HRESULT WINAPI QuickActivate_QuickActivate(IQuickActivate *iface, QACONTA
     ok(container->cbSize == sizeof(*container), "container->cbSize = %d\n", container->cbSize);
     ok(container->pClientSite != NULL, "container->pClientSite == NULL\n");
     ok(container->pAdviseSink != NULL, "container->pAdviseSink == NULL\n");
-    todo_wine
     ok(container->pPropertyNotifySink != NULL, "container->pPropertyNotifySink == NULL\n");
     ok(!container->pUnkEventSink, "container->pUnkEventSink != NULL\n");
     ok(container->dwAmbientFlags == (QACONTAINER_SUPPORTSMNEMONICS|QACONTAINER_MESSAGEREFLECT|QACONTAINER_USERMODE),
@@ -209,6 +208,8 @@ static HRESULT WINAPI QuickActivate_QuickActivate(IQuickActivate *iface, QACONTA
 
     ok(iface_cmp((IUnknown*)container->pClientSite, (IUnknown*)container->pAdviseSink),
        "container->pClientSite != container->pAdviseSink\n");
+    ok(iface_cmp((IUnknown*)container->pClientSite, (IUnknown*)container->pPropertyNotifySink),
+       "container->pClientSite != container->pPropertyNotifySink\n");
 
     return S_OK;
 }




More information about the wine-cvs mailing list