Jacek Caban : mshtml: Moved removing event target to separated function.
Alexandre Julliard
julliard at winehq.org
Thu Mar 18 11:19:30 CDT 2010
Module: wine
Branch: master
Commit: da01d8acaf5d955a055d7ea78220cfa8d747ef70
URL: http://source.winehq.org/git/wine.git/?a=commit;h=da01d8acaf5d955a055d7ea78220cfa8d747ef70
Author: Jacek Caban <jacek at codeweavers.com>
Date: Thu Mar 18 01:05:10 2010 +0100
mshtml: Moved removing event target to separated function.
---
dlls/mshtml/htmlevent.c | 21 ++++++++++++++-------
1 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c
index 263026d..25dad79 100644
--- a/dlls/mshtml/htmlevent.c
+++ b/dlls/mshtml/htmlevent.c
@@ -1043,11 +1043,24 @@ static HRESULT ensure_nsevent_handler(HTMLDocumentNode *doc, eventid_t eid)
return S_OK;
}
+static HRESULT remove_event_handler(event_target_t **event_target, eventid_t eid)
+{
+ if(*event_target && (*event_target)->event_table[eid]->handler_prop) {
+ IDispatch_Release((*event_target)->event_table[eid]->handler_prop);
+ (*event_target)->event_table[eid]->handler_prop = NULL;
+ }
+
+ return S_OK;
+}
+
static HRESULT set_event_handler_disp(event_target_t **event_target_ptr, HTMLDocumentNode *doc,
eventid_t eid, IDispatch *disp)
{
event_target_t *event_target;
+ if(!disp)
+ return remove_event_handler(event_target_ptr, eid);
+
event_target = get_event_target(event_target_ptr);
if(!event_target)
return E_OUTOFMEMORY;
@@ -1059,8 +1072,6 @@ static HRESULT set_event_handler_disp(event_target_t **event_target_ptr, HTMLDoc
IDispatch_Release(event_target->event_table[eid]->handler_prop);
event_target->event_table[eid]->handler_prop = disp;
- if(!disp)
- return S_OK;
IDispatch_AddRef(disp);
return ensure_nsevent_handler(doc, eid);
@@ -1070,11 +1081,7 @@ HRESULT set_event_handler(event_target_t **event_target, HTMLDocumentNode *doc,
{
switch(V_VT(var)) {
case VT_NULL:
- if(*event_target && (*event_target)->event_table[eid] && (*event_target)->event_table[eid]->handler_prop) {
- IDispatch_Release((*event_target)->event_table[eid]->handler_prop);
- (*event_target)->event_table[eid]->handler_prop = NULL;
- }
- break;
+ return remove_event_handler(event_target, eid);
case VT_DISPATCH:
return set_event_handler_disp(event_target, doc, eid, V_DISPATCH(var));
More information about the wine-cvs
mailing list