Jacek Caban : mshtml: Moved getting event target data pointer to DispatchEx vtbl.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri May 15 08:38:41 CDT 2015
Module: wine
Branch: master
Commit: a1d837c341e8c01dba774d459963812de2b423a9
URL: http://source.winehq.org/git/wine.git/?a=commit;h=a1d837c341e8c01dba774d459963812de2b423a9
Author: Jacek Caban <jacek at codeweavers.com>
Date: Thu May 14 13:24:34 2015 +0200
mshtml: Moved getting event target data pointer to DispatchEx vtbl.
---
dlls/mshtml/htmlbody.c | 6 +++---
dlls/mshtml/htmlelem.c | 11 ++++++++++-
dlls/mshtml/htmlevent.h | 4 +++-
dlls/mshtml/mshtml_private.h | 4 +++-
4 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/dlls/mshtml/htmlbody.c b/dlls/mshtml/htmlbody.c
index e91f20e..e4b7990 100644
--- a/dlls/mshtml/htmlbody.c
+++ b/dlls/mshtml/htmlbody.c
@@ -824,13 +824,13 @@ static void HTMLBodyElement_unlink(HTMLDOMNode *iface)
}
}
-static event_target_t **HTMLBodyElement_get_event_target(HTMLDOMNode *iface)
+static event_target_t **HTMLBodyElement_get_event_target_ptr(HTMLDOMNode *iface)
{
HTMLBodyElement *This = impl_from_HTMLDOMNode(iface);
return This->textcont.element.node.doc
? &This->textcont.element.node.doc->body_event_target
- : &This->textcont.element.node.event_target;
+ : &This->textcont.element.node.event_target.ptr;
}
static BOOL HTMLBodyElement_is_text_edit(HTMLDOMNode *iface)
@@ -852,7 +852,7 @@ static const NodeImplVtbl HTMLBodyElementImplVtbl = {
HTMLElement_clone,
HTMLElement_handle_event,
HTMLElement_get_attr_col,
- HTMLBodyElement_get_event_target,
+ HTMLBodyElement_get_event_target_ptr,
NULL,
NULL,
NULL,
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c
index 68be24f..77ccc52 100644
--- a/dlls/mshtml/htmlelem.c
+++ b/dlls/mshtml/htmlelem.c
@@ -3988,6 +3988,14 @@ static HRESULT HTMLElement_populate_props(DispatchEx *dispex)
return S_OK;
}
+static event_target_t **HTMLElement_get_event_target_ptr(DispatchEx *dispex)
+{
+ HTMLElement *This = impl_from_DispatchEx(dispex);
+ return This->node.vtbl->get_event_target_ptr
+ ? This->node.vtbl->get_event_target_ptr(&This->node)
+ : &This->node.event_target.ptr;
+}
+
static const tid_t HTMLElement_iface_tids[] = {
HTMLELEMENT_TIDS,
0
@@ -3997,7 +4005,8 @@ static dispex_static_data_vtbl_t HTMLElement_dispex_vtbl = {
NULL,
HTMLElement_get_dispid,
HTMLElement_invoke,
- HTMLElement_populate_props
+ HTMLElement_populate_props,
+ HTMLElement_get_event_target_ptr
};
static dispex_static_data_t HTMLElement_dispex = {
diff --git a/dlls/mshtml/htmlevent.h b/dlls/mshtml/htmlevent.h
index 6d0d9f8..0c86f86 100644
--- a/dlls/mshtml/htmlevent.h
+++ b/dlls/mshtml/htmlevent.h
@@ -73,7 +73,9 @@ void detach_nsevent(HTMLDocumentNode*,const WCHAR*) DECLSPEC_HIDDEN;
static inline event_target_t **get_node_event_target(HTMLDOMNode *node)
{
- return node->vtbl->get_event_target ? node->vtbl->get_event_target(node) : &node->event_target.ptr;
+ return node->event_target.dispex.data->vtbl->get_event_target_ptr
+ ? node->event_target.dispex.data->vtbl->get_event_target_ptr(&node->event_target.dispex)
+ : &node->event_target.ptr;
}
static inline HRESULT set_node_event(HTMLDOMNode *node, eventid_t eid, VARIANT *var)
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 92ff5cd..032ca9a 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -230,6 +230,8 @@ typedef struct {
HRESULT (*get_dispid)(DispatchEx*,BSTR,DWORD,DISPID*);
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*);
} dispex_static_data_vtbl_t;
typedef struct {
@@ -642,7 +644,7 @@ typedef struct {
HRESULT (*clone)(HTMLDOMNode*,nsIDOMNode*,HTMLDOMNode**);
HRESULT (*handle_event)(HTMLDOMNode*,DWORD,nsIDOMEvent*,BOOL*);
HRESULT (*get_attr_col)(HTMLDOMNode*,HTMLAttributeCollection**);
- event_target_t **(*get_event_target)(HTMLDOMNode*);
+ event_target_t **(*get_event_target_ptr)(HTMLDOMNode*);
HRESULT (*fire_event)(HTMLDOMNode*,DWORD,BOOL*);
HRESULT (*put_disabled)(HTMLDOMNode*,VARIANT_BOOL);
HRESULT (*get_disabled)(HTMLDOMNode*,VARIANT_BOOL*);
More information about the wine-cvs
mailing list