From 4efdfd92a24ff3bbe6780666189000bf5d84ed30 Mon Sep 17 00:00:00 2001 From: Temdog007 Date: Wed, 10 Sep 2025 14:52:05 -0700 Subject: [PATCH] Emscripten: Ensure drop functionality is the same as other platforms --- src/video/emscripten/SDL_emscriptenevents.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/video/emscripten/SDL_emscriptenevents.c b/src/video/emscripten/SDL_emscriptenevents.c index f7132f6c51..5fbf2cf2cf 100644 --- a/src/video/emscripten/SDL_emscriptenevents.c +++ b/src/video/emscripten/SDL_emscriptenevents.c @@ -1114,7 +1114,9 @@ static void Emscripten_set_drag_event_callbacks(SDL_WindowData *data) _Emscripten_SendDragTextEvent(data, plain_text); _free(plain_text); } else if (event.dataTransfer.types.includes("Files")) { - for (let i = 0; i < event.dataTransfer.files.length; i++) { + let files_read = 0; + const files_to_read = event.dataTransfer.files.length; + for (let i = 0; i < files_to_read; i++) { const file = event.dataTransfer.files.item(i); const file_reader = new FileReader(); file_reader.readAsArrayBuffer(file); @@ -1133,8 +1135,18 @@ static void Emscripten_set_drag_event_callbacks(SDL_WindowData *data) _Emscripten_SendDragFileEvent(data, c_fs_filepath); _free(c_fs_filepath); - _Emscripten_SendDragCompleteEvent(data); + onFileRead(); }; + file_reader.onerror = function(event) { + // Handle when error occurs to ensure that the drag event can still complete + onFileRead(); + }; + } + function onFileRead() { + ++files_read; + if (files_read === files_to_read) { + _Emscripten_SendDragCompleteEvent(data); + } } } _Emscripten_SendDragCompleteEvent(data);