diff --git a/src/backend/wayland/wl_backend.c b/src/backend/wayland/wl_backend.c index 71eee87..1028b9b 100644 --- a/src/backend/wayland/wl_backend.c +++ b/src/backend/wayland/wl_backend.c @@ -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); }