aboutsummaryrefslogtreecommitdiff
path: root/sdl.c
diff options
context:
space:
mode:
Diffstat (limited to 'sdl.c')
-rw-r--r--sdl.c39
1 files changed, 21 insertions, 18 deletions
diff --git a/sdl.c b/sdl.c
index 74f084c0f..95efe8df1 100644
--- a/sdl.c
+++ b/sdl.c
@@ -144,32 +144,35 @@ static uint8_t sdl_keyevent_to_keycode(const SDL_KeyboardEvent *ev)
static int check_for_evdev(void)
{
SDL_SysWMinfo info;
- XkbDescPtr desc;
+ XkbDescPtr desc = NULL;
int has_evdev = 0;
- const char *keycodes;
+ char *keycodes = NULL;
SDL_VERSION(&info.version);
- if (!SDL_GetWMInfo(&info))
+ if (!SDL_GetWMInfo(&info)) {
return 0;
-
+ }
desc = XkbGetKeyboard(info.info.x11.display,
XkbGBN_AllComponentsMask,
XkbUseCoreKbd);
- if (desc == NULL || desc->names == NULL)
- return 0;
-
- keycodes = XGetAtomName(info.info.x11.display, desc->names->keycodes);
- if (keycodes == NULL)
- fprintf(stderr, "could not lookup keycode name\n");
- else if (strstart(keycodes, "evdev", NULL))
- has_evdev = 1;
- else if (!strstart(keycodes, "xfree86", NULL))
- fprintf(stderr,
- "unknown keycodes `%s', please report to qemu-devel@nongnu.org\n",
- keycodes);
-
- XkbFreeClientMap(desc, XkbGBN_AllComponentsMask, True);
+ if (desc && desc->names) {
+ keycodes = XGetAtomName(info.info.x11.display, desc->names->keycodes);
+ if (keycodes == NULL) {
+ fprintf(stderr, "could not lookup keycode name\n");
+ } else if (strstart(keycodes, "evdev", NULL)) {
+ has_evdev = 1;
+ } else if (!strstart(keycodes, "xfree86", NULL)) {
+ fprintf(stderr, "unknown keycodes `%s', please report to "
+ "qemu-devel@nongnu.org\n", keycodes);
+ }
+ }
+ if (desc) {
+ XkbFreeKeyboard(desc, XkbGBN_AllComponentsMask, True);
+ }
+ if (keycodes) {
+ XFree(keycodes);
+ }
return has_evdev;
}
#else