Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
emscripten-core
GitHub Repository: emscripten-core/emscripten
Path: blob/main/system/include/X11/extensions/XKBstr.h
6169 views
1
/************************************************************
2
Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc.
3
4
Permission to use, copy, modify, and distribute this
5
software and its documentation for any purpose and without
6
fee is hereby granted, provided that the above copyright
7
notice appear in all copies and that both that copyright
8
notice and this permission notice appear in supporting
9
documentation, and that the name of Silicon Graphics not be
10
used in advertising or publicity pertaining to distribution
11
of the software without specific prior written permission.
12
Silicon Graphics makes no representation about the suitability
13
of this software for any purpose. It is provided "as is"
14
without any express or implied warranty.
15
16
SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
17
SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
18
AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
19
GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
20
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
21
DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
22
OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
23
THE USE OR PERFORMANCE OF THIS SOFTWARE.
24
25
********************************************************/
26
27
#ifndef _XKBSTR_H_
28
#define _XKBSTR_H_
29
30
#include <X11/extensions/XKB.h>
31
32
#define XkbCharToInt(v) ((v)&0x80?(int)((v)|(~0xff)):(int)((v)&0x7f))
33
#define XkbIntTo2Chars(i,h,l) (((h)=((i>>8)&0xff)),((l)=((i)&0xff)))
34
35
#if defined(WORD64) && defined(UNSIGNEDBITFIELDS)
36
#define Xkb2CharsToInt(h,l) ((h)&0x80?(int)(((h)<<8)|(l)|(~0xffff)):\
37
(int)(((h)<<8)|(l)&0x7fff))
38
#else
39
#define Xkb2CharsToInt(h,l) ((short)(((h)<<8)|(l)))
40
#endif
41
42
/*
43
* Common data structures and access macros
44
*/
45
46
typedef struct _XkbStateRec {
47
unsigned char group;
48
unsigned char locked_group;
49
unsigned short base_group;
50
unsigned short latched_group;
51
unsigned char mods;
52
unsigned char base_mods;
53
unsigned char latched_mods;
54
unsigned char locked_mods;
55
unsigned char compat_state;
56
unsigned char grab_mods;
57
unsigned char compat_grab_mods;
58
unsigned char lookup_mods;
59
unsigned char compat_lookup_mods;
60
unsigned short ptr_buttons;
61
} XkbStateRec,*XkbStatePtr;
62
#define XkbModLocks(s) ((s)->locked_mods)
63
#define XkbStateMods(s) ((s)->base_mods|(s)->latched_mods|XkbModLocks(s))
64
#define XkbGroupLock(s) ((s)->locked_group)
65
#define XkbStateGroup(s) ((s)->base_group+(s)->latched_group+XkbGroupLock(s))
66
#define XkbStateFieldFromRec(s) XkbBuildCoreState((s)->lookup_mods,(s)->group)
67
#define XkbGrabStateFromRec(s) XkbBuildCoreState((s)->grab_mods,(s)->group)
68
69
typedef struct _XkbMods {
70
unsigned char mask; /* effective mods */
71
unsigned char real_mods;
72
unsigned short vmods;
73
} XkbModsRec,*XkbModsPtr;
74
75
typedef struct _XkbKTMapEntry {
76
Bool active;
77
unsigned char level;
78
XkbModsRec mods;
79
} XkbKTMapEntryRec,*XkbKTMapEntryPtr;
80
81
typedef struct _XkbKeyType {
82
XkbModsRec mods;
83
unsigned char num_levels;
84
unsigned char map_count;
85
XkbKTMapEntryPtr map;
86
XkbModsPtr preserve;
87
Atom name;
88
Atom * level_names;
89
} XkbKeyTypeRec, *XkbKeyTypePtr;
90
91
#define XkbNumGroups(g) ((g)&0x0f)
92
#define XkbOutOfRangeGroupInfo(g) ((g)&0xf0)
93
#define XkbOutOfRangeGroupAction(g) ((g)&0xc0)
94
#define XkbOutOfRangeGroupNumber(g) (((g)&0x30)>>4)
95
#define XkbSetGroupInfo(g,w,n) (((w)&0xc0)|(((n)&3)<<4)|((g)&0x0f))
96
#define XkbSetNumGroups(g,n) (((g)&0xf0)|((n)&0x0f))
97
98
/*
99
* Structures and access macros used primarily by the server
100
*/
101
102
typedef struct _XkbBehavior {
103
unsigned char type;
104
unsigned char data;
105
} XkbBehavior;
106
107
#define XkbAnyActionDataSize 7
108
typedef struct _XkbAnyAction {
109
unsigned char type;
110
unsigned char data[XkbAnyActionDataSize];
111
} XkbAnyAction;
112
113
typedef struct _XkbModAction {
114
unsigned char type;
115
unsigned char flags;
116
unsigned char mask;
117
unsigned char real_mods;
118
unsigned char vmods1;
119
unsigned char vmods2;
120
} XkbModAction;
121
#define XkbModActionVMods(a) \
122
((short)(((a)->vmods1<<8)|((a)->vmods2)))
123
#define XkbSetModActionVMods(a,v) \
124
(((a)->vmods1=(((v)>>8)&0xff)),(a)->vmods2=((v)&0xff))
125
126
typedef struct _XkbGroupAction {
127
unsigned char type;
128
unsigned char flags;
129
char group_XXX;
130
} XkbGroupAction;
131
#define XkbSAGroup(a) (XkbCharToInt((a)->group_XXX))
132
#define XkbSASetGroup(a,g) ((a)->group_XXX=(g))
133
134
typedef struct _XkbISOAction {
135
unsigned char type;
136
unsigned char flags;
137
unsigned char mask;
138
unsigned char real_mods;
139
char group_XXX;
140
unsigned char affect;
141
unsigned char vmods1;
142
unsigned char vmods2;
143
} XkbISOAction;
144
145
typedef struct _XkbPtrAction {
146
unsigned char type;
147
unsigned char flags;
148
unsigned char high_XXX;
149
unsigned char low_XXX;
150
unsigned char high_YYY;
151
unsigned char low_YYY;
152
} XkbPtrAction;
153
#define XkbPtrActionX(a) (Xkb2CharsToInt((a)->high_XXX,(a)->low_XXX))
154
#define XkbPtrActionY(a) (Xkb2CharsToInt((a)->high_YYY,(a)->low_YYY))
155
#define XkbSetPtrActionX(a,x) (XkbIntTo2Chars(x,(a)->high_XXX,(a)->low_XXX))
156
#define XkbSetPtrActionY(a,y) (XkbIntTo2Chars(y,(a)->high_YYY,(a)->low_YYY))
157
158
typedef struct _XkbPtrBtnAction {
159
unsigned char type;
160
unsigned char flags;
161
unsigned char count;
162
unsigned char button;
163
} XkbPtrBtnAction;
164
165
typedef struct _XkbPtrDfltAction {
166
unsigned char type;
167
unsigned char flags;
168
unsigned char affect;
169
char valueXXX;
170
} XkbPtrDfltAction;
171
#define XkbSAPtrDfltValue(a) (XkbCharToInt((a)->valueXXX))
172
#define XkbSASetPtrDfltValue(a,c) ((a)->valueXXX= ((c)&0xff))
173
174
typedef struct _XkbSwitchScreenAction {
175
unsigned char type;
176
unsigned char flags;
177
char screenXXX;
178
} XkbSwitchScreenAction;
179
#define XkbSAScreen(a) (XkbCharToInt((a)->screenXXX))
180
#define XkbSASetScreen(a,s) ((a)->screenXXX= ((s)&0xff))
181
182
typedef struct _XkbCtrlsAction {
183
unsigned char type;
184
unsigned char flags;
185
unsigned char ctrls3;
186
unsigned char ctrls2;
187
unsigned char ctrls1;
188
unsigned char ctrls0;
189
} XkbCtrlsAction;
190
#define XkbActionSetCtrls(a,c) (((a)->ctrls3=(((c)>>24)&0xff)),\
191
((a)->ctrls2=(((c)>>16)&0xff)),\
192
((a)->ctrls1=(((c)>>8)&0xff)),\
193
((a)->ctrls0=((c)&0xff)))
194
#define XkbActionCtrls(a) ((((unsigned int)(a)->ctrls3)<<24)|\
195
(((unsigned int)(a)->ctrls2)<<16)|\
196
(((unsigned int)(a)->ctrls1)<<8)|\
197
((unsigned int)((a)->ctrls0)))
198
199
typedef struct _XkbMessageAction {
200
unsigned char type;
201
unsigned char flags;
202
unsigned char message[6];
203
} XkbMessageAction;
204
205
typedef struct _XkbRedirectKeyAction {
206
unsigned char type;
207
unsigned char new_key;
208
unsigned char mods_mask;
209
unsigned char mods;
210
unsigned char vmods_mask0;
211
unsigned char vmods_mask1;
212
unsigned char vmods0;
213
unsigned char vmods1;
214
} XkbRedirectKeyAction;
215
216
#define XkbSARedirectVMods(a) ((((unsigned int)(a)->vmods1)<<8)|\
217
((unsigned int)(a)->vmods0))
218
#define XkbSARedirectSetVMods(a,m) (((a)->vmods_mask1=(((m)>>8)&0xff)),\
219
((a)->vmods_mask0=((m)&0xff)))
220
#define XkbSARedirectVModsMask(a) ((((unsigned int)(a)->vmods_mask1)<<8)|\
221
((unsigned int)(a)->vmods_mask0))
222
#define XkbSARedirectSetVModsMask(a,m) (((a)->vmods_mask1=(((m)>>8)&0xff)),\
223
((a)->vmods_mask0=((m)&0xff)))
224
225
typedef struct _XkbDeviceBtnAction {
226
unsigned char type;
227
unsigned char flags;
228
unsigned char count;
229
unsigned char button;
230
unsigned char device;
231
} XkbDeviceBtnAction;
232
233
typedef struct _XkbDeviceValuatorAction {
234
unsigned char type;
235
unsigned char device;
236
unsigned char v1_what;
237
unsigned char v1_ndx;
238
unsigned char v1_value;
239
unsigned char v2_what;
240
unsigned char v2_ndx;
241
unsigned char v2_value;
242
} XkbDeviceValuatorAction;
243
244
typedef union _XkbAction {
245
XkbAnyAction any;
246
XkbModAction mods;
247
XkbGroupAction group;
248
XkbISOAction iso;
249
XkbPtrAction ptr;
250
XkbPtrBtnAction btn;
251
XkbPtrDfltAction dflt;
252
XkbSwitchScreenAction screen;
253
XkbCtrlsAction ctrls;
254
XkbMessageAction msg;
255
XkbRedirectKeyAction redirect;
256
XkbDeviceBtnAction devbtn;
257
XkbDeviceValuatorAction devval;
258
unsigned char type;
259
} XkbAction;
260
261
typedef struct _XkbControls {
262
unsigned char mk_dflt_btn;
263
unsigned char num_groups;
264
unsigned char groups_wrap;
265
XkbModsRec internal;
266
XkbModsRec ignore_lock;
267
unsigned int enabled_ctrls;
268
unsigned short repeat_delay;
269
unsigned short repeat_interval;
270
unsigned short slow_keys_delay;
271
unsigned short debounce_delay;
272
unsigned short mk_delay;
273
unsigned short mk_interval;
274
unsigned short mk_time_to_max;
275
unsigned short mk_max_speed;
276
short mk_curve;
277
unsigned short ax_options;
278
unsigned short ax_timeout;
279
unsigned short axt_opts_mask;
280
unsigned short axt_opts_values;
281
unsigned int axt_ctrls_mask;
282
unsigned int axt_ctrls_values;
283
unsigned char per_key_repeat[XkbPerKeyBitArraySize];
284
} XkbControlsRec, *XkbControlsPtr;
285
286
#define XkbAX_AnyFeedback(c) ((c)->enabled_ctrls&XkbAccessXFeedbackMask)
287
#define XkbAX_NeedOption(c,w) ((c)->ax_options&(w))
288
#define XkbAX_NeedFeedback(c,w) (XkbAX_AnyFeedback(c)&&XkbAX_NeedOption(c,w))
289
290
typedef struct _XkbServerMapRec {
291
unsigned short num_acts;
292
unsigned short size_acts;
293
XkbAction *acts;
294
295
XkbBehavior *behaviors;
296
unsigned short *key_acts;
297
#if defined(__cplusplus) || defined(c_plusplus)
298
/* explicit is a C++ reserved word */
299
unsigned char *c_explicit;
300
#else
301
unsigned char *explicit;
302
#endif
303
unsigned char vmods[XkbNumVirtualMods];
304
unsigned short *vmodmap;
305
} XkbServerMapRec, *XkbServerMapPtr;
306
307
#define XkbSMKeyActionsPtr(m,k) (&(m)->acts[(m)->key_acts[k]])
308
309
/*
310
* Structures and access macros used primarily by clients
311
*/
312
313
typedef struct _XkbSymMapRec {
314
unsigned char kt_index[XkbNumKbdGroups];
315
unsigned char group_info;
316
unsigned char width;
317
unsigned short offset;
318
} XkbSymMapRec, *XkbSymMapPtr;
319
320
typedef struct _XkbClientMapRec {
321
unsigned char size_types;
322
unsigned char num_types;
323
XkbKeyTypePtr types;
324
325
unsigned short size_syms;
326
unsigned short num_syms;
327
KeySym *syms;
328
XkbSymMapPtr key_sym_map;
329
330
unsigned char *modmap;
331
} XkbClientMapRec, *XkbClientMapPtr;
332
333
#define XkbCMKeyGroupInfo(m,k) ((m)->key_sym_map[k].group_info)
334
#define XkbCMKeyNumGroups(m,k) (XkbNumGroups((m)->key_sym_map[k].group_info))
335
#define XkbCMKeyGroupWidth(m,k,g) (XkbCMKeyType(m,k,g)->num_levels)
336
#define XkbCMKeyGroupsWidth(m,k) ((m)->key_sym_map[k].width)
337
#define XkbCMKeyTypeIndex(m,k,g) ((m)->key_sym_map[k].kt_index[g&0x3])
338
#define XkbCMKeyType(m,k,g) (&(m)->types[XkbCMKeyTypeIndex(m,k,g)])
339
#define XkbCMKeyNumSyms(m,k) (XkbCMKeyGroupsWidth(m,k)*XkbCMKeyNumGroups(m,k))
340
#define XkbCMKeySymsOffset(m,k) ((m)->key_sym_map[k].offset)
341
#define XkbCMKeySymsPtr(m,k) (&(m)->syms[XkbCMKeySymsOffset(m,k)])
342
343
/*
344
* Compatibility structures and access macros
345
*/
346
347
typedef struct _XkbSymInterpretRec {
348
KeySym sym;
349
unsigned char flags;
350
unsigned char match;
351
unsigned char mods;
352
unsigned char virtual_mod;
353
XkbAnyAction act;
354
} XkbSymInterpretRec,*XkbSymInterpretPtr;
355
356
typedef struct _XkbCompatMapRec {
357
XkbSymInterpretPtr sym_interpret;
358
XkbModsRec groups[XkbNumKbdGroups];
359
unsigned short num_si;
360
unsigned short size_si;
361
} XkbCompatMapRec, *XkbCompatMapPtr;
362
363
typedef struct _XkbIndicatorMapRec {
364
unsigned char flags;
365
unsigned char which_groups;
366
unsigned char groups;
367
unsigned char which_mods;
368
XkbModsRec mods;
369
unsigned int ctrls;
370
} XkbIndicatorMapRec, *XkbIndicatorMapPtr;
371
372
#define XkbIM_IsAuto(i) ((((i)->flags&XkbIM_NoAutomatic)==0)&&\
373
(((i)->which_groups&&(i)->groups)||\
374
((i)->which_mods&&(i)->mods.mask)||\
375
((i)->ctrls)))
376
#define XkbIM_InUse(i) (((i)->flags)||((i)->which_groups)||\
377
((i)->which_mods)||((i)->ctrls))
378
379
380
typedef struct _XkbIndicatorRec {
381
unsigned long phys_indicators;
382
XkbIndicatorMapRec maps[XkbNumIndicators];
383
} XkbIndicatorRec,*XkbIndicatorPtr;
384
385
typedef struct _XkbKeyNameRec {
386
char name[XkbKeyNameLength];
387
} XkbKeyNameRec,*XkbKeyNamePtr;
388
389
typedef struct _XkbKeyAliasRec {
390
char real[XkbKeyNameLength];
391
char alias[XkbKeyNameLength];
392
} XkbKeyAliasRec,*XkbKeyAliasPtr;
393
394
/*
395
* Names for everything
396
*/
397
typedef struct _XkbNamesRec {
398
Atom keycodes;
399
Atom geometry;
400
Atom symbols;
401
Atom types;
402
Atom compat;
403
Atom vmods[XkbNumVirtualMods];
404
Atom indicators[XkbNumIndicators];
405
Atom groups[XkbNumKbdGroups];
406
XkbKeyNamePtr keys;
407
XkbKeyAliasPtr key_aliases;
408
Atom *radio_groups;
409
Atom phys_symbols;
410
411
unsigned char num_keys;
412
unsigned char num_key_aliases;
413
unsigned short num_rg;
414
} XkbNamesRec,*XkbNamesPtr;
415
416
typedef struct _XkbGeometry *XkbGeometryPtr;
417
/*
418
* Tie it all together into one big keyboard description
419
*/
420
typedef struct _XkbDesc {
421
struct _XDisplay * dpy;
422
unsigned short flags;
423
unsigned short device_spec;
424
KeyCode min_key_code;
425
KeyCode max_key_code;
426
427
XkbControlsPtr ctrls;
428
XkbServerMapPtr server;
429
XkbClientMapPtr map;
430
XkbIndicatorPtr indicators;
431
XkbNamesPtr names;
432
XkbCompatMapPtr compat;
433
XkbGeometryPtr geom;
434
} XkbDescRec, *XkbDescPtr;
435
#define XkbKeyKeyTypeIndex(d,k,g) (XkbCMKeyTypeIndex((d)->map,k,g))
436
#define XkbKeyKeyType(d,k,g) (XkbCMKeyType((d)->map,k,g))
437
#define XkbKeyGroupWidth(d,k,g) (XkbCMKeyGroupWidth((d)->map,k,g))
438
#define XkbKeyGroupsWidth(d,k) (XkbCMKeyGroupsWidth((d)->map,k))
439
#define XkbKeyGroupInfo(d,k) (XkbCMKeyGroupInfo((d)->map,(k)))
440
#define XkbKeyNumGroups(d,k) (XkbCMKeyNumGroups((d)->map,(k)))
441
#define XkbKeyNumSyms(d,k) (XkbCMKeyNumSyms((d)->map,(k)))
442
#define XkbKeySymsPtr(d,k) (XkbCMKeySymsPtr((d)->map,(k)))
443
#define XkbKeySym(d,k,n) (XkbKeySymsPtr(d,k)[n])
444
#define XkbKeySymEntry(d,k,sl,g) \
445
(XkbKeySym(d,k,((XkbKeyGroupsWidth(d,k)*(g))+(sl))))
446
#define XkbKeyAction(d,k,n) \
447
(XkbKeyHasActions(d,k)?&XkbKeyActionsPtr(d,k)[n]:NULL)
448
#define XkbKeyActionEntry(d,k,sl,g) \
449
(XkbKeyHasActions(d,k)?\
450
XkbKeyAction(d,k,((XkbKeyGroupsWidth(d,k)*(g))+(sl))):NULL)
451
452
#define XkbKeyHasActions(d,k) ((d)->server->key_acts[k]!=0)
453
#define XkbKeyNumActions(d,k) (XkbKeyHasActions(d,k)?XkbKeyNumSyms(d,k):1)
454
#define XkbKeyActionsPtr(d,k) (XkbSMKeyActionsPtr((d)->server,k))
455
#define XkbKeycodeInRange(d,k) (((k)>=(d)->min_key_code)&&\
456
((k)<=(d)->max_key_code))
457
#define XkbNumKeys(d) ((d)->max_key_code-(d)->min_key_code+1)
458
459
460
/*
461
* The following structures can be used to track changes
462
* to a keyboard device
463
*/
464
typedef struct _XkbMapChanges {
465
unsigned short changed;
466
KeyCode min_key_code;
467
KeyCode max_key_code;
468
unsigned char first_type;
469
unsigned char num_types;
470
KeyCode first_key_sym;
471
unsigned char num_key_syms;
472
KeyCode first_key_act;
473
unsigned char num_key_acts;
474
KeyCode first_key_behavior;
475
unsigned char num_key_behaviors;
476
KeyCode first_key_explicit;
477
unsigned char num_key_explicit;
478
KeyCode first_modmap_key;
479
unsigned char num_modmap_keys;
480
KeyCode first_vmodmap_key;
481
unsigned char num_vmodmap_keys;
482
unsigned char pad;
483
unsigned short vmods;
484
} XkbMapChangesRec,*XkbMapChangesPtr;
485
486
typedef struct _XkbControlsChanges {
487
unsigned int changed_ctrls;
488
unsigned int enabled_ctrls_changes;
489
Bool num_groups_changed;
490
} XkbControlsChangesRec,*XkbControlsChangesPtr;
491
492
typedef struct _XkbIndicatorChanges {
493
unsigned int state_changes;
494
unsigned int map_changes;
495
} XkbIndicatorChangesRec,*XkbIndicatorChangesPtr;
496
497
typedef struct _XkbNameChanges {
498
unsigned int changed;
499
unsigned char first_type;
500
unsigned char num_types;
501
unsigned char first_lvl;
502
unsigned char num_lvls;
503
unsigned char num_aliases;
504
unsigned char num_rg;
505
unsigned char first_key;
506
unsigned char num_keys;
507
unsigned short changed_vmods;
508
unsigned long changed_indicators;
509
unsigned char changed_groups;
510
} XkbNameChangesRec,*XkbNameChangesPtr;
511
512
typedef struct _XkbCompatChanges {
513
unsigned char changed_groups;
514
unsigned short first_si;
515
unsigned short num_si;
516
} XkbCompatChangesRec,*XkbCompatChangesPtr;
517
518
typedef struct _XkbChanges {
519
unsigned short device_spec;
520
unsigned short state_changes;
521
XkbMapChangesRec map;
522
XkbControlsChangesRec ctrls;
523
XkbIndicatorChangesRec indicators;
524
XkbNameChangesRec names;
525
XkbCompatChangesRec compat;
526
} XkbChangesRec, *XkbChangesPtr;
527
528
/*
529
* These data structures are used to construct a keymap from
530
* a set of components or to list components in the server
531
* database.
532
*/
533
typedef struct _XkbComponentNames {
534
char * keymap;
535
char * keycodes;
536
char * types;
537
char * compat;
538
char * symbols;
539
char * geometry;
540
} XkbComponentNamesRec, *XkbComponentNamesPtr;
541
542
typedef struct _XkbComponentName {
543
unsigned short flags;
544
char * name;
545
} XkbComponentNameRec,*XkbComponentNamePtr;
546
547
typedef struct _XkbComponentList {
548
int num_keymaps;
549
int num_keycodes;
550
int num_types;
551
int num_compat;
552
int num_symbols;
553
int num_geometry;
554
XkbComponentNamePtr keymaps;
555
XkbComponentNamePtr keycodes;
556
XkbComponentNamePtr types;
557
XkbComponentNamePtr compat;
558
XkbComponentNamePtr symbols;
559
XkbComponentNamePtr geometry;
560
} XkbComponentListRec, *XkbComponentListPtr;
561
562
/*
563
* The following data structures describe and track changes to a
564
* non-keyboard extension device
565
*/
566
typedef struct _XkbDeviceLedInfo {
567
unsigned short led_class;
568
unsigned short led_id;
569
unsigned int phys_indicators;
570
unsigned int maps_present;
571
unsigned int names_present;
572
unsigned int state;
573
Atom names[XkbNumIndicators];
574
XkbIndicatorMapRec maps[XkbNumIndicators];
575
} XkbDeviceLedInfoRec,*XkbDeviceLedInfoPtr;
576
577
typedef struct _XkbDeviceInfo {
578
char * name;
579
Atom type;
580
unsigned short device_spec;
581
Bool has_own_state;
582
unsigned short supported;
583
unsigned short unsupported;
584
585
unsigned short num_btns;
586
XkbAction * btn_acts;
587
588
unsigned short sz_leds;
589
unsigned short num_leds;
590
unsigned short dflt_kbd_fb;
591
unsigned short dflt_led_fb;
592
XkbDeviceLedInfoPtr leds;
593
} XkbDeviceInfoRec,*XkbDeviceInfoPtr;
594
595
#define XkbXI_DevHasBtnActs(d) (((d)->num_btns>0)&&((d)->btn_acts!=NULL))
596
#define XkbXI_LegalDevBtn(d,b) (XkbXI_DevHasBtnActs(d)&&((b)<(d)->num_btns))
597
#define XkbXI_DevHasLeds(d) (((d)->num_leds>0)&&((d)->leds!=NULL))
598
599
typedef struct _XkbDeviceLedChanges {
600
unsigned short led_class;
601
unsigned short led_id;
602
unsigned int defined; /* names or maps changed */
603
struct _XkbDeviceLedChanges *next;
604
} XkbDeviceLedChangesRec,*XkbDeviceLedChangesPtr;
605
606
typedef struct _XkbDeviceChanges {
607
unsigned int changed;
608
unsigned short first_btn;
609
unsigned short num_btns;
610
XkbDeviceLedChangesRec leds;
611
} XkbDeviceChangesRec,*XkbDeviceChangesPtr;
612
613
#endif /* _XKBSTR_H_ */
614
615