Most applications do not need to directly allocate symbolic names structures. Do not allocate a names structure directly using malloc or Xmalloc if your application changes the number of key aliases or radio groups or constructs a symbolic names structure without loading the necessary components from the X server. Instead use XkbAllocNames.
XkbAllocNames can return BadAlloc, BadMatch, and BadValue errors. The which parameter is the bitwise inclusive OR of the valid names mask bits defined in Table 1.
Table 1 Symbolic Names Masks |
Mask Bit Value Keyboard Field |
Component |
XkbKeycodesNameMask (1<<0) Xkb->names keycodes |
XkbGeometryNameMask (1<<1) Xkb->names geometry |
XkbSymbolsNameMask (1<<2) Xkb->names symbols |
XkbPhysSymbolsNameMask (1<<3) Xkb->names phys_symbols |
XkbTypesNameMask (1<<4) Xkb->names type |
XkbCompatNameMask (1<<5) Xkb->names compat |
XkbKeyTypeNamesMask (1<<6) Xkb->map type[*].name |
XkbKTLevelNamesMask (1<<7) Xkb->map type[*].lvl_names[*] |
XkbIndicatorNamesMask (1<<8) Xkb->names indicators[*] |
XkbKeyNamesMask (1<<9) Xkb->names keys[*], num_keys |
XkbKeyAliasesMask (1<<10) Xkb->names key_aliases[*], num_key_aliases |
XkbVirtualModNamesMask (1<<11) Xkb->names vmods[*] |
XkbGroupNamesMask (1<<12) Xkb->names groups[*] |
XkbRGNamesMask (1<<13) Xkb->names radio_groups[*], num_rg |
XkbComponentNamesMask (0x3f) Xkb->names keycodes, |
geometry, |
symbols, |
physical symbols, |
types, and |
compatibility map |
XkbAllNamesMask (0x3fff) Xkb->names all name components |
Do not free symbolic names structures directly using free or XFree. Use XkbFreeNames instead.