xkbstr.h revision 4642e01f
14642e01fSmrg/************************************************************ 24642e01fSmrgCopyright (c) 1993 by Silicon Graphics Computer Systems, Inc. 34642e01fSmrg 44642e01fSmrgPermission to use, copy, modify, and distribute this 54642e01fSmrgsoftware and its documentation for any purpose and without 64642e01fSmrgfee is hereby granted, provided that the above copyright 74642e01fSmrgnotice appear in all copies and that both that copyright 84642e01fSmrgnotice and this permission notice appear in supporting 94642e01fSmrgdocumentation, and that the name of Silicon Graphics not be 104642e01fSmrgused in advertising or publicity pertaining to distribution 114642e01fSmrgof the software without specific prior written permission. 124642e01fSmrgSilicon Graphics makes no representation about the suitability 134642e01fSmrgof this software for any purpose. It is provided "as is" 144642e01fSmrgwithout any express or implied warranty. 154642e01fSmrg 164642e01fSmrgSILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS 174642e01fSmrgSOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 184642e01fSmrgAND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON 194642e01fSmrgGRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL 204642e01fSmrgDAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 214642e01fSmrgDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 224642e01fSmrgOR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH 234642e01fSmrgTHE USE OR PERFORMANCE OF THIS SOFTWARE. 244642e01fSmrg 254642e01fSmrg********************************************************/ 264642e01fSmrg 274642e01fSmrg#ifndef _XKBSTR_H_ 284642e01fSmrg#define _XKBSTR_H_ 294642e01fSmrg 304642e01fSmrg#include <X11/extensions/XKB.h> 314642e01fSmrg 324642e01fSmrg#define XkbCharToInt(v) ((v)&0x80?(int)((v)|(~0xff)):(int)((v)&0x7f)) 334642e01fSmrg#define XkbIntTo2Chars(i,h,l) (((h)=((i>>8)&0xff)),((l)=((i)&0xff))) 344642e01fSmrg 354642e01fSmrg#if defined(WORD64) && defined(UNSIGNEDBITFIELDS) 364642e01fSmrg#define Xkb2CharsToInt(h,l) ((h)&0x80?(int)(((h)<<8)|(l)|(~0xffff)):\ 374642e01fSmrg (int)(((h)<<8)|(l)&0x7fff)) 384642e01fSmrg#else 394642e01fSmrg#define Xkb2CharsToInt(h,l) ((short)(((h)<<8)|(l))) 404642e01fSmrg#endif 414642e01fSmrg 424642e01fSmrg /* 434642e01fSmrg * Common data structures and access macros 444642e01fSmrg */ 454642e01fSmrg 464642e01fSmrgtypedef struct _XkbStateRec { 474642e01fSmrg unsigned char group; 484642e01fSmrg unsigned char locked_group; 494642e01fSmrg unsigned short base_group; 504642e01fSmrg unsigned short latched_group; 514642e01fSmrg unsigned char mods; 524642e01fSmrg unsigned char base_mods; 534642e01fSmrg unsigned char latched_mods; 544642e01fSmrg unsigned char locked_mods; 554642e01fSmrg unsigned char compat_state; 564642e01fSmrg unsigned char grab_mods; 574642e01fSmrg unsigned char compat_grab_mods; 584642e01fSmrg unsigned char lookup_mods; 594642e01fSmrg unsigned char compat_lookup_mods; 604642e01fSmrg unsigned short ptr_buttons; 614642e01fSmrg} XkbStateRec,*XkbStatePtr; 624642e01fSmrg#define XkbStateFieldFromRec(s) XkbBuildCoreState((s)->lookup_mods,(s)->group) 634642e01fSmrg#define XkbGrabStateFromRec(s) XkbBuildCoreState((s)->grab_mods,(s)->group) 644642e01fSmrg 654642e01fSmrgtypedef struct _XkbMods { 664642e01fSmrg unsigned char mask; /* effective mods */ 674642e01fSmrg unsigned char real_mods; 684642e01fSmrg unsigned short vmods; 694642e01fSmrg} XkbModsRec,*XkbModsPtr; 704642e01fSmrg 714642e01fSmrgtypedef struct _XkbKTMapEntry { 724642e01fSmrg Bool active; 734642e01fSmrg unsigned char level; 744642e01fSmrg XkbModsRec mods; 754642e01fSmrg} XkbKTMapEntryRec,*XkbKTMapEntryPtr; 764642e01fSmrg 774642e01fSmrgtypedef struct _XkbKeyType { 784642e01fSmrg XkbModsRec mods; 794642e01fSmrg unsigned char num_levels; 804642e01fSmrg unsigned char map_count; 814642e01fSmrg XkbKTMapEntryPtr map; 824642e01fSmrg XkbModsPtr preserve; 834642e01fSmrg Atom name; 844642e01fSmrg Atom * level_names; 854642e01fSmrg} XkbKeyTypeRec, *XkbKeyTypePtr; 864642e01fSmrg 874642e01fSmrg#define XkbNumGroups(g) ((g)&0x0f) 884642e01fSmrg#define XkbOutOfRangeGroupInfo(g) ((g)&0xf0) 894642e01fSmrg#define XkbOutOfRangeGroupAction(g) ((g)&0xc0) 904642e01fSmrg#define XkbOutOfRangeGroupNumber(g) (((g)&0x30)>>4) 914642e01fSmrg#define XkbSetGroupInfo(g,w,n) (((w)&0xc0)|(((n)&3)<<4)|((g)&0x0f)) 924642e01fSmrg#define XkbSetNumGroups(g,n) (((g)&0xf0)|((n)&0x0f)) 934642e01fSmrg 944642e01fSmrg /* 954642e01fSmrg * Structures and access macros used primarily by the server 964642e01fSmrg */ 974642e01fSmrg 984642e01fSmrgtypedef struct _XkbBehavior { 994642e01fSmrg unsigned char type; 1004642e01fSmrg unsigned char data; 1014642e01fSmrg} XkbBehavior; 1024642e01fSmrg 1034642e01fSmrg#define XkbAnyActionDataSize 7 1044642e01fSmrgtypedef struct _XkbAnyAction { 1054642e01fSmrg unsigned char type; 1064642e01fSmrg unsigned char data[XkbAnyActionDataSize]; 1074642e01fSmrg} XkbAnyAction; 1084642e01fSmrg 1094642e01fSmrgtypedef struct _XkbModAction { 1104642e01fSmrg unsigned char type; 1114642e01fSmrg unsigned char flags; 1124642e01fSmrg unsigned char mask; 1134642e01fSmrg unsigned char real_mods; 1144642e01fSmrg unsigned char vmods1; 1154642e01fSmrg unsigned char vmods2; 1164642e01fSmrg} XkbModAction; 1174642e01fSmrg#define XkbModActionVMods(a) \ 1184642e01fSmrg ((short)(((a)->vmods1<<8)|((a)->vmods2))) 1194642e01fSmrg#define XkbSetModActionVMods(a,v) \ 1204642e01fSmrg (((a)->vmods1=(((v)>>8)&0xff)),(a)->vmods2=((v)&0xff)) 1214642e01fSmrg 1224642e01fSmrgtypedef struct _XkbGroupAction { 1234642e01fSmrg unsigned char type; 1244642e01fSmrg unsigned char flags; 1254642e01fSmrg char group_XXX; 1264642e01fSmrg} XkbGroupAction; 1274642e01fSmrg#define XkbSAGroup(a) (XkbCharToInt((a)->group_XXX)) 1284642e01fSmrg#define XkbSASetGroup(a,g) ((a)->group_XXX=(g)) 1294642e01fSmrg 1304642e01fSmrgtypedef struct _XkbISOAction { 1314642e01fSmrg unsigned char type; 1324642e01fSmrg unsigned char flags; 1334642e01fSmrg unsigned char mask; 1344642e01fSmrg unsigned char real_mods; 1354642e01fSmrg char group_XXX; 1364642e01fSmrg unsigned char affect; 1374642e01fSmrg unsigned char vmods1; 1384642e01fSmrg unsigned char vmods2; 1394642e01fSmrg} XkbISOAction; 1404642e01fSmrg 1414642e01fSmrgtypedef struct _XkbPtrAction { 1424642e01fSmrg unsigned char type; 1434642e01fSmrg unsigned char flags; 1444642e01fSmrg unsigned char high_XXX; 1454642e01fSmrg unsigned char low_XXX; 1464642e01fSmrg unsigned char high_YYY; 1474642e01fSmrg unsigned char low_YYY; 1484642e01fSmrg} XkbPtrAction; 1494642e01fSmrg#define XkbPtrActionX(a) (Xkb2CharsToInt((a)->high_XXX,(a)->low_XXX)) 1504642e01fSmrg#define XkbPtrActionY(a) (Xkb2CharsToInt((a)->high_YYY,(a)->low_YYY)) 1514642e01fSmrg#define XkbSetPtrActionX(a,x) (XkbIntTo2Chars(x,(a)->high_XXX,(a)->low_XXX)) 1524642e01fSmrg#define XkbSetPtrActionY(a,y) (XkbIntTo2Chars(y,(a)->high_YYY,(a)->low_YYY)) 1534642e01fSmrg 1544642e01fSmrgtypedef struct _XkbPtrBtnAction { 1554642e01fSmrg unsigned char type; 1564642e01fSmrg unsigned char flags; 1574642e01fSmrg unsigned char count; 1584642e01fSmrg unsigned char button; 1594642e01fSmrg} XkbPtrBtnAction; 1604642e01fSmrg 1614642e01fSmrgtypedef struct _XkbPtrDfltAction { 1624642e01fSmrg unsigned char type; 1634642e01fSmrg unsigned char flags; 1644642e01fSmrg unsigned char affect; 1654642e01fSmrg char valueXXX; 1664642e01fSmrg} XkbPtrDfltAction; 1674642e01fSmrg#define XkbSAPtrDfltValue(a) (XkbCharToInt((a)->valueXXX)) 1684642e01fSmrg#define XkbSASetPtrDfltValue(a,c) ((a)->valueXXX= ((c)&0xff)) 1694642e01fSmrg 1704642e01fSmrgtypedef struct _XkbSwitchScreenAction { 1714642e01fSmrg unsigned char type; 1724642e01fSmrg unsigned char flags; 1734642e01fSmrg char screenXXX; 1744642e01fSmrg} XkbSwitchScreenAction; 1754642e01fSmrg#define XkbSAScreen(a) (XkbCharToInt((a)->screenXXX)) 1764642e01fSmrg#define XkbSASetScreen(a,s) ((a)->screenXXX= ((s)&0xff)) 1774642e01fSmrg 1784642e01fSmrgtypedef struct _XkbCtrlsAction { 1794642e01fSmrg unsigned char type; 1804642e01fSmrg unsigned char flags; 1814642e01fSmrg unsigned char ctrls3; 1824642e01fSmrg unsigned char ctrls2; 1834642e01fSmrg unsigned char ctrls1; 1844642e01fSmrg unsigned char ctrls0; 1854642e01fSmrg} XkbCtrlsAction; 1864642e01fSmrg#define XkbActionSetCtrls(a,c) (((a)->ctrls3=(((c)>>24)&0xff)),\ 1874642e01fSmrg ((a)->ctrls2=(((c)>>16)&0xff)),\ 1884642e01fSmrg ((a)->ctrls1=(((c)>>8)&0xff)),\ 1894642e01fSmrg ((a)->ctrls0=((c)&0xff))) 1904642e01fSmrg#define XkbActionCtrls(a) ((((unsigned int)(a)->ctrls3)<<24)|\ 1914642e01fSmrg (((unsigned int)(a)->ctrls2)<<16)|\ 1924642e01fSmrg (((unsigned int)(a)->ctrls1)<<8)|\ 1934642e01fSmrg ((unsigned int)((a)->ctrls0))) 1944642e01fSmrg 1954642e01fSmrgtypedef struct _XkbMessageAction { 1964642e01fSmrg unsigned char type; 1974642e01fSmrg unsigned char flags; 1984642e01fSmrg unsigned char message[6]; 1994642e01fSmrg} XkbMessageAction; 2004642e01fSmrg 2014642e01fSmrgtypedef struct _XkbRedirectKeyAction { 2024642e01fSmrg unsigned char type; 2034642e01fSmrg unsigned char new_key; 2044642e01fSmrg unsigned char mods_mask; 2054642e01fSmrg unsigned char mods; 2064642e01fSmrg unsigned char vmods_mask0; 2074642e01fSmrg unsigned char vmods_mask1; 2084642e01fSmrg unsigned char vmods0; 2094642e01fSmrg unsigned char vmods1; 2104642e01fSmrg} XkbRedirectKeyAction; 2114642e01fSmrg 2124642e01fSmrg#define XkbSARedirectVMods(a) ((((unsigned int)(a)->vmods1)<<8)|\ 2134642e01fSmrg ((unsigned int)(a)->vmods0)) 2144642e01fSmrg#define XkbSARedirectSetVMods(a,m) (((a)->vmods_mask1=(((m)>>8)&0xff)),\ 2154642e01fSmrg ((a)->vmods_mask0=((m)&0xff))) 2164642e01fSmrg#define XkbSARedirectVModsMask(a) ((((unsigned int)(a)->vmods_mask1)<<8)|\ 2174642e01fSmrg ((unsigned int)(a)->vmods_mask0)) 2184642e01fSmrg#define XkbSARedirectSetVModsMask(a,m) (((a)->vmods_mask1=(((m)>>8)&0xff)),\ 2194642e01fSmrg ((a)->vmods_mask0=((m)&0xff))) 2204642e01fSmrg 2214642e01fSmrgtypedef struct _XkbDeviceBtnAction { 2224642e01fSmrg unsigned char type; 2234642e01fSmrg unsigned char flags; 2244642e01fSmrg unsigned char count; 2254642e01fSmrg unsigned char button; 2264642e01fSmrg unsigned char device; 2274642e01fSmrg} XkbDeviceBtnAction; 2284642e01fSmrg 2294642e01fSmrgtypedef struct _XkbDeviceValuatorAction { 2304642e01fSmrg unsigned char type; 2314642e01fSmrg unsigned char device; 2324642e01fSmrg unsigned char v1_what; 2334642e01fSmrg unsigned char v1_ndx; 2344642e01fSmrg unsigned char v1_value; 2354642e01fSmrg unsigned char v2_what; 2364642e01fSmrg unsigned char v2_ndx; 2374642e01fSmrg unsigned char v2_value; 2384642e01fSmrg} XkbDeviceValuatorAction; 2394642e01fSmrg 2404642e01fSmrgtypedef union _XkbAction { 2414642e01fSmrg XkbAnyAction any; 2424642e01fSmrg XkbModAction mods; 2434642e01fSmrg XkbGroupAction group; 2444642e01fSmrg XkbISOAction iso; 2454642e01fSmrg XkbPtrAction ptr; 2464642e01fSmrg XkbPtrBtnAction btn; 2474642e01fSmrg XkbPtrDfltAction dflt; 2484642e01fSmrg XkbSwitchScreenAction screen; 2494642e01fSmrg XkbCtrlsAction ctrls; 2504642e01fSmrg XkbMessageAction msg; 2514642e01fSmrg XkbRedirectKeyAction redirect; 2524642e01fSmrg XkbDeviceBtnAction devbtn; 2534642e01fSmrg XkbDeviceValuatorAction devval; 2544642e01fSmrg unsigned char type; 2554642e01fSmrg} XkbAction; 2564642e01fSmrg 2574642e01fSmrgtypedef struct _XkbControls { 2584642e01fSmrg unsigned char mk_dflt_btn; 2594642e01fSmrg unsigned char num_groups; 2604642e01fSmrg unsigned char groups_wrap; 2614642e01fSmrg XkbModsRec internal; 2624642e01fSmrg XkbModsRec ignore_lock; 2634642e01fSmrg unsigned int enabled_ctrls; 2644642e01fSmrg unsigned short repeat_delay; 2654642e01fSmrg unsigned short repeat_interval; 2664642e01fSmrg unsigned short slow_keys_delay; 2674642e01fSmrg unsigned short debounce_delay; 2684642e01fSmrg unsigned short mk_delay; 2694642e01fSmrg unsigned short mk_interval; 2704642e01fSmrg unsigned short mk_time_to_max; 2714642e01fSmrg unsigned short mk_max_speed; 2724642e01fSmrg short mk_curve; 2734642e01fSmrg unsigned short ax_options; 2744642e01fSmrg unsigned short ax_timeout; 2754642e01fSmrg unsigned short axt_opts_mask; 2764642e01fSmrg unsigned short axt_opts_values; 2774642e01fSmrg unsigned int axt_ctrls_mask; 2784642e01fSmrg unsigned int axt_ctrls_values; 2794642e01fSmrg unsigned char per_key_repeat[XkbPerKeyBitArraySize]; 2804642e01fSmrg} XkbControlsRec, *XkbControlsPtr; 2814642e01fSmrg 2824642e01fSmrg#define XkbAX_AnyFeedback(c) ((c)->enabled_ctrls&XkbAccessXFeedbackMask) 2834642e01fSmrg#define XkbAX_NeedOption(c,w) ((c)->ax_options&(w)) 2844642e01fSmrg#define XkbAX_NeedFeedback(c,w) (XkbAX_AnyFeedback(c)&&XkbAX_NeedOption(c,w)) 2854642e01fSmrg 2864642e01fSmrgtypedef struct _XkbServerMapRec { 2874642e01fSmrg unsigned short num_acts; 2884642e01fSmrg unsigned short size_acts; 2894642e01fSmrg XkbAction *acts; 2904642e01fSmrg 2914642e01fSmrg XkbBehavior *behaviors; 2924642e01fSmrg unsigned short *key_acts; 2934642e01fSmrg#if defined(__cplusplus) || defined(c_plusplus) 2944642e01fSmrg /* explicit is a C++ reserved word */ 2954642e01fSmrg unsigned char *c_explicit; 2964642e01fSmrg#else 2974642e01fSmrg unsigned char *explicit; 2984642e01fSmrg#endif 2994642e01fSmrg unsigned char vmods[XkbNumVirtualMods]; 3004642e01fSmrg unsigned short *vmodmap; 3014642e01fSmrg} XkbServerMapRec, *XkbServerMapPtr; 3024642e01fSmrg 3034642e01fSmrg#define XkbSMKeyActionsPtr(m,k) (&(m)->acts[(m)->key_acts[k]]) 3044642e01fSmrg 3054642e01fSmrg /* 3064642e01fSmrg * Structures and access macros used primarily by clients 3074642e01fSmrg */ 3084642e01fSmrg 3094642e01fSmrgtypedef struct _XkbSymMapRec { 3104642e01fSmrg unsigned char kt_index[XkbNumKbdGroups]; 3114642e01fSmrg unsigned char group_info; 3124642e01fSmrg unsigned char width; 3134642e01fSmrg unsigned short offset; 3144642e01fSmrg} XkbSymMapRec, *XkbSymMapPtr; 3154642e01fSmrg 3164642e01fSmrgtypedef struct _XkbClientMapRec { 3174642e01fSmrg unsigned char size_types; 3184642e01fSmrg unsigned char num_types; 3194642e01fSmrg XkbKeyTypePtr types; 3204642e01fSmrg 3214642e01fSmrg unsigned short size_syms; 3224642e01fSmrg unsigned short num_syms; 3234642e01fSmrg KeySym *syms; 3244642e01fSmrg XkbSymMapPtr key_sym_map; 3254642e01fSmrg 3264642e01fSmrg unsigned char *modmap; 3274642e01fSmrg} XkbClientMapRec, *XkbClientMapPtr; 3284642e01fSmrg 3294642e01fSmrg#define XkbCMKeyGroupInfo(m,k) ((m)->key_sym_map[k].group_info) 3304642e01fSmrg#define XkbCMKeyNumGroups(m,k) (XkbNumGroups((m)->key_sym_map[k].group_info)) 3314642e01fSmrg#define XkbCMKeyGroupWidth(m,k,g) (XkbCMKeyType(m,k,g)->num_levels) 3324642e01fSmrg#define XkbCMKeyGroupsWidth(m,k) ((m)->key_sym_map[k].width) 3334642e01fSmrg#define XkbCMKeyTypeIndex(m,k,g) ((m)->key_sym_map[k].kt_index[g&0x3]) 3344642e01fSmrg#define XkbCMKeyType(m,k,g) (&(m)->types[XkbCMKeyTypeIndex(m,k,g)]) 3354642e01fSmrg#define XkbCMKeyNumSyms(m,k) (XkbCMKeyGroupsWidth(m,k)*XkbCMKeyNumGroups(m,k)) 3364642e01fSmrg#define XkbCMKeySymsOffset(m,k) ((m)->key_sym_map[k].offset) 3374642e01fSmrg#define XkbCMKeySymsPtr(m,k) (&(m)->syms[XkbCMKeySymsOffset(m,k)]) 3384642e01fSmrg 3394642e01fSmrg /* 3404642e01fSmrg * Compatibility structures and access macros 3414642e01fSmrg */ 3424642e01fSmrg 3434642e01fSmrgtypedef struct _XkbSymInterpretRec { 3444642e01fSmrg KeySym sym; 3454642e01fSmrg unsigned char flags; 3464642e01fSmrg unsigned char match; 3474642e01fSmrg unsigned char mods; 3484642e01fSmrg unsigned char virtual_mod; 3494642e01fSmrg XkbAnyAction act; 3504642e01fSmrg} XkbSymInterpretRec,*XkbSymInterpretPtr; 3514642e01fSmrg 3524642e01fSmrgtypedef struct _XkbCompatMapRec { 3534642e01fSmrg XkbSymInterpretPtr sym_interpret; 3544642e01fSmrg XkbModsRec groups[XkbNumKbdGroups]; 3554642e01fSmrg unsigned short num_si; 3564642e01fSmrg unsigned short size_si; 3574642e01fSmrg} XkbCompatMapRec, *XkbCompatMapPtr; 3584642e01fSmrg 3594642e01fSmrgtypedef struct _XkbIndicatorMapRec { 3604642e01fSmrg unsigned char flags; 3614642e01fSmrg unsigned char which_groups; 3624642e01fSmrg unsigned char groups; 3634642e01fSmrg unsigned char which_mods; 3644642e01fSmrg XkbModsRec mods; 3654642e01fSmrg unsigned int ctrls; 3664642e01fSmrg} XkbIndicatorMapRec, *XkbIndicatorMapPtr; 3674642e01fSmrg 3684642e01fSmrg#define XkbIM_IsAuto(i) ((((i)->flags&XkbIM_NoAutomatic)==0)&&\ 3694642e01fSmrg (((i)->which_groups&&(i)->groups)||\ 3704642e01fSmrg ((i)->which_mods&&(i)->mods.mask)||\ 3714642e01fSmrg ((i)->ctrls))) 3724642e01fSmrg#define XkbIM_InUse(i) (((i)->flags)||((i)->which_groups)||\ 3734642e01fSmrg ((i)->which_mods)||((i)->ctrls)) 3744642e01fSmrg 3754642e01fSmrg 3764642e01fSmrgtypedef struct _XkbIndicatorRec { 3774642e01fSmrg unsigned long phys_indicators; 3784642e01fSmrg XkbIndicatorMapRec maps[XkbNumIndicators]; 3794642e01fSmrg} XkbIndicatorRec,*XkbIndicatorPtr; 3804642e01fSmrg 3814642e01fSmrgtypedef struct _XkbKeyNameRec { 3824642e01fSmrg char name[XkbKeyNameLength]; 3834642e01fSmrg} XkbKeyNameRec,*XkbKeyNamePtr; 3844642e01fSmrg 3854642e01fSmrgtypedef struct _XkbKeyAliasRec { 3864642e01fSmrg char real[XkbKeyNameLength]; 3874642e01fSmrg char alias[XkbKeyNameLength]; 3884642e01fSmrg} XkbKeyAliasRec,*XkbKeyAliasPtr; 3894642e01fSmrg 3904642e01fSmrg /* 3914642e01fSmrg * Names for everything 3924642e01fSmrg */ 3934642e01fSmrgtypedef struct _XkbNamesRec { 3944642e01fSmrg Atom keycodes; 3954642e01fSmrg Atom geometry; 3964642e01fSmrg Atom symbols; 3974642e01fSmrg Atom types; 3984642e01fSmrg Atom compat; 3994642e01fSmrg Atom vmods[XkbNumVirtualMods]; 4004642e01fSmrg Atom indicators[XkbNumIndicators]; 4014642e01fSmrg Atom groups[XkbNumKbdGroups]; 4024642e01fSmrg XkbKeyNamePtr keys; 4034642e01fSmrg XkbKeyAliasPtr key_aliases; 4044642e01fSmrg Atom *radio_groups; 4054642e01fSmrg Atom phys_symbols; 4064642e01fSmrg 4074642e01fSmrg unsigned char num_keys; 4084642e01fSmrg unsigned char num_key_aliases; 4094642e01fSmrg unsigned short num_rg; 4104642e01fSmrg} XkbNamesRec,*XkbNamesPtr; 4114642e01fSmrg 4124642e01fSmrgtypedef struct _XkbGeometry *XkbGeometryPtr; 4134642e01fSmrg /* 4144642e01fSmrg * Tie it all together into one big keyboard description 4154642e01fSmrg */ 4164642e01fSmrgtypedef struct _XkbDesc { 4174642e01fSmrg unsigned int defined; 4184642e01fSmrg unsigned short flags; 4194642e01fSmrg unsigned short device_spec; 4204642e01fSmrg KeyCode min_key_code; 4214642e01fSmrg KeyCode max_key_code; 4224642e01fSmrg 4234642e01fSmrg XkbControlsPtr ctrls; 4244642e01fSmrg XkbServerMapPtr server; 4254642e01fSmrg XkbClientMapPtr map; 4264642e01fSmrg XkbIndicatorPtr indicators; 4274642e01fSmrg XkbNamesPtr names; 4284642e01fSmrg XkbCompatMapPtr compat; 4294642e01fSmrg XkbGeometryPtr geom; 4304642e01fSmrg} XkbDescRec, *XkbDescPtr; 4314642e01fSmrg#define XkbKeyKeyTypeIndex(d,k,g) (XkbCMKeyTypeIndex((d)->map,k,g)) 4324642e01fSmrg#define XkbKeyKeyType(d,k,g) (XkbCMKeyType((d)->map,k,g)) 4334642e01fSmrg#define XkbKeyGroupWidth(d,k,g) (XkbCMKeyGroupWidth((d)->map,k,g)) 4344642e01fSmrg#define XkbKeyGroupsWidth(d,k) (XkbCMKeyGroupsWidth((d)->map,k)) 4354642e01fSmrg#define XkbKeyGroupInfo(d,k) (XkbCMKeyGroupInfo((d)->map,(k))) 4364642e01fSmrg#define XkbKeyNumGroups(d,k) (XkbCMKeyNumGroups((d)->map,(k))) 4374642e01fSmrg#define XkbKeyNumSyms(d,k) (XkbCMKeyNumSyms((d)->map,(k))) 4384642e01fSmrg#define XkbKeySymsPtr(d,k) (XkbCMKeySymsPtr((d)->map,(k))) 4394642e01fSmrg#define XkbKeySym(d,k,n) (XkbKeySymsPtr(d,k)[n]) 4404642e01fSmrg#define XkbKeySymEntry(d,k,sl,g) \ 4414642e01fSmrg (XkbKeySym(d,k,((XkbKeyGroupsWidth(d,k)*(g))+(sl)))) 4424642e01fSmrg#define XkbKeyAction(d,k,n) \ 4434642e01fSmrg (XkbKeyHasActions(d,k)?&XkbKeyActionsPtr(d,k)[n]:NULL) 4444642e01fSmrg#define XkbKeyActionEntry(d,k,sl,g) \ 4454642e01fSmrg (XkbKeyHasActions(d,k)?\ 4464642e01fSmrg XkbKeyAction(d,k,((XkbKeyGroupsWidth(d,k)*(g))+(sl))):NULL) 4474642e01fSmrg 4484642e01fSmrg#define XkbKeyHasActions(d,k) ((d)->server->key_acts[k]!=0) 4494642e01fSmrg#define XkbKeyNumActions(d,k) (XkbKeyHasActions(d,k)?XkbKeyNumSyms(d,k):1) 4504642e01fSmrg#define XkbKeyActionsPtr(d,k) (XkbSMKeyActionsPtr((d)->server,k)) 4514642e01fSmrg#define XkbKeycodeInRange(d,k) (((k)>=(d)->min_key_code)&&\ 4524642e01fSmrg ((k)<=(d)->max_key_code)) 4534642e01fSmrg#define XkbNumKeys(d) ((d)->max_key_code-(d)->min_key_code+1) 4544642e01fSmrg 4554642e01fSmrg 4564642e01fSmrg /* 4574642e01fSmrg * The following structures can be used to track changes 4584642e01fSmrg * to a keyboard device 4594642e01fSmrg */ 4604642e01fSmrgtypedef struct _XkbMapChanges { 4614642e01fSmrg unsigned short changed; 4624642e01fSmrg KeyCode min_key_code; 4634642e01fSmrg KeyCode max_key_code; 4644642e01fSmrg unsigned char first_type; 4654642e01fSmrg unsigned char num_types; 4664642e01fSmrg KeyCode first_key_sym; 4674642e01fSmrg unsigned char num_key_syms; 4684642e01fSmrg KeyCode first_key_act; 4694642e01fSmrg unsigned char num_key_acts; 4704642e01fSmrg KeyCode first_key_behavior; 4714642e01fSmrg unsigned char num_key_behaviors; 4724642e01fSmrg KeyCode first_key_explicit; 4734642e01fSmrg unsigned char num_key_explicit; 4744642e01fSmrg KeyCode first_modmap_key; 4754642e01fSmrg unsigned char num_modmap_keys; 4764642e01fSmrg KeyCode first_vmodmap_key; 4774642e01fSmrg unsigned char num_vmodmap_keys; 4784642e01fSmrg unsigned char pad; 4794642e01fSmrg unsigned short vmods; 4804642e01fSmrg} XkbMapChangesRec,*XkbMapChangesPtr; 4814642e01fSmrg 4824642e01fSmrgtypedef struct _XkbControlsChanges { 4834642e01fSmrg unsigned int changed_ctrls; 4844642e01fSmrg unsigned int enabled_ctrls_changes; 4854642e01fSmrg Bool num_groups_changed; 4864642e01fSmrg} XkbControlsChangesRec,*XkbControlsChangesPtr; 4874642e01fSmrg 4884642e01fSmrgtypedef struct _XkbIndicatorChanges { 4894642e01fSmrg unsigned int state_changes; 4904642e01fSmrg unsigned int map_changes; 4914642e01fSmrg} XkbIndicatorChangesRec,*XkbIndicatorChangesPtr; 4924642e01fSmrg 4934642e01fSmrgtypedef struct _XkbNameChanges { 4944642e01fSmrg unsigned int changed; 4954642e01fSmrg unsigned char first_type; 4964642e01fSmrg unsigned char num_types; 4974642e01fSmrg unsigned char first_lvl; 4984642e01fSmrg unsigned char num_lvls; 4994642e01fSmrg unsigned char num_aliases; 5004642e01fSmrg unsigned char num_rg; 5014642e01fSmrg unsigned char first_key; 5024642e01fSmrg unsigned char num_keys; 5034642e01fSmrg unsigned short changed_vmods; 5044642e01fSmrg unsigned long changed_indicators; 5054642e01fSmrg unsigned char changed_groups; 5064642e01fSmrg} XkbNameChangesRec,*XkbNameChangesPtr; 5074642e01fSmrg 5084642e01fSmrgtypedef struct _XkbCompatChanges { 5094642e01fSmrg unsigned char changed_groups; 5104642e01fSmrg unsigned short first_si; 5114642e01fSmrg unsigned short num_si; 5124642e01fSmrg} XkbCompatChangesRec,*XkbCompatChangesPtr; 5134642e01fSmrg 5144642e01fSmrgtypedef struct _XkbChanges { 5154642e01fSmrg unsigned short device_spec; 5164642e01fSmrg unsigned short state_changes; 5174642e01fSmrg XkbMapChangesRec map; 5184642e01fSmrg XkbControlsChangesRec ctrls; 5194642e01fSmrg XkbIndicatorChangesRec indicators; 5204642e01fSmrg XkbNameChangesRec names; 5214642e01fSmrg XkbCompatChangesRec compat; 5224642e01fSmrg} XkbChangesRec, *XkbChangesPtr; 5234642e01fSmrg 5244642e01fSmrg /* 5254642e01fSmrg * These data structures are used to construct a keymap from 5264642e01fSmrg * a set of components or to list components in the server 5274642e01fSmrg * database. 5284642e01fSmrg */ 5294642e01fSmrgtypedef struct _XkbComponentNames { 5304642e01fSmrg char * keymap; 5314642e01fSmrg char * keycodes; 5324642e01fSmrg char * types; 5334642e01fSmrg char * compat; 5344642e01fSmrg char * symbols; 5354642e01fSmrg char * geometry; 5364642e01fSmrg} XkbComponentNamesRec, *XkbComponentNamesPtr; 5374642e01fSmrg 5384642e01fSmrgtypedef struct _XkbComponentName { 5394642e01fSmrg unsigned short flags; 5404642e01fSmrg char * name; 5414642e01fSmrg} XkbComponentNameRec,*XkbComponentNamePtr; 5424642e01fSmrg 5434642e01fSmrgtypedef struct _XkbComponentList { 5444642e01fSmrg int num_keymaps; 5454642e01fSmrg int num_keycodes; 5464642e01fSmrg int num_types; 5474642e01fSmrg int num_compat; 5484642e01fSmrg int num_symbols; 5494642e01fSmrg int num_geometry; 5504642e01fSmrg XkbComponentNamePtr keymaps; 5514642e01fSmrg XkbComponentNamePtr keycodes; 5524642e01fSmrg XkbComponentNamePtr types; 5534642e01fSmrg XkbComponentNamePtr compat; 5544642e01fSmrg XkbComponentNamePtr symbols; 5554642e01fSmrg XkbComponentNamePtr geometry; 5564642e01fSmrg} XkbComponentListRec, *XkbComponentListPtr; 5574642e01fSmrg 5584642e01fSmrg /* 5594642e01fSmrg * The following data structures describe and track changes to a 5604642e01fSmrg * non-keyboard extension device 5614642e01fSmrg */ 5624642e01fSmrgtypedef struct _XkbDeviceLedInfo { 5634642e01fSmrg unsigned short led_class; 5644642e01fSmrg unsigned short led_id; 5654642e01fSmrg unsigned int phys_indicators; 5664642e01fSmrg unsigned int maps_present; 5674642e01fSmrg unsigned int names_present; 5684642e01fSmrg unsigned int state; 5694642e01fSmrg Atom names[XkbNumIndicators]; 5704642e01fSmrg XkbIndicatorMapRec maps[XkbNumIndicators]; 5714642e01fSmrg} XkbDeviceLedInfoRec,*XkbDeviceLedInfoPtr; 5724642e01fSmrg 5734642e01fSmrgtypedef struct _XkbDeviceInfo { 5744642e01fSmrg char * name; 5754642e01fSmrg Atom type; 5764642e01fSmrg unsigned short device_spec; 5774642e01fSmrg Bool has_own_state; 5784642e01fSmrg unsigned short supported; 5794642e01fSmrg unsigned short unsupported; 5804642e01fSmrg 5814642e01fSmrg unsigned short num_btns; 5824642e01fSmrg XkbAction * btn_acts; 5834642e01fSmrg 5844642e01fSmrg unsigned short sz_leds; 5854642e01fSmrg unsigned short num_leds; 5864642e01fSmrg unsigned short dflt_kbd_fb; 5874642e01fSmrg unsigned short dflt_led_fb; 5884642e01fSmrg XkbDeviceLedInfoPtr leds; 5894642e01fSmrg} XkbDeviceInfoRec,*XkbDeviceInfoPtr; 5904642e01fSmrg 5914642e01fSmrg#define XkbXI_DevHasBtnActs(d) (((d)->num_btns>0)&&((d)->btn_acts!=NULL)) 5924642e01fSmrg#define XkbXI_LegalDevBtn(d,b) (XkbXI_DevHasBtnActs(d)&&((b)<(d)->num_btns)) 5934642e01fSmrg#define XkbXI_DevHasLeds(d) (((d)->num_leds>0)&&((d)->leds!=NULL)) 5944642e01fSmrg 5954642e01fSmrgtypedef struct _XkbDeviceLedChanges { 5964642e01fSmrg unsigned short led_class; 5974642e01fSmrg unsigned short led_id; 5984642e01fSmrg unsigned int defined; /* names or maps changed */ 5994642e01fSmrg struct _XkbDeviceLedChanges *next; 6004642e01fSmrg} XkbDeviceLedChangesRec,*XkbDeviceLedChangesPtr; 6014642e01fSmrg 6024642e01fSmrgtypedef struct _XkbDeviceChanges { 6034642e01fSmrg unsigned int changed; 6044642e01fSmrg unsigned short first_btn; 6054642e01fSmrg unsigned short num_btns; 6064642e01fSmrg XkbDeviceLedChangesRec leds; 6074642e01fSmrg} XkbDeviceChangesRec,*XkbDeviceChangesPtr; 6084642e01fSmrg 6094642e01fSmrg#endif /* _XKBSTR_H_ */ 610