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