Again it is not resized.
Signed-off-by: Ran Benita <ran234@gmail.com>
write_symbols(struct xkb_keymap *keymap, struct buf *buf)
{
struct xkb_key *key;
- xkb_layout_index_t group, tmp;
- xkb_atom_t *group_name;
+ xkb_layout_index_t group;
bool showActions;
if (keymap->symbols_section_name)
else
write_buf(buf, "\txkb_symbols {\n\n");
- tmp = 0;
- darray_enumerate(group, group_name, keymap->group_names) {
- if (!*group_name)
- continue;
- write_buf(buf,
- "\t\tname[group%d]=\"%s\";\n", group + 1,
- xkb_atom_text(keymap->ctx, *group_name));
- tmp++;
- }
- if (tmp > 0)
+ for (group = 0; group < keymap->num_group_names; group++)
+ if (keymap->group_names[group])
+ write_buf(buf,
+ "\t\tname[group%d]=\"%s\";\n", group + 1,
+ xkb_atom_text(keymap->ctx, keymap->group_names[group]));
+ if (group > 0)
write_buf(buf, "\n");
xkb_foreach_key(key, keymap) {
free(keymap->types);
darray_free(keymap->sym_interprets);
darray_free(keymap->key_aliases);
- darray_free(keymap->group_names);
+ free(keymap->group_names);
darray_free(keymap->mods);
darray_free(keymap->indicators);
free(keymap->keycodes_section_name);
XKB_EXPORT const char *
xkb_keymap_layout_get_name(struct xkb_keymap *keymap, xkb_layout_index_t idx)
{
- if (idx >= xkb_keymap_num_layouts(keymap) ||
- idx >= darray_size(keymap->group_names))
+ if (idx >= keymap->num_group_names)
return NULL;
- return xkb_atom_text(keymap->ctx, darray_item(keymap->group_names, idx));
+ return xkb_atom_text(keymap->ctx, keymap->group_names[idx]);
}
/**
xkb_keymap_layout_get_index(struct xkb_keymap *keymap, const char *name)
{
xkb_atom_t atom = xkb_atom_lookup(keymap->ctx, name);
- xkb_atom_t *group_name;
xkb_layout_index_t i;
if (atom == XKB_ATOM_NONE)
return XKB_LAYOUT_INVALID;
- darray_enumerate(i, group_name, keymap->group_names)
- if (*group_name == atom)
+ for (i = 0; i < keymap->num_group_names; i++)
+ if (keymap->group_names[i] == atom)
return i;
return XKB_LAYOUT_INVALID;
struct xkb_group *groups;
};
-typedef darray(xkb_atom_t) darray_xkb_atom_t;
-
struct xkb_mod {
xkb_atom_t name;
enum mod_type type;
/* Number of groups in the key with the most groups. */
xkb_layout_index_t num_groups;
- darray_xkb_atom_t group_names;
+ /* Not all groups must have names. */
+ xkb_layout_index_t num_group_names;
+ xkb_atom_t *group_names;
darray(struct xkb_indicator_map) indicators;
darray(KeyInfo) keys;
KeyInfo dflt;
ActionsInfo *actions;
- darray_xkb_atom_t group_names;
+ darray(xkb_atom_t) group_names;
darray(ModMapEntry) modMaps;
struct xkb_keymap *keymap;
keymap->symbols_section_name = strdup_safe(info->name);
- keymap->group_names = info->group_names;
+ keymap->num_group_names = darray_size(info->group_names);
+ keymap->group_names = darray_mem(info->group_names, 0);
darray_init(info->group_names);
darray_foreach(keyi, info->keys)