Emscripten: Ensure drop functionality is the same as other platforms
This commit is contained in:
@@ -1114,7 +1114,9 @@ static void Emscripten_set_drag_event_callbacks(SDL_WindowData *data)
|
|||||||
_Emscripten_SendDragTextEvent(data, plain_text);
|
_Emscripten_SendDragTextEvent(data, plain_text);
|
||||||
_free(plain_text);
|
_free(plain_text);
|
||||||
} else if (event.dataTransfer.types.includes("Files")) {
|
} 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 = event.dataTransfer.files.item(i);
|
||||||
const file_reader = new FileReader();
|
const file_reader = new FileReader();
|
||||||
file_reader.readAsArrayBuffer(file);
|
file_reader.readAsArrayBuffer(file);
|
||||||
@@ -1133,8 +1135,18 @@ static void Emscripten_set_drag_event_callbacks(SDL_WindowData *data)
|
|||||||
|
|
||||||
_Emscripten_SendDragFileEvent(data, c_fs_filepath);
|
_Emscripten_SendDragFileEvent(data, c_fs_filepath);
|
||||||
_free(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);
|
_Emscripten_SendDragCompleteEvent(data);
|
||||||
|
|||||||
Reference in New Issue
Block a user