Emscripten: Ensure drop functionality is the same as other platforms

This commit is contained in:
Temdog007
2025-09-10 14:52:05 -07:00
committed by Sam Lantinga
parent 6711caa431
commit 4efdfd92a2

View File

@@ -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);