Jacek Caban : mshtml: Return event target as EventTarget from DispatchEx vtbl.

Alexandre Julliard julliard at winehq.org
Tue Feb 14 16:24:51 CST 2017


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Feb 13 21:10:58 2017 +0100

mshtml: Return event target as EventTarget from DispatchEx vtbl.

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

---

 dlls/mshtml/htmlelem.c       |  8 ++++----
 dlls/mshtml/htmlevent.c      | 12 +++++-------
 dlls/mshtml/htmlwindow.c     |  6 +++---
 dlls/mshtml/mshtml_private.h |  2 +-
 4 files changed, 13 insertions(+), 15 deletions(-)

diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c
index 3a6197d..3d156d8 100644
--- a/dlls/mshtml/htmlelem.c
+++ b/dlls/mshtml/htmlelem.c
@@ -5074,12 +5074,12 @@ static HRESULT HTMLElement_populate_props(DispatchEx *dispex)
     return S_OK;
 }
 
-static event_target_t **HTMLElement_get_event_target_ptr(DispatchEx *dispex)
+static EventTarget *HTMLElement_get_event_target(DispatchEx *dispex)
 {
     HTMLElement *This = impl_from_DispatchEx(dispex);
     return This->node.vtbl->get_event_target
-        ? &This->node.vtbl->get_event_target(&This->node)->ptr
-        : &This->node.event_target.ptr;
+        ? This->node.vtbl->get_event_target(&This->node)
+        : &This->node.event_target;
 }
 
 static void HTMLElement_bind_event(DispatchEx *dispex, int eid)
@@ -5113,7 +5113,7 @@ static dispex_static_data_vtbl_t HTMLElement_dispex_vtbl = {
     HTMLElement_get_dispid,
     HTMLElement_invoke,
     HTMLElement_populate_props,
-    HTMLElement_get_event_target_ptr,
+    HTMLElement_get_event_target,
     HTMLElement_bind_event
 };
 
diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c
index fc5277b..4a28bb8 100644
--- a/dlls/mshtml/htmlevent.c
+++ b/dlls/mshtml/htmlevent.c
@@ -902,15 +902,13 @@ HRESULT create_event_obj(IHTMLEventObj **ret)
 static inline event_target_t *get_event_target_data(EventTarget *event_target, BOOL alloc)
 {
     const dispex_static_data_vtbl_t *vtbl = dispex_get_vtbl(&event_target->dispex);
-    event_target_t **ptr;
 
-    ptr = vtbl && vtbl->get_event_target_ptr
-        ? vtbl->get_event_target_ptr(&event_target->dispex)
-        : &event_target->ptr;
-    if(*ptr || !alloc)
-        return *ptr;
+    if(vtbl && vtbl->get_event_target)
+        event_target = vtbl->get_event_target(&event_target->dispex);
+    if(event_target->ptr || !alloc)
+        return event_target->ptr;
 
-    return *ptr = heap_alloc_zero(sizeof(event_target_t));
+    return event_target->ptr = heap_alloc_zero(sizeof(event_target_t));
 }
 
 static HRESULT call_disp_func(IDispatch *disp, DISPPARAMS *dp, VARIANT *retv)
diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c
index b1efc0d..aa64fb4 100644
--- a/dlls/mshtml/htmlwindow.c
+++ b/dlls/mshtml/htmlwindow.c
@@ -2942,10 +2942,10 @@ static HRESULT HTMLWindow_invoke(DispatchEx *dispex, DISPID id, LCID lcid, WORD
     return hres;
 }
 
-static event_target_t **HTMLWindow_get_event_target_ptr(DispatchEx *dispex)
+static EventTarget *HTMLWindow_get_event_target(DispatchEx *dispex)
 {
     HTMLInnerWindow *This = impl_from_DispatchEx(dispex);
-    return &This->event_target.ptr;
+    return &This->event_target;
 }
 
 static void HTMLWindow_bind_event(DispatchEx *dispex, int eid)
@@ -2964,7 +2964,7 @@ static const dispex_static_data_vtbl_t HTMLWindow_dispex_vtbl = {
     NULL,
     HTMLWindow_invoke,
     NULL,
-    HTMLWindow_get_event_target_ptr,
+    HTMLWindow_get_event_target,
     HTMLWindow_bind_event
 };
 
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 68362f7..457e32b 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -259,7 +259,7 @@ typedef struct {
     HRESULT (*invoke)(DispatchEx*,DISPID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,IServiceProvider*);
     HRESULT (*populate_props)(DispatchEx*);
     /* We abuse this vtbl for EventTarget functions to avoid separated vtbl. */
-    event_target_t **(*get_event_target_ptr)(DispatchEx*);
+    EventTarget *(*get_event_target)(DispatchEx*);
     void (*bind_event)(DispatchEx*,int);
 } dispex_static_data_vtbl_t;
 




More information about the wine-cvs mailing list