Run source tree through uncrustify
[platform/upstream/libxkbcommon.git] / src / map.c
index fb005a5..a3dc648 100644 (file)
--- a/src/map.c
+++ b/src/map.c
@@ -244,16 +244,17 @@ _X_EXPORT unsigned int
 xkb_key_get_level(struct xkb_state *state, xkb_keycode_t key,
                   unsigned int group)
 {
-    struct xkb_keymap *keymap = state->keymap;
+    struct xkb_keymap *keymap = xkb_state_get_map(state);
     struct xkb_key_type *type = XkbKeyType(keymap, key, group);
-    unsigned int active_mods = state->mods & type->mods.mask;
-    int i;
-
-    for (i = 0; i < type->map_count; i++) {
-        if (!type->map[i].active)
-            continue;
-        if (type->map[i].mods.mask == active_mods)
-            return type->map[i].level;
+    struct xkb_kt_map_entry *entry;
+    unsigned int active_mods;
+
+    active_mods = xkb_state_serialize_mods(state, XKB_STATE_EFFECTIVE);
+    active_mods &= type->mods.mask;
+
+    darray_foreach(entry, type->map) {
+        if (entry->mods.mask == active_mods)
+            return entry->level;
     }
 
     return 0;
@@ -266,23 +267,25 @@ xkb_key_get_level(struct xkb_state *state, xkb_keycode_t key,
 _X_EXPORT unsigned int
 xkb_key_get_group(struct xkb_state *state, xkb_keycode_t key)
 {
-    struct xkb_keymap *keymap = state->keymap;
+    struct xkb_keymap *keymap = xkb_state_get_map(state);
     unsigned int info = XkbKeyGroupInfo(keymap, key);
     unsigned int num_groups = XkbKeyNumGroups(keymap, key);
-    unsigned int ret = state->group;
+    unsigned int ret = xkb_state_serialize_group(state, XKB_STATE_EFFECTIVE);
 
     if (ret < XkbKeyNumGroups(keymap, key))
         return ret;
 
     switch (XkbOutOfRangeGroupAction(info)) {
     case XkbRedirectIntoRange:
-        ret = XkbOutOfRangeGroupInfo(info);
+        ret = XkbOutOfRangeGroupNumber(info);
         if (ret >= num_groups)
             ret = 0;
         break;
+
     case XkbClampIntoRange:
         ret = num_groups - 1;
         break;
+
     case XkbWrapIntoRange:
     default:
         ret %= num_groups;
@@ -327,7 +330,7 @@ _X_EXPORT int
 xkb_key_get_syms(struct xkb_state *state, xkb_keycode_t key,
                  const xkb_keysym_t **syms_out)
 {
-    struct xkb_keymap *keymap = state->keymap;
+    struct xkb_keymap *keymap = xkb_state_get_map(state);
     int group;
     int level;
 
@@ -347,3 +350,12 @@ err:
     *syms_out = NULL;
     return 0;
 }
+
+/**
+ * Simple boolean specifying whether or not the key should repeat.
+ */
+_X_EXPORT int
+xkb_key_repeats(struct xkb_keymap *keymap, xkb_keycode_t key)
+{
+    return !!(keymap->ctrls->per_key_repeat[key / 8] & (1 << (key % 8)));
+}