8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync/************************************************************
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsyncCopyright (c) 1993 by Silicon Graphics Computer Systems, Inc.
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsyncPermission to use, copy, modify, and distribute this
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsyncsoftware and its documentation for any purpose and without
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsyncfee is hereby granted, provided that the above copyright
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsyncnotice appear in all copies and that both that copyright
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsyncnotice and this permission notice appear in supporting
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsyncdocumentation, and that the name of Silicon Graphics not be
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsyncused in advertising or publicity pertaining to distribution
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsyncof the software without specific prior written permission.
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsyncSilicon Graphics makes no representation about the suitability
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsyncof this software for any purpose. It is provided "as is"
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsyncwithout any express or implied warranty.
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsyncSILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsyncSOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsyncAND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsyncGRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsyncDAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsyncDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsyncOR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsyncTHE USE OR PERFORMANCE OF THIS SOFTWARE.
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync********************************************************/
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#ifndef _XKBSTR_H_
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define _XKBSTR_H_
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#include <X11/extensions/XKB.h>
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbCharToInt(v) ((int) ((v) & 0x80 ? ((v) | (~0xff)) : ((v) & 0x7f)))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbIntTo2Chars(i, h, l) ((h) = (i >> 8) & 0xff, (l) = (i) & 0xff)
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#if defined(WORD64) && defined(UNSIGNEDBITFIELDS)
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define Xkb2CharsToInt(h, l) ((int) ((h) & 0x80 ? \
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync (((h) << 8) | (l) | (~0xffff)) : \
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync (((h) << 8) | (l) & 0x7fff))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#else
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define Xkb2CharsToInt(h,l) ((short)(((h)<<8)|(l)))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#endif
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync /*
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync * Common data structures and access macros
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbStateRec {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char group; /* base + latched + locked */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync /* FIXME: Why are base + latched short and not char?? */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short base_group; /* physically ... down? */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short latched_group;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char locked_group;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char mods; /* base + latched + locked */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char base_mods; /* physically down */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char latched_mods;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char locked_mods;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char compat_state; /* mods + group for core state */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync /* grab mods = all depressed and latched mods, _not_ locked mods */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char grab_mods; /* grab mods minus internal mods */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char compat_grab_mods; /* grab mods + group for core state,
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync but not locked groups if
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync IgnoreGroupLocks set */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync /* effective mods = all mods (depressed, latched, locked) */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char lookup_mods; /* effective mods minus internal mods */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char compat_lookup_mods; /* effective mods + group */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short ptr_buttons; /* core pointer buttons */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbStateRec,*XkbStatePtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbStateFieldFromRec(s) XkbBuildCoreState((s)->lookup_mods,(s)->group)
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbGrabStateFromRec(s) XkbBuildCoreState((s)->grab_mods,(s)->group)
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbMods {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char mask; /* effective mods */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char real_mods;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short vmods;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbModsRec,*XkbModsPtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbKTMapEntry {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync Bool active;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char level;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbModsRec mods;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbKTMapEntryRec,*XkbKTMapEntryPtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbKeyType {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbModsRec mods;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char num_levels;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char map_count;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbKTMapEntryPtr map;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbModsPtr preserve;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync Atom name;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync Atom * level_names;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbKeyTypeRec, *XkbKeyTypePtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbNumGroups(g) ((g)&0x0f)
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbOutOfRangeGroupInfo(g) ((g)&0xf0)
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbOutOfRangeGroupAction(g) ((g)&0xc0)
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbOutOfRangeGroupNumber(g) (((g)&0x30)>>4)
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbSetGroupInfo(g, w, n) (((w) & 0xc0) | (((n) & 3) << 4) | \
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync ((g) & 0x0f))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbSetNumGroups(g,n) (((g)&0xf0)|((n)&0x0f))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync /*
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync * Structures and access macros used primarily by the server
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbBehavior {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char type;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char data;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbBehavior;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbAnyActionDataSize 7
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbAnyAction {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char type;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char data[XkbAnyActionDataSize];
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbAnyAction;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbModAction {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char type;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char flags;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char mask;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char real_mods;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync /* FIXME: Make this an int. */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char vmods1;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char vmods2;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbModAction;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbModActionVMods(a) ((short) (((a)->vmods1 << 8) | (a)->vmods2))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbSetModActionVMods(a,v) \
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync ((a)->vmods1 = (((v) >> 8) & 0xff), \
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync (a)->vmods2 = (v) & 0xff)
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbGroupAction {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char type;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char flags;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync /* FIXME: Make this an int. */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync char group_XXX;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbGroupAction;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbSAGroup(a) (XkbCharToInt((a)->group_XXX))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbSASetGroup(a,g) ((a)->group_XXX=(g))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbISOAction {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char type;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char flags;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char mask;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char real_mods;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync /* FIXME: Make this an int. */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync char group_XXX;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char affect;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char vmods1;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char vmods2;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbISOAction;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbPtrAction {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char type;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char flags;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync /* FIXME: Make this an int. */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char high_XXX;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char low_XXX;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char high_YYY;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char low_YYY;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbPtrAction;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbPtrActionX(a) (Xkb2CharsToInt((a)->high_XXX,(a)->low_XXX))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbPtrActionY(a) (Xkb2CharsToInt((a)->high_YYY,(a)->low_YYY))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbSetPtrActionX(a,x) (XkbIntTo2Chars(x,(a)->high_XXX,(a)->low_XXX))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbSetPtrActionY(a,y) (XkbIntTo2Chars(y,(a)->high_YYY,(a)->low_YYY))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbPtrBtnAction {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char type;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char flags;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char count;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char button;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbPtrBtnAction;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbPtrDfltAction {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char type;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char flags;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char affect;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync char valueXXX;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbPtrDfltAction;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbSAPtrDfltValue(a) (XkbCharToInt((a)->valueXXX))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbSASetPtrDfltValue(a, c) ((a)->valueXXX = (c) & 0xff)
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbSwitchScreenAction {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char type;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char flags;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync char screenXXX;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbSwitchScreenAction;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbSAScreen(a) (XkbCharToInt((a)->screenXXX))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbSASetScreen(a, s) ((a)->screenXXX = (s) & 0xff)
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbCtrlsAction {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char type;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char flags;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync /* FIXME: Make this an int. */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char ctrls3;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char ctrls2;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char ctrls1;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char ctrls0;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbCtrlsAction;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbActionSetCtrls(a, c) ((a)->ctrls3 = ((c) >> 24) & 0xff, \
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync (a)->ctrls2 = ((c) >> 16) & 0xff, \
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync (a)->ctrls1 = ((c) >> 8) & 0xff, \
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync (a)->ctrls0 = (c) & 0xff)
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbActionCtrls(a) ((((unsigned int)(a)->ctrls3)<<24)|\
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync (((unsigned int)(a)->ctrls2)<<16)|\
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync (((unsigned int)(a)->ctrls1)<<8)|\
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync ((unsigned int) (a)->ctrls0))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbMessageAction {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char type;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char flags;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char message[6];
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbMessageAction;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbRedirectKeyAction {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char type;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char new_key;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char mods_mask;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char mods;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync /* FIXME: Make this an int. */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char vmods_mask0;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char vmods_mask1;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char vmods0;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char vmods1;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbRedirectKeyAction;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbSARedirectVMods(a) ((((unsigned int)(a)->vmods1)<<8)|\
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync ((unsigned int)(a)->vmods0))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync/* FIXME: This is blatantly not setting vmods. Yeesh. */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbSARedirectSetVMods(a,m) (((a)->vmods_mask1=(((m)>>8)&0xff)),\
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync ((a)->vmods_mask0=((m)&0xff)))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbSARedirectVModsMask(a) ((((unsigned int)(a)->vmods_mask1)<<8)|\
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync ((unsigned int)(a)->vmods_mask0))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbSARedirectSetVModsMask(a,m) (((a)->vmods_mask1=(((m)>>8)&0xff)),\
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync ((a)->vmods_mask0=((m)&0xff)))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbDeviceBtnAction {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char type;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char flags;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char count;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char button;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char device;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbDeviceBtnAction;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbDeviceValuatorAction {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char type;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char device;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char v1_what;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char v1_ndx;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char v1_value;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char v2_what;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char v2_ndx;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char v2_value;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbDeviceValuatorAction;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef union _XkbAction {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbAnyAction any;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbModAction mods;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbGroupAction group;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbISOAction iso;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbPtrAction ptr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbPtrBtnAction btn;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbPtrDfltAction dflt;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbSwitchScreenAction screen;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbCtrlsAction ctrls;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbMessageAction msg;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbRedirectKeyAction redirect;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbDeviceBtnAction devbtn;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbDeviceValuatorAction devval;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char type;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbAction;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbControls {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char mk_dflt_btn;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char num_groups;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char groups_wrap;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbModsRec internal;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbModsRec ignore_lock;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned int enabled_ctrls;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short repeat_delay;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short repeat_interval;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short slow_keys_delay;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short debounce_delay;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short mk_delay;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short mk_interval;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short mk_time_to_max;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short mk_max_speed;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync short mk_curve;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short ax_options;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short ax_timeout;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short axt_opts_mask;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short axt_opts_values;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned int axt_ctrls_mask;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned int axt_ctrls_values;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char per_key_repeat[XkbPerKeyBitArraySize];
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbControlsRec, *XkbControlsPtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbAX_AnyFeedback(c) ((c)->enabled_ctrls&XkbAccessXFeedbackMask)
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbAX_NeedOption(c,w) ((c)->ax_options&(w))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbAX_NeedFeedback(c, w) (XkbAX_AnyFeedback((c)) && \
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbAX_NeedOption((c), (w)))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbServerMapRec {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short num_acts;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short size_acts;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbAction *acts;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbBehavior *behaviors;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short *key_acts;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#if defined(__cplusplus) || defined(c_plusplus)
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync /* explicit is a C++ reserved word */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char *c_explicit;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#else
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char *explicit;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#endif
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char vmods[XkbNumVirtualMods];
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short *vmodmap;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbServerMapRec, *XkbServerMapPtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbSMKeyActionsPtr(m, k) (&(m)->acts[(m)->key_acts[(k)]])
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync /*
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync * Structures and access macros used primarily by clients
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbSymMapRec {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char kt_index[XkbNumKbdGroups];
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char group_info;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char width;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short offset;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbSymMapRec, *XkbSymMapPtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbClientMapRec {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char size_types;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char num_types;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbKeyTypePtr types;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short size_syms;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short num_syms;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync KeySym *syms;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbSymMapPtr key_sym_map;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char *modmap;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbClientMapRec, *XkbClientMapPtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbCMKeyGroupInfo(m, k) ((m)->key_sym_map[(k)].group_info)
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbCMKeyNumGroups(m, k) (XkbNumGroups((m)->key_sym_map[(k)].group_info))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbCMKeyGroupWidth(m, k, g) (XkbCMKeyType((m), (k), (g))->num_levels)
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbCMKeyGroupsWidth(m, k) ((m)->key_sym_map[(k)].width)
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbCMKeyTypeIndex(m, k, g) ((m)->key_sym_map[(k)].kt_index[(g) & 0x3])
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbCMKeyType(m, k, g) (&(m)->types[XkbCMKeyTypeIndex((m), (k), (g))])
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbCMKeyNumSyms(m, k) (XkbCMKeyGroupsWidth((m), (k)) * \
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbCMKeyNumGroups((m), (k)))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbCMKeySymsOffset(m, k) ((m)->key_sym_map[(k)].offset)
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbCMKeySymsPtr(m, k) (&(m)->syms[XkbCMKeySymsOffset((m), (k))])
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync /*
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync * Compatibility structures and access macros
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbSymInterpretRec {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync KeySym sym;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char flags;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char match;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char mods;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char virtual_mod;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbAnyAction act;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbSymInterpretRec,*XkbSymInterpretPtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbCompatMapRec {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbSymInterpretPtr sym_interpret;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbModsRec groups[XkbNumKbdGroups];
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short num_si;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short size_si;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbCompatMapRec, *XkbCompatMapPtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbIndicatorMapRec {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char flags;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync /* FIXME: For some reason, interepretation of groups is wildly
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync * different between which being base/latched/locked. */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char which_groups;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char groups;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char which_mods;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbModsRec mods;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned int ctrls;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbIndicatorMapRec, *XkbIndicatorMapPtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbIM_IsAuto(i) (!((i)->flags & XkbIM_NoAutomatic) && \
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync (((i)->which_groups&&(i)->groups)||\
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync ((i)->which_mods&&(i)->mods.mask)||\
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync (i)->ctrls))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbIM_InUse(i) ((i)->flags || (i)->which_groups || (i)->which_mods || \
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync (i)->ctrls)
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbIndicatorRec {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned long phys_indicators;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbIndicatorMapRec maps[XkbNumIndicators];
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbIndicatorRec,*XkbIndicatorPtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbKeyNameRec {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync char name[XkbKeyNameLength];
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbKeyNameRec,*XkbKeyNamePtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbKeyAliasRec {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync char real[XkbKeyNameLength];
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync char alias[XkbKeyNameLength];
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbKeyAliasRec,*XkbKeyAliasPtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync /*
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync * Names for everything
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbNamesRec {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync Atom keycodes;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync Atom geometry;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync Atom symbols;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync Atom types;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync Atom compat;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync Atom vmods[XkbNumVirtualMods];
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync Atom indicators[XkbNumIndicators];
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync Atom groups[XkbNumKbdGroups];
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbKeyNamePtr keys;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbKeyAliasPtr key_aliases;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync Atom *radio_groups;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync Atom phys_symbols;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char num_keys;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char num_key_aliases;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short num_rg;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbNamesRec,*XkbNamesPtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbGeometry *XkbGeometryPtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync /*
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync * Tie it all together into one big keyboard description
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbDesc {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned int defined;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short flags;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short device_spec;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync KeyCode min_key_code;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync KeyCode max_key_code;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbControlsPtr ctrls;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbServerMapPtr server;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbClientMapPtr map;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbIndicatorPtr indicators;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbNamesPtr names;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbCompatMapPtr compat;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbGeometryPtr geom;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbDescRec, *XkbDescPtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbKeyKeyTypeIndex(d, k, g) (XkbCMKeyTypeIndex((d)->map, (k), (g)))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbKeyKeyType(d, k, g) (XkbCMKeyType((d)->map, (k), (g)))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbKeyGroupWidth(d, k, g) (XkbCMKeyGroupWidth((d)->map, (k), (g)))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbKeyGroupsWidth(d, k) (XkbCMKeyGroupsWidth((d)->map, (k)))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbKeyGroupInfo(d,k) (XkbCMKeyGroupInfo((d)->map,(k)))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbKeyNumGroups(d,k) (XkbCMKeyNumGroups((d)->map,(k)))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbKeyNumSyms(d,k) (XkbCMKeyNumSyms((d)->map,(k)))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbKeySymsPtr(d,k) (XkbCMKeySymsPtr((d)->map,(k)))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbKeySym(d, k, n) (XkbKeySymsPtr((d), (k))[(n)])
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbKeySymEntry(d,k,sl,g) \
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync (XkbKeySym((d), (k), (XkbKeyGroupsWidth((d), (k)) * (g)) + (sl)))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbKeyAction(d,k,n) \
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync (XkbKeyHasActions((d), (k)) ? & XkbKeyActionsPtr((d), (k))[(n)] : NULL)
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbKeyActionEntry(d,k,sl,g) \
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync (XkbKeyHasActions((d), (k)) ? \
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbKeyAction((d), (k), ((XkbKeyGroupsWidth((d), (k)) * (g)) + (sl))) : \
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync NULL)
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbKeyHasActions(d, k) (!!(d)->server->key_acts[(k)])
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbKeyNumActions(d, k) (XkbKeyHasActions((d), (k)) ? \
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbKeyNumSyms((d), (k)) : 1)
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbKeyActionsPtr(d, k) (XkbSMKeyActionsPtr((d)->server, (k)))
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbKeycodeInRange(d, k) ((k) >= (d)->min_key_code && \
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync (k) <= (d)->max_key_code)
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbNumKeys(d) ((d)->max_key_code-(d)->min_key_code+1)
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync /*
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync * The following structures can be used to track changes
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync * to a keyboard device
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbMapChanges {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short changed;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync KeyCode min_key_code;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync KeyCode max_key_code;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char first_type;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char num_types;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync KeyCode first_key_sym;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char num_key_syms;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync KeyCode first_key_act;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char num_key_acts;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync KeyCode first_key_behavior;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char num_key_behaviors;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync KeyCode first_key_explicit;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char num_key_explicit;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync KeyCode first_modmap_key;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char num_modmap_keys;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync KeyCode first_vmodmap_key;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char num_vmodmap_keys;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char pad;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short vmods;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbMapChangesRec,*XkbMapChangesPtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbControlsChanges {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned int changed_ctrls;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned int enabled_ctrls_changes;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync Bool num_groups_changed;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbControlsChangesRec,*XkbControlsChangesPtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbIndicatorChanges {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned int state_changes;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned int map_changes;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbIndicatorChangesRec,*XkbIndicatorChangesPtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbNameChanges {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned int changed;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char first_type;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char num_types;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char first_lvl;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char num_lvls;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char num_aliases;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char num_rg;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char first_key;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char num_keys;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short changed_vmods;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned long changed_indicators;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char changed_groups;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbNameChangesRec,*XkbNameChangesPtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbCompatChanges {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned char changed_groups;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short first_si;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short num_si;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbCompatChangesRec,*XkbCompatChangesPtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbChanges {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short device_spec;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short state_changes;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbMapChangesRec map;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbControlsChangesRec ctrls;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbIndicatorChangesRec indicators;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbNameChangesRec names;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbCompatChangesRec compat;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbChangesRec, *XkbChangesPtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync /*
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync * These data structures are used to construct a keymap from
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync * a set of components or to list components in the server
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync * database.
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbComponentNames {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync char * keycodes;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync char * types;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync char * compat;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync char * symbols;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync char * geometry;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbComponentNamesRec, *XkbComponentNamesPtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbComponentName {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short flags;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync char * name;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbComponentNameRec,*XkbComponentNamePtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbComponentList {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync int num_keymaps;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync int num_keycodes;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync int num_types;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync int num_compat;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync int num_symbols;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync int num_geometry;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbComponentNamePtr keymaps;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbComponentNamePtr keycodes;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbComponentNamePtr types;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbComponentNamePtr compat;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbComponentNamePtr symbols;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbComponentNamePtr geometry;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbComponentListRec, *XkbComponentListPtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync /*
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync * The following data structures describe and track changes to a
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync * non-keyboard extension device
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbDeviceLedInfo {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short led_class;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short led_id;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned int phys_indicators;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned int maps_present;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned int names_present;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned int state;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync Atom names[XkbNumIndicators];
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbIndicatorMapRec maps[XkbNumIndicators];
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbDeviceLedInfoRec,*XkbDeviceLedInfoPtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbDeviceInfo {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync char * name;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync Atom type;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short device_spec;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync Bool has_own_state;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short supported;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short unsupported;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short num_btns;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbAction * btn_acts;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short sz_leds;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short num_leds;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short dflt_kbd_fb;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short dflt_led_fb;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbDeviceLedInfoPtr leds;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbDeviceInfoRec,*XkbDeviceInfoPtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbXI_DevHasBtnActs(d) ((d)->num_btns > 0 && (d)->btn_acts)
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbXI_LegalDevBtn(d,b) (XkbXI_DevHasBtnActs(d) && (b) < (d)->num_btns)
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#define XkbXI_DevHasLeds(d) ((d)->num_leds > 0 && (d)->leds)
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbDeviceLedChanges {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short led_class;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short led_id;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned int defined; /* names or maps changed */
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync struct _XkbDeviceLedChanges *next;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbDeviceLedChangesRec,*XkbDeviceLedChangesPtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsynctypedef struct _XkbDeviceChanges {
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned int changed;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short first_btn;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync unsigned short num_btns;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync XkbDeviceLedChangesRec leds;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync} XkbDeviceChangesRec,*XkbDeviceChangesPtr;
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync
8c3d541c7ee7442f570b22eca3d82808b35b0385vboxsync#endif /* _XKBSTR_H_ */