浏览代码

Emscripten: Ensure drop functionality is the same as other platforms

Temdog007 3 天之前
父节点
当前提交
4efdfd92a2
共有 1 个文件被更改,包括 14 次插入2 次删除
  1. 14 2
      src/video/emscripten/SDL_emscriptenevents.c

+ 14 - 2
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);
                     _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,9 +1135,19 @@ 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);
             };
             };