mshtml: Added HTMLElementEvents2 support.
This commit is contained in:
parent
af6c518e7d
commit
d3e8d44e9c
|
@ -1679,6 +1679,8 @@ HRESULT HTMLElement_handle_event(HTMLDOMNode *iface, DWORD eid, nsIDOMEvent *eve
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cp_static_data_t HTMLElementEvents2_data = { HTMLElementEvents2_tid, NULL /* FIXME */, TRUE };
|
||||||
|
|
||||||
const cpc_entry_t HTMLElement_cpc[] = {
|
const cpc_entry_t HTMLElement_cpc[] = {
|
||||||
HTMLELEMENT_CPC,
|
HTMLELEMENT_CPC,
|
||||||
{NULL}
|
{NULL}
|
||||||
|
|
|
@ -883,12 +883,20 @@ static HRESULT call_disp_func(IDispatch *disp, DISPPARAMS *dp, VARIANT *retv)
|
||||||
return hres;
|
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};
|
DISPPARAMS dp = {NULL,NULL,0,0};
|
||||||
|
VARIANT event_arg;
|
||||||
ULONG argerr;
|
ULONG argerr;
|
||||||
EXCEPINFO ei;
|
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));
|
memset(&ei, 0, sizeof(ei));
|
||||||
return IDispatch_Invoke(disp, dispid, &IID_NULL, 0, DISPATCH_METHOD, &dp, retv, &ei, &argerr);
|
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;
|
V_VT(&v) = VT_EMPTY;
|
||||||
|
|
||||||
TRACE("cp %s [%u] >>>\n", debugstr_w(event_info[eid].name), i);
|
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) {
|
if(hres == S_OK) {
|
||||||
TRACE("cp %s [%u] <<<\n", debugstr_w(event_info[eid].name), i);
|
TRACE("cp %s [%u] <<<\n", debugstr_w(event_info[eid].name), i);
|
||||||
|
|
||||||
|
|
|
@ -114,6 +114,7 @@ typedef struct event_target_t event_target_t;
|
||||||
XDIID(DispHTMLUnknownElement) \
|
XDIID(DispHTMLUnknownElement) \
|
||||||
XDIID(DispHTMLWindow2) \
|
XDIID(DispHTMLWindow2) \
|
||||||
XDIID(HTMLDocumentEvents) \
|
XDIID(HTMLDocumentEvents) \
|
||||||
|
XDIID(HTMLElementEvents2) \
|
||||||
XIID(IHTMLAnchorElement) \
|
XIID(IHTMLAnchorElement) \
|
||||||
XIID(IHTMLAttributeCollection) \
|
XIID(IHTMLAttributeCollection) \
|
||||||
XIID(IHTMLAttributeCollection2) \
|
XIID(IHTMLAttributeCollection2) \
|
||||||
|
@ -430,6 +431,7 @@ typedef enum {
|
||||||
typedef struct _cp_static_data_t {
|
typedef struct _cp_static_data_t {
|
||||||
tid_t tid;
|
tid_t tid;
|
||||||
void (*on_advise)(IUnknown*,struct _cp_static_data_t*);
|
void (*on_advise)(IUnknown*,struct _cp_static_data_t*);
|
||||||
|
BOOL pass_event_arg;
|
||||||
DWORD id_cnt;
|
DWORD id_cnt;
|
||||||
DISPID *ids;
|
DISPID *ids;
|
||||||
} cp_static_data_t;
|
} cp_static_data_t;
|
||||||
|
@ -666,7 +668,8 @@ typedef struct {
|
||||||
IHTMLElement3_tid, \
|
IHTMLElement3_tid, \
|
||||||
IHTMLElement4_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[];
|
extern const cpc_entry_t HTMLElement_cpc[];
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
Loading…
Reference in New Issue