static void keyboard_handle_key(void *data, struct wl_keyboard *wl_keyboard, uint32_t serial, uint32_t time, uint32_t key, uint32_t state) { struct vo_wayland_state *wl = data; uint32_t code, num_syms; int mpkey; const xkb_keysym_t *syms; xkb_keysym_t sym; code = key + 8; num_syms = xkb_key_get_syms(wl->input.xkb.state, code, &syms); sym = XKB_KEY_NoSymbol; if (num_syms == 1) sym = syms[0]; if (sym != XKB_KEY_NoSymbol && (mpkey = lookupkey(sym))) { if (state == WL_KEYBOARD_KEY_STATE_PRESSED) mp_input_put_key(wl->vo->input_ctx, mpkey | MP_KEY_STATE_DOWN); else mp_input_put_key(wl->vo->input_ctx, mpkey | MP_KEY_STATE_UP); } }
Req* lookupreq(Reqpool *pool, ulong tag) { if(chatty9p > 1) fprint(2, "lookupreq %lud\n", tag); return lookupkey(pool->map, tag); }