1
<chapter id='symbolic_names'>
2
<title>Symbolic Names</title>
5
The core protocol does not provide any information to clients other than that
6
actually used to interpret events. This makes it difficult to write an
7
application that presents the keyboard to a user in an easy-to-understand way.
8
Such applications have to examine the vendor string and keycodes to determine
9
the type of keyboard connected to the server and then examine keysyms and
10
modifier mappings to determine the effects of most modifiers (the <emphasis>
16
modifiers are defined by the core protocol but no semantics are implied for
22
To make it easier for applications to present a keyboard to the user, Xkb
23
supports symbolic names for most components of the keyboard extension. Most of
24
these symbolic names are grouped into the <emphasis>
26
component of the keyboard description.
29
<sect1 id='the_xkbnamesrec_structure'>
30
<title>The XkbNamesRec Structure</title>
33
The names component of the keyboard description is defined as follows:
36
<para><programlisting>
37
#define XkbKeyNameLength 4
38
#define XkbKeyNumVirtualMods 16
39
#define XkbKeyNumIndicators 32
40
#define XkbKeyNumKbdGroups 4
41
#define XkbMaxRadioGroups 32
42
</programlisting></para>
44
<para><programlisting>
46
char name[XkbKeyNameLength]; /* symbolic key names */
47
} <emphasis>XkbKeyNameRec</emphasis>,*XkbKeyNamePtr;
48
</programlisting></para>
50
<para><programlisting>
52
char real[XkbKeyNameLength];
53
/* this key name must be in the keys array */
54
char alias[XkbKeyNameLength];
55
/* symbolic key name as alias for the key */
56
} <emphasis>XkbKeyAliasRec</emphasis>,*XkbKeyAliasPtr;
57
</programlisting></para>
59
<para><programlisting>
60
typedef struct _XkbNamesRec {
61
Atom keycodes; /* identifies range and meaning of keycodes */
62
Atom geometry; /* identifies physical location, size, and shape of keys */
63
Atom symbols; /* identifies the symbols logically bound to the keys */
64
Atom types; /* identifies the set of key types */
65
Atom compat; /* identifies actions for keys using core protocol */
66
Atom vmods[XkbNumVirtualMods]; /* symbolic names for virtual modifiers */
67
Atom indicators[XkbNumIndicators]; /* symbolic names for indicators */
68
Atom groups[XkbNumKbdGroups]; /* symbolic names for keyboard groups */
69
XkbKeyNamePtr keys; /* symbolic key name array */
70
XkbKeyAliasPtr key_aliases; /* real/alias symbolic name pairs array */
71
Atom * radio_groups; /* radio group name array */
72
Atom phys_symbols; /* identifies the symbols engraved on the keyboard */
73
unsigned char num_keys; /* number of keys in the <emphasis> keys</emphasis> array */
74
unsigned char num_key_aliases; /* number of keys in the
75
<emphasis> key_aliases</emphasis> array */
76
unsigned short num_rg; /* number of radio groups */
77
} <emphasis>XkbNamesRec</emphasis>,*XkbNamesPtr; /*
78
</programlisting></para>
83
name identifies the range and meaning of the keycodes returned by the keyboard
84
in question. The <emphasis>
86
name, on the other hand, identifies the physical location, size and shape of
87
the various keys on the keyboard. As an example to distinguish between these
88
two names, consider function keys on PC-compatible keyboards. Function keys are
89
sometimes above the main keyboard and sometimes to the left of the main
90
keyboard, but the same keycode is used for the key that is logically F1
91
regardless of physical position. Thus, all PC-compatible keyboards share a
92
similar keycodes name but may have different geometry names.
95
<note><para>The keycodes name is intended to be a very general description of
96
the keycodes returned by a keyboard; a single keycodes name might cover
97
keyboards with differing numbers of keys provided all keys have the same
98
semantics when present. For example, 101 and 102 key PC keyboards might use the
99
same name. In these cases, applications can use the keyboard <emphasis>
101
name to determine which subset of the named keycodes is in use.</para></note>
106
name identifies the symbols logically bound to the keys. The symbols name is a
107
human or application-readable description of the intended locale or usage of
108
the keyboard with these symbols. The <emphasis>
109
phys_symbols</emphasis>
110
name, on the other hand, identifies the symbols actually engraved on the
111
keyboard. Given this, the <emphasis>
114
phys_symbols</emphasis>
115
names might be different. For example, the description for a keyboard that has
116
English US engravings, but that is using Swiss German symbols might have a
118
phys_symbols</emphasis>
119
name of "en_US" and a <emphasis>
128
name provides some information about the set of key types (see section 15.2)
129
that can be associated with the keyboard. In addition, each key type can have a
130
name, and each shift level of a type can have a name. Although these names are
131
stored in the map description with each of the types, they are accessed using
132
the same methods as the other symbolic names.
139
name provides some information about the rules used to bind actions to keys
140
that are changed using core protocol requests.
145
Xkb provides symbolic names for each of the 4 keyboard groups, 16 virtual
146
modifiers, 32 keyboard indicators, and 4 keyboard groups. These names are held
150
indicators</emphasis>
158
Each key has a four-byte symbolic name. All of the symbolic key names are held
161
array, and <emphasis>
163
reports the number of entries that are in the keys array. For each key, the
164
key name links keys with similar functions or in similar positions on keyboards
165
that report different keycodes. For example, the <emphasis>
167
key may emit keycode 23 on one keyboard and keycode 86 on another. By naming
168
this key "FK01" on both keyboards, the keyboard layout designer can reuse parts
169
of keyboard descriptions for different keyboards.
174
Key aliases allow the keyboard layout designer to assign multiple key names to
175
a single key. This allows the keyboard layout designer to refer to keys using
176
either their position or their "function." For example, a keyboard layout
177
designer may wish to refer to the left arrow key on a PC keyboard using the
178
ISO9995-5 positional specification of A31 or using the functional specification
179
of LEFT. The <emphasis>
180
key_aliases</emphasis>
181
field holds a variable-length array of real and alias key name pairs, and the
182
total number of entries in the <emphasis>
183
key_aliases</emphasis>
184
array is held in <emphasis>
185
num_key_aliases</emphasis>
186
. For each real and alias key name pair, the <emphasis>
188
field refers to the a name in the keys array, and the <emphasis>
190
field refers to the alias for that key. Using the previous example, the
191
keyboard designer may use the name A31 in the keys array, but also define the
192
name LEFT as an alias for A31 in the <emphasis>
193
key_aliases</emphasis>
197
<note><para>Key aliases defined in the geometry component of a keyboard mapping
198
(see Chapter 13) override those defined in the keycodes component of the server
199
database, which are stored in the <emphasis>
200
XkbNamesRec</emphasis>
202
xkb->names</emphasis>
203
). Therefore, consider the key aliases defined by the geometry before
204
considering key aliases supplied by the <emphasis>
205
XkbNamesRec</emphasis>
209
A radio group is a set of keys whose behavior simulates a set of radio buttons.
210
Once a key in a radio group is pressed, it stays logically depressed until
211
another key in the group is pressed, at which point the previously depressed
212
key is logically released. Consequently, at most one key in a radio group can
213
be logically depressed at one time.
218
Each radio group in the keyboard description can have a name. These names are
219
held in the variable-length array <emphasis>
220
radio_groups</emphasis>
223
tells how many elements are in the <emphasis>
224
radio_groups</emphasis>
230
<sect1 id='symbolic_names_masks'>
231
<title>Symbolic Names Masks</title>
234
Xkb provides several functions that work with symbolic names. Each of these
235
functions uses a mask to specify individual fields of the structures described
236
above. These masks and their relationships to the fields in a keyboard
237
description are shown in Table 18.1.
241
<title>Symbolic Names Masks</title>
243
<colspec colsep='0'/>
244
<colspec colsep='0'/>
245
<colspec colsep='0'/>
246
<colspec colsep='0'/>
249
<entry>Mask Bit</entry>
251
<entry>Keyboard Component</entry>
257
<entry>XkbKeycodesNameMask</entry>
258
<entry>(1<<0)</entry>
259
<entry>Xkb->names</entry>
260
<entry>keycodes</entry>
263
<entry>XkbGeometryNameMask</entry>
264
<entry>(1<<1)</entry>
265
<entry>Xkb->names</entry>
266
<entry>geometry</entry>
269
<entry>XkbSymbolsNameMask</entry>
270
<entry>(1<<2)</entry>
271
<entry>Xkb->names</entry>
272
<entry>symbols</entry>
275
<entry>XkbPhysSymbolsNameMask</entry>
276
<entry>(1<<3)</entry>
277
<entry>Xkb->names</entry>
278
<entry>phys_symbols</entry>
281
<entry>XkbTypesNameMask</entry>
282
<entry>(1<<4)</entry>
283
<entry>Xkb->names</entry>
287
<entry>XkbCompatNameMask</entry>
288
<entry>(1<<5)</entry>
289
<entry>Xkb->names</entry>
290
<entry>compat</entry>
293
<entry>XkbKeyTypeNamesMask</entry>
294
<entry>(1<<6)</entry>
295
<entry>Xkb->map</entry>
296
<entry>type[*].name</entry>
299
<entry>XkbKTLevelNamesMask</entry>
300
<entry>(1<<7)</entry>
301
<entry>Xkb->map</entry>
302
<entry>type[*].lvl_names[*]</entry>
305
<entry>XkbIndicatorNamesMask</entry>
306
<entry>(1<<8)</entry>
307
<entry>Xkb->names</entry>
308
<entry>indicators[*]</entry>
311
<entry>XkbKeyNamesMask</entry>
312
<entry>(1<<9)</entry>
313
<entry>Xkb->names</entry>
314
<entry>keys[*], num_keys</entry>
317
<entry>XkbKeyAliasesMask</entry>
318
<entry>(1<<10)</entry>
319
<entry>Xkb->names</entry>
320
<entry>key_aliases[*], num_key_aliases</entry>
323
<entry>XkbVirtualModNamesMask</entry>
324
<entry>(1<<11)</entry>
325
<entry>Xkb->names</entry>
326
<entry>vmods[*]</entry>
329
<entry>XkbGroupNamesMask</entry>
330
<entry>(1<<12)</entry>
331
<entry>Xkb->names</entry>
332
<entry>groups[*]</entry>
335
<entry>XkbRGNamesMask</entry>
336
<entry>(1<<13)</entry>
337
<entry>Xkb->names</entry>
338
<entry>radio_groups[*], num_rg</entry>
341
<entry>XkbComponentNamesMask</entry>
342
<entry>(0x3f)</entry>
343
<entry>Xkb->names</entry>
345
<para>keycodes,</para>
346
<para>geometry,</para>
347
<para>symbols,</para>
348
<para>physical symbols,</para>
349
<para>types, and</para>
350
<para>compatibility map</para>
354
<entry>XkbAllNamesMask</entry>
355
<entry>(0x3fff)</entry>
356
<entry>Xkb->names</entry>
357
<entry>all name components</entry>
364
<sect1 id='getting_symbolic_names_from_the_server'>
365
<title>Getting Symbolic Names From the Server</title>
368
To obtain symbolic names from the server, use <emphasis>
369
XkbGetNames</emphasis>
373
<informaltable frame='none'>
375
<colspec colsep='0'/>
378
<entry role='functiondecl'>
380
XkbGetNames</emphasis>
382
dpy, which, Xkb</emphasis>
387
<entry role='functionargdecl'>
390
; /* connection to the X server */
394
<entry role='functionargdecl'>
395
unsigned int <emphasis>
397
; /* mask of names or map components to be updated */
401
<entry role='functionargdecl'>
402
XkbDescPtr <emphasis>
404
/* keyboard description to be updated */
413
XkbGetNames</emphasis>
414
retrieves symbolic names for the components of the keyboard extension from the
415
X server. The <emphasis>
417
parameter specifies the name components to be updated in the <emphasis>
419
parameter, and is the bitwise inclusive OR of the valid names mask bits
420
defined in Table 18.1.
427
field of the keyboard description <emphasis>
432
XkbGetNames</emphasis>
433
allocates and initializes the <emphasis>
435
component of the keyboard description before obtaining the values specified by
445
XkbGetNames</emphasis>
446
obtains the values specified by <emphasis>
448
and copies them into the keyboard description <emphasis>
457
component of the <emphasis>
459
parameter is <emphasis>
462
XkbGetNames</emphasis>
463
does not retrieve type or shift level names, even if <emphasis>
464
XkbKeyTypeNamesMask</emphasis>
466
XkbKTLevelNamesMask</emphasis>
467
are set in <emphasis>
475
XkbGetNames</emphasis>
476
can return <emphasis>
485
BadImplementation</emphasis>
491
To free symbolic names, use <emphasis>
492
XkbFreeNames</emphasis>
498
<sect1 id='changing_symbolic_names_on_the_server'>
499
<title>Changing Symbolic Names on the Server</title>
502
To change the symbolic names in the server, first modify a local copy of the
503
keyboard description and then use either <emphasis>
504
XkbSetNames,</emphasis>
505
or, to save network traffic, use a <emphasis>
506
XkbNameChangesRec</emphasis>
507
structure and call <emphasis>
508
XkbChangeNames</emphasis>
509
to download the changes to the server. <emphasis>
510
XkbSetNames</emphasis>
512
XkbChangeNames</emphasis>
513
can generate <emphasis>
522
BadImplementation</emphasis>
526
<informaltable frame='none'>
528
<colspec colsep='0'/>
531
<entry role='functiondecl'>
533
XkbSetNames</emphasis>
535
dpy, which, first_type, num_types, xkb</emphasis>
540
<entry role='functionargdecl'>
543
; /* connection to the X server */
547
<entry role='functionargdecl'>
548
unsigned int <emphasis>
550
; /* mask of names or map components to be changed */
554
<entry role='functionargdecl'>
555
unsigned int <emphasis>
556
first_type</emphasis>
557
; /* first type whose name is to be changed */
561
<entry role='functionargdecl'>
562
unsigned int <emphasis>
564
; /* number of types for which names are to be changed */
568
<entry role='functionargdecl'>
569
XkbDescPtr <emphasis>
571
; /* keyboard description from which names are to be taken */
580
XkbSetNames</emphasis>
581
to change many names at the same time. For each bit set in <emphasis>
584
XkbSetNames</emphasis>
585
takes the corresponding value (or values in the case of arrays) from the
586
keyboard description <emphasis>
588
and sends it to the server.
594
first_type</emphasis>
597
arguments are used only if <emphasis>
598
XkbKeyTypeNamesMask</emphasis>
600
XkbKTLevelNamesMask</emphasis>
603
and specify a subset of the types for which the corresponding names are to be
604
changed. If either or both of these mask bits are set but the specified types
605
are illegal, <emphasis>
606
XkbSetNames</emphasis>
609
and does not update any of the names specified in <emphasis>
611
. The specified types are illegal if <emphasis>
613
does not include a map component or if <emphasis>
614
first_type</emphasis>
617
specify types that are not defined in the keyboard description.
624
<sect3 id='the_xkbnamechangesrec_structure'>
625
<title>The XkbNameChangesRec Structure</title>
629
XkbNameChangesRec</emphasis>
630
allows applications to identify small modifications to the symbolic names and
631
effectively reduces the amount of traffic sent to the server:
634
<para><programlisting>
635
typedef struct _XkbNameChanges {
636
unsigned int changed; /* name components that have
638
unsigned char first_type; /* first key type with a new
640
unsigned char num_types; /* number of types with new
642
unsigned char first_lvl; /* first key type with new level
644
unsigned char num_lvls; /* number of key types with new
646
unsigned char num_aliases; /* if key aliases changed,
647
total number of key aliases */
648
unsigned char num_rg; /* if radio groups changed, total
649
number of radio groups */
650
unsigned char first_key; /* first key with a new name */
651
unsigned char num_keys; /* number of keys with new names
653
unsigned short changed_vmods; /* mask of virtual
654
modifiers for which names have changed */
655
unsigned long changed_indicators; /* mask of indicators
656
for which names were changed */
657
unsigned char changed_groups; /* mask of groups for
658
which names were changed */
659
} <emphasis>XkbNameChangesRec</emphasis>, *XkbNameChangesPtr
660
</programlisting></para>
665
field specifies the name components that have changed and is the bitwise
666
inclusive OR of the valid names mask bits defined in Table 18.1. The rest of
667
the fields in the structure specify the ranges that have changed for the
668
various kinds of symbolic names, as shown in Table 18.2.
672
<title>XkbNameChanges Fields</title>
674
<colspec colsep='0'/>
675
<colspec colsep='0'/>
676
<colspec colsep='0'/>
677
<colspec colsep='0'/>
681
<entry>Fields</entry>
682
<entry>Component</entry>
688
<entry>XkbKeyTypeNamesMask</entry>
690
<para>first_type,</para>
691
<para>num_types</para>
693
<entry>Xkb->map</entry>
694
<entry>type[*].name</entry>
697
<entry>XkbKTLevelNamesMask</entry>
699
<para>first_lvl,</para>
700
<para>num_lvls</para>
702
<entry>Xkb->map</entry>
703
<entry>type[*].lvl_names[*]</entry>
706
<entry>XkbKeyAliasesMask</entry>
707
<entry>num_aliases</entry>
708
<entry>Xkb->names</entry>
709
<entry>key_aliases[*]</entry>
712
<entry>XkbRGNamesMask</entry>
713
<entry>num_rg</entry>
714
<entry>Xkb->names</entry>
715
<entry>radio_groups[*]</entry>
718
<entry>XkbKeyNamesMask</entry>
720
<para>first_key,</para>
721
<para>num_keys</para>
723
<entry>Xkb->names</entry>
724
<entry>keys[*]</entry>
727
<entry>XkbVirtualModNamesMask</entry>
728
<entry>changed_vmods</entry>
729
<entry>Xkb->names</entry>
730
<entry>vmods[*]</entry>
733
<entry>XkbIndicatorNamesMask</entry>
734
<entry>changed_indicators</entry>
735
<entry>Xkb->names</entry>
736
<entry>indicators[*]</entry>
739
<entry>XkbGroupNamesMask</entry>
740
<entry>changed_groups</entry>
741
<entry>Xkb->names</entry>
742
<entry>groups[*]</entry>
750
XkbChangeNames</emphasis>
751
provides a more flexible method for changing symbolic names than <emphasis>
752
XkbSetNames</emphasis>
753
and requires the use of an <emphasis>
754
XkbNameChangesRec</emphasis>
758
<informaltable frame='none'>
760
<colspec colsep='0'/>
763
<entry role='functiondecl'>
765
XkbChangeNames</emphasis>
767
dpy, xkb, changes</emphasis>
772
<entry role='functionargdecl'>
775
; /* connection to the X server */
779
<entry role='functionargdecl'>
780
XkbDescPtr <emphasis>
782
; /* keyboard description from which names are to be taken */
786
<entry role='functionargdecl'>
787
XkbNameChangesPtr <emphasis>
789
; /* names map components to be updated on the server */
798
XkbChangeNames</emphasis>
799
copies any names specified by <emphasis>
801
from the keyboard description, <emphasis>
803
, to the X server specified by <emphasis>
806
XkbChangeNames</emphasis>
807
aborts and returns <emphasis>
809
if any illegal type names or type shift level names are specified by <emphasis>
817
<sect1 id='tracking_name_changes'>
818
<title>Tracking Name Changes</title>
821
Whenever a symbolic name changes in the server’s keyboard description, the
822
server sends a <emphasis>
823
XkbNamesNotify</emphasis>
824
event to all interested clients. To receive name notify events, use <emphasis>
825
XkbSelectEvents</emphasis>
826
(see section 4.3) with <emphasis>
827
XkbNamesNotifyMask</emphasis>
828
in both the <emphasis>
829
bits_to_change</emphasis>
831
values_for_bits</emphasis>
837
To receive events for only specific names, use <emphasis>
838
XkbSelectEventDetails</emphasis>
840
event_type</emphasis>
841
parameter to <emphasis>
842
XkbNamesNotify</emphasis>
843
, and set both the <emphasis>
844
bits_to_change </emphasis>
846
values_for_bits</emphasis>
847
detail parameter to a mask composed of a bitwise OR of masks in Table 18.1.
852
The structure for the <emphasis>
853
XkbNamesNotify</emphasis>
854
event is defined as follows:
857
<para><programlisting>
859
int type; /* Xkb extension base event code */
860
unsigned long serial; /* X server serial number for
862
Bool send_event; /* <emphasis>True</emphasis>
863
=> synthetically generated */
864
Display * display; /* server connection where event
866
Time time; /* server time when event generated */
867
int xkb_type; /* <emphasis>XkbNamesNotify</emphasis> */
868
int device; /* Xkb device ID, will not be
869
<emphasis>XkbUseCoreKbd</emphasis> */
870
unsigned int changed; /* mask of name components
872
int first_type; /* first key type with a new name */
873
int num_types; /* number of types with new names */
874
int first_lvl; /* first key type with new level names */
875
int num_lvls; /* number of key types with new level names */
876
int num_aliases; /* if key aliases changed, total number
878
int num_radio_groups; /* if radio groups changed,
879
total number of radio groups */
880
unsigned int changed_vmods; /* mask of virtual modifiers for
881
which names have changed */
882
unsigned int changed_groups; /* mask of groups for
883
which names were changed */
884
unsigned int changed_indicators; /* mask of indicators for which
885
names were changed */
886
int first_key; /* first key with a new name */
887
int num_keys; /* number of keys with new names */
888
} <emphasis>XkbNamesNotifyEvent</emphasis>;
889
</programlisting></para>
894
field specifies the name components that have changed and is the bitwise
895
inclusive OR of the valid names mask bits defined in Table 18.1. The other
896
fields in this event are interpreted as the like-named fields in an <emphasis>
897
XkbNameChangesRec</emphasis> , as previously defined.
902
When your application receives a X<emphasis>
903
kbNamesNotify</emphasis>
904
event, you can note the changed names in a changes structure using <emphasis>
905
XkbNoteNameChanges</emphasis>
909
<informaltable frame='none'>
911
<colspec colsep='0'/>
914
<entry role='functiondecl'>
916
XkbNoteNameChanges</emphasis>
927
<entry role='functionargdecl'>
928
XkbNameChangesPtr <emphasis>
931
XkbNameChanges</emphasis>
932
structure to be updated */
936
<entry role='functionargdecl'>
937
XkbNamesNotifyEvent * <emphasis>
939
; /* event from which changes are to be copied */
943
<entry role='functionargdecl'>
944
unsigned int <emphasis>
946
; /* types of names for which changes are to be noted */
956
parameter is the bitwise inclusive OR of the valid names mask bits shown in
957
Table 18.1. <emphasis>
958
XkbNoteNameChanges</emphasis>
959
copies any changes that are reported in <emphasis>
961
and specified in <emphasis>
963
into the changes record specified by <emphasis>
970
To update the local copy of the keyboard description with the actual values,
972
XkbGetNameChanges</emphasis>
973
the results of one or more calls to <emphasis>
974
XkbNoteNameChanges</emphasis>
979
<informaltable frame='none'>
981
<colspec colsep='0'/>
984
<entry role='functiondecl'>
986
XkbGetNameChanges</emphasis>
997
<entry role='functionargdecl'>
1000
; /* connection to the X server */
1004
<entry role='functionargdecl'>
1005
XkbDescPtr <emphasis>
1007
; /* keyboard description to which names are copied */
1011
<entry role='functionargdecl'>
1012
XkbNameChangesPtr <emphasis>
1014
; /* names components to be obtained from the server */
1023
XkbGetNameChanges</emphasis>
1024
examines the <emphasis>
1026
parameter, retrieves the necessary information from the server, and places the
1027
results into the <emphasis>
1029
keyboard description.
1035
XkbGetNamesChanges</emphasis>
1036
can generate <emphasis>
1039
BadImplementation,</emphasis>
1047
<sect1 id='allocating_and_freeing_symbolic_names'>
1048
<title>Allocating and Freeing Symbolic Names</title>
1051
Most applications do not need to directly allocate symbolic names structures.
1052
Do not allocate a names structure directly using <emphasis>
1056
if your application changes the number of key aliases or radio groups or
1057
constructs a symbolic names structure without loading the necessary components
1058
from the X server. Instead use <emphasis>
1059
XkbAllocNames</emphasis>
1063
<informaltable frame='none'>
1065
<colspec colsep='0'/>
1068
<entry role='functiondecl'>
1070
XkbAllocNames</emphasis>
1072
xkb, which, num_rg, num_key_aliases)</emphasis>
1076
<entry role='functionargdecl'>
1077
XkbDescPtr <emphasis>
1079
/* keyboard description for which names are to be allocated */
1083
<entry role='functionargdecl'>
1084
unsigned int <emphasis>
1086
/* mask of names to be allocated */
1090
<entry role='functionargdecl'>
1093
/* total number of radio group names needed */
1097
<entry role='functionargdecl'>
1099
num_key_aliases;</emphasis>
1100
/* total number of key aliases needed */
1109
XkbAllocNames</emphasis>
1110
can return <emphasis>
1113
BadMatch,</emphasis>
1120
parameter is the bitwise inclusive OR of the valid names mask bits defined in
1126
Do not free symbolic names structures directly using <emphasis>
1131
XkbFreeNames</emphasis>
1136
<informaltable frame='none'>
1138
<colspec colsep='0'/>
1141
<entry role='functiondecl'>
1143
XkbFreeNames</emphasis>
1145
xkb, which, free_map)</emphasis>
1149
<entry role='functionargdecl'>
1150
XkbDescPtr <emphasis>
1152
; /* keyboard description for which names are to be freed */
1156
<entry role='functionargdecl'>
1157
unsigned int <emphasis>
1159
; /* mask of names components to be freed */
1163
<entry role='functionargdecl'>
1168
=> XkbNamesRec structure itself should be freed */
1178
parameter is the bitwise inclusive OR of the valid names mask bits defined in