static JSBool js_item_onEvent(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { js_item_t *ji = JS_GetPrivate(cx, obj); if(!JS_ObjectIsFunction(cx, JSVAL_TO_OBJECT(argv[1]))) { JS_ReportError(cx, "Argument is not a function"); return JS_FALSE; } if(ji->ji_eventsub == NULL) { ji->ji_eventsub = prop_subscribe(PROP_SUB_TRACK_DESTROY, PROP_TAG_CALLBACK, js_item_eventsub, ji, PROP_TAG_ROOT, ji->ji_root, PROP_TAG_COURIER, ji->ji_model->jm_pc, NULL); ji->ji_model->jm_subs++; ji->ji_this = OBJECT_TO_JSVAL(obj); JS_AddNamedRoot(cx, &ji->ji_this, "item_this"); } js_event_handler_create(cx, &ji->ji_event_handlers, JSVAL_IS_STRING(argv[0]) ? JS_GetStringBytes(JS_ValueToString(cx, argv[0])) : NULL, argv[1]); *rval = JSVAL_VOID; return JS_TRUE; }
static JSBool js_item_onEvent(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { js_item_t *ji = JS_GetPrivate(cx, obj); if(!JS_ObjectIsFunction(cx, JSVAL_TO_OBJECT(argv[1]))) { JS_ReportError(cx, "Argument is not a function"); return JS_FALSE; } js_event_handler_create(cx, &ji->ji_event_handlers, JSVAL_IS_STRING(argv[0]) ? JS_GetStringBytes(JS_ValueToString(cx, argv[0])) : NULL, argv[1]); *rval = JSVAL_VOID; return JS_TRUE; }