From dc8b06fb5a91df91844c3e69463a029222d12d91 Mon Sep 17 00:00:00 2001 From: hwsmm Date: Wed, 26 Jun 2024 23:58:00 +0900 Subject: [PATCH] Check if SDL_GetKeyboardFocus is null in X11/Wayland events --- src/video/wayland/SDL_waylandevents.c | 9 ++++++--- src/video/x11/SDL_x11events.c | 6 ++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/video/wayland/SDL_waylandevents.c b/src/video/wayland/SDL_waylandevents.c index 05e4017dcb..802ba01ab2 100644 --- a/src/video/wayland/SDL_waylandevents.c +++ b/src/video/wayland/SDL_waylandevents.c @@ -381,7 +381,8 @@ int Wayland_WaitEventTimeout(SDL_VideoDevice *_this, Sint64 timeoutNS) WAYLAND_wl_display_flush(d->display); #ifdef SDL_USE_IME - if (!d->text_input_manager && SDL_TextInputActive(SDL_GetKeyboardFocus())) { + SDL_Window *keyboard_focus = SDL_GetKeyboardFocus(); + if (!d->text_input_manager && keyboard_focus && SDL_TextInputActive(keyboard_focus)) { SDL_IME_PumpEvents(); } #endif @@ -454,7 +455,8 @@ void Wayland_PumpEvents(SDL_VideoDevice *_this) int err; #ifdef SDL_USE_IME - if (!d->text_input_manager && SDL_TextInputActive(SDL_GetKeyboardFocus())) { + SDL_Window *keyboard_focus = SDL_GetKeyboardFocus(); + if (!d->text_input_manager && keyboard_focus && SDL_TextInputActive(keyboard_focus)) { SDL_IME_PumpEvents(); } #endif @@ -1649,7 +1651,8 @@ static void keyboard_handle_key(void *data, struct wl_keyboard *keyboard, Wayland_UpdateImplicitGrabSerial(input, serial); if (state == WL_KEYBOARD_KEY_STATE_PRESSED) { - if (SDL_TextInputActive(SDL_GetKeyboardFocus())) { + SDL_Window *keyboard_focus = SDL_GetKeyboardFocus(); + if (keyboard_focus && SDL_TextInputActive(keyboard_focus)) { has_text = keyboard_input_get_text(text, input, key, SDL_PRESSED, &handled_by_ime); } } else { diff --git a/src/video/x11/SDL_x11events.c b/src/video/x11/SDL_x11events.c index 251f678141..decb47a93b 100644 --- a/src/video/x11/SDL_x11events.c +++ b/src/video/x11/SDL_x11events.c @@ -2024,7 +2024,8 @@ int X11_WaitEventTimeout(SDL_VideoDevice *_this, Sint64 timeoutNS) X11_DispatchEvent(_this, &xevent); #ifdef SDL_USE_IME - if (SDL_TextInputActive(SDL_GetKeyboardFocus())) { + SDL_Window *keyboard_focus = SDL_GetKeyboardFocus(); + if (keyboard_focus && SDL_TextInputActive(keyboard_focus)) { SDL_IME_PumpEvents(); } #endif @@ -2084,7 +2085,8 @@ void X11_PumpEvents(SDL_VideoDevice *_this) } #ifdef SDL_USE_IME - if (SDL_TextInputActive(SDL_GetKeyboardFocus())) { + SDL_Window *keyboard_focus = SDL_GetKeyboardFocus(); + if (keyboard_focus && SDL_TextInputActive(keyboard_focus)) { SDL_IME_PumpEvents(); } #endif