The key width and number of groups associated with a key are used to form a small two-dimensional array of KeySyms for a key. This array may be different sizes for different keys. The array for a single key is stored as a linear list, in row-major order. The arrays for all of the keys are stored in the syms field of the client map. There is one row for each group associated with a key and one column for each level. The index corresponding to a given group and shift level is computed as:
idx = group_index * key_width + shift_levelThe offset field of the key_sym_map entry for a key is used to access the beginning of the array.
XkbKeyGroupWidth computes the width of the type associated with the group grp for the key corresponding to keycode.