Jacek Caban : mshtml: Pass listener type as a string to get_listener_container.

Alexandre Julliard julliard at winehq.org
Thu Nov 30 14:19:35 CST 2017


Module: wine
Branch: master
Commit: ebefab4b0383bacb6e5469439f73dae3dcd2ae64
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ebefab4b0383bacb6e5469439f73dae3dcd2ae64

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Nov 30 16:11:01 2017 +0100

mshtml: Pass listener type as a string to get_listener_container.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/mshtml/htmlevent.c | 30 ++++++++++++------------------
 1 file changed, 12 insertions(+), 18 deletions(-)

diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c
index 860c361..e0ee269 100644
--- a/dlls/mshtml/htmlevent.c
+++ b/dlls/mshtml/htmlevent.c
@@ -237,27 +237,29 @@ static eventid_t attr_to_eid(const WCHAR *str)
     return EVENTID_LAST;
 }
 
-static listener_container_t *get_listener_container(EventTarget *event_target, eventid_t eid, BOOL alloc)
+static listener_container_t *get_listener_container(EventTarget *event_target, const WCHAR *type, BOOL alloc)
 {
     const event_target_vtbl_t *vtbl;
     listener_container_t *container;
     struct wine_rb_entry *entry;
     size_t type_len;
+    eventid_t eid;
 
-    entry = wine_rb_get(&event_target->handler_map, event_info[eid].name);
+    entry = wine_rb_get(&event_target->handler_map, type);
     if(entry)
         return WINE_RB_ENTRY_VALUE(entry, listener_container_t, entry);
     if(!alloc)
         return NULL;
 
-    if(event_info[eid].flags & EVENT_FIXME)
+    eid = str_to_eid(type);
+    if(eid != EVENTID_LAST && (event_info[eid].flags & EVENT_FIXME))
         FIXME("unimplemented event %s\n", debugstr_w(event_info[eid].name));
 
-    type_len = strlenW(event_info[eid].name);
+    type_len = strlenW(type);
     container = heap_alloc(FIELD_OFFSET(listener_container_t, type[type_len+1]));
     if(!container)
         return NULL;
-    memcpy(container->type, event_info[eid].name, (type_len + 1) * sizeof(WCHAR));
+    memcpy(container->type, type, (type_len + 1) * sizeof(WCHAR));
     list_init(&container->listeners);
     vtbl = dispex_get_vtbl(&event_target->dispex);
     if(vtbl->bind_event)
@@ -274,7 +276,7 @@ static void remove_event_listener(EventTarget *event_target, eventid_t eid, list
     listener_container_t *container;
     event_listener_t *listener;
 
-    container = get_listener_container(event_target, eid, FALSE);
+    container = get_listener_container(event_target, event_info[eid].name, FALSE);
     if(!container)
         return;
 
@@ -1299,7 +1301,7 @@ static BOOL is_cp_event(cp_static_data_t *data, DISPID dispid)
 static void call_event_handlers(EventTarget *event_target, DOMEvent *event)
 {
     const eventid_t eid = event->event_id;
-    const listener_container_t *container = get_listener_container(event_target, eid, FALSE);
+    const listener_container_t *container = get_listener_container(event_target, event_info[eid].name, FALSE);
     const BOOL cancelable = event_info[eid].flags & EVENT_CANCELABLE;
     const BOOL use_quirks = use_event_quirks(event_target);
     event_listener_t *listener, listeners_buf[8], *listeners = listeners_buf;
@@ -1739,7 +1741,7 @@ static event_listener_t *get_onevent_listener(EventTarget *event_target, eventid
     listener_container_t *container;
     event_listener_t *listener;
 
-    container = get_listener_container(event_target, eid, alloc);
+    container = get_listener_container(event_target, event_info[eid].name, alloc);
     if(!container)
         return NULL;
 
@@ -1887,7 +1889,7 @@ HRESULT attach_event(EventTarget *event_target, BSTR name, IDispatch *disp, VARI
         return S_OK;
     }
 
-    container = get_listener_container(event_target, eid, TRUE);
+    container = get_listener_container(event_target, event_info[eid].name, TRUE);
     if(!container)
         return E_OUTOFMEMORY;
 
@@ -2107,18 +2109,10 @@ static HRESULT WINAPI EventTarget_addEventListener(IEventTarget *iface, BSTR typ
     listener_type_t listener_type = capture ? LISTENER_TYPE_CAPTURE : LISTENER_TYPE_BUBBLE;
     listener_container_t *container;
     event_listener_t *listener;
-    eventid_t eid;
 
     TRACE("(%p)->(%s %p %x)\n", This, debugstr_w(type), function, capture);
 
-    eid = str_to_eid(type);
-    if(eid == EVENTID_LAST) {
-        FIXME("Unsupported on event %s\n", debugstr_w(type));
-        return E_NOTIMPL;
-    }
-
-
-    container = get_listener_container(This, eid, TRUE);
+    container = get_listener_container(This, type, TRUE);
     if(!container)
         return E_OUTOFMEMORY;
 




More information about the wine-cvs mailing list