瀏覽代碼

Merge pull request #4415 from p2jason/master

Remove the event queue from odin.js and directly invoke callbacks so they are executed in context where prevent default is possible
Laytan 10 月之前
父節點
當前提交
7cfaf0b181
共有 1 個文件被更改,包括 17 次插入14 次删除
  1. 17 14
      core/sys/wasm/js/odin.js

+ 17 - 14
core/sys/wasm/js/odin.js

@@ -1259,13 +1259,26 @@ class WebGLInterface {
 };
 };
 
 
 
 
-function odinSetupDefaultImports(wasmMemoryInterface, consoleElement, memory, eventQueue, event_temp) {
+function odinSetupDefaultImports(wasmMemoryInterface, consoleElement, memory) {
 	const MAX_INFO_CONSOLE_LINES = 512;
 	const MAX_INFO_CONSOLE_LINES = 512;
 	let infoConsoleLines = new Array();
 	let infoConsoleLines = new Array();
 	let currentLine = {};
 	let currentLine = {};
 	currentLine[false] = "";
 	currentLine[false] = "";
 	currentLine[true] = "";
 	currentLine[true] = "";
 	let prevIsError = false;
 	let prevIsError = false;
+	
+	let event_temp = {};
+
+	const onEventReceived = (event_data, data, callback) => {
+		event_temp.data = event_data;
+		
+		const exports = wasmMemoryInterface.exports;
+		const odin_ctx = exports.default_context_ptr();
+		
+		exports.odin_dom_do_event_callback(data, callback, odin_ctx);
+		
+		event_temp.data = null;
+	};
 
 
 	const writeToConsole = (line, isError) => {
 	const writeToConsole = (line, isError) => {
 		if (!line) {
 		if (!line) {
@@ -1594,7 +1607,7 @@ function odinSetupDefaultImports(wasmMemoryInterface, consoleElement, memory, ev
 					event_data.event = e;
 					event_data.event = e;
 					event_data.name_code = name_code;
 					event_data.name_code = name_code;
 
 
-					eventQueue.push({event_data: event_data, data: data, callback: callback});
+					onEventReceived(event_data, data, callback);
 				};
 				};
 				wasmMemoryInterface.listenerMap[{data: data, callback: callback}] = listener;
 				wasmMemoryInterface.listenerMap[{data: data, callback: callback}] = listener;
 				element.addEventListener(name, listener, !!use_capture);
 				element.addEventListener(name, listener, !!use_capture);
@@ -1611,7 +1624,7 @@ function odinSetupDefaultImports(wasmMemoryInterface, consoleElement, memory, ev
 					event_data.event = e;
 					event_data.event = e;
 					event_data.name_code = name_code;
 					event_data.name_code = name_code;
 
 
-					eventQueue.push({event_data: event_data, data: data, callback: callback});
+					onEventReceived(event_data, data, callback);
 				};
 				};
 				wasmMemoryInterface.listenerMap[{data: data, callback: callback}] = listener;
 				wasmMemoryInterface.listenerMap[{data: data, callback: callback}] = listener;
 				element.addEventListener(name, listener, !!use_capture);
 				element.addEventListener(name, listener, !!use_capture);
@@ -1915,10 +1928,7 @@ async function runWasm(wasmPath, consoleElement, extraForeignImports, wasmMemory
 	}
 	}
 	wasmMemoryInterface.setIntSize(intSize);
 	wasmMemoryInterface.setIntSize(intSize);
 
 
-	let eventQueue = new Array();
-	let event_temp = {};
-
-	let imports = odinSetupDefaultImports(wasmMemoryInterface, consoleElement, wasmMemoryInterface.memory, eventQueue, event_temp);
+	let imports = odinSetupDefaultImports(wasmMemoryInterface, consoleElement, wasmMemoryInterface.memory);
 	let exports = {};
 	let exports = {};
 
 
 	if (extraForeignImports !== undefined) {
 	if (extraForeignImports !== undefined) {
@@ -1958,13 +1968,6 @@ async function runWasm(wasmPath, consoleElement, extraForeignImports, wasmMemory
 			const dt = (currTimeStamp - prevTimeStamp)*0.001;
 			const dt = (currTimeStamp - prevTimeStamp)*0.001;
 			prevTimeStamp = currTimeStamp;
 			prevTimeStamp = currTimeStamp;
 
 
-			while (eventQueue.length > 0) {
-				let e = eventQueue.shift()
-				event_temp.data = e.event_data;
-				exports.odin_dom_do_event_callback(e.data, e.callback, odin_ctx);
-			}
-			event_temp.data = null;
-
 			if (!exports.step(dt, odin_ctx)) {
 			if (!exports.step(dt, odin_ctx)) {
 				exports._end();
 				exports._end();
 				return;
 				return;