/** Handle keypress event. * \param L Lua stack to push the key pressed. * \param e Received XKeyEvent. * \return True if a key was succesfully get, false otherwise. */ bool keygrabber_handlekpress(lua_State *L, xcb_key_press_event_t *e) { xcb_keysym_t ksym = 0; char buf[MAX(MB_LEN_MAX, 32)]; if(!key_press_lookup_string(e, buf, countof(buf), &ksym)) return false; lua_newtable(L); lua_pushboolean(L, e->state & XCB_MOD_MASK_CONTROL); lua_setfield(L, -2, "Control"); lua_pushboolean(L, e->state & XCB_MOD_MASK_LOCK); lua_setfield(L, -2, "Lock"); lua_pushboolean(L, e->state & XCB_MOD_MASK_SHIFT); lua_setfield(L, -2, "Shift"); lua_pushboolean(L, e->state & XCB_MOD_MASK_1); lua_setfield(L, -2, "Mod1"); lua_pushboolean(L, e->state & XCB_MOD_MASK_2); lua_setfield(L, -2, "Mod2"); lua_pushboolean(L, e->state & XCB_MOD_MASK_3); lua_setfield(L, -2, "Mod3"); lua_pushboolean(L, e->state & XCB_MOD_MASK_4); lua_setfield(L, -2, "Mod4"); lua_pushboolean(L, e->state & XCB_MOD_MASK_5); lua_setfield(L, -2, "Mod5"); lua_pushstring(L, buf); switch(e->response_type) { case XCB_KEY_PRESS: lua_pushliteral(L, "press"); break; case XCB_KEY_RELEASE: lua_pushliteral(L, "release"); break; } return true; }
/** Handle keypress event. * \param L Lua stack to push the key pressed. * \param e Received XKeyEvent. * \return True if a key was succesfully get, false otherwise. */ bool keygrabber_handlekpress(lua_State *L, xcb_key_press_event_t *e) { xcb_keysym_t ksym = 0; char buf[MAX(MB_LEN_MAX, 32)]; if (!key_press_lookup_string(e, buf, countof(buf), &ksym)) return false; lua_newtable(L); lua_pushboolean(L, XUTIL_MASK_CLEAN(e->state) & XCB_MOD_MASK_CONTROL); lua_setfield(L, -2, "Control"); lua_pushboolean(L, XUTIL_MASK_CLEAN(e->state) & XCB_MOD_MASK_LOCK); lua_setfield(L, -2, "Lock"); lua_pushboolean(L, XUTIL_MASK_CLEAN(e->state) & XCB_MOD_MASK_SHIFT); lua_setfield(L, -2, "Shift"); lua_pushboolean(L, XUTIL_MASK_CLEAN(e->state) & XCB_MOD_MASK_1); lua_setfield(L, -2, "Mod1"); lua_pushboolean(L, XUTIL_MASK_CLEAN(e->state) & XCB_MOD_MASK_2); lua_setfield(L, -2, "Mod2"); lua_pushboolean(L, XUTIL_MASK_CLEAN(e->state) & XCB_MOD_MASK_3); lua_setfield(L, -2, "Mod3"); lua_pushboolean(L, XUTIL_MASK_CLEAN(e->state) & XCB_MOD_MASK_4); lua_setfield(L, -2, "Mod4"); lua_pushboolean(L, XUTIL_MASK_CLEAN(e->state) & XCB_MOD_MASK_5); lua_setfield(L, -2, "Mod5"); lua_pushstring(L, buf); return true; }