Jacek Caban : mshtml: Fire beforeunload event on body element.

Alexandre Julliard julliard at winehq.org
Wed Sep 9 09:56:25 CDT 2009


Module: wine
Branch: master
Commit: e79e4098195676fa1ea7ae59efa49fb875f26075
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e79e4098195676fa1ea7ae59efa49fb875f26075

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Sep  8 22:32:08 2009 +0200

mshtml: Fire beforeunload event on body element.

---

 dlls/mshtml/htmlevent.c |   18 +++++++++++++++++-
 1 files changed, 17 insertions(+), 1 deletions(-)

diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c
index 3ba45da..c18104b 100644
--- a/dlls/mshtml/htmlevent.c
+++ b/dlls/mshtml/htmlevent.c
@@ -98,9 +98,10 @@ typedef struct {
 
 #define EVENT_DEFAULTLISTENER    0x0001
 #define EVENT_BUBBLE             0x0002
+#define EVENT_FORWARDBODY        0x0004
 
 static const event_info_t event_info[] = {
-    {beforeunloadW, onbeforeunloadW, EVENT_DEFAULTLISTENER},
+    {beforeunloadW, onbeforeunloadW, EVENT_DEFAULTLISTENER|EVENT_FORWARDBODY},
     {blurW,         onblurW,         EVENT_DEFAULTLISTENER},
     {changeW,       onchangeW,       EVENT_DEFAULTLISTENER|EVENT_BUBBLE},
     {clickW,        onclickW,        EVENT_DEFAULTLISTENER|EVENT_BUBBLE},
@@ -771,6 +772,21 @@ void fire_event(HTMLDocument *doc, eventid_t eid, nsIDOMNode *target, nsIDOMEven
             break;
 
     case DOCUMENT_NODE:
+        if(event_info[eid].flags & EVENT_FORWARDBODY) {
+            nsIDOMHTMLElement *nsbody;
+            nsresult nsres;
+
+            nsres = nsIDOMHTMLDocument_GetBody(doc->nsdoc, &nsbody);
+            if(NS_SUCCEEDED(nsres) && nsbody) {
+                node = get_node(doc, (nsIDOMNode*)nsbody, FALSE);
+                if(node)
+                    call_event_handlers(doc, event_obj, *get_node_event_target(node), eid, (IDispatch*)HTMLDOMNODE(node));
+                nsIDOMHTMLElement_Release(nsbody);
+            }else {
+                ERR("Could not get body: %08x\n", nsres);
+            }
+        }
+
         call_event_handlers(doc, event_obj, doc->event_target, eid, (IDispatch*)HTMLDOC(doc));
         break;
 




More information about the wine-cvs mailing list