Put keybindings in arrays.
Signed-off-by: Pierre Habouzit <madcoder@debian.org>
This commit is contained in:
parent
3a1c9e0cfb
commit
8c1aec2e96
6
event.c
6
event.c
|
@ -391,7 +391,6 @@ event_handle_keypress(void *data __attribute__ ((unused)),
|
||||||
xcb_key_press_event_t *ev)
|
xcb_key_press_event_t *ev)
|
||||||
{
|
{
|
||||||
xcb_keysym_t keysym;
|
xcb_keysym_t keysym;
|
||||||
keybinding_t *k;
|
|
||||||
|
|
||||||
if(globalconf.keygrabber != LUA_REFNIL)
|
if(globalconf.keygrabber != LUA_REFNIL)
|
||||||
{
|
{
|
||||||
|
@ -412,11 +411,14 @@ event_handle_keypress(void *data __attribute__ ((unused)),
|
||||||
{
|
{
|
||||||
keysym = xcb_key_symbols_get_keysym(globalconf.keysyms, ev->detail, 0);
|
keysym = xcb_key_symbols_get_keysym(globalconf.keysyms, ev->detail, 0);
|
||||||
|
|
||||||
for(k = globalconf.keys; k; k = k->next)
|
for(int i = 0; i < globalconf.keys.len; i++)
|
||||||
|
{
|
||||||
|
keybinding_t *k = globalconf.keys.tab[i];
|
||||||
if(((k->keycode && ev->detail == k->keycode) || (k->keysym && keysym == k->keysym))
|
if(((k->keycode && ev->detail == k->keycode) || (k->keysym && keysym == k->keysym))
|
||||||
&& k->fct && CLEANMASK(k->mod) == CLEANMASK(ev->state))
|
&& k->fct && CLEANMASK(k->mod) == CLEANMASK(ev->state))
|
||||||
luaA_dofunction(globalconf.L, k->fct, 0);
|
luaA_dofunction(globalconf.L, k->fct, 0);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
19
keybinding.c
19
keybinding.c
|
@ -31,6 +31,11 @@ extern awesome_t globalconf;
|
||||||
DO_LUA_NEW(static, keybinding_t, keybinding, "keybinding", keybinding_ref)
|
DO_LUA_NEW(static, keybinding_t, keybinding, "keybinding", keybinding_ref)
|
||||||
DO_LUA_GC(keybinding_t, keybinding, "keybinding", keybinding_unref)
|
DO_LUA_GC(keybinding_t, keybinding, "keybinding", keybinding_unref)
|
||||||
|
|
||||||
|
void keybinding_delete(keybinding_t **kbp)
|
||||||
|
{
|
||||||
|
p_delete(kbp);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
__luaA_keystore(keybinding_t *key, const char *str)
|
__luaA_keystore(keybinding_t *key, const char *str)
|
||||||
{
|
{
|
||||||
|
@ -96,14 +101,14 @@ luaA_keybinding_new(lua_State *L)
|
||||||
static int
|
static int
|
||||||
luaA_keybinding_add(lua_State *L)
|
luaA_keybinding_add(lua_State *L)
|
||||||
{
|
{
|
||||||
keybinding_t *key, **k = luaA_checkudata(L, 1, "keybinding");
|
keybinding_t **k = luaA_checkudata(L, 1, "keybinding");
|
||||||
|
|
||||||
/* Check that the keybinding has not been already added. */
|
/* Check that the keybinding has not been already added. */
|
||||||
for(key = globalconf.keys; key; key = key->next)
|
for(int i = 0; i < globalconf.keys.len; i++)
|
||||||
if(key == *k)
|
if(globalconf.keys.tab[i] == *k)
|
||||||
luaL_error(L, "keybinding already added");
|
luaL_error(L, "keybinding already added");
|
||||||
|
|
||||||
keybinding_list_push(&globalconf.keys, keybinding_ref(k));
|
keybinding_array_append(&globalconf.keys, keybinding_ref(k));
|
||||||
window_root_grabkey(*k);
|
window_root_grabkey(*k);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -120,9 +125,13 @@ luaA_keybinding_remove(lua_State *L)
|
||||||
{
|
{
|
||||||
keybinding_t **k = luaA_checkudata(L, 1, "keybinding");
|
keybinding_t **k = luaA_checkudata(L, 1, "keybinding");
|
||||||
|
|
||||||
keybinding_list_detach(&globalconf.keys, *k);
|
for(int i = 0; i < globalconf.keys.len; i++)
|
||||||
|
if(globalconf.keys.tab[i] == *k)
|
||||||
|
{
|
||||||
|
keybinding_array_take(&globalconf.keys, i);
|
||||||
window_root_ungrabkey(*k);
|
window_root_ungrabkey(*k);
|
||||||
keybinding_unref(k);
|
keybinding_unref(k);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
10
structs.h
10
structs.h
|
@ -206,6 +206,7 @@ titlebar_delete(titlebar_t **t)
|
||||||
DO_RCNT(titlebar_t, titlebar, titlebar_delete)
|
DO_RCNT(titlebar_t, titlebar, titlebar_delete)
|
||||||
|
|
||||||
/** Keys bindings */
|
/** Keys bindings */
|
||||||
|
ARRAY_TYPE(struct keybinding_t *, keybinding);
|
||||||
struct keybinding_t
|
struct keybinding_t
|
||||||
{
|
{
|
||||||
/** Ref count */
|
/** Ref count */
|
||||||
|
@ -218,12 +219,11 @@ struct keybinding_t
|
||||||
xcb_keycode_t keycode;
|
xcb_keycode_t keycode;
|
||||||
/** Lua function to execute. */
|
/** Lua function to execute. */
|
||||||
luaA_function fct;
|
luaA_function fct;
|
||||||
/** Next and previous keys */
|
|
||||||
keybinding_t *prev, *next;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
DO_SLIST(keybinding_t, keybinding, p_delete)
|
void keybinding_delete(keybinding_t **);
|
||||||
DO_RCNT(keybinding_t, keybinding, p_delete)
|
DO_RCNT(keybinding_t, keybinding, keybinding_delete)
|
||||||
|
ARRAY_FUNCS(keybinding_t *, keybinding, keybinding_unref)
|
||||||
|
|
||||||
/** Status bar */
|
/** Status bar */
|
||||||
struct statusbar_t
|
struct statusbar_t
|
||||||
|
@ -399,7 +399,7 @@ struct awesome_t
|
||||||
/** Screens info */
|
/** Screens info */
|
||||||
screens_info_t *screens_info;
|
screens_info_t *screens_info;
|
||||||
/** Keys bindings list */
|
/** Keys bindings list */
|
||||||
keybinding_t *keys;
|
keybinding_array_t keys;
|
||||||
/** Mouse bindings list */
|
/** Mouse bindings list */
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue