@@ -794,14 +794,26 @@ EMSCRIPTEN_KEEPALIVE void Emscripten_HandlePointerGeneric(SDL_WindowData *window
794
794
static void Emscripten_set_pointer_event_callbacks (SDL_WindowData * data )
795
795
{
796
796
MAIN_THREAD_EM_ASM ({
797
- var target = document .querySelector (UTF8ToString ($1 ));
797
+ var id = UTF8ToString ($1 );
798
+ var target = document .querySelector (id );
798
799
if (target ) {
799
800
var data = $0 ;
800
801
801
- if (typeof ( Module ['SDL3' ]) == = 'undefined' ) {
802
+ if (! Module ['SDL3' ]) {
802
803
Module ['SDL3' ] = {};
803
804
}
805
+
804
806
var SDL3 = Module ['SDL3' ];
807
+ if (!SDL3 ['window_data' ]) {
808
+ SDL3 ['window_data' ] = {};
809
+ }
810
+
811
+ var window_datas = SDL3 ['window_data' ];
812
+ if (!window_datas [id ]) {
813
+ window_datas [id ] = {};
814
+ }
815
+
816
+ var window_data = window_datas [id ];
805
817
806
818
var makePointerEventCStruct = function (event ) {
807
819
var ptr = 0 ;
@@ -827,42 +839,45 @@ static void Emscripten_set_pointer_event_callbacks(SDL_WindowData *data)
827
839
return ptr ;
828
840
};
829
841
830
- SDL3 .eventHandlerPointerEnter = function (event ) {
842
+ window_data .eventHandlerPointerEnter = function (event ) {
831
843
var d = makePointerEventCStruct (event ); if (d != 0 ) { _Emscripten_HandlePointerEnter (data , d ); _SDL_free (d ); }
832
844
};
833
- target .addEventListener ("pointerenter" , SDL3 .eventHandlerPointerEnter );
845
+ target .addEventListener ("pointerenter" , window_data .eventHandlerPointerEnter );
834
846
835
- SDL3 .eventHandlerPointerLeave = function (event ) {
847
+ window_data .eventHandlerPointerLeave = function (event ) {
836
848
var d = makePointerEventCStruct (event ); if (d != 0 ) { _Emscripten_HandlePointerLeave (data , d ); _SDL_free (d ); }
837
849
};
838
- target .addEventListener ("pointerleave" , SDL3 .eventHandlerPointerLeave );
839
- target .addEventListener ("pointercancel" , SDL3 .eventHandlerPointerLeave ); // catch this, just in case.
850
+ target .addEventListener ("pointerleave" , window_data .eventHandlerPointerLeave );
851
+ target .addEventListener ("pointercancel" , window_data .eventHandlerPointerLeave ); // catch this, just in case.
840
852
841
- SDL3 .eventHandlerPointerGeneric = function (event ) {
853
+ window_data .eventHandlerPointerGeneric = function (event ) {
842
854
var d = makePointerEventCStruct (event ); if (d != 0 ) { _Emscripten_HandlePointerGeneric (data , d ); _SDL_free (d ); }
843
855
};
844
- target .addEventListener ("pointerdown" , SDL3 .eventHandlerPointerGeneric );
845
- target .addEventListener ("pointerup" , SDL3 .eventHandlerPointerGeneric );
846
- target .addEventListener ("pointermove" , SDL3 .eventHandlerPointerGeneric );
856
+ target .addEventListener ("pointerdown" , window_data .eventHandlerPointerGeneric );
857
+ target .addEventListener ("pointerup" , window_data .eventHandlerPointerGeneric );
858
+ target .addEventListener ("pointermove" , window_data .eventHandlerPointerGeneric );
847
859
}
848
860
}, data , data -> canvas_id , sizeof (Emscripten_PointerEvent ));
849
861
}
850
862
851
863
static void Emscripten_unset_pointer_event_callbacks (SDL_WindowData * data )
852
864
{
853
865
MAIN_THREAD_EM_ASM ({
854
- var target = document .querySelector (UTF8ToString ($0 ));
866
+ var id = UTF8ToString ($0 );
867
+ var target = document .querySelector (id );
855
868
if (target ) {
856
869
var SDL3 = Module ['SDL3' ];
857
- target .removeEventListener ("pointerenter" , SDL3 .eventHandlerPointerEnter );
858
- target .removeEventListener ("pointerleave" , SDL3 .eventHandlerPointerLeave );
859
- target .removeEventListener ("pointercancel" , SDL3 .eventHandlerPointerLeave );
860
- target .removeEventListener ("pointerdown" , SDL3 .eventHandlerPointerGeneric );
861
- target .removeEventListener ("pointerup" , SDL3 .eventHandlerPointerGeneric );
862
- target .removeEventListener ("pointermove" , SDL3 .eventHandlerPointerGeneric );
863
- SDL3 .eventHandlerPointerEnter = undefined ;
864
- SDL3 .eventHandlerPointerLeave = undefined ;
865
- SDL3 .eventHandlerPointerGeneric = undefined ;
870
+ var window_datas = SDL3 ['window_data' ];
871
+ var window_data = window_datas [id ];
872
+ target .removeEventListener ("pointerenter" , window_data .eventHandlerPointerEnter );
873
+ target .removeEventListener ("pointerleave" , window_data .eventHandlerPointerLeave );
874
+ target .removeEventListener ("pointercancel" , window_data .eventHandlerPointerLeave );
875
+ target .removeEventListener ("pointerdown" , window_data .eventHandlerPointerGeneric );
876
+ target .removeEventListener ("pointerup" , window_data .eventHandlerPointerGeneric );
877
+ target .removeEventListener ("pointermove" , window_data .eventHandlerPointerGeneric );
878
+ window_data .eventHandlerPointerEnter = undefined ;
879
+ window_data .eventHandlerPointerLeave = undefined ;
880
+ window_data .eventHandlerPointerGeneric = undefined ;
866
881
}
867
882
}, data -> canvas_id );
868
883
}
@@ -899,14 +914,26 @@ EM_JS_DEPS(dragndrop, "$writeArrayToMemory");
899
914
static void Emscripten_set_drag_event_callbacks (SDL_WindowData * data )
900
915
{
901
916
MAIN_THREAD_EM_ASM ({
902
- var target = document .querySelector (UTF8ToString ($1 ));
917
+ var id = UTF8ToString ($1 );
918
+ var target = document .querySelector (id );
903
919
if (target ) {
904
920
var data = $0 ;
905
921
906
- if (typeof ( Module ['SDL3' ]) == = 'undefined' ) {
922
+ if (! Module ['SDL3' ]) {
907
923
Module ['SDL3' ] = {};
908
924
}
925
+
909
926
var SDL3 = Module ['SDL3' ];
927
+ if (!SDL3 ['window_data' ]) {
928
+ SDL3 ['window_data' ] = {};
929
+ }
930
+
931
+ var window_datas = SDL3 ['window_data' ];
932
+ if (!window_datas [id ]) {
933
+ window_datas [id ] = {};
934
+ }
935
+
936
+ var window_data = window_datas [id ];
910
937
911
938
var makeDropEventCStruct = function (event ) {
912
939
var ptr = 0 ;
@@ -920,15 +947,23 @@ static void Emscripten_set_drag_event_callbacks(SDL_WindowData *data)
920
947
return ptr ;
921
948
};
922
949
923
- SDL3 .eventHandlerDropDragover = function (event ) {
950
+ window_data .eventHandlerDropDragover = function (event ) {
924
951
event .preventDefault ();
925
952
var d = makeDropEventCStruct (event ); if (d != 0 ) { _Emscripten_SendDragEvent (data , d ); _SDL_free (d ); }
926
953
};
927
- target .addEventListener ("dragover" , SDL3 .eventHandlerDropDragover );
954
+ target .addEventListener ("dragover" , window_data .eventHandlerDropDragover );
955
+
956
+ window_data .drop_count = 0 ;
957
+ try
958
+ {
959
+ FS .mkdir ("/tmp/filedrop" )
960
+ }
961
+ catch (e )
962
+ {
963
+ // Throws if the directory already exists
964
+ }
928
965
929
- SDL3 .drop_count = 0 ;
930
- FS .mkdir ("/tmp/filedrop" );
931
- SDL3 .eventHandlerDropDrop = function (event ) {
966
+ window_data .eventHandlerDropDrop = function (event ) {
932
967
event .preventDefault ();
933
968
if (event .dataTransfer .types .includes ("text/plain" )) {
934
969
let plain_text = stringToNewUTF8 (event .dataTransfer .getData ("text/plain" ));
@@ -940,8 +975,8 @@ static void Emscripten_set_drag_event_callbacks(SDL_WindowData *data)
940
975
const file_reader = new FileReader ();
941
976
file_reader .readAsArrayBuffer (file );
942
977
file_reader .onload = function (event ) {
943
- const fs_dropdir = `/tmp /filedrop /$ {SDL3 .drop_count }`;
944
- SDL3 .drop_count += 1 ;
978
+ const fs_dropdir = `/tmp /filedrop /$ {window_data .drop_count }`;
979
+ window_data .drop_count += 1 ;
945
980
946
981
const fs_filepath = `$ {fs_dropdir }/$ {file .name }`;
947
982
const c_fs_filepath = stringToNewUTF8 (fs_filepath );
@@ -960,29 +995,44 @@ static void Emscripten_set_drag_event_callbacks(SDL_WindowData *data)
960
995
}
961
996
_Emscripten_SendDragCompleteEvent (data );
962
997
};
963
- target .addEventListener ("drop" , SDL3 .eventHandlerDropDrop );
998
+ target .addEventListener ("drop" , window_data .eventHandlerDropDrop );
964
999
965
- SDL3 .eventHandlerDropDragend = function (event ) {
1000
+ window_data .eventHandlerDropDragend = function (event ) {
966
1001
event .preventDefault ();
967
1002
_Emscripten_SendDragCompleteEvent (data );
968
1003
};
969
- target .addEventListener ("dragend" , SDL3 .eventHandlerDropDragend );
970
- target .addEventListener ("dragleave" , SDL3 .eventHandlerDropDragend );
1004
+ target .addEventListener ("dragend" , window_data .eventHandlerDropDragend );
1005
+ target .addEventListener ("dragleave" , window_data .eventHandlerDropDragend );
971
1006
}
972
1007
}, data , data -> canvas_id , sizeof (Emscripten_DropEvent ));
973
1008
}
974
1009
975
1010
static void Emscripten_unset_drag_event_callbacks (SDL_WindowData * data )
976
1011
{
977
1012
MAIN_THREAD_EM_ASM ({
978
- var target = document .querySelector (UTF8ToString ($0 ));
1013
+ var id = UTF8ToString ($0 );
1014
+ var target = document .querySelector (id );
979
1015
if (target ) {
980
1016
var SDL3 = Module ['SDL3' ];
981
- target .removeEventListener ("dragleave" , SDL3 .eventHandlerDropDragend );
982
- target .removeEventListener ("dragend" , SDL3 .eventHandlerDropDragend );
983
- target .removeEventListener ("drop" , SDL3 .eventHandlerDropDrop );
984
- SDL3 .drop_count = undefined ;
1017
+ var window_datas = SDL3 ['window_data' ];
1018
+ var window_data = window_datas [id ];
1019
+ target .removeEventListener ("dragleave" , window_data .eventHandlerDropDragend );
1020
+ target .removeEventListener ("dragend" , window_data .eventHandlerDropDragend );
1021
+ target .removeEventListener ("drop" , window_data .eventHandlerDropDrop );
1022
+ window_data .drop_count = undefined ;
1023
+
1024
+ function safeRemoveDir (path ) {
1025
+ try
1026
+ {
1027
+ FS .rmdir (path );
1028
+ }
1029
+ catch (e )
1030
+ {
1031
+ // Throws if directory doesn't exist
1032
+ }
1033
+ }
985
1034
1035
+ const path = "/tmp/filedrop" ;
986
1036
function recursive_remove (dirpath ) {
987
1037
FS .readdir (dirpath ).forEach ((filename ) = > {
988
1038
const p = `$ {dirpath }/$ {filename }`;
@@ -993,14 +1043,14 @@ static void Emscripten_unset_drag_event_callbacks(SDL_WindowData *data)
993
1043
recursive_remove (p );
994
1044
}
995
1045
});
996
- FS . rmdir (dirpath );
997
- }("/tmp/filedrop" );
998
-
999
- FS . rmdir ( "/tmp/filedrop" );
1000
- target .removeEventListener ("dragover" , SDL3 .eventHandlerDropDragover );
1001
- SDL3 .eventHandlerDropDragover = undefined ;
1002
- SDL3 .eventHandlerDropDrop = undefined ;
1003
- SDL3 .eventHandlerDropDragend = undefined ;
1046
+ safeRemoveDir (dirpath );
1047
+ }(path );
1048
+
1049
+ safeRemoveDir ( path );
1050
+ target .removeEventListener ("dragover" , window_data .eventHandlerDropDragover );
1051
+ window_data .eventHandlerDropDragover = undefined ;
1052
+ window_data .eventHandlerDropDrop = undefined ;
1053
+ window_data .eventHandlerDropDragend = undefined ;
1004
1054
}
1005
1055
}, data -> canvas_id );
1006
1056
}
0 commit comments