mshtml: Added a helper to get vtbl from DispatchEx and use it to access vtbl outside dispex.c.
Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
fd2f645d16
commit
dba85f124b
|
@ -1736,6 +1736,11 @@ void dispex_unlink(DispatchEx *This)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const dispex_static_data_vtbl_t *dispex_get_vtbl(DispatchEx *dispex)
|
||||||
|
{
|
||||||
|
return dispex->data->vtbl;
|
||||||
|
}
|
||||||
|
|
||||||
void release_dispex(DispatchEx *This)
|
void release_dispex(DispatchEx *This)
|
||||||
{
|
{
|
||||||
dynamic_prop_t *prop;
|
dynamic_prop_t *prop;
|
||||||
|
|
|
@ -5093,7 +5093,7 @@ static void HTMLElement_bind_event(DispatchEx *dispex, int eid)
|
||||||
add_nsevent_listener(This->node.doc, This->node.nsnode, loadW);
|
add_nsevent_listener(This->node.doc, This->node.nsnode, loadW);
|
||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
This->node.doc->node.event_target.dispex.data->vtbl->bind_event(&This->node.doc->node.event_target.dispex, eid);
|
dispex_get_vtbl(&This->node.doc->node.event_target.dispex)->bind_event(&This->node.doc->node.event_target.dispex, eid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -901,10 +901,11 @@ HRESULT create_event_obj(IHTMLEventObj **ret)
|
||||||
|
|
||||||
static inline event_target_t *get_event_target_data(EventTarget *event_target, BOOL alloc)
|
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;
|
event_target_t **ptr;
|
||||||
|
|
||||||
ptr = event_target->dispex.data->vtbl && event_target->dispex.data->vtbl->get_event_target_ptr
|
ptr = vtbl && vtbl->get_event_target_ptr
|
||||||
? event_target->dispex.data->vtbl->get_event_target_ptr(&event_target->dispex)
|
? vtbl->get_event_target_ptr(&event_target->dispex)
|
||||||
: &event_target->ptr;
|
: &event_target->ptr;
|
||||||
if(*ptr || !alloc)
|
if(*ptr || !alloc)
|
||||||
return *ptr;
|
return *ptr;
|
||||||
|
@ -1394,8 +1395,9 @@ void detach_events(HTMLDocumentNode *doc)
|
||||||
/* Caller should ensure that it's called only once for given event in the target. */
|
/* Caller should ensure that it's called only once for given event in the target. */
|
||||||
static void bind_event(EventTarget *event_target, eventid_t eid)
|
static void bind_event(EventTarget *event_target, eventid_t eid)
|
||||||
{
|
{
|
||||||
if(event_target->dispex.data->vtbl->bind_event)
|
const dispex_static_data_vtbl_t *vtbl = dispex_get_vtbl(&event_target->dispex);
|
||||||
event_target->dispex.data->vtbl->bind_event(&event_target->dispex, eid);
|
if(vtbl->bind_event)
|
||||||
|
vtbl->bind_event(&event_target->dispex, eid);
|
||||||
else
|
else
|
||||||
FIXME("Unsupported event binding on target %p\n", event_target);
|
FIXME("Unsupported event binding on target %p\n", event_target);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2933,7 +2933,7 @@ static event_target_t **HTMLWindow_get_event_target_ptr(DispatchEx *dispex)
|
||||||
static void HTMLWindow_bind_event(DispatchEx *dispex, int eid)
|
static void HTMLWindow_bind_event(DispatchEx *dispex, int eid)
|
||||||
{
|
{
|
||||||
HTMLInnerWindow *This = impl_from_DispatchEx(dispex);
|
HTMLInnerWindow *This = impl_from_DispatchEx(dispex);
|
||||||
This->doc->node.event_target.dispex.data->vtbl->bind_event(&This->doc->node.event_target.dispex, eid);
|
dispex_get_vtbl(&This->doc->node.event_target.dispex)->bind_event(&This->doc->node.event_target.dispex, eid);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const dispex_static_data_vtbl_t HTMLWindow_dispex_vtbl = {
|
static const dispex_static_data_vtbl_t HTMLWindow_dispex_vtbl = {
|
||||||
|
|
|
@ -303,6 +303,7 @@ void dispex_traverse(DispatchEx*,nsCycleCollectionTraversalCallback*) DECLSPEC_H
|
||||||
void dispex_unlink(DispatchEx*) DECLSPEC_HIDDEN;
|
void dispex_unlink(DispatchEx*) DECLSPEC_HIDDEN;
|
||||||
void release_typelib(void) DECLSPEC_HIDDEN;
|
void release_typelib(void) DECLSPEC_HIDDEN;
|
||||||
HRESULT get_htmldoc_classinfo(ITypeInfo **typeinfo) DECLSPEC_HIDDEN;
|
HRESULT get_htmldoc_classinfo(ITypeInfo **typeinfo) DECLSPEC_HIDDEN;
|
||||||
|
const dispex_static_data_vtbl_t *dispex_get_vtbl(DispatchEx*) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
DISPEXPROP_CUSTOM,
|
DISPEXPROP_CUSTOM,
|
||||||
|
|
Loading…
Reference in New Issue