From dec7875a6e23212021e4d9080330a42832dfe02a Mon Sep 17 00:00:00 2001
From: Edward Rudd <urkle@outoforder.cc>
Date: Tue, 15 Jun 2021 01:40:19 +0000
Subject: [PATCH] update SDL soruce to 2.0.14
---
source/src/video/emscripten/SDL_emscriptenevents.c | 87 ++++++++++++++++++++++++++++++++++++++++---
1 files changed, 80 insertions(+), 7 deletions(-)
diff --git a/source/src/video/emscripten/SDL_emscriptenevents.c b/source/src/video/emscripten/SDL_emscriptenevents.c
index 14ebc17..c9e764e 100644
--- a/source/src/video/emscripten/SDL_emscriptenevents.c
+++ b/source/src/video/emscripten/SDL_emscriptenevents.c
@@ -55,7 +55,7 @@
/* 9 */ SDL_SCANCODE_TAB,
/* 10 */ SDL_SCANCODE_UNKNOWN,
/* 11 */ SDL_SCANCODE_UNKNOWN,
- /* 12 */ SDL_SCANCODE_UNKNOWN,
+ /* 12 */ SDL_SCANCODE_KP_5,
/* 13 */ SDL_SCANCODE_RETURN,
/* 14 */ SDL_SCANCODE_UNKNOWN,
/* 15 */ SDL_SCANCODE_UNKNOWN,
@@ -103,10 +103,10 @@
/* 57 */ SDL_SCANCODE_9,
/* 58 */ SDL_SCANCODE_UNKNOWN,
/* 59 */ SDL_SCANCODE_SEMICOLON,
- /* 60 */ SDL_SCANCODE_UNKNOWN,
+ /* 60 */ SDL_SCANCODE_NONUSBACKSLASH,
/* 61 */ SDL_SCANCODE_EQUALS,
/* 62 */ SDL_SCANCODE_UNKNOWN,
- /* 63 */ SDL_SCANCODE_UNKNOWN,
+ /* 63 */ SDL_SCANCODE_MINUS,
/* 64 */ SDL_SCANCODE_UNKNOWN,
/* 65 */ SDL_SCANCODE_A,
/* 66 */ SDL_SCANCODE_B,
@@ -203,7 +203,7 @@
/* 157 */ SDL_SCANCODE_UNKNOWN,
/* 158 */ SDL_SCANCODE_UNKNOWN,
/* 159 */ SDL_SCANCODE_UNKNOWN,
- /* 160 */ SDL_SCANCODE_UNKNOWN,
+ /* 160 */ SDL_SCANCODE_GRAVE,
/* 161 */ SDL_SCANCODE_UNKNOWN,
/* 162 */ SDL_SCANCODE_UNKNOWN,
/* 163 */ SDL_SCANCODE_KP_HASH, /*KaiOS phone keypad*/
@@ -214,7 +214,7 @@
/* 168 */ SDL_SCANCODE_UNKNOWN,
/* 169 */ SDL_SCANCODE_UNKNOWN,
/* 170 */ SDL_SCANCODE_KP_MULTIPLY, /*KaiOS phone keypad*/
- /* 171 */ SDL_SCANCODE_UNKNOWN,
+ /* 171 */ SDL_SCANCODE_RIGHTBRACKET,
/* 172 */ SDL_SCANCODE_UNKNOWN,
/* 173 */ SDL_SCANCODE_MINUS, /*FX*/
/* 174 */ SDL_SCANCODE_VOLUMEDOWN, /*IE, Chrome*/
@@ -363,7 +363,7 @@
if (eventType == EMSCRIPTEN_EVENT_MOUSEDOWN) {
if (SDL_GetMouse()->relative_mode && !window_data->has_pointer_lock) {
- emscripten_request_pointerlock(NULL, 0); /* try to regrab lost pointer lock. */
+ emscripten_request_pointerlock(window_data->canvas_id, 0); /* try to regrab lost pointer lock. */
}
sdl_button_state = SDL_PRESSED;
sdl_event_type = SDL_MOUSEBUTTONDOWN;
@@ -485,6 +485,16 @@
if (keyEvent->keyCode < SDL_arraysize(emscripten_scancode_table)) {
scancode = emscripten_scancode_table[keyEvent->keyCode];
+ if (keyEvent->keyCode == 0) {
+ /* KaiOS Left Soft Key and Right Soft Key, they act as OK/Next/Menu and Cancel/Back/Clear */
+ if (SDL_strncmp(keyEvent->key, "SoftLeft", 9) == 0) {
+ scancode = SDL_SCANCODE_AC_FORWARD;
+ }
+ if (SDL_strncmp(keyEvent->key, "SoftRight", 10) == 0) {
+ scancode = SDL_SCANCODE_AC_BACK;
+ }
+ }
+
if (scancode != SDL_SCANCODE_UNKNOWN) {
if (keyEvent->location == DOM_KEY_LOCATION_RIGHT) {
@@ -500,6 +510,55 @@
break;
case SDL_SCANCODE_LGUI:
scancode = SDL_SCANCODE_RGUI;
+ break;
+ }
+ }
+ else if (keyEvent->location == DOM_KEY_LOCATION_NUMPAD) {
+ switch (scancode) {
+ case SDL_SCANCODE_0:
+ case SDL_SCANCODE_INSERT:
+ scancode = SDL_SCANCODE_KP_0;
+ break;
+ case SDL_SCANCODE_1:
+ case SDL_SCANCODE_END:
+ scancode = SDL_SCANCODE_KP_1;
+ break;
+ case SDL_SCANCODE_2:
+ case SDL_SCANCODE_DOWN:
+ scancode = SDL_SCANCODE_KP_2;
+ break;
+ case SDL_SCANCODE_3:
+ case SDL_SCANCODE_PAGEDOWN:
+ scancode = SDL_SCANCODE_KP_3;
+ break;
+ case SDL_SCANCODE_4:
+ case SDL_SCANCODE_LEFT:
+ scancode = SDL_SCANCODE_KP_4;
+ break;
+ case SDL_SCANCODE_5:
+ scancode = SDL_SCANCODE_KP_5;
+ break;
+ case SDL_SCANCODE_6:
+ case SDL_SCANCODE_RIGHT:
+ scancode = SDL_SCANCODE_KP_6;
+ break;
+ case SDL_SCANCODE_7:
+ case SDL_SCANCODE_HOME:
+ scancode = SDL_SCANCODE_KP_7;
+ break;
+ case SDL_SCANCODE_8:
+ case SDL_SCANCODE_UP:
+ scancode = SDL_SCANCODE_KP_8;
+ break;
+ case SDL_SCANCODE_9:
+ case SDL_SCANCODE_PAGEUP:
+ scancode = SDL_SCANCODE_KP_9;
+ break;
+ case SDL_SCANCODE_RETURN:
+ scancode = SDL_SCANCODE_KP_ENTER;
+ break;
+ case SDL_SCANCODE_DELETE:
+ scancode = SDL_SCANCODE_KP_PERIOD;
break;
}
}
@@ -548,7 +607,7 @@
window_data->requested_fullscreen_mode = 0;
if(!window_data->requested_fullscreen_mode)
- window_data->window->flags |= SDL_WINDOW_FULLSCREEN; /*we didn't reqest fullscreen*/
+ window_data->window->flags |= SDL_WINDOW_FULLSCREEN; /*we didn't request fullscreen*/
}
else
{
@@ -635,6 +694,16 @@
return 0;
}
+static const char*
+Emscripten_HandleBeforeUnload(int eventType, const void *reserved, void *userData)
+{
+ /* This event will need to be handled synchronously, e.g. using
+ SDL_AddEventWatch, as the page is being closed *now*. */
+ /* No need to send a SDL_QUIT, the app won't get control again. */
+ SDL_SendAppEvent(SDL_APP_TERMINATING);
+ return ""; /* don't trigger confirmation dialog */
+}
+
void
Emscripten_RegisterEventHandlers(SDL_WindowData *data)
{
@@ -674,6 +743,8 @@
emscripten_set_resize_callback(EMSCRIPTEN_EVENT_TARGET_WINDOW, data, 0, Emscripten_HandleResize);
emscripten_set_visibilitychange_callback(data, 0, Emscripten_HandleVisibilityChange);
+
+ emscripten_set_beforeunload_callback(data, Emscripten_HandleBeforeUnload);
}
void
@@ -716,6 +787,8 @@
emscripten_set_resize_callback(EMSCRIPTEN_EVENT_TARGET_WINDOW, NULL, 0, NULL);
emscripten_set_visibilitychange_callback(NULL, 0, NULL);
+
+ emscripten_set_beforeunload_callback(NULL, NULL);
}
#endif /* SDL_VIDEO_DRIVER_EMSCRIPTEN */
--
Gitblit v1.9.3