XkbcResizeKeySyms(struct xkb_keymap *keymap, xkb_keycode_t key,
unsigned int needed)
{
- struct xkb_sym_map *sym_map = &darray_item(keymap->map->key_sym_map, key);
-
- if (sym_map->size_syms >= needed)
- return true;
-
- sym_map->syms = uTypedRecalloc(sym_map->syms, sym_map->size_syms,
- needed, xkb_keysym_t);
- if (!sym_map->syms) {
- sym_map->size_syms = 0;
- return false;
- }
-
- sym_map->size_syms = needed;
+ darray_resize0(darray_item(keymap->map->key_sym_map, key).syms, needed);
return true;
}
darray_foreach(sym_map, map->key_sym_map) {
free(sym_map->sym_index);
free(sym_map->num_syms);
- free(sym_map->syms);
+ darray_free(sym_map->syms);
}
darray_free(map->key_sym_map);
unsigned char width;
int *sym_index; /* per level/group index into 'syms' */
unsigned int *num_syms; /* per level/group */
- xkb_keysym_t *syms;
- unsigned int size_syms; /* size of 'syms' */
+ darray(xkb_keysym_t) syms;
};
struct xkb_client_map {
#define XkbKeyNumSyms(d, k, g, sl) \
(darray_item((d)->map->key_sym_map, k).num_syms[(g * XkbKeyGroupsWidth(d, k)) + sl])
#define XkbKeySym(d, k, n) \
- (&darray_item((d)->map->key_sym_map, k).syms[n])
+ (&darray_item(darray_item((d)->map->key_sym_map, k).syms, n))
#define XkbKeySymOffset(d, k, g, sl) \
(darray_item((d)->map->key_sym_map, k).sym_index[(g * XkbKeyGroupsWidth(d, k)) + sl])
#define XkbKeySymEntry(d, k, g, sl) \
if (tmp < key->numLevels[i] &&
darray_item(key->symsMapNumEntries[i], tmp) != 0)
{
- memcpy(&sym_map->syms[symIndex],
+ memcpy(darray_mem(sym_map->syms, symIndex),
darray_mem(key->syms[i],
darray_item(key->symsMapIndex[i], tmp)),
darray_item(key->symsMapNumEntries[i], tmp) * sizeof(xkb_keysym_t));