Jacek Caban : mshtml: Added HTMLElementEvents2 support.
Alexandre Julliard
julliard at winehq.org
Fri Mar 15 11:51:34 CDT 2013
Module: wine
Branch: master
Commit: d3e8d44e9c0535b8ff520917163cec9b5eae823f
URL: http://source.winehq.org/git/wine.git/?a=commit;h=d3e8d44e9c0535b8ff520917163cec9b5eae823f
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Mar 15 15:02:15 2013 +0100
mshtml: Added HTMLElementEvents2 support.
---
dlls/mshtml/htmlelem.c | 2 ++
dlls/mshtml/htmlevent.c | 13 +++++++++++--
dlls/mshtml/mshtml_private.h | 5 ++++-
3 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c
index 02c1538..db4b8e7 100644
--- a/dlls/mshtml/htmlelem.c
+++ b/dlls/mshtml/htmlelem.c
@@ -1679,6 +1679,8 @@ HRESULT HTMLElement_handle_event(HTMLDOMNode *iface, DWORD eid, nsIDOMEvent *eve
return S_OK;
}
+cp_static_data_t HTMLElementEvents2_data = { HTMLElementEvents2_tid, NULL /* FIXME */, TRUE };
+
const cpc_entry_t HTMLElement_cpc[] = {
HTMLELEMENT_CPC,
{NULL}
diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c
index 19446ad..9ea1708 100644
--- a/dlls/mshtml/htmlevent.c
+++ b/dlls/mshtml/htmlevent.c
@@ -883,12 +883,20 @@ static HRESULT call_disp_func(IDispatch *disp, DISPPARAMS *dp, VARIANT *retv)
return hres;
}
-static HRESULT call_cp_func(IDispatch *disp, DISPID dispid, VARIANT *retv)
+static HRESULT call_cp_func(IDispatch *disp, DISPID dispid, HTMLEventObj *event_obj, VARIANT *retv)
{
DISPPARAMS dp = {NULL,NULL,0,0};
+ VARIANT event_arg;
ULONG argerr;
EXCEPINFO ei;
+ if(event_obj) {
+ V_VT(&event_arg) = VT_DISPATCH;
+ V_DISPATCH(&event_arg) = (IDispatch*)&event_obj->IHTMLEventObj_iface;
+ dp.rgvarg = &event_arg;
+ dp.cArgs = 1;
+ }
+
memset(&ei, 0, sizeof(ei));
return IDispatch_Invoke(disp, dispid, &IID_NULL, 0, DISPATCH_METHOD, &dp, retv, &ei, &argerr);
}
@@ -1019,7 +1027,8 @@ static void call_event_handlers(HTMLDocumentNode *doc, HTMLEventObj *event_obj,
V_VT(&v) = VT_EMPTY;
TRACE("cp %s [%u] >>>\n", debugstr_w(event_info[eid].name), i);
- hres = call_cp_func(cp->sinks[i].disp, event_info[eid].dispid, &v);
+ hres = call_cp_func(cp->sinks[i].disp, event_info[eid].dispid,
+ cp->data->pass_event_arg ? event_obj : NULL, &v);
if(hres == S_OK) {
TRACE("cp %s [%u] <<<\n", debugstr_w(event_info[eid].name), i);
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index a2a9436..d0bb68e 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -114,6 +114,7 @@ typedef struct event_target_t event_target_t;
XDIID(DispHTMLUnknownElement) \
XDIID(DispHTMLWindow2) \
XDIID(HTMLDocumentEvents) \
+ XDIID(HTMLElementEvents2) \
XIID(IHTMLAnchorElement) \
XIID(IHTMLAttributeCollection) \
XIID(IHTMLAttributeCollection2) \
@@ -430,6 +431,7 @@ typedef enum {
typedef struct _cp_static_data_t {
tid_t tid;
void (*on_advise)(IUnknown*,struct _cp_static_data_t*);
+ BOOL pass_event_arg;
DWORD id_cnt;
DISPID *ids;
} cp_static_data_t;
@@ -666,7 +668,8 @@ typedef struct {
IHTMLElement3_tid, \
IHTMLElement4_tid
-#define HTMLELEMENT_CPC {NULL}
+extern cp_static_data_t HTMLElementEvents2_data;
+#define HTMLELEMENT_CPC {&DIID_HTMLElementEvents2, &HTMLElementEvents2_data}
extern const cpc_entry_t HTMLElement_cpc[];
typedef struct {
More information about the wine-cvs
mailing list