xkbstr.h revision 6747b715
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 326747b715Smrg#define XkbCharToInt(v) ((int) ((v) & 0x80 ? ((v) | (~0xff)) : ((v) & 0x7f))) 336747b715Smrg#define XkbIntTo2Chars(i, h, l) ((h) = (i >> 8) & 0xff, (l) = (i) & 0xff) 344642e01fSmrg 354642e01fSmrg#if defined(WORD64) && defined(UNSIGNEDBITFIELDS) 366747b715Smrg#define Xkb2CharsToInt(h, l) ((int) ((h) & 0x80 ? \ 376747b715Smrg (((h) << 8) | (l) | (~0xffff)) : \ 386747b715Smrg (((h) << 8) | (l) & 0x7fff)) 394642e01fSmrg#else 404642e01fSmrg#define Xkb2CharsToInt(h,l) ((short)(((h)<<8)|(l))) 414642e01fSmrg#endif 424642e01fSmrg 434642e01fSmrg /* 444642e01fSmrg * Common data structures and access macros 454642e01fSmrg */ 464642e01fSmrg 474642e01fSmrgtypedef struct _XkbStateRec { 486747b715Smrg unsigned char group; /* base + latched + locked */ 496747b715Smrg /* FIXME: Why are base + latched short and not char?? */ 506747b715Smrg unsigned short base_group; /* physically ... down? */ 516747b715Smrg unsigned short latched_group; 524642e01fSmrg unsigned char locked_group; 536747b715Smrg 546747b715Smrg unsigned char mods; /* base + latched + locked */ 556747b715Smrg unsigned char base_mods; /* physically down */ 566747b715Smrg unsigned char latched_mods; 576747b715Smrg unsigned char locked_mods; 586747b715Smrg 596747b715Smrg unsigned char compat_state; /* mods + group for core state */ 606747b715Smrg 616747b715Smrg /* grab mods = all depressed and latched mods, _not_ locked mods */ 626747b715Smrg unsigned char grab_mods; /* grab mods minus internal mods */ 636747b715Smrg unsigned char compat_grab_mods; /* grab mods + group for core state, 646747b715Smrg but not locked groups if 656747b715Smrg IgnoreGroupLocks set */ 666747b715Smrg 676747b715Smrg /* effective mods = all mods (depressed, latched, locked) */ 686747b715Smrg unsigned char lookup_mods; /* effective mods minus internal mods */ 696747b715Smrg unsigned char compat_lookup_mods; /* effective mods + group */ 706747b715Smrg 716747b715Smrg unsigned short ptr_buttons; /* core pointer buttons */ 724642e01fSmrg} XkbStateRec,*XkbStatePtr; 734642e01fSmrg#define XkbStateFieldFromRec(s) XkbBuildCoreState((s)->lookup_mods,(s)->group) 744642e01fSmrg#define XkbGrabStateFromRec(s) XkbBuildCoreState((s)->grab_mods,(s)->group) 754642e01fSmrg 764642e01fSmrgtypedef struct _XkbMods { 774642e01fSmrg unsigned char mask; /* effective mods */ 784642e01fSmrg unsigned char real_mods; 794642e01fSmrg unsigned short vmods; 804642e01fSmrg} XkbModsRec,*XkbModsPtr; 814642e01fSmrg 824642e01fSmrgtypedef struct _XkbKTMapEntry { 834642e01fSmrg Bool active; 844642e01fSmrg unsigned char level; 854642e01fSmrg XkbModsRec mods; 864642e01fSmrg} XkbKTMapEntryRec,*XkbKTMapEntryPtr; 874642e01fSmrg 884642e01fSmrgtypedef struct _XkbKeyType { 894642e01fSmrg XkbModsRec mods; 904642e01fSmrg unsigned char num_levels; 914642e01fSmrg unsigned char map_count; 924642e01fSmrg XkbKTMapEntryPtr map; 934642e01fSmrg XkbModsPtr preserve; 944642e01fSmrg Atom name; 954642e01fSmrg Atom * level_names; 964642e01fSmrg} XkbKeyTypeRec, *XkbKeyTypePtr; 974642e01fSmrg 984642e01fSmrg#define XkbNumGroups(g) ((g)&0x0f) 994642e01fSmrg#define XkbOutOfRangeGroupInfo(g) ((g)&0xf0) 1004642e01fSmrg#define XkbOutOfRangeGroupAction(g) ((g)&0xc0) 1014642e01fSmrg#define XkbOutOfRangeGroupNumber(g) (((g)&0x30)>>4) 1026747b715Smrg#define XkbSetGroupInfo(g, w, n) (((w) & 0xc0) | (((n) & 3) << 4) | \ 1036747b715Smrg ((g) & 0x0f)) 1044642e01fSmrg#define XkbSetNumGroups(g,n) (((g)&0xf0)|((n)&0x0f)) 1054642e01fSmrg 1064642e01fSmrg /* 1074642e01fSmrg * Structures and access macros used primarily by the server 1084642e01fSmrg */ 1094642e01fSmrg 1104642e01fSmrgtypedef struct _XkbBehavior { 1114642e01fSmrg unsigned char type; 1124642e01fSmrg unsigned char data; 1134642e01fSmrg} XkbBehavior; 1144642e01fSmrg 1154642e01fSmrg#define XkbAnyActionDataSize 7 1164642e01fSmrgtypedef struct _XkbAnyAction { 1174642e01fSmrg unsigned char type; 1184642e01fSmrg unsigned char data[XkbAnyActionDataSize]; 1194642e01fSmrg} XkbAnyAction; 1204642e01fSmrg 1214642e01fSmrgtypedef struct _XkbModAction { 1224642e01fSmrg unsigned char type; 1234642e01fSmrg unsigned char flags; 1244642e01fSmrg unsigned char mask; 1254642e01fSmrg unsigned char real_mods; 1266747b715Smrg /* FIXME: Make this an int. */ 1274642e01fSmrg unsigned char vmods1; 1284642e01fSmrg unsigned char vmods2; 1294642e01fSmrg} XkbModAction; 1306747b715Smrg#define XkbModActionVMods(a) ((short) (((a)->vmods1 << 8) | (a)->vmods2)) 1314642e01fSmrg#define XkbSetModActionVMods(a,v) \ 1326747b715Smrg ((a)->vmods1 = (((v) >> 8) & 0xff), \ 1336747b715Smrg (a)->vmods2 = (v) & 0xff) 1344642e01fSmrg 1354642e01fSmrgtypedef struct _XkbGroupAction { 1364642e01fSmrg unsigned char type; 1374642e01fSmrg unsigned char flags; 1386747b715Smrg /* FIXME: Make this an int. */ 1394642e01fSmrg char group_XXX; 1404642e01fSmrg} XkbGroupAction; 1414642e01fSmrg#define XkbSAGroup(a) (XkbCharToInt((a)->group_XXX)) 1424642e01fSmrg#define XkbSASetGroup(a,g) ((a)->group_XXX=(g)) 1434642e01fSmrg 1444642e01fSmrgtypedef struct _XkbISOAction { 1454642e01fSmrg unsigned char type; 1464642e01fSmrg unsigned char flags; 1474642e01fSmrg unsigned char mask; 1484642e01fSmrg unsigned char real_mods; 1496747b715Smrg /* FIXME: Make this an int. */ 1504642e01fSmrg char group_XXX; 1514642e01fSmrg unsigned char affect; 1524642e01fSmrg unsigned char vmods1; 1534642e01fSmrg unsigned char vmods2; 1544642e01fSmrg} XkbISOAction; 1554642e01fSmrg 1564642e01fSmrgtypedef struct _XkbPtrAction { 1574642e01fSmrg unsigned char type; 1584642e01fSmrg unsigned char flags; 1596747b715Smrg /* FIXME: Make this an int. */ 1604642e01fSmrg unsigned char high_XXX; 1614642e01fSmrg unsigned char low_XXX; 1624642e01fSmrg unsigned char high_YYY; 1634642e01fSmrg unsigned char low_YYY; 1644642e01fSmrg} XkbPtrAction; 1654642e01fSmrg#define XkbPtrActionX(a) (Xkb2CharsToInt((a)->high_XXX,(a)->low_XXX)) 1664642e01fSmrg#define XkbPtrActionY(a) (Xkb2CharsToInt((a)->high_YYY,(a)->low_YYY)) 1674642e01fSmrg#define XkbSetPtrActionX(a,x) (XkbIntTo2Chars(x,(a)->high_XXX,(a)->low_XXX)) 1684642e01fSmrg#define XkbSetPtrActionY(a,y) (XkbIntTo2Chars(y,(a)->high_YYY,(a)->low_YYY)) 1694642e01fSmrg 1704642e01fSmrgtypedef struct _XkbPtrBtnAction { 1714642e01fSmrg unsigned char type; 1724642e01fSmrg unsigned char flags; 1734642e01fSmrg unsigned char count; 1744642e01fSmrg unsigned char button; 1754642e01fSmrg} XkbPtrBtnAction; 1764642e01fSmrg 1774642e01fSmrgtypedef struct _XkbPtrDfltAction { 1784642e01fSmrg unsigned char type; 1794642e01fSmrg unsigned char flags; 1804642e01fSmrg unsigned char affect; 1814642e01fSmrg char valueXXX; 1824642e01fSmrg} XkbPtrDfltAction; 1834642e01fSmrg#define XkbSAPtrDfltValue(a) (XkbCharToInt((a)->valueXXX)) 1846747b715Smrg#define XkbSASetPtrDfltValue(a, c) ((a)->valueXXX = (c) & 0xff) 1854642e01fSmrg 1864642e01fSmrgtypedef struct _XkbSwitchScreenAction { 1874642e01fSmrg unsigned char type; 1884642e01fSmrg unsigned char flags; 1894642e01fSmrg char screenXXX; 1904642e01fSmrg} XkbSwitchScreenAction; 1914642e01fSmrg#define XkbSAScreen(a) (XkbCharToInt((a)->screenXXX)) 1926747b715Smrg#define XkbSASetScreen(a, s) ((a)->screenXXX = (s) & 0xff) 1934642e01fSmrg 1944642e01fSmrgtypedef struct _XkbCtrlsAction { 1954642e01fSmrg unsigned char type; 1964642e01fSmrg unsigned char flags; 1976747b715Smrg /* FIXME: Make this an int. */ 1984642e01fSmrg unsigned char ctrls3; 1994642e01fSmrg unsigned char ctrls2; 2004642e01fSmrg unsigned char ctrls1; 2014642e01fSmrg unsigned char ctrls0; 2024642e01fSmrg} XkbCtrlsAction; 2036747b715Smrg#define XkbActionSetCtrls(a, c) ((a)->ctrls3 = ((c) >> 24) & 0xff, \ 2046747b715Smrg (a)->ctrls2 = ((c) >> 16) & 0xff, \ 2056747b715Smrg (a)->ctrls1 = ((c) >> 8) & 0xff, \ 2066747b715Smrg (a)->ctrls0 = (c) & 0xff) 2074642e01fSmrg#define XkbActionCtrls(a) ((((unsigned int)(a)->ctrls3)<<24)|\ 2084642e01fSmrg (((unsigned int)(a)->ctrls2)<<16)|\ 2094642e01fSmrg (((unsigned int)(a)->ctrls1)<<8)|\ 2106747b715Smrg ((unsigned int) (a)->ctrls0)) 2114642e01fSmrg 2124642e01fSmrgtypedef struct _XkbMessageAction { 2134642e01fSmrg unsigned char type; 2144642e01fSmrg unsigned char flags; 2154642e01fSmrg unsigned char message[6]; 2164642e01fSmrg} XkbMessageAction; 2174642e01fSmrg 2184642e01fSmrgtypedef struct _XkbRedirectKeyAction { 2194642e01fSmrg unsigned char type; 2204642e01fSmrg unsigned char new_key; 2214642e01fSmrg unsigned char mods_mask; 2224642e01fSmrg unsigned char mods; 2236747b715Smrg /* FIXME: Make this an int. */ 2244642e01fSmrg unsigned char vmods_mask0; 2254642e01fSmrg unsigned char vmods_mask1; 2264642e01fSmrg unsigned char vmods0; 2274642e01fSmrg unsigned char vmods1; 2284642e01fSmrg} XkbRedirectKeyAction; 2294642e01fSmrg 2304642e01fSmrg#define XkbSARedirectVMods(a) ((((unsigned int)(a)->vmods1)<<8)|\ 2314642e01fSmrg ((unsigned int)(a)->vmods0)) 2326747b715Smrg/* FIXME: This is blatantly not setting vmods. Yeesh. */ 2334642e01fSmrg#define XkbSARedirectSetVMods(a,m) (((a)->vmods_mask1=(((m)>>8)&0xff)),\ 2344642e01fSmrg ((a)->vmods_mask0=((m)&0xff))) 2354642e01fSmrg#define XkbSARedirectVModsMask(a) ((((unsigned int)(a)->vmods_mask1)<<8)|\ 2364642e01fSmrg ((unsigned int)(a)->vmods_mask0)) 2374642e01fSmrg#define XkbSARedirectSetVModsMask(a,m) (((a)->vmods_mask1=(((m)>>8)&0xff)),\ 2384642e01fSmrg ((a)->vmods_mask0=((m)&0xff))) 2394642e01fSmrg 2404642e01fSmrgtypedef struct _XkbDeviceBtnAction { 2414642e01fSmrg unsigned char type; 2424642e01fSmrg unsigned char flags; 2434642e01fSmrg unsigned char count; 2444642e01fSmrg unsigned char button; 2454642e01fSmrg unsigned char device; 2464642e01fSmrg} XkbDeviceBtnAction; 2474642e01fSmrg 2484642e01fSmrgtypedef struct _XkbDeviceValuatorAction { 2494642e01fSmrg unsigned char type; 2504642e01fSmrg unsigned char device; 2514642e01fSmrg unsigned char v1_what; 2524642e01fSmrg unsigned char v1_ndx; 2534642e01fSmrg unsigned char v1_value; 2544642e01fSmrg unsigned char v2_what; 2554642e01fSmrg unsigned char v2_ndx; 2564642e01fSmrg unsigned char v2_value; 2574642e01fSmrg} XkbDeviceValuatorAction; 2584642e01fSmrg 2594642e01fSmrgtypedef union _XkbAction { 2604642e01fSmrg XkbAnyAction any; 2614642e01fSmrg XkbModAction mods; 2624642e01fSmrg XkbGroupAction group; 2634642e01fSmrg XkbISOAction iso; 2644642e01fSmrg XkbPtrAction ptr; 2654642e01fSmrg XkbPtrBtnAction btn; 2664642e01fSmrg XkbPtrDfltAction dflt; 2674642e01fSmrg XkbSwitchScreenAction screen; 2684642e01fSmrg XkbCtrlsAction ctrls; 2694642e01fSmrg XkbMessageAction msg; 2704642e01fSmrg XkbRedirectKeyAction redirect; 2714642e01fSmrg XkbDeviceBtnAction devbtn; 2724642e01fSmrg XkbDeviceValuatorAction devval; 2734642e01fSmrg unsigned char type; 2744642e01fSmrg} XkbAction; 2754642e01fSmrg 2764642e01fSmrgtypedef struct _XkbControls { 2774642e01fSmrg unsigned char mk_dflt_btn; 2784642e01fSmrg unsigned char num_groups; 2794642e01fSmrg unsigned char groups_wrap; 2804642e01fSmrg XkbModsRec internal; 2814642e01fSmrg XkbModsRec ignore_lock; 2824642e01fSmrg unsigned int enabled_ctrls; 2834642e01fSmrg unsigned short repeat_delay; 2844642e01fSmrg unsigned short repeat_interval; 2854642e01fSmrg unsigned short slow_keys_delay; 2864642e01fSmrg unsigned short debounce_delay; 2874642e01fSmrg unsigned short mk_delay; 2884642e01fSmrg unsigned short mk_interval; 2894642e01fSmrg unsigned short mk_time_to_max; 2904642e01fSmrg unsigned short mk_max_speed; 2914642e01fSmrg short mk_curve; 2924642e01fSmrg unsigned short ax_options; 2934642e01fSmrg unsigned short ax_timeout; 2944642e01fSmrg unsigned short axt_opts_mask; 2954642e01fSmrg unsigned short axt_opts_values; 2964642e01fSmrg unsigned int axt_ctrls_mask; 2974642e01fSmrg unsigned int axt_ctrls_values; 2984642e01fSmrg unsigned char per_key_repeat[XkbPerKeyBitArraySize]; 2994642e01fSmrg} XkbControlsRec, *XkbControlsPtr; 3004642e01fSmrg 3014642e01fSmrg#define XkbAX_AnyFeedback(c) ((c)->enabled_ctrls&XkbAccessXFeedbackMask) 3024642e01fSmrg#define XkbAX_NeedOption(c,w) ((c)->ax_options&(w)) 3036747b715Smrg#define XkbAX_NeedFeedback(c, w) (XkbAX_AnyFeedback((c)) && \ 3046747b715Smrg XkbAX_NeedOption((c), (w))) 3054642e01fSmrg 3064642e01fSmrgtypedef struct _XkbServerMapRec { 3074642e01fSmrg unsigned short num_acts; 3084642e01fSmrg unsigned short size_acts; 3094642e01fSmrg XkbAction *acts; 3104642e01fSmrg 3114642e01fSmrg XkbBehavior *behaviors; 3124642e01fSmrg unsigned short *key_acts; 3134642e01fSmrg#if defined(__cplusplus) || defined(c_plusplus) 3144642e01fSmrg /* explicit is a C++ reserved word */ 3154642e01fSmrg unsigned char *c_explicit; 3164642e01fSmrg#else 3174642e01fSmrg unsigned char *explicit; 3184642e01fSmrg#endif 3194642e01fSmrg unsigned char vmods[XkbNumVirtualMods]; 3204642e01fSmrg unsigned short *vmodmap; 3214642e01fSmrg} XkbServerMapRec, *XkbServerMapPtr; 3224642e01fSmrg 3236747b715Smrg#define XkbSMKeyActionsPtr(m, k) (&(m)->acts[(m)->key_acts[(k)]]) 3244642e01fSmrg 3254642e01fSmrg /* 3264642e01fSmrg * Structures and access macros used primarily by clients 3274642e01fSmrg */ 3284642e01fSmrg 3294642e01fSmrgtypedef struct _XkbSymMapRec { 3304642e01fSmrg unsigned char kt_index[XkbNumKbdGroups]; 3314642e01fSmrg unsigned char group_info; 3324642e01fSmrg unsigned char width; 3334642e01fSmrg unsigned short offset; 3344642e01fSmrg} XkbSymMapRec, *XkbSymMapPtr; 3354642e01fSmrg 3364642e01fSmrgtypedef struct _XkbClientMapRec { 3374642e01fSmrg unsigned char size_types; 3384642e01fSmrg unsigned char num_types; 3394642e01fSmrg XkbKeyTypePtr types; 3404642e01fSmrg 3414642e01fSmrg unsigned short size_syms; 3424642e01fSmrg unsigned short num_syms; 3434642e01fSmrg KeySym *syms; 3444642e01fSmrg XkbSymMapPtr key_sym_map; 3454642e01fSmrg 3464642e01fSmrg unsigned char *modmap; 3474642e01fSmrg} XkbClientMapRec, *XkbClientMapPtr; 3484642e01fSmrg 3496747b715Smrg#define XkbCMKeyGroupInfo(m, k) ((m)->key_sym_map[(k)].group_info) 3506747b715Smrg#define XkbCMKeyNumGroups(m, k) (XkbNumGroups((m)->key_sym_map[(k)].group_info)) 3516747b715Smrg#define XkbCMKeyGroupWidth(m, k, g) (XkbCMKeyType((m), (k), (g))->num_levels) 3526747b715Smrg#define XkbCMKeyGroupsWidth(m, k) ((m)->key_sym_map[(k)].width) 3536747b715Smrg#define XkbCMKeyTypeIndex(m, k, g) ((m)->key_sym_map[(k)].kt_index[(g) & 0x3]) 3546747b715Smrg#define XkbCMKeyType(m, k, g) (&(m)->types[XkbCMKeyTypeIndex((m), (k), (g))]) 3556747b715Smrg#define XkbCMKeyNumSyms(m, k) (XkbCMKeyGroupsWidth((m), (k)) * \ 3566747b715Smrg XkbCMKeyNumGroups((m), (k))) 3576747b715Smrg#define XkbCMKeySymsOffset(m, k) ((m)->key_sym_map[(k)].offset) 3586747b715Smrg#define XkbCMKeySymsPtr(m, k) (&(m)->syms[XkbCMKeySymsOffset((m), (k))]) 3594642e01fSmrg 3604642e01fSmrg /* 3614642e01fSmrg * Compatibility structures and access macros 3624642e01fSmrg */ 3634642e01fSmrg 3644642e01fSmrgtypedef struct _XkbSymInterpretRec { 3654642e01fSmrg KeySym sym; 3664642e01fSmrg unsigned char flags; 3674642e01fSmrg unsigned char match; 3684642e01fSmrg unsigned char mods; 3694642e01fSmrg unsigned char virtual_mod; 3704642e01fSmrg XkbAnyAction act; 3714642e01fSmrg} XkbSymInterpretRec,*XkbSymInterpretPtr; 3724642e01fSmrg 3734642e01fSmrgtypedef struct _XkbCompatMapRec { 3744642e01fSmrg XkbSymInterpretPtr sym_interpret; 3754642e01fSmrg XkbModsRec groups[XkbNumKbdGroups]; 3764642e01fSmrg unsigned short num_si; 3774642e01fSmrg unsigned short size_si; 3784642e01fSmrg} XkbCompatMapRec, *XkbCompatMapPtr; 3794642e01fSmrg 3804642e01fSmrgtypedef struct _XkbIndicatorMapRec { 3814642e01fSmrg unsigned char flags; 3826747b715Smrg /* FIXME: For some reason, interepretation of groups is wildly 3836747b715Smrg * different between which being base/latched/locked. */ 3844642e01fSmrg unsigned char which_groups; 3854642e01fSmrg unsigned char groups; 3864642e01fSmrg unsigned char which_mods; 3874642e01fSmrg XkbModsRec mods; 3884642e01fSmrg unsigned int ctrls; 3894642e01fSmrg} XkbIndicatorMapRec, *XkbIndicatorMapPtr; 3904642e01fSmrg 3916747b715Smrg#define XkbIM_IsAuto(i) (!((i)->flags & XkbIM_NoAutomatic) && \ 3924642e01fSmrg (((i)->which_groups&&(i)->groups)||\ 3934642e01fSmrg ((i)->which_mods&&(i)->mods.mask)||\ 3946747b715Smrg (i)->ctrls)) 3956747b715Smrg#define XkbIM_InUse(i) ((i)->flags || (i)->which_groups || (i)->which_mods || \ 3966747b715Smrg (i)->ctrls) 3974642e01fSmrg 3984642e01fSmrg 3994642e01fSmrgtypedef struct _XkbIndicatorRec { 4004642e01fSmrg unsigned long phys_indicators; 4014642e01fSmrg XkbIndicatorMapRec maps[XkbNumIndicators]; 4024642e01fSmrg} XkbIndicatorRec,*XkbIndicatorPtr; 4034642e01fSmrg 4044642e01fSmrgtypedef struct _XkbKeyNameRec { 4054642e01fSmrg char name[XkbKeyNameLength]; 4064642e01fSmrg} XkbKeyNameRec,*XkbKeyNamePtr; 4074642e01fSmrg 4084642e01fSmrgtypedef struct _XkbKeyAliasRec { 4094642e01fSmrg char real[XkbKeyNameLength]; 4104642e01fSmrg char alias[XkbKeyNameLength]; 4114642e01fSmrg} XkbKeyAliasRec,*XkbKeyAliasPtr; 4124642e01fSmrg 4134642e01fSmrg /* 4144642e01fSmrg * Names for everything 4154642e01fSmrg */ 4164642e01fSmrgtypedef struct _XkbNamesRec { 4174642e01fSmrg Atom keycodes; 4184642e01fSmrg Atom geometry; 4194642e01fSmrg Atom symbols; 4204642e01fSmrg Atom types; 4214642e01fSmrg Atom compat; 4224642e01fSmrg Atom vmods[XkbNumVirtualMods]; 4234642e01fSmrg Atom indicators[XkbNumIndicators]; 4244642e01fSmrg Atom groups[XkbNumKbdGroups]; 4254642e01fSmrg XkbKeyNamePtr keys; 4264642e01fSmrg XkbKeyAliasPtr key_aliases; 4274642e01fSmrg Atom *radio_groups; 4284642e01fSmrg Atom phys_symbols; 4294642e01fSmrg 4304642e01fSmrg unsigned char num_keys; 4314642e01fSmrg unsigned char num_key_aliases; 4324642e01fSmrg unsigned short num_rg; 4334642e01fSmrg} XkbNamesRec,*XkbNamesPtr; 4344642e01fSmrg 4354642e01fSmrgtypedef struct _XkbGeometry *XkbGeometryPtr; 4364642e01fSmrg /* 4374642e01fSmrg * Tie it all together into one big keyboard description 4384642e01fSmrg */ 4394642e01fSmrgtypedef struct _XkbDesc { 4404642e01fSmrg unsigned int defined; 4414642e01fSmrg unsigned short flags; 4424642e01fSmrg unsigned short device_spec; 4434642e01fSmrg KeyCode min_key_code; 4444642e01fSmrg KeyCode max_key_code; 4454642e01fSmrg 4464642e01fSmrg XkbControlsPtr ctrls; 4474642e01fSmrg XkbServerMapPtr server; 4484642e01fSmrg XkbClientMapPtr map; 4494642e01fSmrg XkbIndicatorPtr indicators; 4504642e01fSmrg XkbNamesPtr names; 4514642e01fSmrg XkbCompatMapPtr compat; 4524642e01fSmrg XkbGeometryPtr geom; 4534642e01fSmrg} XkbDescRec, *XkbDescPtr; 4546747b715Smrg#define XkbKeyKeyTypeIndex(d, k, g) (XkbCMKeyTypeIndex((d)->map, (k), (g))) 4556747b715Smrg#define XkbKeyKeyType(d, k, g) (XkbCMKeyType((d)->map, (k), (g))) 4566747b715Smrg#define XkbKeyGroupWidth(d, k, g) (XkbCMKeyGroupWidth((d)->map, (k), (g))) 4576747b715Smrg#define XkbKeyGroupsWidth(d, k) (XkbCMKeyGroupsWidth((d)->map, (k))) 4584642e01fSmrg#define XkbKeyGroupInfo(d,k) (XkbCMKeyGroupInfo((d)->map,(k))) 4594642e01fSmrg#define XkbKeyNumGroups(d,k) (XkbCMKeyNumGroups((d)->map,(k))) 4604642e01fSmrg#define XkbKeyNumSyms(d,k) (XkbCMKeyNumSyms((d)->map,(k))) 4614642e01fSmrg#define XkbKeySymsPtr(d,k) (XkbCMKeySymsPtr((d)->map,(k))) 4626747b715Smrg#define XkbKeySym(d, k, n) (XkbKeySymsPtr((d), (k))[(n)]) 4634642e01fSmrg#define XkbKeySymEntry(d,k,sl,g) \ 4646747b715Smrg (XkbKeySym((d), (k), (XkbKeyGroupsWidth((d), (k)) * (g)) + (sl))) 4654642e01fSmrg#define XkbKeyAction(d,k,n) \ 4666747b715Smrg (XkbKeyHasActions((d), (k)) ? & XkbKeyActionsPtr((d), (k))[(n)] : NULL) 4674642e01fSmrg#define XkbKeyActionEntry(d,k,sl,g) \ 4686747b715Smrg (XkbKeyHasActions((d), (k)) ? \ 4696747b715Smrg XkbKeyAction((d), (k), ((XkbKeyGroupsWidth((d), (k)) * (g)) + (sl))) : \ 4706747b715Smrg NULL) 4716747b715Smrg 4726747b715Smrg#define XkbKeyHasActions(d, k) (!!(d)->server->key_acts[(k)]) 4736747b715Smrg#define XkbKeyNumActions(d, k) (XkbKeyHasActions((d), (k)) ? \ 4746747b715Smrg XkbKeyNumSyms((d), (k)) : 1) 4756747b715Smrg#define XkbKeyActionsPtr(d, k) (XkbSMKeyActionsPtr((d)->server, (k))) 4766747b715Smrg#define XkbKeycodeInRange(d, k) ((k) >= (d)->min_key_code && \ 4776747b715Smrg (k) <= (d)->max_key_code) 4784642e01fSmrg#define XkbNumKeys(d) ((d)->max_key_code-(d)->min_key_code+1) 4794642e01fSmrg 4804642e01fSmrg 4814642e01fSmrg /* 4824642e01fSmrg * The following structures can be used to track changes 4834642e01fSmrg * to a keyboard device 4844642e01fSmrg */ 4854642e01fSmrgtypedef struct _XkbMapChanges { 4864642e01fSmrg unsigned short changed; 4874642e01fSmrg KeyCode min_key_code; 4884642e01fSmrg KeyCode max_key_code; 4894642e01fSmrg unsigned char first_type; 4904642e01fSmrg unsigned char num_types; 4914642e01fSmrg KeyCode first_key_sym; 4924642e01fSmrg unsigned char num_key_syms; 4934642e01fSmrg KeyCode first_key_act; 4944642e01fSmrg unsigned char num_key_acts; 4954642e01fSmrg KeyCode first_key_behavior; 4964642e01fSmrg unsigned char num_key_behaviors; 4974642e01fSmrg KeyCode first_key_explicit; 4984642e01fSmrg unsigned char num_key_explicit; 4994642e01fSmrg KeyCode first_modmap_key; 5004642e01fSmrg unsigned char num_modmap_keys; 5014642e01fSmrg KeyCode first_vmodmap_key; 5024642e01fSmrg unsigned char num_vmodmap_keys; 5034642e01fSmrg unsigned char pad; 5044642e01fSmrg unsigned short vmods; 5054642e01fSmrg} XkbMapChangesRec,*XkbMapChangesPtr; 5064642e01fSmrg 5074642e01fSmrgtypedef struct _XkbControlsChanges { 5084642e01fSmrg unsigned int changed_ctrls; 5094642e01fSmrg unsigned int enabled_ctrls_changes; 5104642e01fSmrg Bool num_groups_changed; 5114642e01fSmrg} XkbControlsChangesRec,*XkbControlsChangesPtr; 5124642e01fSmrg 5134642e01fSmrgtypedef struct _XkbIndicatorChanges { 5144642e01fSmrg unsigned int state_changes; 5154642e01fSmrg unsigned int map_changes; 5164642e01fSmrg} XkbIndicatorChangesRec,*XkbIndicatorChangesPtr; 5174642e01fSmrg 5184642e01fSmrgtypedef struct _XkbNameChanges { 5194642e01fSmrg unsigned int changed; 5204642e01fSmrg unsigned char first_type; 5214642e01fSmrg unsigned char num_types; 5224642e01fSmrg unsigned char first_lvl; 5234642e01fSmrg unsigned char num_lvls; 5244642e01fSmrg unsigned char num_aliases; 5254642e01fSmrg unsigned char num_rg; 5264642e01fSmrg unsigned char first_key; 5274642e01fSmrg unsigned char num_keys; 5284642e01fSmrg unsigned short changed_vmods; 5294642e01fSmrg unsigned long changed_indicators; 5304642e01fSmrg unsigned char changed_groups; 5314642e01fSmrg} XkbNameChangesRec,*XkbNameChangesPtr; 5324642e01fSmrg 5334642e01fSmrgtypedef struct _XkbCompatChanges { 5344642e01fSmrg unsigned char changed_groups; 5354642e01fSmrg unsigned short first_si; 5364642e01fSmrg unsigned short num_si; 5374642e01fSmrg} XkbCompatChangesRec,*XkbCompatChangesPtr; 5384642e01fSmrg 5394642e01fSmrgtypedef struct _XkbChanges { 5404642e01fSmrg unsigned short device_spec; 5414642e01fSmrg unsigned short state_changes; 5424642e01fSmrg XkbMapChangesRec map; 5434642e01fSmrg XkbControlsChangesRec ctrls; 5444642e01fSmrg XkbIndicatorChangesRec indicators; 5454642e01fSmrg XkbNameChangesRec names; 5464642e01fSmrg XkbCompatChangesRec compat; 5474642e01fSmrg} XkbChangesRec, *XkbChangesPtr; 5484642e01fSmrg 5494642e01fSmrg /* 5504642e01fSmrg * These data structures are used to construct a keymap from 5514642e01fSmrg * a set of components or to list components in the server 5524642e01fSmrg * database. 5534642e01fSmrg */ 5544642e01fSmrgtypedef struct _XkbComponentNames { 5554642e01fSmrg char * keycodes; 5564642e01fSmrg char * types; 5574642e01fSmrg char * compat; 5584642e01fSmrg char * symbols; 5594642e01fSmrg char * geometry; 5604642e01fSmrg} XkbComponentNamesRec, *XkbComponentNamesPtr; 5614642e01fSmrg 5624642e01fSmrgtypedef struct _XkbComponentName { 5634642e01fSmrg unsigned short flags; 5644642e01fSmrg char * name; 5654642e01fSmrg} XkbComponentNameRec,*XkbComponentNamePtr; 5664642e01fSmrg 5674642e01fSmrgtypedef struct _XkbComponentList { 5684642e01fSmrg int num_keymaps; 5694642e01fSmrg int num_keycodes; 5704642e01fSmrg int num_types; 5714642e01fSmrg int num_compat; 5724642e01fSmrg int num_symbols; 5734642e01fSmrg int num_geometry; 5744642e01fSmrg XkbComponentNamePtr keymaps; 5754642e01fSmrg XkbComponentNamePtr keycodes; 5764642e01fSmrg XkbComponentNamePtr types; 5774642e01fSmrg XkbComponentNamePtr compat; 5784642e01fSmrg XkbComponentNamePtr symbols; 5794642e01fSmrg XkbComponentNamePtr geometry; 5804642e01fSmrg} XkbComponentListRec, *XkbComponentListPtr; 5814642e01fSmrg 5824642e01fSmrg /* 5834642e01fSmrg * The following data structures describe and track changes to a 5844642e01fSmrg * non-keyboard extension device 5854642e01fSmrg */ 5864642e01fSmrgtypedef struct _XkbDeviceLedInfo { 5874642e01fSmrg unsigned short led_class; 5884642e01fSmrg unsigned short led_id; 5894642e01fSmrg unsigned int phys_indicators; 5904642e01fSmrg unsigned int maps_present; 5914642e01fSmrg unsigned int names_present; 5924642e01fSmrg unsigned int state; 5934642e01fSmrg Atom names[XkbNumIndicators]; 5944642e01fSmrg XkbIndicatorMapRec maps[XkbNumIndicators]; 5954642e01fSmrg} XkbDeviceLedInfoRec,*XkbDeviceLedInfoPtr; 5964642e01fSmrg 5974642e01fSmrgtypedef struct _XkbDeviceInfo { 5984642e01fSmrg char * name; 5994642e01fSmrg Atom type; 6004642e01fSmrg unsigned short device_spec; 6014642e01fSmrg Bool has_own_state; 6024642e01fSmrg unsigned short supported; 6034642e01fSmrg unsigned short unsupported; 6044642e01fSmrg 6054642e01fSmrg unsigned short num_btns; 6064642e01fSmrg XkbAction * btn_acts; 6074642e01fSmrg 6084642e01fSmrg unsigned short sz_leds; 6094642e01fSmrg unsigned short num_leds; 6104642e01fSmrg unsigned short dflt_kbd_fb; 6114642e01fSmrg unsigned short dflt_led_fb; 6124642e01fSmrg XkbDeviceLedInfoPtr leds; 6134642e01fSmrg} XkbDeviceInfoRec,*XkbDeviceInfoPtr; 6144642e01fSmrg 6156747b715Smrg#define XkbXI_DevHasBtnActs(d) ((d)->num_btns > 0 && (d)->btn_acts) 6166747b715Smrg#define XkbXI_LegalDevBtn(d,b) (XkbXI_DevHasBtnActs(d) && (b) < (d)->num_btns) 6176747b715Smrg#define XkbXI_DevHasLeds(d) ((d)->num_leds > 0 && (d)->leds) 6184642e01fSmrg 6194642e01fSmrgtypedef struct _XkbDeviceLedChanges { 6204642e01fSmrg unsigned short led_class; 6214642e01fSmrg unsigned short led_id; 6224642e01fSmrg unsigned int defined; /* names or maps changed */ 6234642e01fSmrg struct _XkbDeviceLedChanges *next; 6244642e01fSmrg} XkbDeviceLedChangesRec,*XkbDeviceLedChangesPtr; 6254642e01fSmrg 6264642e01fSmrgtypedef struct _XkbDeviceChanges { 6274642e01fSmrg unsigned int changed; 6284642e01fSmrg unsigned short first_btn; 6294642e01fSmrg unsigned short num_btns; 6304642e01fSmrg XkbDeviceLedChangesRec leds; 6314642e01fSmrg} XkbDeviceChangesRec,*XkbDeviceChangesPtr; 6324642e01fSmrg 6334642e01fSmrg#endif /* _XKBSTR_H_ */ 634