summaryrefslogtreecommitdiff
path: root/src/keymap.c
diff options
context:
space:
mode:
authorRan Benita <ran234@gmail.com>2013-03-03 21:35:43 +0200
committerDaniel Stone <daniel@fooishbar.org>2013-03-18 22:20:04 +0000
commit71eb033eefe2f0f2a2d3fc7c54ebd5f0d4c2d3f5 (patch)
tree0bb26279c1b680a1e0cb8b8d946f85b3edaaf235 /src/keymap.c
parent82c3e3936078e2f8ea738615d2fdb0812a2f521b (diff)
downloadxorg-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.c30
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;
+}