Jacek Caban : mshtml: Added support for focusout event and IHTMLElement4:: onfocusout property.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Apr 4 10:37:03 CDT 2016


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Apr  4 13:22:20 2016 +0200

mshtml: Added support for focusout event and IHTMLElement4::onfocusout property.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/mshtml/htmlelem.c  | 12 ++++++++----
 dlls/mshtml/htmlevent.c |  9 +++++++++
 dlls/mshtml/htmlevent.h |  1 +
 dlls/mshtml/nsevents.c  |  4 ++++
 4 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c
index cb4718d..d5729b1 100644
--- a/dlls/mshtml/htmlelem.c
+++ b/dlls/mshtml/htmlelem.c
@@ -3875,15 +3875,19 @@ static HRESULT WINAPI HTMLElement4_get_onfocusin(IHTMLElement4 *iface, VARIANT *
 static HRESULT WINAPI HTMLElement4_put_onfocusout(IHTMLElement4 *iface, VARIANT v)
 {
     HTMLElement *This = impl_from_IHTMLElement4(iface);
-    FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
-    return E_NOTIMPL;
+
+    TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
+
+    return set_node_event(&This->node, EVENTID_FOCUSOUT, &v);
 }
 
 static HRESULT WINAPI HTMLElement4_get_onfocusout(IHTMLElement4 *iface, VARIANT *p)
 {
     HTMLElement *This = impl_from_IHTMLElement4(iface);
-    FIXME("(%p)->(%p)\n", This, p);
-    return E_NOTIMPL;
+
+    TRACE("(%p)->(%p)\n", This, p);
+
+    return get_node_event(&This->node, EVENTID_FOCUSOUT, p);
 }
 
 static const IHTMLElement4Vtbl HTMLElement4Vtbl = {
diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c
index c763462..afacf71 100644
--- a/dlls/mshtml/htmlevent.c
+++ b/dlls/mshtml/htmlevent.c
@@ -84,6 +84,9 @@ static const WCHAR onfocusW[] = {'o','n','f','o','c','u','s',0};
 static const WCHAR focusinW[] = {'f','o','c','u','s','i','n',0};
 static const WCHAR onfocusinW[] = {'o','n','f','o','c','u','s','i','n',0};
 
+static const WCHAR focusoutW[] = {'f','o','c','u','s','o','u','t',0};
+static const WCHAR onfocusoutW[] = {'o','n','f','o','c','u','s','o','u','t',0};
+
 static const WCHAR helpW[] = {'h','e','l','p',0};
 static const WCHAR onhelpW[] = {'o','n','h','e','l','p',0};
 
@@ -195,6 +198,8 @@ static const event_info_t event_info[] = {
         EVENT_DEFAULTLISTENER},
     {focusinW,           onfocusinW,           EVENTT_HTML,   DISPID_EVMETH_ONFOCUSIN,
         EVENT_BUBBLE},
+    {focusoutW,          onfocusoutW,          EVENTT_HTML,   DISPID_EVMETH_ONFOCUSOUT,
+        EVENT_BUBBLE},
     {helpW,              onhelpW,              EVENTT_KEY,    DISPID_EVMETH_ONHELP,
         EVENT_BUBBLE|EVENT_CANCELABLE},
     {keydownW,           onkeydownW,           EVENTT_KEY,    DISPID_EVMETH_ONKEYDOWN,
@@ -1336,6 +1341,10 @@ HRESULT ensure_doc_nsevent_handler(HTMLDocumentNode *doc, eventid_t eid)
         doc->event_vector[eid] = TRUE;
         eid = EVENTID_FOCUS;
         break;
+    case EVENTID_FOCUSOUT:
+        doc->event_vector[eid] = TRUE;
+        eid = EVENTID_BLUR;
+        break;
     default:
         break;
     }
diff --git a/dlls/mshtml/htmlevent.h b/dlls/mshtml/htmlevent.h
index 649037a..05c2b84 100644
--- a/dlls/mshtml/htmlevent.h
+++ b/dlls/mshtml/htmlevent.h
@@ -30,6 +30,7 @@ typedef enum {
     EVENTID_ERROR,
     EVENTID_FOCUS,
     EVENTID_FOCUSIN,
+    EVENTID_FOCUSOUT,
     EVENTID_HELP,
     EVENTID_KEYDOWN,
     EVENTID_KEYPRESS,
diff --git a/dlls/mshtml/nsevents.c b/dlls/mshtml/nsevents.c
index 923355c..d1d0512 100644
--- a/dlls/mshtml/nsevents.c
+++ b/dlls/mshtml/nsevents.c
@@ -343,6 +343,10 @@ static nsresult NSAPI handle_htmlevent(nsIDOMEventListener *iface, nsIDOMEvent *
         if(doc->event_vector[EVENTID_FOCUSIN])
             fire_event(doc, EVENTID_FOCUSIN, TRUE, node, NULL, NULL);
         break;
+    case EVENTID_BLUR:
+        if(doc->event_vector[EVENTID_FOCUSOUT])
+            fire_event(doc, EVENTID_FOCUSOUT, TRUE, node, NULL, NULL);
+        break;
     default:
         break;
     }




More information about the wine-cvs mailing list