summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Drake <michael.drake@codethink.co.uk>2019-12-01 20:17:22 +0000
committerMichael Drake <michael.drake@codethink.co.uk>2019-12-01 21:25:46 +0000
commitf620ea9d17b36ca0d07aefd82f6619b9433129eb (patch)
tree77726ee685eef7939ba94cb042d520f3ea379a72
parent49ed538729ec2fbc440cd8cc056e82a4c6c904b0 (diff)
downloadnetsurf-f620ea9d17b36ca0d07aefd82f6619b9433129eb.tar.gz
netsurf-f620ea9d17b36ca0d07aefd82f6619b9433129eb.tar.bz2
dukky_push_event: Enable KeyboardEvent specialisation.
-rw-r--r--content/handlers/javascript/duktape/dukky.c32
1 files changed, 31 insertions, 1 deletions
diff --git a/content/handlers/javascript/duktape/dukky.c b/content/handlers/javascript/duktape/dukky.c
index 5980b2b56..4d21573b0 100644
--- a/content/handlers/javascript/duktape/dukky.c
+++ b/content/handlers/javascript/duktape/dukky.c
@@ -852,6 +852,36 @@ handle_error:
return false;
}
+static const char* dukky_event_proto(dom_event *evt)
+{
+ const char *ret = PROTO_NAME(EVENT);
+ dom_string *type = NULL;
+ dom_exception err;
+
+ err = dom_event_get_type(evt, &type);
+ if (err != DOM_NO_ERR) {
+ goto out;
+ }
+
+ if (dom_string_isequal(type, corestring_dom_keydown)) {
+ ret = PROTO_NAME(KEYBOARDEVENT);
+ goto out;
+ } else if (dom_string_isequal(type, corestring_dom_keyup)) {
+ ret = PROTO_NAME(KEYBOARDEVENT);
+ goto out;
+ } else if (dom_string_isequal(type, corestring_dom_keypress)) {
+ ret = PROTO_NAME(KEYBOARDEVENT);
+ goto out;
+ }
+
+out:
+ if (type != NULL) {
+ dom_string_unref(type);
+ }
+
+ return ret;
+}
+
/*** New style event handling ***/
void dukky_push_event(duk_context *ctx, dom_event *evt)
@@ -868,7 +898,7 @@ void dukky_push_event(duk_context *ctx, dom_event *evt)
duk_pop(ctx);
/* ... events */
duk_push_pointer(ctx, evt);
- if (dukky_create_object(ctx, PROTO_NAME(EVENT), 1) != DUK_EXEC_SUCCESS) {
+ if (dukky_create_object(ctx, dukky_event_proto(evt), 1) != DUK_EXEC_SUCCESS) {
/* ... events err */
duk_pop(ctx);
/* ... events */