diff options
Diffstat (limited to 'src/3rdparty/xkbcommon/src/xkbcomp/keymap-dump.c')
-rw-r--r-- | src/3rdparty/xkbcommon/src/xkbcomp/keymap-dump.c | 67 |
1 files changed, 37 insertions, 30 deletions
diff --git a/src/3rdparty/xkbcommon/src/xkbcomp/keymap-dump.c b/src/3rdparty/xkbcommon/src/xkbcomp/keymap-dump.c index 7f70ca3481..2ed591c661 100644 --- a/src/3rdparty/xkbcommon/src/xkbcomp/keymap-dump.c +++ b/src/3rdparty/xkbcommon/src/xkbcomp/keymap-dump.c @@ -126,7 +126,7 @@ write_vmods(struct xkb_keymap *keymap, struct buf *buf) const struct xkb_mod *mod; xkb_mod_index_t num_vmods = 0; - darray_foreach(mod, keymap->mods) { + xkb_mods_foreach(mod, &keymap->mods) { if (mod->type != MOD_VIRT) continue; @@ -164,7 +164,7 @@ write_keycodes(struct xkb_keymap *keymap, struct buf *buf) write_buf(buf, "\tminimum = %u;\n", min(keymap->min_key_code, 8)); write_buf(buf, "\tmaximum = %u;\n", max(keymap->max_key_code, 255)); - xkb_foreach_key(key, keymap) { + xkb_keys_foreach(key, keymap) { if (key->name == XKB_ATOM_NONE) continue; @@ -172,7 +172,7 @@ write_keycodes(struct xkb_keymap *keymap, struct buf *buf) KeyNameText(keymap->ctx, key->name), key->keycode); } - darray_enumerate(idx, led, keymap->leds) + xkb_leds_enumerate(idx, led, keymap) if (led->name != XKB_ATOM_NONE) write_buf(buf, "\tindicator %u = \"%s\";\n", idx + 1, xkb_atom_text(keymap->ctx, led->name)); @@ -205,7 +205,7 @@ write_types(struct xkb_keymap *keymap, struct buf *buf) xkb_atom_text(keymap->ctx, type->name)); write_buf(buf, "\t\tmodifiers= %s;\n", - ModMaskText(keymap, type->mods.mods)); + ModMaskText(keymap->ctx, &keymap->mods, type->mods.mods)); for (unsigned j = 0; j < type->num_entries; j++) { const char *str; @@ -218,16 +218,17 @@ write_types(struct xkb_keymap *keymap, struct buf *buf) if (entry->level == 0 && entry->preserve.mods == 0) continue; - str = ModMaskText(keymap, entry->mods.mods); + str = ModMaskText(keymap->ctx, &keymap->mods, entry->mods.mods); write_buf(buf, "\t\tmap[%s]= Level%u;\n", str, entry->level + 1); if (entry->preserve.mods) write_buf(buf, "\t\tpreserve[%s]= %s;\n", - str, ModMaskText(keymap, entry->preserve.mods)); + str, ModMaskText(keymap->ctx, &keymap->mods, + entry->preserve.mods)); } - for (xkb_level_index_t n = 0; n < type->num_levels; n++) + for (xkb_level_index_t n = 0; n < type->num_level_names; n++) if (type->level_names[n]) write_buf(buf, "\t\tlevel_name[Level%u]= \"%s\";\n", n + 1, xkb_atom_text(keymap->ctx, type->level_names[n])); @@ -261,7 +262,7 @@ write_led_map(struct xkb_keymap *keymap, struct buf *buf, LedStateMaskText(keymap->ctx, led->which_mods)); } write_buf(buf, "\t\tmodifiers= %s;\n", - ModMaskText(keymap, led->mods.mods)); + ModMaskText(keymap->ctx, &keymap->mods, led->mods.mods)); } if (led->ctrls) { @@ -303,13 +304,14 @@ write_action(struct xkb_keymap *keymap, struct buf *buf, type = ActionTypeText(action->type); switch (action->type) { - case ACTION_TYPE_MOD_LOCK: case ACTION_TYPE_MOD_SET: case ACTION_TYPE_MOD_LATCH: + case ACTION_TYPE_MOD_LOCK: if (action->mods.flags & ACTION_MODS_LOOKUP_MODMAP) args = "modMapMods"; else - args = ModMaskText(keymap, action->mods.mods.mods); + args = ModMaskText(keymap->ctx, &keymap->mods, + action->mods.mods.mods); write_buf(buf, "%s%s(modifiers=%s%s%s%s)%s", prefix, type, args, (action->type != ACTION_TYPE_MOD_LOCK && (action->mods.flags & ACTION_LOCK_CLEAR)) ? ",clearLocks" : "", (action->type != ACTION_TYPE_MOD_LOCK && (action->mods.flags & ACTION_LATCH_TO_LOCK)) ? ",latchToLock" : "", @@ -422,11 +424,12 @@ write_compat(struct xkb_keymap *keymap, struct buf *buf) write_buf(buf, "\tinterpret %s+%s(%s) {\n", si->sym ? KeysymText(keymap->ctx, si->sym) : "Any", SIMatchText(si->match), - ModMaskText(keymap, si->mods)); + ModMaskText(keymap->ctx, &keymap->mods, si->mods)); if (si->virtual_mod != XKB_MOD_INVALID) write_buf(buf, "\t\tvirtualModifier= %s;\n", - ModIndexText(keymap, si->virtual_mod)); + ModIndexText(keymap->ctx, &keymap->mods, + si->virtual_mod)); if (si->level_one_only) write_buf(buf, "\t\tuseModMapMods=level1;\n"); @@ -438,7 +441,7 @@ write_compat(struct xkb_keymap *keymap, struct buf *buf) write_buf(buf, "\t};\n"); } - darray_foreach(led, keymap->leds) + xkb_leds_foreach(led, keymap) if (led->which_groups || led->groups || led->which_mods || led->mods.mods || led->ctrls) write_led_map(keymap, buf, led); @@ -452,7 +455,7 @@ static bool write_keysyms(struct xkb_keymap *keymap, struct buf *buf, const struct xkb_key *key, xkb_layout_index_t group) { - for (xkb_level_index_t level = 0; level < XkbKeyGroupWidth(key, group); + for (xkb_level_index_t level = 0; level < XkbKeyNumLevels(key, group); level++) { const xkb_keysym_t *syms; int num_syms; @@ -534,7 +537,7 @@ write_key(struct xkb_keymap *keymap, struct buf *buf, if (key->vmodmap && (key->explicit & EXPLICIT_VMODMAP)) write_buf(buf, "\n\t\tvirtualMods= %s,", - ModMaskText(keymap, key->vmodmap)); + ModMaskText(keymap->ctx, &keymap->mods, key->vmodmap)); switch (key->out_of_range_group_action) { case RANGE_SATURATE: @@ -550,7 +553,7 @@ write_key(struct xkb_keymap *keymap, struct buf *buf, break; } - show_actions = !!(key->explicit & EXPLICIT_INTERP); + show_actions = (key->explicit & EXPLICIT_INTERP); if (key->num_groups > 1 || show_actions) simple = false; @@ -573,8 +576,7 @@ write_key(struct xkb_keymap *keymap, struct buf *buf, write_buf(buf, " ]"); if (show_actions) { write_buf(buf, ",\n\t\tactions[Group%u]= [ ", group + 1); - for (level = 0; - level < XkbKeyGroupWidth(key, group); level++) { + for (level = 0; level < XkbKeyNumLevels(key, group); level++) { if (level != 0) write_buf(buf, ", "); write_action(keymap, buf, @@ -595,6 +597,8 @@ write_symbols(struct xkb_keymap *keymap, struct buf *buf) { const struct xkb_key *key; xkb_layout_index_t group; + xkb_mod_index_t i; + const struct xkb_mod *mod; if (keymap->symbols_section_name) write_buf(buf, "xkb_symbols \"%s\" {\n", @@ -610,22 +614,25 @@ write_symbols(struct xkb_keymap *keymap, struct buf *buf) if (group > 0) write_buf(buf, "\n"); - xkb_foreach_key(key, keymap) + xkb_keys_foreach(key, keymap) if (key->num_groups > 0) write_key(keymap, buf, key); - xkb_foreach_key(key, keymap) { - xkb_mod_index_t i; - const struct xkb_mod *mod; - - if (key->modmap == 0) - continue; - - darray_enumerate(i, mod, keymap->mods) - if (key->modmap & (1u << i)) - write_buf(buf, "\tmodifier_map %s { %s };\n", - xkb_atom_text(keymap->ctx, mod->name), + xkb_mods_enumerate(i, mod, &keymap->mods) { + bool had_any = false; + xkb_keys_foreach(key, keymap) { + if (key->modmap & (1u << i)) { + if (!had_any) + write_buf(buf, "\tmodifier_map %s { ", + xkb_atom_text(keymap->ctx, mod->name)); + write_buf(buf, "%s%s", + had_any ? ", " : "", KeyNameText(keymap->ctx, key->name)); + had_any = true; + } + } + if (had_any) + write_buf(buf, " };\n"); } write_buf(buf, "};\n\n"); |