From: Gabriel Ivăncescu gabrielopcode@gmail.com
We don't use Gecko for these events, so we have to handle them ourselves.
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlevent.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-)
diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c index f08d4f6568c..171412acc90 100644 --- a/dlls/mshtml/htmlevent.c +++ b/dlls/mshtml/htmlevent.c @@ -240,6 +240,26 @@ static eventid_t attr_to_eid(const WCHAR *str) return EVENTID_LAST; }
+static eventid_t get_non_gecko_event_type_id(const WCHAR *type) +{ + /* Keep this in same order as the eventid_t enum */ + static const eventid_t list[] = { + EVENTID_MESSAGE, + EVENTID_STORAGE, + }; + unsigned i; + + for(i = 0; i < ARRAY_SIZE(list); i++) { + unsigned len = wcslen(event_info[list[i]].name); + if(!wcsnicmp(type, event_info[list[i]].name, len)) { + if(!wcsicmp(type + len, L"Event")) + return list[i]; + break; + } + } + return EVENTID_LAST; +} + const WCHAR *get_event_name(eventid_t eid) { return event_info[eid].name; @@ -3057,12 +3077,13 @@ HRESULT create_event_from_nsevent(nsIDOMEvent *nsevent, compat_mode_t compat_mod
HRESULT create_document_event_str(HTMLDocumentNode *doc, const WCHAR *type, IDOMEvent **ret_event) { + eventid_t event_id = get_non_gecko_event_type_id(type); nsIDOMEvent *nsevent; DOMEvent *event; nsAString nsstr; nsresult nsres;
- nsAString_InitDepend(&nsstr, type); + nsAString_InitDepend(&nsstr, event_id == EVENTID_LAST ? type : event_types[event_info[event_id].type]); nsres = nsIDOMHTMLDocument_CreateEvent(doc->nsdoc, &nsstr, &nsevent); nsAString_Finish(&nsstr); if(NS_FAILED(nsres)) { @@ -3070,7 +3091,7 @@ HRESULT create_document_event_str(HTMLDocumentNode *doc, const WCHAR *type, IDOM return E_FAIL; }
- event = alloc_event(nsevent, dispex_compat_mode(&doc->node.event_target.dispex), EVENTID_LAST); + event = alloc_event(nsevent, dispex_compat_mode(&doc->node.event_target.dispex), event_id); nsIDOMEvent_Release(nsevent); if(!event) return E_OUTOFMEMORY;