diff options
author | Vincent Sanders <vince@netsurf-browser.org> | 2012-11-28 18:53:11 +0000 |
---|---|---|
committer | Vincent Sanders <vince@netsurf-browser.org> | 2012-11-28 18:53:11 +0000 |
commit | 56b521a1258f7b9657c9f7dda0878b789d39f59b (patch) | |
tree | db8e391f8250eafa9553f1828980d5dc952dcd4f | |
parent | 68f359d1ec2212939f19a25dfb182d08cfa37afd (diff) | |
download | netsurf-56b521a1258f7b9657c9f7dda0878b789d39f59b.tar.gz netsurf-56b521a1258f7b9657c9f7dda0878b789d39f59b.tar.bz2 |
make window load event delivery work
-rw-r--r-- | javascript/jsapi.c | 6 | ||||
-rw-r--r-- | javascript/jsapi/window.bnd | 28 |
2 files changed, 21 insertions, 13 deletions
diff --git a/javascript/jsapi.c b/javascript/jsapi.c index 2aa0f8918..bec565316 100644 --- a/javascript/jsapi.c +++ b/javascript/jsapi.c @@ -150,6 +150,9 @@ bool js_exec(jscontext *ctx, const char *txt, size_t txtlen) return false; } +dom_exception _dom_event_create(dom_document *doc, dom_event **evt); +#define dom_event_create(d, e) _dom_event_create((dom_document *)(d), (dom_event **) (e)) + bool js_fire_event(jscontext *ctx, const char *type, void *target) { JSContext *cx = (JSContext *)ctx; @@ -173,8 +176,7 @@ bool js_fire_event(jscontext *ctx, const char *type, void *target) return false; } -/* exc = dom_event_create(document, &event);*/ - exc = -1; + exc = dom_event_create(-1, &event); if (exc != DOM_NO_ERR) { return false; } diff --git a/javascript/jsapi/window.bnd b/javascript/jsapi/window.bnd index 3f8930441..610aa71ab 100644 --- a/javascript/jsapi/window.bnd +++ b/javascript/jsapi/window.bnd @@ -28,6 +28,7 @@ preamble %{ #include "javascript/jsapi.h" #include "javascript/jsapi/binding.h" + %} binding window { @@ -227,26 +228,31 @@ operation dispatchEvent %{ if (event == JSVAL_VOID) { jsret = JS_FALSE; } else { - dom_event *domevent; - dom_string *type_dom; + struct { + dom_event *event; + } *event_private; + dom_string *type_dom = NULL; dom_exception exc; jsval eventval = JSVAL_VOID; jsval event_argv[1]; jsval event_rval; - domevent = JS_GetInstancePrivate(cx, event, &JSClass_Event, NULL); - if (domevent == NULL) { + event_private = JS_GetInstancePrivate(cx, event, &JSClass_Event, NULL); + if (event_private->event == NULL) { /** @todo type error? */ jsret = JS_FALSE; } else { - exc = dom_event_get_type(domevent, &type_dom); - if (dom_string_isequal(type_dom, corestring_dom_load)) { - JS_GetProperty(cx, JSAPI_THIS_OBJECT(cx, vp), "onload", &eventval); - } + exc = dom_event_get_type(event_private->event, &type_dom); + if (exc == DOM_NO_ERR) { + + if (dom_string_isequal(type_dom, corestring_dom_load)) { + JS_GetProperty(cx, JSAPI_THIS_OBJECT(cx, vp), "onload", &eventval); + } - if (eventval != JSVAL_VOID) { - event_argv[0] = event; - jsret = JS_CallFunctionValue(cx, NULL, eventval, 1, event_argv, &event_rval); + if (eventval != JSVAL_VOID) { + event_argv[0] = eventval; + jsret = JS_CallFunctionValue(cx, NULL, eventval, 1, event_argv, &event_rval); + } } } } |