Module: wine Branch: master Commit: 86116b16bfd5924bf34296b45ccbe1c29804e320 URL: http://source.winehq.org/git/wine.git/?a=commit;h=86116b16bfd5924bf34296b45c...
Author: Jacek Caban jacek@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@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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; }