Skip to content

Commit 4efdfd9

Browse files
Temdog007slouken
authored andcommitted
Emscripten: Ensure drop functionality is the same as other platforms
1 parent 6711caa commit 4efdfd9

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

src/video/emscripten/SDL_emscriptenevents.c

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1114,7 +1114,9 @@ static void Emscripten_set_drag_event_callbacks(SDL_WindowData *data)
11141114
_Emscripten_SendDragTextEvent(data, plain_text);
11151115
_free(plain_text);
11161116
} else if (event.dataTransfer.types.includes("Files")) {
1117-
for (let i = 0; i < event.dataTransfer.files.length; i++) {
1117+
let files_read = 0;
1118+
const files_to_read = event.dataTransfer.files.length;
1119+
for (let i = 0; i < files_to_read; i++) {
11181120
const file = event.dataTransfer.files.item(i);
11191121
const file_reader = new FileReader();
11201122
file_reader.readAsArrayBuffer(file);
@@ -1133,9 +1135,19 @@ static void Emscripten_set_drag_event_callbacks(SDL_WindowData *data)
11331135

11341136
_Emscripten_SendDragFileEvent(data, c_fs_filepath);
11351137
_free(c_fs_filepath);
1136-
_Emscripten_SendDragCompleteEvent(data);
1138+
onFileRead();
1139+
};
1140+
file_reader.onerror = function(event) {
1141+
// Handle when error occurs to ensure that the drag event can still complete
1142+
onFileRead();
11371143
};
11381144
}
1145+
function onFileRead() {
1146+
++files_read;
1147+
if (files_read === files_to_read) {
1148+
_Emscripten_SendDragCompleteEvent(data);
1149+
}
1150+
}
11391151
}
11401152
_Emscripten_SendDragCompleteEvent(data);
11411153
};

0 commit comments

Comments
 (0)