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