Jacek Caban : mshtml: Added support for DISPID_VALUE.

Alexandre Julliard julliard at winehq.org
Tue Sep 1 11:05:28 CDT 2009


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Aug 31 20:43:44 2009 +0200

mshtml: Added support for DISPID_VALUE.

---

 dlls/mshtml/dispex.c         |   26 ++++++++++++++++++++++++++
 dlls/mshtml/htmlelemcol.c    |    1 +
 dlls/mshtml/htmlnode.c       |    1 +
 dlls/mshtml/htmlstyle.c      |    1 +
 dlls/mshtml/mshtml_private.h |    1 +
 5 files changed, 30 insertions(+), 0 deletions(-)

diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c
index 3dd11b1..0a09de7 100644
--- a/dlls/mshtml/dispex.c
+++ b/dlls/mshtml/dispex.c
@@ -407,6 +407,29 @@ HRESULT dispex_get_dprop_ref(DispatchEx *This, const WCHAR *name, BOOL alloc, VA
     return S_OK;
 }
 
+static HRESULT dispex_value(DispatchEx *This, LCID lcid, WORD flags, DISPPARAMS *params,
+        VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller)
+{
+    static const WCHAR objectW[] = {'[','o','b','j','e','c','t',']',0};
+
+    if(This->data->vtbl && This->data->vtbl->value)
+        return This->data->vtbl->value(This->outer, lcid, flags, params, res, ei, caller);
+
+    switch(flags) {
+    case DISPATCH_PROPERTYGET:
+        V_VT(res) = VT_BSTR;
+        V_BSTR(res) = SysAllocString(objectW);
+        if(!V_BSTR(res))
+            return E_OUTOFMEMORY;
+        break;
+    default:
+        FIXME("Unimplemented flags %x\n", flags);
+        return E_NOTIMPL;
+    }
+
+    return S_OK;
+}
+
 #define DISPATCHEX_THIS(iface) DEFINE_THIS(DispatchEx, IDispatchEx, iface)
 
 static HRESULT WINAPI DispatchEx_QueryInterface(IDispatchEx *iface, REFIID riid, void **ppv)
@@ -556,6 +579,9 @@ static HRESULT WINAPI DispatchEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID lc
 
     TRACE("(%p)->(%x %x %x %p %p %p %p)\n", This, id, lcid, wFlags, pdp, pvarRes, pei, pspCaller);
 
+    if(id == DISPID_VALUE)
+        return dispex_value(This, lcid, wFlags, pdp, pvarRes, pei, pspCaller);
+
     if(is_custom_dispid(id) && This->data->vtbl && This->data->vtbl->invoke)
         return This->data->vtbl->invoke(This->outer, id, lcid, wFlags, pdp, pvarRes, pei, pspCaller);
 
diff --git a/dlls/mshtml/htmlelemcol.c b/dlls/mshtml/htmlelemcol.c
index 4362890..ba9a440 100644
--- a/dlls/mshtml/htmlelemcol.c
+++ b/dlls/mshtml/htmlelemcol.c
@@ -428,6 +428,7 @@ static const IHTMLElementCollectionVtbl HTMLElementCollectionVtbl = {
 };
 
 static const dispex_static_data_vtbl_t HTMLElementColection_dispex_vtbl = {
+    NULL,
     HTMLElementCollection_get_dispid,
     HTMLElementCollection_invoke
 };
diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c
index 720bbfe..9b132b1 100644
--- a/dlls/mshtml/htmlnode.c
+++ b/dlls/mshtml/htmlnode.c
@@ -250,6 +250,7 @@ static const tid_t HTMLDOMChildrenCollection_iface_tids[] = {
 };
 
 static const dispex_static_data_vtbl_t HTMLDOMChildrenCollection_dispex_vtbl = {
+    NULL,
     HTMLDOMChildrenCollection_get_dispid,
     HTMLDOMChildrenCollection_invoke
 };
diff --git a/dlls/mshtml/htmlstyle.c b/dlls/mshtml/htmlstyle.c
index cd9ae4d..612dc2f 100644
--- a/dlls/mshtml/htmlstyle.c
+++ b/dlls/mshtml/htmlstyle.c
@@ -2610,6 +2610,7 @@ static const IHTMLStyleVtbl HTMLStyleVtbl = {
 };
 
 static const dispex_static_data_vtbl_t HTMLStyle_dispex_vtbl = {
+    NULL,
     HTMLStyle_get_dispid,
     NULL
 };
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index c3be4b9..db127b5 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -127,6 +127,7 @@ typedef struct dispex_dynamic_data_t dispex_dynamic_data_t;
 #define MSHTML_DISPID_CUSTOM_MAX 0x6fffffff
 
 typedef struct {
+    HRESULT (*value)(IUnknown*,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,IServiceProvider*);
     HRESULT (*get_dispid)(IUnknown*,BSTR,DWORD,DISPID*);
     HRESULT (*invoke)(IUnknown*,DISPID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,IServiceProvider*);
 } dispex_static_data_vtbl_t;




More information about the wine-cvs mailing list