Module: wine Branch: master Commit: ecf808034c8063f12c306a099692c6b6893b8e83 URL: https://gitlab.winehq.org/wine/wine/-/commit/ecf808034c8063f12c306a099692c6b...
Author: Gabriel Ivăncescu gabrielopcode@gmail.com Date: Thu Sep 29 16:25:52 2022 +0300
mshtml: Expand event_info to include a special entry for EVENTID_LAST.
This simplifies the rest of the code.
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com
---
dlls/mshtml/htmlevent.c | 54 ++++++++++++++++++++++++------------------------- 1 file changed, 26 insertions(+), 28 deletions(-)
diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c index e1bac2400a9..cb2c6efb4c5 100644 --- a/dlls/mshtml/htmlevent.c +++ b/dlls/mshtml/htmlevent.c @@ -202,14 +202,17 @@ static const event_info_t event_info[] = { {L"timeout", EVENT_TYPE_PROGRESS, DISPID_EVPROP_TIMEOUT, EVENT_BIND_TO_TARGET}, {L"unload", EVENT_TYPE_UIEVENT, DISPID_EVMETH_ONUNLOAD, - EVENT_FIXME} + EVENT_FIXME}, + + /* EVENTID_LAST special entry */ + {NULL, EVENT_TYPE_EVENT, 0, 0} };
-C_ASSERT(ARRAY_SIZE(event_info) == EVENTID_LAST); +C_ASSERT(ARRAY_SIZE(event_info) - 1 == EVENTID_LAST);
static eventid_t str_to_eid(const WCHAR *str) { - unsigned i, a = 0, b = ARRAY_SIZE(event_info); + unsigned i, a = 0, b = ARRAY_SIZE(event_info) - 1; int c;
while(a < b) { @@ -225,7 +228,7 @@ static eventid_t str_to_eid(const WCHAR *str)
static eventid_t attr_to_eid(const WCHAR *str) { - unsigned i, a = 0, b = ARRAY_SIZE(event_info); + unsigned i, a = 0, b = ARRAY_SIZE(event_info) - 1; int c;
if((str[0] != 'o' && str[0] != 'O') || (str[1] != 'n' && str[1] != 'N')) @@ -262,7 +265,7 @@ static listener_container_t *get_listener_container(EventTarget *event_target, c return NULL;
eid = str_to_eid(type); - if(eid != EVENTID_LAST && (event_info[eid].flags & EVENT_FIXME)) + if(event_info[eid].flags & EVENT_FIXME) FIXME("unimplemented event %s\n", debugstr_w(event_info[eid].name));
type_len = lstrlenW(type); @@ -1687,18 +1690,16 @@ static HRESULT WINAPI DOMMouseEvent_get_fromElement(IDOMMouseEvent *iface, IHTML DOMMouseEvent *This = impl_from_IDOMMouseEvent(iface); eventid_t event_id = This->ui_event.event.event_id; IEventTarget *related_target = NULL; + HRESULT hres = S_OK;
TRACE("(%p)->(%p)\n", This, p);
- if(event_id != EVENTID_LAST) { - HRESULT hres = S_OK; - if(event_info[event_id].flags & EVENT_MOUSE_FROM_RELATED) - hres = IDOMMouseEvent_get_relatedTarget(&This->IDOMMouseEvent_iface, &related_target); - else if(event_info[event_id].flags & EVENT_MOUSE_TO_RELATED) - hres = IDOMEvent_get_target(&This->ui_event.event.IDOMEvent_iface, &related_target); - if(FAILED(hres)) - return hres; - } + if(event_info[event_id].flags & EVENT_MOUSE_FROM_RELATED) + hres = IDOMMouseEvent_get_relatedTarget(&This->IDOMMouseEvent_iface, &related_target); + else if(event_info[event_id].flags & EVENT_MOUSE_TO_RELATED) + hres = IDOMEvent_get_target(&This->ui_event.event.IDOMEvent_iface, &related_target); + if(FAILED(hres)) + return hres;
if(!related_target) { *p = NULL; @@ -1714,18 +1715,16 @@ static HRESULT WINAPI DOMMouseEvent_get_toElement(IDOMMouseEvent *iface, IHTMLEl DOMMouseEvent *This = impl_from_IDOMMouseEvent(iface); eventid_t event_id = This->ui_event.event.event_id; IEventTarget *related_target = NULL; + HRESULT hres = S_OK;
TRACE("(%p)->(%p)\n", This, p);
- if(event_id != EVENTID_LAST) { - HRESULT hres = S_OK; - if(event_info[event_id].flags & EVENT_MOUSE_TO_RELATED) - hres = IDOMMouseEvent_get_relatedTarget(&This->IDOMMouseEvent_iface, &related_target); - else if(event_info[event_id].flags & EVENT_MOUSE_FROM_RELATED) - hres = IDOMEvent_get_target(&This->ui_event.event.IDOMEvent_iface, &related_target); - if(FAILED(hres)) - return hres; - } + if(event_info[event_id].flags & EVENT_MOUSE_TO_RELATED) + hres = IDOMMouseEvent_get_relatedTarget(&This->IDOMMouseEvent_iface, &related_target); + else if(event_info[event_id].flags & EVENT_MOUSE_FROM_RELATED) + hres = IDOMEvent_get_target(&This->ui_event.event.IDOMEvent_iface, &related_target); + if(FAILED(hres)) + return hres;
if(!related_target) { *p = NULL; @@ -3393,9 +3392,8 @@ static void call_event_handlers(EventTarget *event_target, DOMEvent *event, disp if(listeners != listeners_buf) heap_free(listeners);
- if(event->phase != DEP_CAPTURING_PHASE && event->event_id != EVENTID_LAST - && event_info[event->event_id].dispid && (vtbl = dispex_get_vtbl(&event_target->dispex)) - && vtbl->get_cp_container) + if(event->phase != DEP_CAPTURING_PHASE && event_info[event->event_id].dispid + && (vtbl = dispex_get_vtbl(&event_target->dispex)) && vtbl->get_cp_container) cp_container = vtbl->get_cp_container(&event_target->dispex); if(cp_container) { if(cp_container->cps) { @@ -3533,7 +3531,7 @@ static HRESULT dispatch_event_object(EventTarget *event_target, DOMEvent *event, IHTMLEventObj_Release(prev_event); }
- if(event->event_id != EVENTID_LAST && (event_info[event->event_id].flags & EVENT_HASDEFAULTHANDLERS)) { + if(event_info[event->event_id].flags & EVENT_HASDEFAULTHANDLERS) { BOOL prevent_default = event->prevent_default; for(i = 0; !prevent_default && i < chain_cnt; i++) { vtbl = dispex_get_vtbl(&target_chain[i]->dispex); @@ -3571,7 +3569,7 @@ void dispatch_event(EventTarget *event_target, DOMEvent *event) * but we already dispatched event to all relevant targets. Stop event * propagation here to avoid events being dispatched multiple times. */ - if(event->event_id != EVENTID_LAST && (event_info[event->event_id].flags & EVENT_BIND_TO_TARGET)) + if(event_info[event->event_id].flags & EVENT_BIND_TO_TARGET) nsIDOMEvent_StopPropagation(event->nsevent); }