mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-14 22:28:30 +00:00
mshtml: Traverse EventTarget listeners.
Signed-off-by: Gabriel Ivăncescu <gabrielopcode@gmail.com>
This commit is contained in:
parent
30d88426d5
commit
35a6c314d4
|
@ -4587,6 +4587,17 @@ void EventTarget_Init(EventTarget *event_target, dispex_static_data_t *dispex_da
|
||||||
wine_rb_init(&event_target->handler_map, event_id_cmp);
|
wine_rb_init(&event_target->handler_map, event_id_cmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void traverse_event_target(EventTarget *event_target, nsCycleCollectionTraversalCallback *cb)
|
||||||
|
{
|
||||||
|
listener_container_t *iter;
|
||||||
|
event_listener_t *listener;
|
||||||
|
|
||||||
|
RB_FOR_EACH_ENTRY(iter, &event_target->handler_map, listener_container_t, entry)
|
||||||
|
LIST_FOR_EACH_ENTRY(listener, &iter->listeners, event_listener_t, entry)
|
||||||
|
if(listener->function)
|
||||||
|
note_cc_edge((nsISupports*)listener->function, "EventTarget.listener", cb);
|
||||||
|
}
|
||||||
|
|
||||||
void release_event_target(EventTarget *event_target)
|
void release_event_target(EventTarget *event_target)
|
||||||
{
|
{
|
||||||
listener_container_t *iter, *iter2;
|
listener_container_t *iter, *iter2;
|
||||||
|
|
|
@ -97,6 +97,7 @@ typedef struct DOMEvent {
|
||||||
|
|
||||||
const WCHAR *get_event_name(eventid_t);
|
const WCHAR *get_event_name(eventid_t);
|
||||||
void check_event_attr(HTMLDocumentNode*,nsIDOMElement*);
|
void check_event_attr(HTMLDocumentNode*,nsIDOMElement*);
|
||||||
|
void traverse_event_target(EventTarget*,nsCycleCollectionTraversalCallback*);
|
||||||
void release_event_target(EventTarget*);
|
void release_event_target(EventTarget*);
|
||||||
HRESULT set_event_handler(EventTarget*,eventid_t,VARIANT*);
|
HRESULT set_event_handler(EventTarget*,eventid_t,VARIANT*);
|
||||||
HRESULT get_event_handler(EventTarget*,eventid_t,VARIANT*);
|
HRESULT get_event_handler(EventTarget*,eventid_t,VARIANT*);
|
||||||
|
|
|
@ -1425,6 +1425,7 @@ void HTMLDOMNode_traverse(DispatchEx *dispex, nsCycleCollectionTraversalCallback
|
||||||
{
|
{
|
||||||
HTMLDOMNode *This = HTMLDOMNode_from_DispatchEx(dispex);
|
HTMLDOMNode *This = HTMLDOMNode_from_DispatchEx(dispex);
|
||||||
|
|
||||||
|
traverse_event_target(&This->event_target, cb);
|
||||||
if(This->nsnode)
|
if(This->nsnode)
|
||||||
note_cc_edge((nsISupports*)This->nsnode, "nsnode", cb);
|
note_cc_edge((nsISupports*)This->nsnode, "nsnode", cb);
|
||||||
if(This->doc && &This->doc->node != This)
|
if(This->doc && &This->doc->node != This)
|
||||||
|
|
|
@ -3922,6 +3922,7 @@ static void HTMLWindow_traverse(DispatchEx *dispex, nsCycleCollectionTraversalCa
|
||||||
HTMLInnerWindow *This = impl_from_DispatchEx(dispex);
|
HTMLInnerWindow *This = impl_from_DispatchEx(dispex);
|
||||||
HTMLOuterWindow *child;
|
HTMLOuterWindow *child;
|
||||||
|
|
||||||
|
traverse_event_target(&This->event_target, cb);
|
||||||
LIST_FOR_EACH_ENTRY(child, &This->children, HTMLOuterWindow, sibling_entry)
|
LIST_FOR_EACH_ENTRY(child, &This->children, HTMLOuterWindow, sibling_entry)
|
||||||
note_cc_edge((nsISupports*)&child->base.IHTMLWindow2_iface, "child", cb);
|
note_cc_edge((nsISupports*)&child->base.IHTMLWindow2_iface, "child", cb);
|
||||||
if(This->doc)
|
if(This->doc)
|
||||||
|
|
|
@ -1514,6 +1514,7 @@ static void HTMLXMLHttpRequest_traverse(DispatchEx *dispex, nsCycleCollectionTra
|
||||||
note_cc_edge((nsISupports*)&This->pending_progress_event->IDOMEvent_iface, "pending_progress_event", cb);
|
note_cc_edge((nsISupports*)&This->pending_progress_event->IDOMEvent_iface, "pending_progress_event", cb);
|
||||||
if(This->nsxhr)
|
if(This->nsxhr)
|
||||||
note_cc_edge((nsISupports*)This->nsxhr, "nsxhr", cb);
|
note_cc_edge((nsISupports*)This->nsxhr, "nsxhr", cb);
|
||||||
|
traverse_event_target(&This->event_target, cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void HTMLXMLHttpRequest_unlink(DispatchEx *dispex)
|
static void HTMLXMLHttpRequest_unlink(DispatchEx *dispex)
|
||||||
|
|
Loading…
Reference in a new issue