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