From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlanchor.c | 30 ++++++++++++++++++++-------- dlls/mshtml/htmlelem.c | 38 ++++++++++++------------------------ dlls/mshtml/htmlevent.h | 23 ++++++++++++++++++++++ dlls/mshtml/mshtml_private.h | 4 ++++ 4 files changed, 62 insertions(+), 33 deletions(-)
diff --git a/dlls/mshtml/htmlanchor.c b/dlls/mshtml/htmlanchor.c index 580db759d78..8986e617492 100644 --- a/dlls/mshtml/htmlanchor.c +++ b/dlls/mshtml/htmlanchor.c @@ -842,17 +842,24 @@ fallback: return HTMLElement_handle_event(&This->element.node, eid, event, prevent_default); }
-static void HTMLAnchorElement_traverse(HTMLDOMNode *iface, nsCycleCollectionTraversalCallback *cb) +static inline HTMLAnchorElement *impl_from_DispatchEx(DispatchEx *iface) { - HTMLAnchorElement *This = impl_from_HTMLDOMNode(iface); + return CONTAINING_RECORD(iface, HTMLAnchorElement, element.node.event_target.dispex); +} + +static void HTMLAnchorElement_traverse(DispatchEx *dispex, nsCycleCollectionTraversalCallback *cb) +{ + HTMLAnchorElement *This = impl_from_DispatchEx(dispex); + HTMLDOMNode_traverse(dispex, cb);
if(This->nsanchor) - note_cc_edge((nsISupports*)This->nsanchor, "This->nsanchor", cb); + note_cc_edge((nsISupports*)This->nsanchor, "nsanchor", cb); }
-static void HTMLAnchorElement_unlink(HTMLDOMNode *iface) +static void HTMLAnchorElement_unlink(DispatchEx *dispex) { - HTMLAnchorElement *This = impl_from_HTMLDOMNode(iface); + HTMLAnchorElement *This = impl_from_DispatchEx(dispex); + HTMLDOMNode_unlink(dispex); unlink_ref(&This->nsanchor); }
@@ -864,8 +871,15 @@ static const NodeImplVtbl HTMLAnchorElementImplVtbl = { .clone = HTMLElement_clone, .handle_event = HTMLAnchorElement_handle_event, .get_attr_col = HTMLElement_get_attr_col, - .traverse = HTMLAnchorElement_traverse, - .unlink = HTMLAnchorElement_unlink +}; + +static const event_target_vtbl_t HTMLAnchorElement_event_target_vtbl = { + { + HTMLELEMENT_DISPEX_VTBL_ENTRIES, + .traverse = HTMLAnchorElement_traverse, + .unlink = HTMLAnchorElement_unlink + }, + HTMLELEMENT_EVENT_TARGET_VTBL_ENTRIES, };
static const tid_t HTMLAnchorElement_iface_tids[] = { @@ -876,7 +890,7 @@ static const tid_t HTMLAnchorElement_iface_tids[] = {
static dispex_static_data_t HTMLAnchorElement_dispex = { "HTMLAnchorElement", - &HTMLElement_event_target_vtbl.dispex_vtbl, + &HTMLAnchorElement_event_target_vtbl.dispex_vtbl, DispHTMLAnchorElement_tid, HTMLAnchorElement_iface_tids, HTMLElement_init_dispex_info diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 933662f0d5d..06966954626 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -6928,8 +6928,7 @@ static inline HTMLElement *impl_from_DispatchEx(DispatchEx *iface) return CONTAINING_RECORD(iface, HTMLElement, node.event_target.dispex); }
-static HRESULT HTMLElement_get_dispid(DispatchEx *dispex, BSTR name, - DWORD grfdex, DISPID *pid) +HRESULT HTMLElement_get_dispid(DispatchEx *dispex, BSTR name, DWORD grfdex, DISPID *pid) { HTMLElement *This = impl_from_DispatchEx(dispex);
@@ -6939,7 +6938,7 @@ static HRESULT HTMLElement_get_dispid(DispatchEx *dispex, BSTR name, return DISP_E_UNKNOWNNAME; }
-static HRESULT HTMLElement_get_name(DispatchEx *dispex, DISPID id, BSTR *name) +HRESULT HTMLElement_get_name(DispatchEx *dispex, DISPID id, BSTR *name) { HTMLElement *This = impl_from_DispatchEx(dispex);
@@ -6950,9 +6949,8 @@ static HRESULT HTMLElement_get_name(DispatchEx *dispex, DISPID id, BSTR *name) return DISP_E_MEMBERNOTFOUND; }
-static HRESULT HTMLElement_invoke(DispatchEx *dispex, DISPID id, LCID lcid, - WORD flags, DISPPARAMS *params, VARIANT *res, EXCEPINFO *ei, - IServiceProvider *caller) +HRESULT HTMLElement_invoke(DispatchEx *dispex, DISPID id, LCID lcid, WORD flags, DISPPARAMS *params, VARIANT *res, + EXCEPINFO *ei, IServiceProvider *caller) { HTMLElement *This = impl_from_DispatchEx(dispex);
@@ -6964,7 +6962,7 @@ static HRESULT HTMLElement_invoke(DispatchEx *dispex, DISPID id, LCID lcid, return E_NOTIMPL; }
-static HRESULT HTMLElement_populate_props(DispatchEx *dispex) +HRESULT HTMLElement_populate_props(DispatchEx *dispex) { HTMLElement *This = impl_from_DispatchEx(dispex); nsIDOMMozNamedAttrMap *attrs; @@ -7049,19 +7047,19 @@ static HRESULT HTMLElement_populate_props(DispatchEx *dispex) return S_OK; }
-static nsISupports *HTMLElement_get_gecko_target(DispatchEx *dispex) +nsISupports *HTMLElement_get_gecko_target(DispatchEx *dispex) { HTMLElement *This = impl_from_DispatchEx(dispex); return (nsISupports*)This->node.nsnode; }
-static void HTMLElement_bind_event(DispatchEx *dispex, eventid_t eid) +void HTMLElement_bind_event(DispatchEx *dispex, eventid_t eid) { HTMLElement *This = impl_from_DispatchEx(dispex); ensure_doc_nsevent_handler(This->node.doc, This->node.nsnode, eid); }
-static HRESULT HTMLElement_handle_event_default(DispatchEx *dispex, eventid_t eid, nsIDOMEvent *nsevent, BOOL *prevent_default) +HRESULT HTMLElement_handle_event_default(DispatchEx *dispex, eventid_t eid, nsIDOMEvent *nsevent, BOOL *prevent_default) { HTMLElement *This = impl_from_DispatchEx(dispex);
@@ -7070,7 +7068,7 @@ static HRESULT HTMLElement_handle_event_default(DispatchEx *dispex, eventid_t ei return This->node.vtbl->handle_event(&This->node, eid, nsevent, prevent_default); }
-static EventTarget *HTMLElement_get_parent_event_target(DispatchEx *dispex) +EventTarget *HTMLElement_get_parent_event_target(DispatchEx *dispex) { HTMLElement *This = impl_from_DispatchEx(dispex); HTMLDOMNode *node; @@ -7091,14 +7089,14 @@ static EventTarget *HTMLElement_get_parent_event_target(DispatchEx *dispex) return &node->event_target; }
-static ConnectionPointContainer *HTMLElement_get_cp_container(DispatchEx *dispex) +ConnectionPointContainer *HTMLElement_get_cp_container(DispatchEx *dispex) { HTMLElement *This = impl_from_DispatchEx(dispex); IConnectionPointContainer_AddRef(&This->cp_container.IConnectionPointContainer_iface); return &This->cp_container; }
-static IHTMLEventObj *HTMLElement_set_current_event(DispatchEx *dispex, IHTMLEventObj *event) +IHTMLEventObj *HTMLElement_set_current_event(DispatchEx *dispex, IHTMLEventObj *event) { HTMLElement *This = impl_from_DispatchEx(dispex); return default_set_current_event(This->node.doc->window, event); @@ -7323,21 +7321,11 @@ static const tid_t HTMLElement_iface_tids[] = {
const event_target_vtbl_t HTMLElement_event_target_vtbl = { { - .query_interface = HTMLDOMNode_query_interface, - .destructor = HTMLDOMNode_destructor, + HTMLELEMENT_DISPEX_VTBL_ENTRIES, .traverse = HTMLDOMNode_traverse, .unlink = HTMLDOMNode_unlink, - .get_dispid = HTMLElement_get_dispid, - .get_name = HTMLElement_get_name, - .invoke = HTMLElement_invoke, - .populate_props = HTMLElement_populate_props }, - .get_gecko_target = HTMLElement_get_gecko_target, - .bind_event = HTMLElement_bind_event, - .get_parent_event_target = HTMLElement_get_parent_event_target, - .handle_event_default = HTMLElement_handle_event_default, - .get_cp_container = HTMLElement_get_cp_container, - .set_current_event = HTMLElement_set_current_event + HTMLELEMENT_EVENT_TARGET_VTBL_ENTRIES, };
struct token_list { diff --git a/dlls/mshtml/htmlevent.h b/dlls/mshtml/htmlevent.h index 9d3de6426ba..d8ff8db2d74 100644 --- a/dlls/mshtml/htmlevent.h +++ b/dlls/mshtml/htmlevent.h @@ -138,6 +138,29 @@ typedef struct { extern const event_target_vtbl_t HTMLElement_event_target_vtbl; IHTMLEventObj *default_set_current_event(HTMLInnerWindow*,IHTMLEventObj*);
+nsISupports *HTMLElement_get_gecko_target(DispatchEx*); +void HTMLElement_bind_event(DispatchEx*,eventid_t); +EventTarget *HTMLElement_get_parent_event_target(DispatchEx*); +HRESULT HTMLElement_handle_event_default(DispatchEx*,eventid_t,nsIDOMEvent*,BOOL*); +ConnectionPointContainer *HTMLElement_get_cp_container(DispatchEx*); +IHTMLEventObj *HTMLElement_set_current_event(DispatchEx*,IHTMLEventObj*); + +#define HTMLELEMENT_DISPEX_VTBL_ENTRIES \ + .query_interface = HTMLDOMNode_query_interface, \ + .destructor = HTMLDOMNode_destructor, \ + .get_dispid = HTMLElement_get_dispid, \ + .get_name = HTMLElement_get_name, \ + .invoke = HTMLElement_invoke, \ + .populate_props = HTMLElement_populate_props + +#define HTMLELEMENT_EVENT_TARGET_VTBL_ENTRIES \ + .get_gecko_target = HTMLElement_get_gecko_target, \ + .bind_event = HTMLElement_bind_event, \ + .get_parent_event_target = HTMLElement_get_parent_event_target, \ + .handle_event_default = HTMLElement_handle_event_default, \ + .get_cp_container = HTMLElement_get_cp_container, \ + .set_current_event = HTMLElement_set_current_event + static inline EventTarget *get_node_event_prop_target(HTMLDOMNode *node, eventid_t eid) { return node->vtbl->get_event_prop_target ? node->vtbl->get_event_prop_target(node, eid) : &node->event_target; diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 59fbffa078c..1094e6919cf 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -1214,6 +1214,10 @@ void HTMLDOMNode_init_dispex_info(dispex_data_t*,compat_mode_t);
void *HTMLElement_QI(HTMLDOMNode*,REFIID); void HTMLElement_destructor(HTMLDOMNode*); +HRESULT HTMLElement_get_dispid(DispatchEx*,BSTR,DWORD,DISPID*); +HRESULT HTMLElement_get_name(DispatchEx*,DISPID,BSTR*); +HRESULT HTMLElement_invoke(DispatchEx*,DISPID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,IServiceProvider*); +HRESULT HTMLElement_populate_props(DispatchEx*); HRESULT HTMLElement_clone(HTMLDOMNode*,nsIDOMNode*,HTMLDOMNode**); HRESULT HTMLElement_get_attr_col(HTMLDOMNode*,HTMLAttributeCollection**); HRESULT HTMLElement_handle_event(HTMLDOMNode*,DWORD,nsIDOMEvent*,BOOL*);
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlarea.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-)
diff --git a/dlls/mshtml/htmlarea.c b/dlls/mshtml/htmlarea.c index 0a3a7efee2e..fd810a0baa1 100644 --- a/dlls/mshtml/htmlarea.c +++ b/dlls/mshtml/htmlarea.c @@ -454,17 +454,24 @@ fallback: return HTMLElement_handle_event(&This->element.node, eid, event, prevent_default); }
-static void HTMLAreaElement_traverse(HTMLDOMNode *iface, nsCycleCollectionTraversalCallback *cb) +static inline HTMLAreaElement *impl_from_DispatchEx(DispatchEx *iface) { - HTMLAreaElement *This = impl_from_HTMLDOMNode(iface); + return CONTAINING_RECORD(iface, HTMLAreaElement, element.node.event_target.dispex); +} + +static void HTMLAreaElement_traverse(DispatchEx *dispex, nsCycleCollectionTraversalCallback *cb) +{ + HTMLAreaElement *This = impl_from_DispatchEx(dispex); + HTMLDOMNode_traverse(dispex, cb);
if(This->nsarea) note_cc_edge((nsISupports*)This->nsarea, "nsarea", cb); }
-static void HTMLAreaElement_unlink(HTMLDOMNode *iface) +static void HTMLAreaElement_unlink(DispatchEx *dispex) { - HTMLAreaElement *This = impl_from_HTMLDOMNode(iface); + HTMLAreaElement *This = impl_from_DispatchEx(dispex); + HTMLDOMNode_unlink(dispex); unlink_ref(&This->nsarea); }
@@ -476,8 +483,15 @@ static const NodeImplVtbl HTMLAreaElementImplVtbl = { .clone = HTMLElement_clone, .handle_event = HTMLAreaElement_handle_event, .get_attr_col = HTMLElement_get_attr_col, - .traverse = HTMLAreaElement_traverse, - .unlink = HTMLAreaElement_unlink +}; + +static const event_target_vtbl_t HTMLAreaElement_event_target_vtbl = { + { + HTMLELEMENT_DISPEX_VTBL_ENTRIES, + .traverse = HTMLAreaElement_traverse, + .unlink = HTMLAreaElement_unlink + }, + HTMLELEMENT_EVENT_TARGET_VTBL_ENTRIES, };
static const tid_t HTMLAreaElement_iface_tids[] = { @@ -487,7 +501,7 @@ static const tid_t HTMLAreaElement_iface_tids[] = { }; static dispex_static_data_t HTMLAreaElement_dispex = { "HTMLAreaElement", - &HTMLElement_event_target_vtbl.dispex_vtbl, + &HTMLAreaElement_event_target_vtbl.dispex_vtbl, DispHTMLAreaElement_tid, HTMLAreaElement_iface_tids, HTMLElement_init_dispex_info
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlbody.c | 48 +++++++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 17 deletions(-)
diff --git a/dlls/mshtml/htmlbody.c b/dlls/mshtml/htmlbody.c index 19875915efe..46f3ddef0dd 100644 --- a/dlls/mshtml/htmlbody.c +++ b/dlls/mshtml/htmlbody.c @@ -906,20 +906,6 @@ static void *HTMLBodyElement_QI(HTMLDOMNode *iface, REFIID riid) return HTMLElement_QI(&This->element.node, riid); }
-static void HTMLBodyElement_traverse(HTMLDOMNode *iface, nsCycleCollectionTraversalCallback *cb) -{ - HTMLBodyElement *This = impl_from_HTMLDOMNode(iface); - - if(This->nsbody) - note_cc_edge((nsISupports*)This->nsbody, "This->nsbody", cb); -} - -static void HTMLBodyElement_unlink(HTMLDOMNode *iface) -{ - HTMLBodyElement *This = impl_from_HTMLDOMNode(iface); - unlink_ref(&This->nsbody); -} - static EventTarget *HTMLBodyElement_get_event_prop_target(HTMLDOMNode *iface, int event_id) { HTMLBodyElement *This = impl_from_HTMLDOMNode(iface); @@ -953,6 +939,27 @@ static BOOL HTMLBodyElement_is_settable(HTMLDOMNode *iface, DISPID dispid) } }
+static inline HTMLBodyElement *impl_from_DispatchEx(DispatchEx *iface) +{ + return CONTAINING_RECORD(iface, HTMLBodyElement, element.node.event_target.dispex); +} + +static void HTMLBodyElement_traverse(DispatchEx *dispex, nsCycleCollectionTraversalCallback *cb) +{ + HTMLBodyElement *This = impl_from_DispatchEx(dispex); + HTMLDOMNode_traverse(dispex, cb); + + if(This->nsbody) + note_cc_edge((nsISupports*)This->nsbody, "nsbody", cb); +} + +static void HTMLBodyElement_unlink(DispatchEx *dispex) +{ + HTMLBodyElement *This = impl_from_DispatchEx(dispex); + HTMLDOMNode_unlink(dispex); + unlink_ref(&This->nsbody); +} + static const cpc_entry_t HTMLBodyElement_cpc[] = { {&DIID_HTMLTextContainerEvents}, {&IID_IPropertyNotifySink}, @@ -969,12 +976,19 @@ static const NodeImplVtbl HTMLBodyElementImplVtbl = { .handle_event = HTMLElement_handle_event, .get_attr_col = HTMLElement_get_attr_col, .get_event_prop_target = HTMLBodyElement_get_event_prop_target, - .traverse = HTMLBodyElement_traverse, - .unlink = HTMLBodyElement_unlink, .is_text_edit = HTMLBodyElement_is_text_edit, .is_settable = HTMLBodyElement_is_settable };
+static const event_target_vtbl_t HTMLBodyElement_event_target_vtbl = { + { + HTMLELEMENT_DISPEX_VTBL_ENTRIES, + .traverse = HTMLBodyElement_traverse, + .unlink = HTMLBodyElement_unlink + }, + HTMLELEMENT_EVENT_TARGET_VTBL_ENTRIES, +}; + static const tid_t HTMLBodyElement_iface_tids[] = { IHTMLBodyElement_tid, IHTMLBodyElement2_tid, @@ -985,7 +999,7 @@ static const tid_t HTMLBodyElement_iface_tids[] = {
static dispex_static_data_t HTMLBodyElement_dispex = { "HTMLBodyElement", - &HTMLElement_event_target_vtbl.dispex_vtbl, + &HTMLBodyElement_event_target_vtbl.dispex_vtbl, DispHTMLBody_tid, HTMLBodyElement_iface_tids, HTMLElement_init_dispex_info
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlform.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-)
diff --git a/dlls/mshtml/htmlform.c b/dlls/mshtml/htmlform.c index 86c176f9eb1..39270de11ca 100644 --- a/dlls/mshtml/htmlform.c +++ b/dlls/mshtml/htmlform.c @@ -946,17 +946,24 @@ static HRESULT HTMLFormElement_handle_event(HTMLDOMNode *iface, DWORD eid, nsIDO return HTMLElement_handle_event(&This->element.node, eid, event, prevent_default); }
-static void HTMLFormElement_traverse(HTMLDOMNode *iface, nsCycleCollectionTraversalCallback *cb) +static inline HTMLFormElement *impl_from_DispatchEx(DispatchEx *iface) { - HTMLFormElement *This = impl_from_HTMLDOMNode(iface); + return CONTAINING_RECORD(iface, HTMLFormElement, element.node.event_target.dispex); +} + +static void HTMLFormElement_traverse(DispatchEx *dispex, nsCycleCollectionTraversalCallback *cb) +{ + HTMLFormElement *This = impl_from_DispatchEx(dispex); + HTMLDOMNode_traverse(dispex, cb);
if(This->nsform) - note_cc_edge((nsISupports*)This->nsform, "This->nsform", cb); + note_cc_edge((nsISupports*)This->nsform, "nsform", cb); }
-static void HTMLFormElement_unlink(HTMLDOMNode *iface) +static void HTMLFormElement_unlink(DispatchEx *dispex) { - HTMLFormElement *This = impl_from_HTMLDOMNode(iface); + HTMLFormElement *This = impl_from_DispatchEx(dispex); + HTMLDOMNode_unlink(dispex); unlink_ref(&This->nsform); }
@@ -971,8 +978,15 @@ static const NodeImplVtbl HTMLFormElementImplVtbl = { .get_dispid = HTMLFormElement_get_dispid, .get_name = HTMLFormElement_dispex_get_name, .invoke = HTMLFormElement_invoke, - .traverse = HTMLFormElement_traverse, - .unlink = HTMLFormElement_unlink +}; + +static const event_target_vtbl_t HTMLFormElement_event_target_vtbl = { + { + HTMLELEMENT_DISPEX_VTBL_ENTRIES, + .traverse = HTMLFormElement_traverse, + .unlink = HTMLFormElement_unlink + }, + HTMLELEMENT_EVENT_TARGET_VTBL_ENTRIES, };
static const tid_t HTMLFormElement_iface_tids[] = { @@ -983,7 +997,7 @@ static const tid_t HTMLFormElement_iface_tids[] = {
static dispex_static_data_t HTMLFormElement_dispex = { "HTMLFormElement", - &HTMLElement_event_target_vtbl.dispex_vtbl, + &HTMLFormElement_event_target_vtbl.dispex_vtbl, DispHTMLFormElement_tid, HTMLFormElement_iface_tids, HTMLElement_init_dispex_info
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlframe.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-)
diff --git a/dlls/mshtml/htmlframe.c b/dlls/mshtml/htmlframe.c index a97040d270d..c39e11c4cd7 100644 --- a/dlls/mshtml/htmlframe.c +++ b/dlls/mshtml/htmlframe.c @@ -981,17 +981,24 @@ static HRESULT HTMLFrameElement_bind_to_tree(HTMLDOMNode *iface) return hres; }
-static void HTMLFrameElement_traverse(HTMLDOMNode *iface, nsCycleCollectionTraversalCallback *cb) +static inline HTMLFrameElement *frame_from_DispatchEx(DispatchEx *iface) { - HTMLFrameElement *This = frame_from_HTMLDOMNode(iface); + return CONTAINING_RECORD(iface, HTMLFrameElement, framebase.element.node.event_target.dispex); +} + +static void HTMLFrameElement_traverse(DispatchEx *dispex, nsCycleCollectionTraversalCallback *cb) +{ + HTMLFrameElement *This = frame_from_DispatchEx(dispex); + HTMLDOMNode_traverse(dispex, cb);
if(This->framebase.nsframe) - note_cc_edge((nsISupports*)This->framebase.nsframe, "This->nsframe", cb); + note_cc_edge((nsISupports*)This->framebase.nsframe, "nsframe", cb); }
-static void HTMLFrameElement_unlink(HTMLDOMNode *iface) +static void HTMLFrameElement_unlink(DispatchEx *dispex) { - HTMLFrameElement *This = frame_from_HTMLDOMNode(iface); + HTMLFrameElement *This = frame_from_DispatchEx(dispex); + HTMLDOMNode_unlink(dispex); unlink_ref(&This->framebase.nsframe); }
@@ -1009,8 +1016,15 @@ static const NodeImplVtbl HTMLFrameElementImplVtbl = { .get_name = HTMLFrameElement_get_name, .invoke = HTMLFrameElement_invoke, .bind_to_tree = HTMLFrameElement_bind_to_tree, - .traverse = HTMLFrameElement_traverse, - .unlink = HTMLFrameElement_unlink +}; + +static const event_target_vtbl_t HTMLFrameElement_event_target_vtbl = { + { + HTMLELEMENT_DISPEX_VTBL_ENTRIES, + .traverse = HTMLFrameElement_traverse, + .unlink = HTMLFrameElement_unlink + }, + HTMLELEMENT_EVENT_TARGET_VTBL_ENTRIES, };
static const tid_t HTMLFrameElement_iface_tids[] = { @@ -1023,7 +1037,7 @@ static const tid_t HTMLFrameElement_iface_tids[] = {
static dispex_static_data_t HTMLFrameElement_dispex = { "HTMLFrameElement", - &HTMLElement_event_target_vtbl.dispex_vtbl, + &HTMLFrameElement_event_target_vtbl.dispex_vtbl, DispHTMLFrameElement_tid, HTMLFrameElement_iface_tids, HTMLElement_init_dispex_info
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlframe.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-)
diff --git a/dlls/mshtml/htmlframe.c b/dlls/mshtml/htmlframe.c index c39e11c4cd7..991e2ea8ff8 100644 --- a/dlls/mshtml/htmlframe.c +++ b/dlls/mshtml/htmlframe.c @@ -1572,17 +1572,24 @@ static HRESULT HTMLIFrame_bind_to_tree(HTMLDOMNode *iface) return hres; }
-static void HTMLIFrame_traverse(HTMLDOMNode *iface, nsCycleCollectionTraversalCallback *cb) +static inline HTMLIFrame *iframe_from_DispatchEx(DispatchEx *iface) { - HTMLIFrame *This = iframe_from_HTMLDOMNode(iface); + return CONTAINING_RECORD(iface, HTMLIFrame, framebase.element.node.event_target.dispex); +} + +static void HTMLIFrame_traverse(DispatchEx *dispex, nsCycleCollectionTraversalCallback *cb) +{ + HTMLIFrame *This = iframe_from_DispatchEx(dispex); + HTMLDOMNode_traverse(dispex, cb);
if(This->framebase.nsiframe) - note_cc_edge((nsISupports*)This->framebase.nsiframe, "This->nsiframe", cb); + note_cc_edge((nsISupports*)This->framebase.nsiframe, "nsiframe", cb); }
-static void HTMLIFrame_unlink(HTMLDOMNode *iface) +static void HTMLIFrame_unlink(DispatchEx *dispex) { - HTMLIFrame *This = iframe_from_HTMLDOMNode(iface); + HTMLIFrame *This = iframe_from_DispatchEx(dispex); + HTMLDOMNode_unlink(dispex); unlink_ref(&This->framebase.nsiframe); }
@@ -1600,8 +1607,15 @@ static const NodeImplVtbl HTMLIFrameImplVtbl = { .get_name = HTMLIFrame_get_name, .invoke = HTMLIFrame_invoke, .bind_to_tree = HTMLIFrame_bind_to_tree, - .traverse = HTMLIFrame_traverse, - .unlink = HTMLIFrame_unlink +}; + +static const event_target_vtbl_t HTMLIFrame_event_target_vtbl = { + { + HTMLELEMENT_DISPEX_VTBL_ENTRIES, + .traverse = HTMLIFrame_traverse, + .unlink = HTMLIFrame_unlink + }, + HTMLELEMENT_EVENT_TARGET_VTBL_ENTRIES, };
static const tid_t HTMLIFrame_iface_tids[] = { @@ -1616,7 +1630,7 @@ static const tid_t HTMLIFrame_iface_tids[] = {
static dispex_static_data_t HTMLIFrame_dispex = { "HTMLIFrameElement", - &HTMLElement_event_target_vtbl.dispex_vtbl, + &HTMLIFrame_event_target_vtbl.dispex_vtbl, DispHTMLIFrame_tid, HTMLIFrame_iface_tids, HTMLElement_init_dispex_info
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlimg.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-)
diff --git a/dlls/mshtml/htmlimg.c b/dlls/mshtml/htmlimg.c index 1a9266b2295..766d01b9eb7 100644 --- a/dlls/mshtml/htmlimg.c +++ b/dlls/mshtml/htmlimg.c @@ -675,17 +675,24 @@ static HRESULT HTMLImgElement_get_readystate(HTMLDOMNode *iface, BSTR *p) return IHTMLImgElement_get_readyState(&This->IHTMLImgElement_iface, p); }
-static void HTMLImgElement_traverse(HTMLDOMNode *iface, nsCycleCollectionTraversalCallback *cb) +static inline HTMLImg *HTMLImg_from_DispatchEx(DispatchEx *iface) { - HTMLImg *This = impl_from_HTMLDOMNode(iface); + return CONTAINING_RECORD(iface, HTMLImg, element.node.event_target.dispex); +} + +static void HTMLImgElement_traverse(DispatchEx *dispex, nsCycleCollectionTraversalCallback *cb) +{ + HTMLImg *This = HTMLImg_from_DispatchEx(dispex); + HTMLDOMNode_traverse(dispex, cb);
if(This->nsimg) - note_cc_edge((nsISupports*)This->nsimg, "This->nsimg", cb); + note_cc_edge((nsISupports*)This->nsimg, "nsimg", cb); }
-static void HTMLImgElement_unlink(HTMLDOMNode *iface) +static void HTMLImgElement_unlink(DispatchEx *dispex) { - HTMLImg *This = impl_from_HTMLDOMNode(iface); + HTMLImg *This = HTMLImg_from_DispatchEx(dispex); + HTMLDOMNode_unlink(dispex); unlink_ref(&This->nsimg); }
@@ -698,8 +705,15 @@ static const NodeImplVtbl HTMLImgElementImplVtbl = { .handle_event = HTMLElement_handle_event, .get_attr_col = HTMLElement_get_attr_col, .get_readystate = HTMLImgElement_get_readystate, - .traverse = HTMLImgElement_traverse, - .unlink = HTMLImgElement_unlink +}; + +static const event_target_vtbl_t HTMLImgElement_event_target_vtbl = { + { + HTMLELEMENT_DISPEX_VTBL_ENTRIES, + .traverse = HTMLImgElement_traverse, + .unlink = HTMLImgElement_unlink + }, + HTMLELEMENT_EVENT_TARGET_VTBL_ENTRIES, };
static const tid_t HTMLImgElement_iface_tids[] = { @@ -721,7 +735,7 @@ static void HTMLImgElement_init_dispex_info(dispex_data_t *info, compat_mode_t m
static dispex_static_data_t HTMLImgElement_dispex = { "HTMLImageElement", - &HTMLElement_event_target_vtbl.dispex_vtbl, + &HTMLImgElement_event_target_vtbl.dispex_vtbl, DispHTMLImg_tid, HTMLImgElement_iface_tids, HTMLImgElement_init_dispex_info
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlinput.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-)
diff --git a/dlls/mshtml/htmlinput.c b/dlls/mshtml/htmlinput.c index a317eb2a3a4..9169b2cca54 100644 --- a/dlls/mshtml/htmlinput.c +++ b/dlls/mshtml/htmlinput.c @@ -1393,17 +1393,24 @@ static BOOL HTMLInputElement_is_text_edit(HTMLDOMNode *iface) return ret; }
-static void HTMLInputElement_traverse(HTMLDOMNode *iface, nsCycleCollectionTraversalCallback *cb) +static inline HTMLInputElement *input_from_DispatchEx(DispatchEx *iface) { - HTMLInputElement *This = impl_from_HTMLDOMNode(iface); + return CONTAINING_RECORD(iface, HTMLInputElement, element.node.event_target.dispex); +} + +static void HTMLInputElement_traverse(DispatchEx *dispex, nsCycleCollectionTraversalCallback *cb) +{ + HTMLInputElement *This = input_from_DispatchEx(dispex); + HTMLDOMNode_traverse(dispex, cb);
if(This->nsinput) - note_cc_edge((nsISupports*)This->nsinput, "This->nsinput", cb); + note_cc_edge((nsISupports*)This->nsinput, "nsinput", cb); }
-static void HTMLInputElement_unlink(HTMLDOMNode *iface) +static void HTMLInputElement_unlink(DispatchEx *dispex) { - HTMLInputElement *This = impl_from_HTMLDOMNode(iface); + HTMLInputElement *This = input_from_DispatchEx(dispex); + HTMLDOMNode_unlink(dispex); unlink_ref(&This->nsinput); }
@@ -1417,11 +1424,18 @@ static const NodeImplVtbl HTMLInputElementImplVtbl = { .get_attr_col = HTMLElement_get_attr_col, .put_disabled = HTMLInputElementImpl_put_disabled, .get_disabled = HTMLInputElementImpl_get_disabled, - .traverse = HTMLInputElement_traverse, - .unlink = HTMLInputElement_unlink, .is_text_edit = HTMLInputElement_is_text_edit };
+static const event_target_vtbl_t HTMLInputElement_event_target_vtbl = { + { + HTMLELEMENT_DISPEX_VTBL_ENTRIES, + .traverse = HTMLInputElement_traverse, + .unlink = HTMLInputElement_unlink + }, + HTMLELEMENT_EVENT_TARGET_VTBL_ENTRIES, +}; + static const tid_t HTMLInputElement_iface_tids[] = { HTMLELEMENT_TIDS, IHTMLInputElement_tid, @@ -1430,7 +1444,7 @@ static const tid_t HTMLInputElement_iface_tids[] = { }; static dispex_static_data_t HTMLInputElement_dispex = { "HTMLInputElement", - &HTMLElement_event_target_vtbl.dispex_vtbl, + &HTMLInputElement_event_target_vtbl.dispex_vtbl, DispHTMLInputElement_tid, HTMLInputElement_iface_tids, HTMLElement_init_dispex_info
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlinput.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-)
diff --git a/dlls/mshtml/htmlinput.c b/dlls/mshtml/htmlinput.c index 9169b2cca54..79af8c617a0 100644 --- a/dlls/mshtml/htmlinput.c +++ b/dlls/mshtml/htmlinput.c @@ -1923,17 +1923,24 @@ static BOOL HTMLButtonElement_is_text_edit(HTMLDOMNode *iface) return TRUE; }
-static void HTMLButtonElement_traverse(HTMLDOMNode *iface, nsCycleCollectionTraversalCallback *cb) +static inline HTMLButtonElement *button_from_DispatchEx(DispatchEx *iface) { - HTMLButtonElement *This = button_from_HTMLDOMNode(iface); + return CONTAINING_RECORD(iface, HTMLButtonElement, element.node.event_target.dispex); +} + +static void HTMLButtonElement_traverse(DispatchEx *dispex, nsCycleCollectionTraversalCallback *cb) +{ + HTMLButtonElement *This = button_from_DispatchEx(dispex); + HTMLDOMNode_traverse(dispex, cb);
if(This->nsbutton) - note_cc_edge((nsISupports*)This->nsbutton, "This->nsbutton", cb); + note_cc_edge((nsISupports*)This->nsbutton, "nsbutton", cb); }
-static void HTMLButtonElement_unlink(HTMLDOMNode *iface) +static void HTMLButtonElement_unlink(DispatchEx *dispex) { - HTMLButtonElement *This = button_from_HTMLDOMNode(iface); + HTMLButtonElement *This = button_from_DispatchEx(dispex); + HTMLDOMNode_unlink(dispex); unlink_ref(&This->nsbutton); }
@@ -1947,11 +1954,18 @@ static const NodeImplVtbl HTMLButtonElementImplVtbl = { .get_attr_col = HTMLElement_get_attr_col, .put_disabled = HTMLButtonElementImpl_put_disabled, .get_disabled = HTMLButtonElementImpl_get_disabled, - .traverse = HTMLButtonElement_traverse, - .unlink = HTMLButtonElement_unlink, .is_text_edit = HTMLButtonElement_is_text_edit };
+static const event_target_vtbl_t HTMLButtonElement_event_target_vtbl = { + { + HTMLELEMENT_DISPEX_VTBL_ENTRIES, + .traverse = HTMLButtonElement_traverse, + .unlink = HTMLButtonElement_unlink + }, + HTMLELEMENT_EVENT_TARGET_VTBL_ENTRIES, +}; + static const tid_t HTMLButtonElement_iface_tids[] = { HTMLELEMENT_TIDS, IHTMLButtonElement_tid, @@ -1960,7 +1974,7 @@ static const tid_t HTMLButtonElement_iface_tids[] = {
static dispex_static_data_t HTMLButtonElement_dispex = { "HTMLButtonElement", - &HTMLElement_event_target_vtbl.dispex_vtbl, + &HTMLButtonElement_event_target_vtbl.dispex_vtbl, DispHTMLButtonElement_tid, HTMLButtonElement_iface_tids, HTMLElement_init_dispex_info
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmllink.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-)
diff --git a/dlls/mshtml/htmllink.c b/dlls/mshtml/htmllink.c index 3edc36ed96b..ef756494b76 100644 --- a/dlls/mshtml/htmllink.c +++ b/dlls/mshtml/htmllink.c @@ -396,17 +396,24 @@ static HRESULT HTMLLinkElementImpl_get_disabled(HTMLDOMNode *iface, VARIANT_BOOL return IHTMLLinkElement_get_disabled(&This->IHTMLLinkElement_iface, p); }
-static void HTMLLinkElement_traverse(HTMLDOMNode *iface, nsCycleCollectionTraversalCallback *cb) +static inline HTMLLinkElement *impl_from_DispatchEx(DispatchEx *iface) { - HTMLLinkElement *This = impl_from_HTMLDOMNode(iface); + return CONTAINING_RECORD(iface, HTMLLinkElement, element.node.event_target.dispex); +} + +static void HTMLLinkElement_traverse(DispatchEx *dispex, nsCycleCollectionTraversalCallback *cb) +{ + HTMLLinkElement *This = impl_from_DispatchEx(dispex); + HTMLDOMNode_traverse(dispex, cb);
if(This->nslink) - note_cc_edge((nsISupports*)This->nslink, "This->nslink", cb); + note_cc_edge((nsISupports*)This->nslink, "nslink", cb); }
-static void HTMLLinkElement_unlink(HTMLDOMNode *iface) +static void HTMLLinkElement_unlink(DispatchEx *dispex) { - HTMLLinkElement *This = impl_from_HTMLDOMNode(iface); + HTMLLinkElement *This = impl_from_DispatchEx(dispex); + HTMLDOMNode_unlink(dispex); unlink_ref(&This->nslink); } static const NodeImplVtbl HTMLLinkElementImplVtbl = { @@ -419,8 +426,15 @@ static const NodeImplVtbl HTMLLinkElementImplVtbl = { .get_attr_col = HTMLElement_get_attr_col, .put_disabled = HTMLLinkElementImpl_put_disabled, .get_disabled = HTMLLinkElementImpl_get_disabled, - .traverse = HTMLLinkElement_traverse, - .unlink = HTMLLinkElement_unlink +}; + +static const event_target_vtbl_t HTMLLinkElement_event_target_vtbl = { + { + HTMLELEMENT_DISPEX_VTBL_ENTRIES, + .traverse = HTMLLinkElement_traverse, + .unlink = HTMLLinkElement_unlink + }, + HTMLELEMENT_EVENT_TARGET_VTBL_ENTRIES, };
static const tid_t HTMLLinkElement_iface_tids[] = { @@ -430,7 +444,7 @@ static const tid_t HTMLLinkElement_iface_tids[] = { }; static dispex_static_data_t HTMLLinkElement_dispex = { "HTMLLinkElement", - &HTMLElement_event_target_vtbl.dispex_vtbl, + &HTMLLinkElement_event_target_vtbl.dispex_vtbl, DispHTMLLinkElement_tid, HTMLLinkElement_iface_tids, HTMLElement_init_dispex_info
This merge request was approved by Jacek Caban.