@@ -1591,9 +1591,18 @@ static void keyboard_handle_keymap(void *data, struct wl_keyboard *keyboard,
1591
1591
seat -> keyboard .xkb .num_layouts = WAYLAND_xkb_keymap_num_layouts (seat -> keyboard .xkb .keymap );
1592
1592
if (seat -> keyboard .xkb .num_layouts ) {
1593
1593
seat -> keyboard .sdl_keymap = SDL_calloc (seat -> keyboard .xkb .num_layouts , sizeof (SDL_Keymap * ));
1594
+ if (!seat -> keyboard .sdl_keymap ) {
1595
+ return ;
1596
+ }
1597
+
1594
1598
for (xkb_layout_index_t i = 0 ; i < seat -> keyboard .xkb .num_layouts ; ++ i ) {
1595
1599
seat -> keyboard .sdl_keymap [i ] = SDL_CreateKeymap (false);
1596
- if (!seat -> keyboard .sdl_keymap ) {
1600
+ if (!seat -> keyboard .sdl_keymap [i ]) {
1601
+ for (xkb_layout_index_t j = 0 ; j < i ; ++ j ) {
1602
+ SDL_DestroyKeymap (seat -> keyboard .sdl_keymap [j ]);
1603
+ }
1604
+ SDL_free (seat -> keyboard .sdl_keymap );
1605
+ seat -> keyboard .sdl_keymap = NULL ;
1597
1606
return ;
1598
1607
}
1599
1608
}
@@ -2095,7 +2104,7 @@ static void keyboard_handle_key(void *data, struct wl_keyboard *keyboard,
2095
2104
Wayland_HandleModifierKeys (seat , scancode , state == WL_KEYBOARD_KEY_STATE_PRESSED );
2096
2105
2097
2106
// If we have a key with unknown scancode, check if the keysym corresponds to a valid Unicode value, and assign it a reserved scancode.
2098
- if (scancode == SDL_SCANCODE_UNKNOWN && syms ) {
2107
+ if (scancode == SDL_SCANCODE_UNKNOWN && syms && seat -> keyboard . sdl_keymap ) {
2099
2108
const SDL_Keycode keycode = (SDL_Keycode )SDL_KeySymToUcs4 (syms [0 ]);
2100
2109
if (keycode != SDLK_UNKNOWN ) {
2101
2110
SDL_Keymod modstate = SDL_KMOD_NONE ;
0 commit comments