diff options
author | Ran Benita <ran234@gmail.com> | 2013-03-03 21:35:43 +0200 |
---|---|---|
committer | Daniel Stone <daniel@fooishbar.org> | 2013-03-18 22:20:04 +0000 |
commit | 71eb033eefe2f0f2a2d3fc7c54ebd5f0d4c2d3f5 (patch) | |
tree | 0bb26279c1b680a1e0cb8b8d946f85b3edaaf235 /src/keymap.c | |
parent | 82c3e3936078e2f8ea738615d2fdb0812a2f521b (diff) | |
download | xorg-lib-libxkbcommon-71eb033eefe2f0f2a2d3fc7c54ebd5f0d4c2d3f5.tar.gz |
Move a couple of general keymap functions from keycodes.c
To get a key by name and resolve an alias - this makes sense for
everyone.
Signed-off-by: Ran Benita <ran234@gmail.com>
Diffstat (limited to 'src/keymap.c')
-rw-r--r-- | src/keymap.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/keymap.c b/src/keymap.c index 9c581d5..758a35b 100644 --- a/src/keymap.c +++ b/src/keymap.c @@ -477,3 +477,33 @@ xkb_keymap_key_repeats(struct xkb_keymap *keymap, xkb_keycode_t kc) return key->repeats; } + +struct xkb_key * +XkbKeyByName(struct xkb_keymap *keymap, xkb_atom_t name, bool use_aliases) +{ + struct xkb_key *key; + + xkb_foreach_key(key, keymap) + if (key->name == name) + return key; + + if (use_aliases) { + xkb_atom_t new_name = XkbResolveKeyAlias(keymap, name); + if (new_name != XKB_ATOM_NONE) + return XkbKeyByName(keymap, new_name, false); + } + + return NULL; +} + +xkb_atom_t +XkbResolveKeyAlias(struct xkb_keymap *keymap, xkb_atom_t name) +{ + const struct xkb_key_alias *alias; + + darray_foreach(alias, keymap->key_aliases) + if (name == alias->alias) + return alias->real; + + return XKB_ATOM_NONE; +} |