From eda4c40732f788ac06f607c70344f801d2f82454 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Wed, 10 Nov 2021 12:46:54 -0800 Subject: [PATCH] Make sure the X event is an Xkb event before checking the Xkb event type --- src/video/x11/SDL_x11events.c | 3 ++- src/video/x11/SDL_x11keyboard.c | 2 +- src/video/x11/SDL_x11video.h | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/video/x11/SDL_x11events.c b/src/video/x11/SDL_x11events.c index 1bf10d567..5d0517e21 100644 --- a/src/video/x11/SDL_x11events.c +++ b/src/video/x11/SDL_x11events.c @@ -808,7 +808,8 @@ X11_DispatchEvent(_THIS, XEvent *xevent) if (SDL_GetKeyboardFocus() != NULL) { X11_ReconcileKeyboardState(_this); } - } else if (xevent->type == MappingNotify || xkbEvent->any.xkb_type == XkbStateNotify) { + } else if (xevent->type == MappingNotify || + (xevent->type == videodata->xkb_event && xkbEvent->any.xkb_type == XkbStateNotify)) { /* Has the keyboard layout changed? */ const int request = xevent->xmapping.request; diff --git a/src/video/x11/SDL_x11keyboard.c b/src/video/x11/SDL_x11keyboard.c index 2d8c24ccc..2214ba3e3 100644 --- a/src/video/x11/SDL_x11keyboard.c +++ b/src/video/x11/SDL_x11keyboard.c @@ -278,7 +278,7 @@ X11_InitKeyboard(_THIS) int xkb_major = XkbMajorVersion; int xkb_minor = XkbMinorVersion; - if (X11_XkbQueryExtension(data->display, NULL, NULL, NULL, &xkb_major, &xkb_minor)) { + if (X11_XkbQueryExtension(data->display, NULL, &data->xkb_event, NULL, &xkb_major, &xkb_minor)) { data->xkb = X11_XkbGetMap(data->display, XkbAllClientInfoMask, XkbUseCoreKbd); } diff --git a/src/video/x11/SDL_x11video.h b/src/video/x11/SDL_x11video.h index 160967463..26617e606 100644 --- a/src/video/x11/SDL_x11video.h +++ b/src/video/x11/SDL_x11video.h @@ -143,6 +143,7 @@ typedef struct SDL_VideoData #if SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM XkbDescPtr xkb; #endif + int xkb_event; KeyCode filter_code; Time filter_time;