Jacek Caban : mshtml: Added IDOMEvent:get_eventPhase implementation.
Alexandre Julliard
julliard at winehq.org
Tue Oct 24 15:36:43 CDT 2017
Module: wine
Branch: master
Commit: 85527dbdf39c70fe5b1a341701813ecf6263ebc3
URL: http://source.winehq.org/git/wine.git/?a=commit;h=85527dbdf39c70fe5b1a341701813ecf6263ebc3
Author: Jacek Caban <jacek at codeweavers.com>
Date: Tue Oct 24 19:39:11 2017 +0200
mshtml: Added IDOMEvent:get_eventPhase implementation.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/mshtml/htmlevent.c | 18 ++++++++++++------
dlls/mshtml/htmlevent.h | 1 +
dlls/mshtml/tests/events.c | 6 ++++++
include/mshtml.idl | 8 ++++++++
4 files changed, 27 insertions(+), 6 deletions(-)
diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c
index a428879..d64238f 100644
--- a/dlls/mshtml/htmlevent.c
+++ b/dlls/mshtml/htmlevent.c
@@ -938,8 +938,11 @@ static HRESULT WINAPI DOMEvent_get_defaultPrevented(IDOMEvent *iface, VARIANT_BO
static HRESULT WINAPI DOMEvent_get_eventPhase(IDOMEvent *iface, USHORT *p)
{
DOMEvent *This = impl_from_IDOMEvent(iface);
- FIXME("(%p)->(%p)\n", This, p);
- return E_NOTIMPL;
+
+ TRACE("(%p)->(%p)\n", This, p);
+
+ *p = This->phase;
+ return S_OK;
}
static HRESULT WINAPI DOMEvent_get_target(IDOMEvent *iface, IEventTarget **p)
@@ -1434,10 +1437,13 @@ void dispatch_event(EventTarget *event_target, DOMEvent *event)
event->target = event_target;
IDispatchEx_AddRef(&event_target->dispex.IDispatchEx_iface);
- for(i = 0; i < chain_cnt; i++) {
- call_event_handlers(target_chain[i], event);
- if(!(event_flags & EVENT_BUBBLES) || event->stop_propagation)
- break;
+ event->phase = DEP_AT_TARGET;
+ call_event_handlers(target_chain[0], event);
+
+ if(event_flags & EVENT_BUBBLES) {
+ event->phase = DEP_BUBBLING_PHASE;
+ for(i = 1; !event->stop_propagation && i < chain_cnt; i++)
+ call_event_handlers(target_chain[i], event);
}
if(target_vtbl && target_vtbl->set_current_event) {
diff --git a/dlls/mshtml/htmlevent.h b/dlls/mshtml/htmlevent.h
index 0a967f2..97d34af 100644
--- a/dlls/mshtml/htmlevent.h
+++ b/dlls/mshtml/htmlevent.h
@@ -66,6 +66,7 @@ typedef struct {
EventTarget *target;
BOOL prevent_default;
BOOL stop_propagation;
+ USHORT phase;
IHTMLEventObj *event_obj;
BOOL no_event_obj;
diff --git a/dlls/mshtml/tests/events.c b/dlls/mshtml/tests/events.c
index 84a35f3..ac7ae43 100644
--- a/dlls/mshtml/tests/events.c
+++ b/dlls/mshtml/tests/events.c
@@ -2534,6 +2534,7 @@ static void test_create_event(IHTMLDocument2 *doc)
{
IDocumentEvent *doc_event;
IDOMEvent *event;
+ USHORT phase;
BSTR str;
HRESULT hres;
@@ -2547,6 +2548,11 @@ static void test_create_event(IHTMLDocument2 *doc)
SysFreeString(str);
ok(hres == S_OK, "createEvent failed: %08x\n", hres);
+ phase = 0xdead;
+ hres = IDOMEvent_get_eventPhase(event, &phase);
+ ok(hres == S_OK, "get_eventPhase failed: %08x\n", hres);
+ ok(!phase, "phase = %u\n", phase);
+
hres = IDOMEvent_preventDefault(event);
ok(hres == S_OK, "preventDefault failed: %08x\n", hres);
diff --git a/include/mshtml.idl b/include/mshtml.idl
index 45feb09..99150aa 100644
--- a/include/mshtml.idl
+++ b/include/mshtml.idl
@@ -20031,6 +20031,14 @@ interface IEventTarget : IDispatch
[out, retval] VARIANT_BOOL *pfResult);
}
+typedef enum _DOM_EVENT_PHASE
+{
+ DEP_CAPTURING_PHASE = 1,
+ DEP_AT_TARGET = 2,
+ DEP_BUBBLING_PHASE = 3,
+ DOM_EVENT_PHASE_Max = 0x7fffffff
+} DOM_EVENT_PHASE;
+
/*****************************************************************************
* IDOMEvent interface
*/
More information about the wine-cvs
mailing list