This patch makes event handling work in a fairly large and complex application.
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/mshtml/htmldoc.c | 3 ++- dlls/mshtml/htmlevent.c | 2 ++ dlls/mshtml/mshtml_private.h | 1 + 3 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index 04efb11819..3f301e52d0 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -5216,12 +5216,13 @@ static BOOL htmldoc_qi(HTMLDocument *This, REFIID riid, void **ppv) }
static cp_static_data_t HTMLDocumentEvents_data = { HTMLDocumentEvents_tid, HTMLDocument_on_advise }; +static cp_static_data_t HTMLDocumentEvents2_data = { HTMLDocumentEvents2_tid, HTMLDocument_on_advise, TRUE };
static const cpc_entry_t HTMLDocument_cpc[] = { {&IID_IDispatch, &HTMLDocumentEvents_data}, {&IID_IPropertyNotifySink}, {&DIID_HTMLDocumentEvents, &HTMLDocumentEvents_data}, - {&DIID_HTMLDocumentEvents2}, + {&DIID_HTMLDocumentEvents2, &HTMLDocumentEvents2_data}, {NULL} };
diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c index b090d1c828..4cf994587f 100644 --- a/dlls/mshtml/htmlevent.c +++ b/dlls/mshtml/htmlevent.c @@ -2412,6 +2412,8 @@ static HRESULT call_cp_func(IDispatch *disp, DISPID dispid, IHTMLEventObj *event ULONG argerr; EXCEPINFO ei;
+ TRACE("%p,%d,%p,%p\n", disp, dispid, event_obj, retv); + if(event_obj) { V_VT(&event_arg) = VT_DISPATCH; V_DISPATCH(&event_arg) = (IDispatch*)event_obj; diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 6c25cc828c..4c1d8db405 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -136,6 +136,7 @@ typedef struct EventTarget EventTarget; XDIID(DispSVGSVGElement) \ XDIID(DispSVGTSpanElement) \ XDIID(HTMLDocumentEvents) \ + XDIID(HTMLDocumentEvents2) \ XDIID(HTMLElementEvents2) \ XIID(IDOMCustomEvent) \ XIID(IDOMEvent) \