Jacek Caban : shdocvw: Added OnAmbientPropertyChange(DISPID_AMBIENT_SILENT) implementation.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Nov 6 05:48:36 CST 2006


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Sun Nov  5 17:40:37 2006 +0100

shdocvw: Added OnAmbientPropertyChange(DISPID_AMBIENT_SILENT) implementation.

---

 dlls/shdocvw/oleobject.c |   50 +++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 49 insertions(+), 1 deletions(-)

diff --git a/dlls/shdocvw/oleobject.c b/dlls/shdocvw/oleobject.c
index 6ccfaef..ad657b8 100644
--- a/dlls/shdocvw/oleobject.c
+++ b/dlls/shdocvw/oleobject.c
@@ -27,6 +27,7 @@ #include <string.h>
 #include "wine/debug.h"
 #include "shdocvw.h"
 #include "htiframe.h"
+#include "idispids.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
 
@@ -186,6 +187,45 @@ static HRESULT activate_ui(WebBrowser *T
     return S_OK;
 }
 
+static HRESULT get_client_disp_property(IOleClientSite *client, DISPID dispid, VARIANT *res)
+{
+    IDispatch *disp = NULL;
+    DISPPARAMS dispparams = {NULL, 0};
+    HRESULT hres;
+
+    VariantInit(res);
+
+    if(!client)
+        return S_OK;
+
+    hres = IOleClientSite_QueryInterface(client, &IID_IDispatch, (void**)&disp);
+    if(FAILED(hres)) {
+        TRACE("Could not get IDispatch\n");
+        return hres;
+    }
+
+    hres = IDispatch_Invoke(disp, dispid, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
+            DISPATCH_PROPERTYGET, &dispparams, res, NULL, NULL);
+
+    IDispatch_Release(disp);
+
+    return hres;
+}
+
+static HRESULT on_silent_change(WebBrowser *This)
+{
+    VARIANT silent;
+
+    get_client_disp_property(This->client, DISPID_AMBIENT_SILENT, &silent);
+
+    if(V_VT(&silent) == VT_BOOL)
+        IWebBrowser2_put_Silent(WEBBROWSER2(This), V_BOOL(&silent));
+    else if(V_VT(&silent) != VT_EMPTY)
+        WARN("wrong V_VT(silent) %d\n", V_VT(&silent));
+
+    return S_OK;
+}
+
 /**********************************************************************
  * Implement the IOleObject interface for the WebBrowser control
  */
@@ -639,7 +679,15 @@ static HRESULT WINAPI OleControl_OnMnemo
 static HRESULT WINAPI OleControl_OnAmbientPropertyChange(IOleControl *iface, DISPID dispID)
 {
     WebBrowser *This = CONTROL_THIS(iface);
-    FIXME("(%p)->(%d)\n", This, dispID);
+
+    TRACE("(%p)->(%d)\n", This, dispID);
+
+    switch(dispID) {
+    case DISPID_AMBIENT_SILENT:
+        return on_silent_change(This);
+    }
+
+    FIXME("Unknown dispID %d\n", dispID);
     return E_NOTIMPL;
 }
 




More information about the wine-cvs mailing list