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:
parent
76080cd2eb
commit
4e9043ad6d
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue