keygrabber: identify release events
Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
parent
25ac879569
commit
8193a9cf0c
2
event.c
2
event.c
|
@ -547,7 +547,7 @@ event_handle_key(void *data __attribute__ ((unused)),
|
||||||
lua_rawgeti(globalconf.L, LUA_REGISTRYINDEX, globalconf.keygrabber);
|
lua_rawgeti(globalconf.L, LUA_REGISTRYINDEX, globalconf.keygrabber);
|
||||||
if(keygrabber_handlekpress(globalconf.L, ev))
|
if(keygrabber_handlekpress(globalconf.L, ev))
|
||||||
{
|
{
|
||||||
if(lua_pcall(globalconf.L, 2, 1, 0))
|
if(lua_pcall(globalconf.L, 3, 1, 0))
|
||||||
{
|
{
|
||||||
warn("error running function: %s", lua_tostring(globalconf.L, -1));
|
warn("error running function: %s", lua_tostring(globalconf.L, -1));
|
||||||
luaA_keygrabber_stop(globalconf.L);
|
luaA_keygrabber_stop(globalconf.L);
|
||||||
|
|
15
keygrabber.c
15
keygrabber.c
|
@ -680,14 +680,25 @@ keygrabber_handlekpress(lua_State *L, xcb_key_press_event_t *e)
|
||||||
|
|
||||||
lua_pushstring(L, buf);
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Grab keyboard and read pressed keys, calling callback function at each key
|
/** Grab keyboard and read pressed keys, calling callback function at each key
|
||||||
* pressed. The callback function must return a boolean value: true to
|
* pressed. The callback function must return a boolean value: true to
|
||||||
* continue grabbing, false to stop.
|
* continue grabbing, false to stop.
|
||||||
* The function is called with 2 arguments:
|
* The function is called with 3 arguments:
|
||||||
* a table containing modifiers keys and a string, the key pressed.
|
* a table containing modifiers keys, a string with the key pressed and a
|
||||||
|
* string with eithe "press" or "release" to indicate the event type.
|
||||||
*
|
*
|
||||||
* \param L The Lua VM state.
|
* \param L The Lua VM state.
|
||||||
* \return The number of elements pushed on stack.
|
* \return The number of elements pushed on stack.
|
||||||
|
|
|
@ -159,7 +159,8 @@ function run(args, textbox, exe_callback, completion_callback, history_path, his
|
||||||
end
|
end
|
||||||
textbox.text = prettyprompt .. prompt_text_with_cursor(text, inv_col, cur_col, cur_pos, cur_ul, args.selectall)
|
textbox.text = prettyprompt .. prompt_text_with_cursor(text, inv_col, cur_col, cur_pos, cur_ul, args.selectall)
|
||||||
capi.keygrabber.run(
|
capi.keygrabber.run(
|
||||||
function (mod, key)
|
function (mod, key, event)
|
||||||
|
if event ~= "press" then return true end
|
||||||
-- Get out cases
|
-- Get out cases
|
||||||
if (mod.Control and (key == "c" or key == "g"))
|
if (mod.Control and (key == "c" or key == "g"))
|
||||||
or (not mod.Control and key == "Escape") then
|
or (not mod.Control and key == "Escape") then
|
||||||
|
|
|
@ -285,7 +285,8 @@ function enemies.handle ()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function keyhandler(mod, key)
|
function keyhandler(mod, key, event)
|
||||||
|
if event ~= "press" then return true end
|
||||||
if gamedata.highscore.getkeys then
|
if gamedata.highscore.getkeys then
|
||||||
if key:len() == 1 and gamedata.name:len() < 20 then
|
if key:len() == 1 and gamedata.name:len() < 20 then
|
||||||
gamedata.name = gamedata.name .. key
|
gamedata.name = gamedata.name .. key
|
||||||
|
|
|
@ -76,7 +76,8 @@ end
|
||||||
-- Arrow keys move focus, Return selects, Escape cancels.
|
-- Arrow keys move focus, Return selects, Escape cancels.
|
||||||
-- Ignores modifiers.
|
-- Ignores modifiers.
|
||||||
function keyboardhandler (restore)
|
function keyboardhandler (restore)
|
||||||
return function (mod, key)
|
return function (mod, key, event)
|
||||||
|
if event ~= "press" then return true end
|
||||||
if key == "Escape" then
|
if key == "Escape" then
|
||||||
restore()
|
restore()
|
||||||
awful.tag.history.restore()
|
awful.tag.history.restore()
|
||||||
|
|
Loading…
Reference in New Issue