Mac and Linux SDL2 binary snapshots
Edward Rudd
2021-06-15 dec7875a6e23212021e4d9080330a42832dfe02a
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 */