File indexing completed on 2025-01-18 10:14:23
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027 #ifndef _XKBSTR_H_
0028 #define _XKBSTR_H_
0029
0030 #include <X11/extensions/XKB.h>
0031
0032 #define XkbCharToInt(v) ((v)&0x80?(int)((v)|(~0xff)):(int)((v)&0x7f))
0033 #define XkbIntTo2Chars(i,h,l) (((h)=((i>>8)&0xff)),((l)=((i)&0xff)))
0034 #define Xkb2CharsToInt(h,l) ((short)(((h)<<8)|(l)))
0035
0036
0037
0038
0039
0040
0041 #ifdef __clang__
0042 #pragma clang diagnostic push
0043 #pragma clang diagnostic ignored "-Wpadded"
0044 #endif
0045
0046
0047
0048
0049
0050 typedef struct _XkbStateRec {
0051 unsigned char group;
0052 unsigned char locked_group;
0053 unsigned short base_group;
0054 unsigned short latched_group;
0055 unsigned char mods;
0056 unsigned char base_mods;
0057 unsigned char latched_mods;
0058 unsigned char locked_mods;
0059 unsigned char compat_state;
0060 unsigned char grab_mods;
0061 unsigned char compat_grab_mods;
0062 unsigned char lookup_mods;
0063 unsigned char compat_lookup_mods;
0064 unsigned short ptr_buttons;
0065 } XkbStateRec,*XkbStatePtr;
0066 #define XkbModLocks(s) ((s)->locked_mods)
0067 #define XkbStateMods(s) ((s)->base_mods|(s)->latched_mods|XkbModLocks(s))
0068 #define XkbGroupLock(s) ((s)->locked_group)
0069 #define XkbStateGroup(s) ((s)->base_group+(s)->latched_group+XkbGroupLock(s))
0070 #define XkbStateFieldFromRec(s) XkbBuildCoreState((s)->lookup_mods,(s)->group)
0071 #define XkbGrabStateFromRec(s) XkbBuildCoreState((s)->grab_mods,(s)->group)
0072
0073 typedef struct _XkbMods {
0074 unsigned char mask;
0075 unsigned char real_mods;
0076 unsigned short vmods;
0077 } XkbModsRec,*XkbModsPtr;
0078
0079 typedef struct _XkbKTMapEntry {
0080 Bool active;
0081 unsigned char level;
0082 XkbModsRec mods;
0083 } XkbKTMapEntryRec,*XkbKTMapEntryPtr;
0084
0085 typedef struct _XkbKeyType {
0086 XkbModsRec mods;
0087 unsigned char num_levels;
0088 unsigned char map_count;
0089
0090 XkbKTMapEntryPtr map;
0091
0092 XkbModsPtr preserve;
0093 Atom name;
0094
0095 Atom * level_names;
0096 } XkbKeyTypeRec, *XkbKeyTypePtr;
0097
0098 #define XkbNumGroups(g) ((g)&0x0f)
0099 #define XkbOutOfRangeGroupInfo(g) ((g)&0xf0)
0100 #define XkbOutOfRangeGroupAction(g) ((g)&0xc0)
0101 #define XkbOutOfRangeGroupNumber(g) (((g)&0x30)>>4)
0102 #define XkbSetGroupInfo(g,w,n) (((w)&0xc0)|(((n)&3)<<4)|((g)&0x0f))
0103 #define XkbSetNumGroups(g,n) (((g)&0xf0)|((n)&0x0f))
0104
0105
0106
0107
0108
0109 typedef struct _XkbBehavior {
0110 unsigned char type;
0111 unsigned char data;
0112 } XkbBehavior;
0113
0114 #define XkbAnyActionDataSize 7
0115 typedef struct _XkbAnyAction {
0116 unsigned char type;
0117 unsigned char data[XkbAnyActionDataSize];
0118 } XkbAnyAction;
0119
0120 typedef struct _XkbModAction {
0121 unsigned char type;
0122 unsigned char flags;
0123 unsigned char mask;
0124 unsigned char real_mods;
0125 unsigned char vmods1;
0126 unsigned char vmods2;
0127 } XkbModAction;
0128 #define XkbModActionVMods(a) \
0129 ((short)(((a)->vmods1<<8)|((a)->vmods2)))
0130 #define XkbSetModActionVMods(a,v) \
0131 (((a)->vmods1=(((v)>>8)&0xff)),(a)->vmods2=((v)&0xff))
0132
0133 typedef struct _XkbGroupAction {
0134 unsigned char type;
0135 unsigned char flags;
0136 char group_XXX;
0137 } XkbGroupAction;
0138 #define XkbSAGroup(a) (XkbCharToInt((a)->group_XXX))
0139 #define XkbSASetGroup(a,g) ((a)->group_XXX=(g))
0140
0141 typedef struct _XkbISOAction {
0142 unsigned char type;
0143 unsigned char flags;
0144 unsigned char mask;
0145 unsigned char real_mods;
0146 char group_XXX;
0147 unsigned char affect;
0148 unsigned char vmods1;
0149 unsigned char vmods2;
0150 } XkbISOAction;
0151
0152 typedef struct _XkbPtrAction {
0153 unsigned char type;
0154 unsigned char flags;
0155 unsigned char high_XXX;
0156 unsigned char low_XXX;
0157 unsigned char high_YYY;
0158 unsigned char low_YYY;
0159 } XkbPtrAction;
0160 #define XkbPtrActionX(a) (Xkb2CharsToInt((a)->high_XXX,(a)->low_XXX))
0161 #define XkbPtrActionY(a) (Xkb2CharsToInt((a)->high_YYY,(a)->low_YYY))
0162 #define XkbSetPtrActionX(a,x) (XkbIntTo2Chars(x,(a)->high_XXX,(a)->low_XXX))
0163 #define XkbSetPtrActionY(a,y) (XkbIntTo2Chars(y,(a)->high_YYY,(a)->low_YYY))
0164
0165 typedef struct _XkbPtrBtnAction {
0166 unsigned char type;
0167 unsigned char flags;
0168 unsigned char count;
0169 unsigned char button;
0170 } XkbPtrBtnAction;
0171
0172 typedef struct _XkbPtrDfltAction {
0173 unsigned char type;
0174 unsigned char flags;
0175 unsigned char affect;
0176 char valueXXX;
0177 } XkbPtrDfltAction;
0178 #define XkbSAPtrDfltValue(a) (XkbCharToInt((a)->valueXXX))
0179 #define XkbSASetPtrDfltValue(a,c) ((a)->valueXXX= ((c)&0xff))
0180
0181 typedef struct _XkbSwitchScreenAction {
0182 unsigned char type;
0183 unsigned char flags;
0184 char screenXXX;
0185 } XkbSwitchScreenAction;
0186 #define XkbSAScreen(a) (XkbCharToInt((a)->screenXXX))
0187 #define XkbSASetScreen(a,s) ((a)->screenXXX= ((s)&0xff))
0188
0189 typedef struct _XkbCtrlsAction {
0190 unsigned char type;
0191 unsigned char flags;
0192 unsigned char ctrls3;
0193 unsigned char ctrls2;
0194 unsigned char ctrls1;
0195 unsigned char ctrls0;
0196 } XkbCtrlsAction;
0197 #define XkbActionSetCtrls(a,c) (((a)->ctrls3=(((c)>>24)&0xff)),\
0198 ((a)->ctrls2=(((c)>>16)&0xff)),\
0199 ((a)->ctrls1=(((c)>>8)&0xff)),\
0200 ((a)->ctrls0=((c)&0xff)))
0201 #define XkbActionCtrls(a) ((((unsigned int)(a)->ctrls3)<<24)|\
0202 (((unsigned int)(a)->ctrls2)<<16)|\
0203 (((unsigned int)(a)->ctrls1)<<8)|\
0204 ((unsigned int)((a)->ctrls0)))
0205
0206 typedef struct _XkbMessageAction {
0207 unsigned char type;
0208 unsigned char flags;
0209 unsigned char message[6];
0210 } XkbMessageAction;
0211
0212 typedef struct _XkbRedirectKeyAction {
0213 unsigned char type;
0214 unsigned char new_key;
0215 unsigned char mods_mask;
0216 unsigned char mods;
0217 unsigned char vmods_mask0;
0218 unsigned char vmods_mask1;
0219 unsigned char vmods0;
0220 unsigned char vmods1;
0221 } XkbRedirectKeyAction;
0222
0223 #define XkbSARedirectVMods(a) ((((unsigned int)(a)->vmods1)<<8)|\
0224 ((unsigned int)(a)->vmods0))
0225 #define XkbSARedirectSetVMods(a,m) (((a)->vmods1=(((m)>>8)&0xff)),\
0226 ((a)->vmods0=((m)&0xff)))
0227 #define XkbSARedirectVModsMask(a) ((((unsigned int)(a)->vmods_mask1)<<8)|\
0228 ((unsigned int)(a)->vmods_mask0))
0229 #define XkbSARedirectSetVModsMask(a,m) (((a)->vmods_mask1=(((m)>>8)&0xff)),\
0230 ((a)->vmods_mask0=((m)&0xff)))
0231
0232 typedef struct _XkbDeviceBtnAction {
0233 unsigned char type;
0234 unsigned char flags;
0235 unsigned char count;
0236 unsigned char button;
0237 unsigned char device;
0238 } XkbDeviceBtnAction;
0239
0240 typedef struct _XkbDeviceValuatorAction {
0241 unsigned char type;
0242 unsigned char device;
0243 unsigned char v1_what;
0244 unsigned char v1_ndx;
0245 unsigned char v1_value;
0246 unsigned char v2_what;
0247 unsigned char v2_ndx;
0248 unsigned char v2_value;
0249 } XkbDeviceValuatorAction;
0250
0251 typedef union _XkbAction {
0252 XkbAnyAction any;
0253 XkbModAction mods;
0254 XkbGroupAction group;
0255 XkbISOAction iso;
0256 XkbPtrAction ptr;
0257 XkbPtrBtnAction btn;
0258 XkbPtrDfltAction dflt;
0259 XkbSwitchScreenAction screen;
0260 XkbCtrlsAction ctrls;
0261 XkbMessageAction msg;
0262 XkbRedirectKeyAction redirect;
0263 XkbDeviceBtnAction devbtn;
0264 XkbDeviceValuatorAction devval;
0265 unsigned char type;
0266 } XkbAction;
0267
0268 typedef struct _XkbControls {
0269 unsigned char mk_dflt_btn;
0270 unsigned char num_groups;
0271 unsigned char groups_wrap;
0272 XkbModsRec internal;
0273 XkbModsRec ignore_lock;
0274 unsigned int enabled_ctrls;
0275 unsigned short repeat_delay;
0276 unsigned short repeat_interval;
0277 unsigned short slow_keys_delay;
0278 unsigned short debounce_delay;
0279 unsigned short mk_delay;
0280 unsigned short mk_interval;
0281 unsigned short mk_time_to_max;
0282 unsigned short mk_max_speed;
0283 short mk_curve;
0284 unsigned short ax_options;
0285 unsigned short ax_timeout;
0286 unsigned short axt_opts_mask;
0287 unsigned short axt_opts_values;
0288 unsigned int axt_ctrls_mask;
0289 unsigned int axt_ctrls_values;
0290 unsigned char per_key_repeat[XkbPerKeyBitArraySize];
0291 } XkbControlsRec, *XkbControlsPtr;
0292
0293 #define XkbAX_AnyFeedback(c) ((c)->enabled_ctrls&XkbAccessXFeedbackMask)
0294 #define XkbAX_NeedOption(c,w) ((c)->ax_options&(w))
0295 #define XkbAX_NeedFeedback(c,w) (XkbAX_AnyFeedback(c)&&XkbAX_NeedOption(c,w))
0296
0297 typedef struct _XkbServerMapRec {
0298
0299
0300 unsigned short num_acts;
0301 unsigned short size_acts;
0302 XkbAction *acts;
0303
0304
0305
0306 XkbBehavior *behaviors;
0307 unsigned short *key_acts;
0308 #if defined(__cplusplus) || defined(c_plusplus)
0309
0310 unsigned char *c_explicit;
0311 #else
0312 unsigned char *explicit;
0313 #endif
0314 unsigned char vmods[XkbNumVirtualMods];
0315 unsigned short *vmodmap;
0316 } XkbServerMapRec, *XkbServerMapPtr;
0317
0318 #define XkbSMKeyActionsPtr(m,k) (&(m)->acts[(m)->key_acts[k]])
0319
0320
0321
0322
0323
0324 typedef struct _XkbSymMapRec {
0325 unsigned char kt_index[XkbNumKbdGroups];
0326 unsigned char group_info;
0327 unsigned char width;
0328 unsigned short offset;
0329 } XkbSymMapRec, *XkbSymMapPtr;
0330
0331 typedef struct _XkbClientMapRec {
0332
0333
0334 unsigned char size_types;
0335 unsigned char num_types;
0336 XkbKeyTypePtr types;
0337
0338
0339 unsigned short size_syms;
0340 unsigned short num_syms;
0341 KeySym *syms;
0342
0343 XkbSymMapPtr key_sym_map;
0344
0345
0346 unsigned char *modmap;
0347 } XkbClientMapRec, *XkbClientMapPtr;
0348
0349 #define XkbCMKeyGroupInfo(m,k) ((m)->key_sym_map[k].group_info)
0350 #define XkbCMKeyNumGroups(m,k) (XkbNumGroups((m)->key_sym_map[k].group_info))
0351 #define XkbCMKeyGroupWidth(m,k,g) (XkbCMKeyType(m,k,g)->num_levels)
0352 #define XkbCMKeyGroupsWidth(m,k) ((m)->key_sym_map[k].width)
0353 #define XkbCMKeyTypeIndex(m,k,g) ((m)->key_sym_map[k].kt_index[g&0x3])
0354 #define XkbCMKeyType(m,k,g) (&(m)->types[XkbCMKeyTypeIndex(m,k,g)])
0355 #define XkbCMKeyNumSyms(m,k) (XkbCMKeyGroupsWidth(m,k)*XkbCMKeyNumGroups(m,k))
0356 #define XkbCMKeySymsOffset(m,k) ((m)->key_sym_map[k].offset)
0357 #define XkbCMKeySymsPtr(m,k) (&(m)->syms[XkbCMKeySymsOffset(m,k)])
0358
0359
0360
0361
0362
0363 typedef struct _XkbSymInterpretRec {
0364 KeySym sym;
0365 unsigned char flags;
0366 unsigned char match;
0367 unsigned char mods;
0368 unsigned char virtual_mod;
0369 XkbAnyAction act;
0370 } XkbSymInterpretRec,*XkbSymInterpretPtr;
0371
0372 typedef struct _XkbCompatMapRec {
0373
0374
0375 XkbSymInterpretPtr sym_interpret;
0376 XkbModsRec groups[XkbNumKbdGroups];
0377 unsigned short num_si;
0378 unsigned short size_si;
0379 } XkbCompatMapRec, *XkbCompatMapPtr;
0380
0381 typedef struct _XkbIndicatorMapRec {
0382 unsigned char flags;
0383 unsigned char which_groups;
0384 unsigned char groups;
0385 unsigned char which_mods;
0386 XkbModsRec mods;
0387 unsigned int ctrls;
0388 } XkbIndicatorMapRec, *XkbIndicatorMapPtr;
0389
0390 #define XkbIM_IsAuto(i) ((((i)->flags&XkbIM_NoAutomatic)==0)&&\
0391 (((i)->which_groups&&(i)->groups)||\
0392 ((i)->which_mods&&(i)->mods.mask)||\
0393 ((i)->ctrls)))
0394 #define XkbIM_InUse(i) (((i)->flags)||((i)->which_groups)||\
0395 ((i)->which_mods)||((i)->ctrls))
0396
0397
0398 typedef struct _XkbIndicatorRec {
0399 unsigned long phys_indicators;
0400 XkbIndicatorMapRec maps[XkbNumIndicators];
0401 } XkbIndicatorRec,*XkbIndicatorPtr;
0402
0403 typedef struct _XkbKeyNameRec {
0404 char name[XkbKeyNameLength];
0405 } XkbKeyNameRec,*XkbKeyNamePtr;
0406
0407 typedef struct _XkbKeyAliasRec {
0408 char real[XkbKeyNameLength];
0409 char alias[XkbKeyNameLength];
0410 } XkbKeyAliasRec,*XkbKeyAliasPtr;
0411
0412
0413
0414
0415 typedef struct _XkbNamesRec {
0416 Atom keycodes;
0417 Atom geometry;
0418 Atom symbols;
0419 Atom types;
0420 Atom compat;
0421 Atom vmods[XkbNumVirtualMods];
0422 Atom indicators[XkbNumIndicators];
0423 Atom groups[XkbNumKbdGroups];
0424
0425 XkbKeyNamePtr keys;
0426
0427 XkbKeyAliasPtr key_aliases;
0428
0429 Atom *radio_groups;
0430 Atom phys_symbols;
0431
0432
0433 unsigned char num_keys;
0434 unsigned char num_key_aliases;
0435 unsigned short num_rg;
0436 } XkbNamesRec,*XkbNamesPtr;
0437
0438 typedef struct _XkbGeometry *XkbGeometryPtr;
0439
0440
0441
0442 typedef struct _XkbDesc {
0443 struct _XDisplay * dpy;
0444 unsigned short flags;
0445 unsigned short device_spec;
0446 KeyCode min_key_code;
0447 KeyCode max_key_code;
0448
0449 XkbControlsPtr ctrls;
0450 XkbServerMapPtr server;
0451 XkbClientMapPtr map;
0452 XkbIndicatorPtr indicators;
0453 XkbNamesPtr names;
0454 XkbCompatMapPtr compat;
0455 XkbGeometryPtr geom;
0456 } XkbDescRec, *XkbDescPtr;
0457 #define XkbKeyKeyTypeIndex(d,k,g) (XkbCMKeyTypeIndex((d)->map,k,g))
0458 #define XkbKeyKeyType(d,k,g) (XkbCMKeyType((d)->map,k,g))
0459 #define XkbKeyGroupWidth(d,k,g) (XkbCMKeyGroupWidth((d)->map,k,g))
0460 #define XkbKeyGroupsWidth(d,k) (XkbCMKeyGroupsWidth((d)->map,k))
0461 #define XkbKeyGroupInfo(d,k) (XkbCMKeyGroupInfo((d)->map,(k)))
0462 #define XkbKeyNumGroups(d,k) (XkbCMKeyNumGroups((d)->map,(k)))
0463 #define XkbKeyNumSyms(d,k) (XkbCMKeyNumSyms((d)->map,(k)))
0464 #define XkbKeySymsPtr(d,k) (XkbCMKeySymsPtr((d)->map,(k)))
0465 #define XkbKeySym(d,k,n) (XkbKeySymsPtr(d,k)[n])
0466 #define XkbKeySymEntry(d,k,sl,g) \
0467 (XkbKeySym(d,k,((XkbKeyGroupsWidth(d,k)*(g))+(sl))))
0468 #define XkbKeyAction(d,k,n) \
0469 (XkbKeyHasActions(d,k)?&XkbKeyActionsPtr(d,k)[n]:NULL)
0470 #define XkbKeyActionEntry(d,k,sl,g) \
0471 (XkbKeyHasActions(d,k)?\
0472 XkbKeyAction(d,k,((XkbKeyGroupsWidth(d,k)*(g))+(sl))):NULL)
0473
0474 #define XkbKeyHasActions(d,k) ((d)->server->key_acts[k]!=0)
0475 #define XkbKeyNumActions(d,k) (XkbKeyHasActions(d,k)?XkbKeyNumSyms(d,k):1)
0476 #define XkbKeyActionsPtr(d,k) (XkbSMKeyActionsPtr((d)->server,k))
0477 #define XkbKeycodeInRange(d,k) (((k)>=(d)->min_key_code)&&\
0478 ((k)<=(d)->max_key_code))
0479 #define XkbNumKeys(d) ((d)->max_key_code-(d)->min_key_code+1)
0480
0481
0482
0483
0484
0485
0486 typedef struct _XkbMapChanges {
0487 unsigned short changed;
0488 KeyCode min_key_code;
0489 KeyCode max_key_code;
0490 unsigned char first_type;
0491 unsigned char num_types;
0492 KeyCode first_key_sym;
0493 unsigned char num_key_syms;
0494 KeyCode first_key_act;
0495 unsigned char num_key_acts;
0496 KeyCode first_key_behavior;
0497 unsigned char num_key_behaviors;
0498 KeyCode first_key_explicit;
0499 unsigned char num_key_explicit;
0500 KeyCode first_modmap_key;
0501 unsigned char num_modmap_keys;
0502 KeyCode first_vmodmap_key;
0503 unsigned char num_vmodmap_keys;
0504 unsigned char pad;
0505 unsigned short vmods;
0506 } XkbMapChangesRec,*XkbMapChangesPtr;
0507
0508 typedef struct _XkbControlsChanges {
0509 unsigned int changed_ctrls;
0510 unsigned int enabled_ctrls_changes;
0511 Bool num_groups_changed;
0512 } XkbControlsChangesRec,*XkbControlsChangesPtr;
0513
0514 typedef struct _XkbIndicatorChanges {
0515 unsigned int state_changes;
0516 unsigned int map_changes;
0517 } XkbIndicatorChangesRec,*XkbIndicatorChangesPtr;
0518
0519 typedef struct _XkbNameChanges {
0520 unsigned int changed;
0521 unsigned char first_type;
0522 unsigned char num_types;
0523 unsigned char first_lvl;
0524 unsigned char num_lvls;
0525 unsigned char num_aliases;
0526 unsigned char num_rg;
0527 unsigned char first_key;
0528 unsigned char num_keys;
0529 unsigned short changed_vmods;
0530 unsigned long changed_indicators;
0531 unsigned char changed_groups;
0532 } XkbNameChangesRec,*XkbNameChangesPtr;
0533
0534 typedef struct _XkbCompatChanges {
0535 unsigned char changed_groups;
0536 unsigned short first_si;
0537 unsigned short num_si;
0538 } XkbCompatChangesRec,*XkbCompatChangesPtr;
0539
0540 typedef struct _XkbChanges {
0541 unsigned short device_spec;
0542 unsigned short state_changes;
0543 XkbMapChangesRec map;
0544 XkbControlsChangesRec ctrls;
0545 XkbIndicatorChangesRec indicators;
0546 XkbNameChangesRec names;
0547 XkbCompatChangesRec compat;
0548 } XkbChangesRec, *XkbChangesPtr;
0549
0550
0551
0552
0553
0554
0555 typedef struct _XkbComponentNames {
0556 char * keymap;
0557 char * keycodes;
0558 char * types;
0559 char * compat;
0560 char * symbols;
0561 char * geometry;
0562 } XkbComponentNamesRec, *XkbComponentNamesPtr;
0563
0564 typedef struct _XkbComponentName {
0565 unsigned short flags;
0566 char * name;
0567 } XkbComponentNameRec,*XkbComponentNamePtr;
0568
0569 typedef struct _XkbComponentList {
0570 int num_keymaps;
0571 int num_keycodes;
0572 int num_types;
0573 int num_compat;
0574 int num_symbols;
0575 int num_geometry;
0576 XkbComponentNamePtr keymaps;
0577 XkbComponentNamePtr keycodes;
0578 XkbComponentNamePtr types;
0579 XkbComponentNamePtr compat;
0580 XkbComponentNamePtr symbols;
0581 XkbComponentNamePtr geometry;
0582 } XkbComponentListRec, *XkbComponentListPtr;
0583
0584
0585
0586
0587
0588 typedef struct _XkbDeviceLedInfo {
0589 unsigned short led_class;
0590 unsigned short led_id;
0591 unsigned int phys_indicators;
0592 unsigned int maps_present;
0593 unsigned int names_present;
0594 unsigned int state;
0595 Atom names[XkbNumIndicators];
0596 XkbIndicatorMapRec maps[XkbNumIndicators];
0597 } XkbDeviceLedInfoRec,*XkbDeviceLedInfoPtr;
0598
0599 typedef struct _XkbDeviceInfo {
0600 char * name;
0601 Atom type;
0602 unsigned short device_spec;
0603 Bool has_own_state;
0604 unsigned short supported;
0605 unsigned short unsupported;
0606
0607
0608 unsigned short num_btns;
0609 XkbAction * btn_acts;
0610
0611 unsigned short sz_leds;
0612 unsigned short num_leds;
0613 unsigned short dflt_kbd_fb;
0614 unsigned short dflt_led_fb;
0615
0616
0617 XkbDeviceLedInfoPtr leds;
0618 } XkbDeviceInfoRec,*XkbDeviceInfoPtr;
0619
0620 #define XkbXI_DevHasBtnActs(d) (((d)->num_btns>0)&&((d)->btn_acts!=NULL))
0621 #define XkbXI_LegalDevBtn(d,b) (XkbXI_DevHasBtnActs(d)&&((b)<(d)->num_btns))
0622 #define XkbXI_DevHasLeds(d) (((d)->num_leds>0)&&((d)->leds!=NULL))
0623
0624 typedef struct _XkbDeviceLedChanges {
0625 unsigned short led_class;
0626 unsigned short led_id;
0627 unsigned int defined;
0628 struct _XkbDeviceLedChanges *next;
0629 } XkbDeviceLedChangesRec,*XkbDeviceLedChangesPtr;
0630
0631 typedef struct _XkbDeviceChanges {
0632 unsigned int changed;
0633 unsigned short first_btn;
0634 unsigned short num_btns;
0635 XkbDeviceLedChangesRec leds;
0636 } XkbDeviceChangesRec,*XkbDeviceChangesPtr;
0637
0638 #ifdef __clang__
0639 #pragma clang diagnostic pop
0640 #endif
0641
0642 #endif