Guard xkb_state against NULL in handle_keyboard_key

Key events can arrive before the keyboard's xkb_state is initialized.
This commit is contained in:
Levi Neely 2026-05-13 21:44:30 +02:00
parent 76080cd2eb
commit 4e9043ad6d
1 changed files with 10 additions and 5 deletions

View File

@ -1644,11 +1644,16 @@ handle_keyboard_key(struct wl_listener *listener, void *data)
ev.u.key.y_root = wl_state.pointer_y;
/* Translate keycode → keysym + UTF-8 via xkb */
ev.u.key.keysym = xkb_state_key_get_one_sym(kb->xkb_state, keycode);
ev.u.key.utf8_len = xkb_state_key_get_utf8(kb->xkb_state, keycode,
ev.u.key.utf8, sizeof(ev.u.key.utf8));
if (ev.u.key.utf8_len >= (int)sizeof(ev.u.key.utf8))
ev.u.key.utf8_len = 0; /* overflow — discard */
if (kb->xkb_state) {
ev.u.key.keysym = xkb_state_key_get_one_sym(kb->xkb_state, keycode);
ev.u.key.utf8_len = xkb_state_key_get_utf8(kb->xkb_state, keycode,
ev.u.key.utf8, sizeof(ev.u.key.utf8));
if (ev.u.key.utf8_len >= (int)sizeof(ev.u.key.utf8))
ev.u.key.utf8_len = 0;
} else {
ev.u.key.keysym = 0;
ev.u.key.utf8_len = 0;
}
W_WL_EnqueueEvent(wmscr, &ev, NULL);
}