From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/omnavigator.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-)
diff --git a/dlls/mshtml/omnavigator.c b/dlls/mshtml/omnavigator.c index f6cf0755a74..71beb3cc41c 100644 --- a/dlls/mshtml/omnavigator.c +++ b/dlls/mshtml/omnavigator.c @@ -2609,10 +2609,8 @@ static ULONG WINAPI console_Release(IWineMSHTMLConsole *iface)
TRACE("(%p) ref=%ld\n", console, ref);
- if(!ref) { + if(!ref) release_dispex(&console->dispex); - free(console); - }
return ref; } @@ -2789,13 +2787,28 @@ static const IWineMSHTMLConsoleVtbl WineMSHTMLConsoleVtbl = { console_warn, };
+static inline struct console *console_from_DispatchEx(DispatchEx *iface) +{ + return CONTAINING_RECORD(iface, struct console, dispex); +} + +static void console_destructor(DispatchEx *dispex) +{ + struct console *console = console_from_DispatchEx(dispex); + free(console); +} + +static const dispex_static_data_vtbl_t console_dispex_vtbl = { + console_destructor, +}; + static const tid_t console_iface_tids[] = { IWineMSHTMLConsole_tid, 0 }; static dispex_static_data_t console_dispex = { L"Console", - NULL, + &console_dispex_vtbl, IWineMSHTMLConsole_tid, console_iface_tids };
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/omnavigator.c | 45 ++++++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 12 deletions(-)
diff --git a/dlls/mshtml/omnavigator.c b/dlls/mshtml/omnavigator.c index 71beb3cc41c..2e098bf2d09 100644 --- a/dlls/mshtml/omnavigator.c +++ b/dlls/mshtml/omnavigator.c @@ -2890,21 +2890,11 @@ static ULONG WINAPI media_query_list_Release(IWineMSHTMLMediaQueryList *iface) { struct media_query_list *media_query_list = impl_from_IWineMSHTMLMediaQueryList(iface); LONG ref = InterlockedDecrement(&media_query_list->ref); - struct media_query_list_listener *listener, *listener2;
TRACE("(%p) ref=%ld\n", media_query_list, ref);
- if(!ref) { - media_query_list->callback->media_query_list = NULL; - LIST_FOR_EACH_ENTRY_SAFE(listener, listener2, &media_query_list->listeners, struct media_query_list_listener, entry) { - IDispatch_Release(listener->function); - free(listener); - } - nsIDOMMediaQueryListListener_Release(&media_query_list->callback->nsIDOMMediaQueryListListener_iface); - nsIDOMMediaQueryList_Release(media_query_list->nsquerylist); + if(!ref) release_dispex(&media_query_list->dispex); - free(media_query_list); - }
return ref; } @@ -3125,13 +3115,44 @@ static const nsIDOMMediaQueryListListenerVtbl media_query_list_callback_vtbl = { media_query_list_callback_HandleChange };
+static inline struct media_query_list *media_query_list_from_DispatchEx(DispatchEx *iface) +{ + return CONTAINING_RECORD(iface, struct media_query_list, dispex); +} + +static void media_query_list_unlink(DispatchEx *dispex) +{ + struct media_query_list *media_query_list = media_query_list_from_DispatchEx(dispex); + + media_query_list->callback->media_query_list = NULL; + while(!list_empty(&media_query_list->listeners)) { + struct media_query_list_listener *listener = LIST_ENTRY(list_head(&media_query_list->listeners), struct media_query_list_listener, entry); + list_remove(&listener->entry); + IDispatch_Release(listener->function); + free(listener); + } + unlink_ref(&media_query_list->nsquerylist); +} + +static void media_query_list_destructor(DispatchEx *dispex) +{ + struct media_query_list *media_query_list = media_query_list_from_DispatchEx(dispex); + nsIDOMMediaQueryListListener_Release(&media_query_list->callback->nsIDOMMediaQueryListListener_iface); + free(media_query_list); +} + +static const dispex_static_data_vtbl_t media_query_list_dispex_vtbl = { + media_query_list_destructor, + media_query_list_unlink +}; + static const tid_t media_query_list_iface_tids[] = { IWineMSHTMLMediaQueryList_tid, 0 }; static dispex_static_data_t media_query_list_dispex = { L"MediaQueryList", - NULL, + &media_query_list_dispex_vtbl, IWineMSHTMLMediaQueryList_tid, media_query_list_iface_tids };
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/mutation.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-)
diff --git a/dlls/mshtml/mutation.c b/dlls/mshtml/mutation.c index 3f544e0a90f..13d0b757158 100644 --- a/dlls/mshtml/mutation.c +++ b/dlls/mshtml/mutation.c @@ -1127,11 +1127,8 @@ static ULONG WINAPI MutationObserver_Release(IWineMSHTMLMutationObserver *iface)
TRACE("(%p) ref=%ld\n", This, ref);
- if(!ref) { + if(!ref) release_dispex(&This->dispex); - IDispatch_Release(This->callback); - free(This); - }
return ref; } @@ -1213,13 +1210,35 @@ static const IWineMSHTMLMutationObserverVtbl WineMSHTMLMutationObserverVtbl = { MutationObserver_takeRecords };
+static inline struct mutation_observer *mutation_observer_from_DispatchEx(DispatchEx *iface) +{ + return CONTAINING_RECORD(iface, struct mutation_observer, dispex); +} + +static void mutation_observer_unlink(DispatchEx *dispex) +{ + struct mutation_observer *This = mutation_observer_from_DispatchEx(dispex); + unlink_ref(&This->callback); +} + +static void mutation_observer_destructor(DispatchEx *dispex) +{ + struct mutation_observer *This = mutation_observer_from_DispatchEx(dispex); + free(This); +} + +static const dispex_static_data_vtbl_t mutation_observer_dispex_vtbl = { + mutation_observer_destructor, + mutation_observer_unlink +}; + static const tid_t mutation_observer_iface_tids[] = { IWineMSHTMLMutationObserver_tid, 0 }; static dispex_static_data_t mutation_observer_dispex = { L"MutationObserver", - NULL, + &mutation_observer_dispex_vtbl, IWineMSHTMLMutationObserver_tid, mutation_observer_iface_tids };
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/xmlhttprequest.c | 43 +++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 11 deletions(-)
diff --git a/dlls/mshtml/xmlhttprequest.c b/dlls/mshtml/xmlhttprequest.c index 73eea9d7f6d..75f52fb6c8e 100644 --- a/dlls/mshtml/xmlhttprequest.c +++ b/dlls/mshtml/xmlhttprequest.c @@ -550,17 +550,8 @@ static ULONG WINAPI HTMLXMLHttpRequest_Release(IHTMLXMLHttpRequest *iface)
TRACE("(%p) ref=%ld\n", This, ref);
- if(!ref) { - remove_target_tasks(This->task_magic); - detach_xhr_event_listener(This->event_listener); - if(This->pending_progress_event) - IDOMEvent_Release(&This->pending_progress_event->IDOMEvent_iface); - IHTMLWindow2_Release(&This->window->base.IHTMLWindow2_iface); - release_event_target(&This->event_target); + if(!ref) release_dispex(&This->event_target.dispex); - nsIXMLHttpRequest_Release(This->nsxhr); - free(This); - }
return ref; } @@ -1530,6 +1521,35 @@ static inline HTMLXMLHttpRequest *impl_from_DispatchEx(DispatchEx *iface) return CONTAINING_RECORD(iface, HTMLXMLHttpRequest, event_target.dispex); }
+static void HTMLXMLHttpRequest_unlink(DispatchEx *dispex) +{ + HTMLXMLHttpRequest *This = impl_from_DispatchEx(dispex); + remove_target_tasks(This->task_magic); + if(This->event_listener) { + XMLHttpReqEventListener *event_listener = This->event_listener; + This->event_listener = NULL; + detach_xhr_event_listener(event_listener); + } + if(This->window) { + HTMLInnerWindow *window = This->window; + This->window = NULL; + IHTMLWindow2_Release(&window->base.IHTMLWindow2_iface); + } + if(This->pending_progress_event) { + DOMEvent *pending_progress_event = This->pending_progress_event; + This->pending_progress_event = NULL; + IDOMEvent_Release(&pending_progress_event->IDOMEvent_iface); + } + unlink_ref(&This->nsxhr); + release_event_target(&This->event_target); +} + +static void HTMLXMLHttpRequest_destructor(DispatchEx *dispex) +{ + HTMLXMLHttpRequest *This = impl_from_DispatchEx(dispex); + free(This); +} + static nsISupports *HTMLXMLHttpRequest_get_gecko_target(DispatchEx *dispex) { HTMLXMLHttpRequest *This = impl_from_DispatchEx(dispex); @@ -1574,7 +1594,8 @@ static void HTMLXMLHttpRequest_init_dispex_info(dispex_data_t *info, compat_mode
static event_target_vtbl_t HTMLXMLHttpRequest_event_target_vtbl = { { - NULL, + HTMLXMLHttpRequest_destructor, + HTMLXMLHttpRequest_unlink }, HTMLXMLHttpRequest_get_gecko_target, HTMLXMLHttpRequest_bind_event
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlelem.c | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index f9ab44ce5fc..653bdd1e6b3 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -582,12 +582,8 @@ static ULONG WINAPI HTMLRect_Release(IHTMLRect *iface)
TRACE("(%p) ref=%ld\n", This, ref);
- if(!ref) { - if(This->nsrect) - nsIDOMClientRect_Release(This->nsrect); + if(!ref) release_dispex(&This->dispex); - free(This); - }
return ref; } @@ -841,19 +837,41 @@ static const IHTMLRect2Vtbl HTMLRect2Vtbl = { HTMLRect2_get_height, };
+static inline HTMLRect *HTMLRect_from_DispatchEx(DispatchEx *iface) +{ + return CONTAINING_RECORD(iface, HTMLRect, dispex); +} + +static void HTMLRect_unlink(DispatchEx *dispex) +{ + HTMLRect *This = HTMLRect_from_DispatchEx(dispex); + unlink_ref(&This->nsrect); +} + +static void HTMLRect_destructor(DispatchEx *dispex) +{ + HTMLRect *This = HTMLRect_from_DispatchEx(dispex); + free(This); +} + void HTMLRect_init_dispex_info(dispex_data_t *info, compat_mode_t mode) { if (mode >= COMPAT_MODE_IE9) dispex_info_add_interface(info, IHTMLRect2_tid, NULL); }
+static const dispex_static_data_vtbl_t HTMLRect_dispex_vtbl = { + HTMLRect_destructor, + HTMLRect_unlink +}; + static const tid_t HTMLRect_iface_tids[] = { IHTMLRect_tid, 0 }; static dispex_static_data_t HTMLRect_dispex = { L"ClientRect", - NULL, + &HTMLRect_dispex_vtbl, IHTMLRect_tid, HTMLRect_iface_tids, HTMLRect_init_dispex_info
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlelem.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 653bdd1e6b3..112057030d3 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -1084,12 +1084,8 @@ static ULONG WINAPI HTMLRectCollection_Release(IHTMLRectCollection *iface)
TRACE("(%p) ref=%ld\n", This, ref);
- if(!ref) { - if(This->rect_list) - nsIDOMClientRectList_Release(This->rect_list); + if(!ref) release_dispex(&This->dispex); - free(This); - }
return ref; } @@ -1212,6 +1208,18 @@ static inline HTMLRectCollection *HTMLRectCollection_from_DispatchEx(DispatchEx return CONTAINING_RECORD(iface, HTMLRectCollection, dispex); }
+static void HTMLRectCollection_unlink(DispatchEx *dispex) +{ + HTMLRectCollection *This = HTMLRectCollection_from_DispatchEx(dispex); + unlink_ref(&This->rect_list); +} + +static void HTMLRectCollection_destructor(DispatchEx *dispex) +{ + HTMLRectCollection *This = HTMLRectCollection_from_DispatchEx(dispex); + free(This); +} + static HRESULT HTMLRectCollection_get_dispid(DispatchEx *dispex, BSTR name, DWORD flags, DISPID *dispid) { HTMLRectCollection *This = HTMLRectCollection_from_DispatchEx(dispex); @@ -1287,8 +1295,8 @@ static HRESULT HTMLRectCollection_invoke(DispatchEx *dispex, DISPID id, LCID lci }
static const dispex_static_data_vtbl_t HTMLRectCollection_dispex_vtbl = { - NULL, - NULL, + HTMLRectCollection_destructor, + HTMLRectCollection_unlink, NULL, HTMLRectCollection_get_dispid, HTMLRectCollection_get_name,
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlelem.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 112057030d3..9542d43d5dc 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -7427,11 +7427,8 @@ static ULONG WINAPI token_list_Release(IWineDOMTokenList *iface)
TRACE("(%p) ref=%ld\n", token_list, ref);
- if(!ref) { - IHTMLElement_Release(token_list->element); + if(!ref) release_dispex(&token_list->dispex); - free(token_list); - }
return ref; } @@ -7750,6 +7747,18 @@ static inline struct token_list *token_list_from_DispatchEx(DispatchEx *iface) return CONTAINING_RECORD(iface, struct token_list, dispex); }
+static void token_list_unlink(DispatchEx *dispex) +{ + struct token_list *token_list = token_list_from_DispatchEx(dispex); + unlink_ref(&token_list->element); +} + +static void token_list_destructor(DispatchEx *dispex) +{ + struct token_list *token_list = token_list_from_DispatchEx(dispex); + free(token_list); +} + static HRESULT token_list_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *params, VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller) { @@ -7825,8 +7834,8 @@ static HRESULT token_list_invoke(DispatchEx *dispex, DISPID id, LCID lcid, WORD }
static const dispex_static_data_vtbl_t token_list_dispex_vtbl = { - NULL, - NULL, + token_list_destructor, + token_list_unlink, token_list_value, token_list_get_dispid, token_list_get_name,
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlelem.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 9542d43d5dc..2e1a26d058a 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -8135,9 +8135,7 @@ static ULONG WINAPI HTMLFiltersCollection_Release(IHTMLFiltersCollection *iface) TRACE("(%p) ref=%ld\n", This, ref);
if(!ref) - { - free(This); - } + release_dispex(&This->dispex);
return ref; } @@ -8213,6 +8211,17 @@ static const IHTMLFiltersCollectionVtbl HTMLFiltersCollectionVtbl = { HTMLFiltersCollection_item };
+static inline HTMLFiltersCollection *HTMLFiltersCollection_from_DispatchEx(DispatchEx *iface) +{ + return CONTAINING_RECORD(iface, HTMLFiltersCollection, dispex); +} + +static void HTMLFiltersCollection_destructor(DispatchEx *dispex) +{ + HTMLFiltersCollection *This = HTMLFiltersCollection_from_DispatchEx(dispex); + free(This); +} + static HRESULT HTMLFiltersCollection_get_dispid(DispatchEx *dispex, BSTR name, DWORD flags, DISPID *dispid) { WCHAR *ptr; @@ -8252,7 +8261,7 @@ static HRESULT HTMLFiltersCollection_invoke(DispatchEx *dispex, DISPID id, LCID }
static const dispex_static_data_vtbl_t HTMLFiltersCollection_dispex_vtbl = { - NULL, + HTMLFiltersCollection_destructor, NULL, NULL, HTMLFiltersCollection_get_dispid,
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlelem.c | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 2e1a26d058a..91316a8f237 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -8594,17 +8594,8 @@ static ULONG WINAPI HTMLAttributeCollection_Release(IHTMLAttributeCollection *if
TRACE("(%p) ref=%ld\n", This, ref);
- if(!ref) { - while(!list_empty(&This->attrs)) { - HTMLDOMAttribute *attr = LIST_ENTRY(list_head(&This->attrs), HTMLDOMAttribute, entry); - - list_remove(&attr->entry); - attr->elem = NULL; - IHTMLDOMAttribute_Release(&attr->IHTMLDOMAttribute_iface); - } - - free(This); - } + if(!ref) + release_dispex(&This->dispex);
return ref; } @@ -8953,6 +8944,24 @@ static inline HTMLAttributeCollection *HTMLAttributeCollection_from_DispatchEx(D return CONTAINING_RECORD(iface, HTMLAttributeCollection, dispex); }
+static void HTMLAttributeCollection_unlink(DispatchEx *dispex) +{ + HTMLAttributeCollection *This = HTMLAttributeCollection_from_DispatchEx(dispex); + while(!list_empty(&This->attrs)) { + HTMLDOMAttribute *attr = LIST_ENTRY(list_head(&This->attrs), HTMLDOMAttribute, entry); + + list_remove(&attr->entry); + attr->elem = NULL; + IHTMLDOMAttribute_Release(&attr->IHTMLDOMAttribute_iface); + } +} + +static void HTMLAttributeCollection_destructor(DispatchEx *dispex) +{ + HTMLAttributeCollection *This = HTMLAttributeCollection_from_DispatchEx(dispex); + free(This); +} + static HRESULT HTMLAttributeCollection_get_dispid(DispatchEx *dispex, BSTR name, DWORD flags, DISPID *dispid) { HTMLAttributeCollection *This = HTMLAttributeCollection_from_DispatchEx(dispex); @@ -9019,8 +9028,8 @@ static HRESULT HTMLAttributeCollection_invoke(DispatchEx *dispex, DISPID id, LCI }
static const dispex_static_data_vtbl_t HTMLAttributeCollection_dispex_vtbl = { - NULL, - NULL, + HTMLAttributeCollection_destructor, + HTMLAttributeCollection_unlink, NULL, HTMLAttributeCollection_get_dispid, HTMLAttributeCollection_get_name,
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlnode.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-)
diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c index 0b509eca79a..d412b570aec 100644 --- a/dlls/mshtml/htmlnode.c +++ b/dlls/mshtml/htmlnode.c @@ -239,10 +239,8 @@ static ULONG WINAPI HTMLDOMChildrenCollection_Release(IHTMLDOMChildrenCollection
TRACE("(%p) ref=%ld\n", This, ref);
- if(!ref) { - nsIDOMNodeList_Release(This->nslist); - free(This); - } + if(!ref) + release_dispex(&This->dispex);
return ref; } @@ -364,6 +362,18 @@ static inline HTMLDOMChildrenCollection *impl_from_DispatchEx(DispatchEx *iface) return CONTAINING_RECORD(iface, HTMLDOMChildrenCollection, dispex); }
+static void HTMLDOMChildrenCollection_unlink(DispatchEx *dispex) +{ + HTMLDOMChildrenCollection *This = impl_from_DispatchEx(dispex); + unlink_ref(&This->nslist); +} + +static void HTMLDOMChildrenCollection_destructor(DispatchEx *dispex) +{ + HTMLDOMChildrenCollection *This = impl_from_DispatchEx(dispex); + free(This); +} + #define DISPID_CHILDCOL_0 MSHTML_DISPID_CUSTOM_MIN
static HRESULT HTMLDOMChildrenCollection_get_dispid(DispatchEx *dispex, BSTR name, DWORD flags, DISPID *dispid) @@ -433,8 +443,8 @@ static HRESULT HTMLDOMChildrenCollection_invoke(DispatchEx *dispex, DISPID id, L }
static const dispex_static_data_vtbl_t HTMLDOMChildrenCollection_dispex_vtbl = { - NULL, - NULL, + HTMLDOMChildrenCollection_destructor, + HTMLDOMChildrenCollection_unlink, NULL, HTMLDOMChildrenCollection_get_dispid, HTMLDOMChildrenCollection_get_name,
From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlelemcol.c | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-)
diff --git a/dlls/mshtml/htmlelemcol.c b/dlls/mshtml/htmlelemcol.c index afd7104c476..178ccde9b4d 100644 --- a/dlls/mshtml/htmlelemcol.c +++ b/dlls/mshtml/htmlelemcol.c @@ -252,16 +252,8 @@ static ULONG WINAPI HTMLElementCollection_Release(IHTMLElementCollection *iface)
TRACE("(%p) ref=%ld\n", This, ref);
- if(!ref) { - unsigned i; - - for(i=0; i < This->len; i++) - node_release(&This->elems[i]->node); - free(This->elems); - + if(!ref) release_dispex(&This->dispex); - free(This); - }
return ref; } @@ -550,6 +542,25 @@ static inline HTMLElementCollection *impl_from_DispatchEx(DispatchEx *iface) return CONTAINING_RECORD(iface, HTMLElementCollection, dispex); }
+static void HTMLElementCollection_unlink(DispatchEx *dispex) +{ + HTMLElementCollection *This = impl_from_DispatchEx(dispex); + unsigned i, len = This->len; + + if(len) { + This->len = 0; + for(i = 0; i < len; i++) + node_release(&This->elems[i]->node); + free(This->elems); + } +} + +static void HTMLElementCollection_destructor(DispatchEx *dispex) +{ + HTMLElementCollection *This = impl_from_DispatchEx(dispex); + free(This); +} + #define DISPID_ELEMCOL_0 MSHTML_DISPID_CUSTOM_MIN
static HRESULT HTMLElementCollection_get_dispid(DispatchEx *dispex, BSTR name, DWORD flags, DISPID *dispid) @@ -622,8 +633,8 @@ static HRESULT HTMLElementCollection_invoke(DispatchEx *dispex, DISPID id, LCID }
static const dispex_static_data_vtbl_t HTMLElementColection_dispex_vtbl = { - NULL, - NULL, + HTMLElementCollection_destructor, + HTMLElementCollection_unlink, NULL, HTMLElementCollection_get_dispid, HTMLElementCollection_get_name,
This merge request was approved by Jacek Caban.