Nim/tests/deps/x11-1.0/xkb.nim
2019-11-28 08:30:55 +01:00

2387 lines
97 KiB
Nim

#
# $Xorg: XKB.h,v 1.3 2000/08/18 04:05:45 coskrey Exp $
#************************************************************
# $Xorg: XKBstr.h,v 1.3 2000/08/18 04:05:45 coskrey Exp $
#************************************************************
# $Xorg: XKBgeom.h,v 1.3 2000/08/18 04:05:45 coskrey Exp $
#************************************************************
#
#Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc.
#
#Permission to use, copy, modify, and distribute this
#software and its documentation for any purpose and without
#fee is hereby granted, provided that the above copyright
#notice appear in all copies and that both that copyright
#notice and this permission notice appear in supporting
#documentation, and that the name of Silicon Graphics not be
#used in advertising or publicity pertaining to distribution
#of the software without specific prior written permission.
#Silicon Graphics makes no representation about the suitability
#of this software for any purpose. It is provided "as is"
#without any express or implied warranty.
#
#SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
#SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
#AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
#GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
#DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
#DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
#OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
#THE USE OR PERFORMANCE OF THIS SOFTWARE.
#
#********************************************************
# $XFree86: xc/include/extensions/XKB.h,v 1.5 2002/11/20 04:49:01 dawes Exp $
# $XFree86: xc/include/extensions/XKBgeom.h,v 3.9 2002/09/18 17:11:40 tsi Exp $
#
# Pascal Convertion was made by Ido Kannner - kanerido@actcom.net.il
#
#Thanks:
# I want to thanks to oliebol for putting up with all of the problems that was found
# while translating this code. ;)
#
# I want to thanks #fpc channel in freenode irc, for helping me, and to put up with my
# weird questions ;)
#
# Thanks for mmc in #xlib on freenode irc And so for the channel itself for the helping me to
# understanding some of the problems I had converting this headers and pointing me to resources
# that helped translating this headers.
#
# Ido
#
#History:
# 2004/10/15 - Fixed a bug of accessing second based records by removing "paced record" and
# chnaged it to "reocrd" only.
# 2004/10/04 - 06 - Convertion from the c header of XKBgeom.h.
# 2004/10/03 - Removed the XKBstr_UNIT compiler decleration. Afther the joined files,
# There is no need for it anymore.
# - There is a need to define (for now) XKBgeom (compiler define) in order
# to use the code of it. At this moment, I did not yet converted it to Pascal.
#
# 2004/09/17 - 10/04 - Convertion from the c header of XKBstr.
#
# 2004/10/03 - Joined xkbstr.pas into xkb.pas because of the circular calls problems.
# - Added the history of xkbstr.pas above this addition.
#
# 2004/09/17 - Fixed a wrong convertion number of XkbPerKeyBitArraySize, instead
# of float, it's now converted into integer (as it should have been).
#
# 2004/09/15 - 16 - Convertion from the c header of XKB.h.
#
import
X, Xlib
include "x11pragma.nim"
proc XkbcharToInt*(v: int8): int16
proc XkbIntTo2chars*(i: int16, h, L: var int8)
proc Xkb2charsToInt*(h, L: int8): int16
#
# Common data structures and access macros
#
type
PWord* = ptr array[0..64_000, int16]
PByte* = ptr byte
PXkbStatePtr* = ptr TXkbStateRec
TXkbStateRec*{.final.} = object
group*: int8
locked_group*: int8
base_group*: int16
latched_group*: int16
mods*: int8
base_mods*: int8
latched_mods*: int8
locked_mods*: int8
compat_state*: int8
grab_mods*: int8
compat_grab_mods*: int8
lookup_mods*: int8
compat_lookup_mods*: int8
ptr_buttons*: int16
proc XkbModLocks*(s: PXkbStatePtr): int8
proc XkbStateMods*(s: PXkbStatePtr): int16
proc XkbGroupLock*(s: PXkbStatePtr): int8
proc XkbStateGroup*(s: PXkbStatePtr): int16
proc XkbStateFieldFromRec*(s: PXkbStatePtr): int
proc XkbGrabStateFromRec*(s: PXkbStatePtr): int
type
PXkbModsPtr* = ptr TXkbModsRec
TXkbModsRec*{.final.} = object
mask*: int8 # effective mods
real_mods*: int8
vmods*: int16
type
PXkbKTMapEntryPtr* = ptr TXkbKTMapEntryRec
TXkbKTMapEntryRec*{.final.} = object
active*: bool
level*: int8
mods*: TXkbModsRec
type
PXkbKeyTypePtr* = ptr TXkbKeyTypeRec
TXkbKeyTypeRec*{.final.} = object
mods*: TXkbModsRec
num_levels*: int8
map_count*: int8
map*: PXkbKTMapEntryPtr
preserve*: PXkbModsPtr
name*: TAtom
level_names*: TAtom
proc XkbNumGroups*(g: int16): int16
proc XkbOutOfRangeGroupInfo*(g: int16): int16
proc XkbOutOfRangeGroupAction*(g: int16): int16
proc XkbOutOfRangeGroupNumber*(g: int16): int16
proc XkbSetGroupInfo*(g, w, n: int16): int16
proc XkbSetNumGroups*(g, n: int16): int16
#
# Structures and access macros used primarily by the server
#
type
PXkbBehavior* = ptr TXkbBehavior
TXkbBehavior*{.final.} = object
theType*: int8
data*: int8
type
PXkbModAction* = ptr TXkbModAction
TXkbModAction*{.final.} = object
theType*: int8
flags*: int8
mask*: int8
real_mods*: int8
vmods1*: int8
vmods2*: int8
proc XkbModActionVMods*(a: PXkbModAction): int16
proc XkbSetModActionVMods*(a: PXkbModAction, v: int8)
type
PXkbGroupAction* = ptr TXkbGroupAction
TXkbGroupAction*{.final.} = object
theType*: int8
flags*: int8
group_XXX*: int8
proc XkbSAGroup*(a: PXkbGroupAction): int8
proc XkbSASetGroupProc*(a: PXkbGroupAction, g: int8)
type
PXkbISOAction* = ptr TXkbISOAction
TXkbISOAction*{.final.} = object
theType*: int8
flags*: int8
mask*: int8
real_mods*: int8
group_XXX*: int8
affect*: int8
vmods1*: int8
vmods2*: int8
type
PXkbPtrAction* = ptr TXkbPtrAction
TXkbPtrAction*{.final.} = object
theType*: int8
flags*: int8
high_XXX*: int8
low_XXX*: int8
high_YYY*: int8
low_YYY*: int8
proc XkbPtrActionX*(a: PXkbPtrAction): int16
proc XkbPtrActionY*(a: PXkbPtrAction): int16
proc XkbSetPtrActionX*(a: PXkbPtrAction, x: int8)
proc XkbSetPtrActionY*(a: PXkbPtrAction, y: int8)
type
PXkbPtrBtnAction* = ptr TXkbPtrBtnAction
TXkbPtrBtnAction*{.final.} = object
theType*: int8
flags*: int8
count*: int8
button*: int8
type
PXkbPtrDfltAction* = ptr TXkbPtrDfltAction
TXkbPtrDfltAction*{.final.} = object
theType*: int8
flags*: int8
affect*: int8
valueXXX*: int8
proc XkbSAPtrDfltValue*(a: PXkbPtrDfltAction): int8
proc XkbSASetPtrDfltValue*(a: PXkbPtrDfltAction, c: pointer)
type
PXkbSwitchScreenAction* = ptr TXkbSwitchScreenAction
TXkbSwitchScreenAction*{.final.} = object
theType*: int8
flags*: int8
screenXXX*: int8
proc XkbSAScreen*(a: PXkbSwitchScreenAction): int8
proc XkbSASetScreen*(a: PXkbSwitchScreenAction, s: pointer)
type
PXkbCtrlsAction* = ptr TXkbCtrlsAction
TXkbCtrlsAction*{.final.} = object
theType*: int8
flags*: int8
ctrls3*: int8
ctrls2*: int8
ctrls1*: int8
ctrls0*: int8
proc XkbActionSetCtrls*(a: PXkbCtrlsAction, c: int8)
proc XkbActionCtrls*(a: PXkbCtrlsAction): int16
type
PXkbMessageAction* = ptr TXkbMessageAction
TXkbMessageAction*{.final.} = object
theType*: int8
flags*: int8
message*: array[0..5, char]
type
PXkbRedirectKeyAction* = ptr TXkbRedirectKeyAction
TXkbRedirectKeyAction*{.final.} = object
theType*: int8
new_key*: int8
mods_mask*: int8
mods*: int8
vmods_mask0*: int8
vmods_mask1*: int8
vmods0*: int8
vmods1*: int8
proc XkbSARedirectVMods*(a: PXkbRedirectKeyAction): int16
proc XkbSARedirectSetVMods*(a: PXkbRedirectKeyAction, m: int8)
proc XkbSARedirectVModsMask*(a: PXkbRedirectKeyAction): int16
proc XkbSARedirectSetVModsMask*(a: PXkbRedirectKeyAction, m: int8)
type
PXkbDeviceBtnAction* = ptr TXkbDeviceBtnAction
TXkbDeviceBtnAction*{.final.} = object
theType*: int8
flags*: int8
count*: int8
button*: int8
device*: int8
type
PXkbDeviceValuatorAction* = ptr TXkbDeviceValuatorAction
TXkbDeviceValuatorAction*{.final.} = object #
# Macros to classify key actions
#
theType*: int8
device*: int8
v1_what*: int8
v1_ndx*: int8
v1_value*: int8
v2_what*: int8
v2_ndx*: int8
v2_value*: int8
const
XkbAnyActionDataSize* = 7
type
PXkbAnyAction* = ptr TXkbAnyAction
TXkbAnyAction*{.final.} = object
theType*: int8
data*: array[0..XkbAnyActionDataSize - 1, int8]
proc XkbIsModAction*(a: PXkbAnyAction): bool
proc XkbIsGroupAction*(a: PXkbAnyAction): bool
proc XkbIsPtrAction*(a: PXkbAnyAction): bool
type
PXkbAction* = ptr TXkbAction
TXkbAction*{.final.} = object #
# XKB request codes, used in:
# - xkbReqType field of all requests
# - requestMinor field of some events
#
any*: TXkbAnyAction
mods*: TXkbModAction
group*: TXkbGroupAction
iso*: TXkbISOAction
thePtr*: TXkbPtrAction
btn*: TXkbPtrBtnAction
dflt*: TXkbPtrDfltAction
screen*: TXkbSwitchScreenAction
ctrls*: TXkbCtrlsAction
msg*: TXkbMessageAction
redirect*: TXkbRedirectKeyAction
devbtn*: TXkbDeviceBtnAction
devval*: TXkbDeviceValuatorAction
theType*: int8
const
X_kbUseExtension* = 0
X_kbSelectEvents* = 1
X_kbBell* = 3
X_kbGetState* = 4
X_kbLatchLockState* = 5
X_kbGetControls* = 6
X_kbSetControls* = 7
X_kbGetMap* = 8
X_kbSetMap* = 9
X_kbGetCompatMap* = 10
X_kbSetCompatMap* = 11
X_kbGetIndicatorState* = 12
X_kbGetIndicatorMap* = 13
X_kbSetIndicatorMap* = 14
X_kbGetNamedIndicator* = 15
X_kbSetNamedIndicator* = 16
X_kbGetNames* = 17
X_kbSetNames* = 18
X_kbGetGeometry* = 19
X_kbSetGeometry* = 20
X_kbPerClientFlags* = 21
X_kbListComponents* = 22
X_kbGetKbdByName* = 23
X_kbGetDeviceInfo* = 24
X_kbSetDeviceInfo* = 25
X_kbSetDebuggingFlags* = 101 #
# In the X sense, XKB reports only one event.
# The type field of all XKB events is XkbEventCode
#
const
XkbEventCode* = 0
XkbNumberEvents* = XkbEventCode + 1 #
# XKB has a minor event code so it can use one X event code for
# multiple purposes.
# - reported in the xkbType field of all XKB events.
# - XkbSelectEventDetails: Indicates the event for which event details
# are being changed
#
const
XkbNewKeyboardNotify* = 0
XkbMapNotify* = 1
XkbStateNotify* = 2
XkbControlsNotify* = 3
XkbIndicatorStateNotify* = 4
XkbIndicatorMapNotify* = 5
XkbNamesNotify* = 6
XkbCompatMapNotify* = 7
XkbBellNotify* = 8
XkbActionMessage* = 9
XkbAccessXNotify* = 10
XkbExtensionDeviceNotify* = 11 #
# Event Mask:
# - XkbSelectEvents: Specifies event interest.
#
const
XkbNewKeyboardNotifyMask* = int(1) shl 0
XkbMapNotifyMask* = int(1) shl 1
XkbStateNotifyMask* = int(1) shl 2
XkbControlsNotifyMask* = int(1) shl 3
XkbIndicatorStateNotifyMask* = int(1) shl 4
XkbIndicatorMapNotifyMask* = int(1) shl 5
XkbNamesNotifyMask* = int(1) shl 6
XkbCompatMapNotifyMask* = int(1) shl 7
XkbBellNotifyMask* = int(1) shl 8
XkbActionMessageMask* = int(1) shl 9
XkbAccessXNotifyMask* = int(1) shl 10
XkbExtensionDeviceNotifyMask* = int(1) shl 11
XkbAllEventsMask* = 0x00000FFF #
# NewKeyboardNotify event details:
#
const
XkbNKN_KeycodesMask* = int(1) shl 0
XkbNKN_GeometryMask* = int(1) shl 1
XkbNKN_DeviceIDMask* = int(1) shl 2
XkbAllNewKeyboardEventsMask* = 0x00000007 #
# AccessXNotify event types:
# - The 'what' field of AccessXNotify events reports the
# reason that the event was generated.
#
const
XkbAXN_SKPress* = 0
XkbAXN_SKAccept* = 1
XkbAXN_SKReject* = 2
XkbAXN_SKRelease* = 3
XkbAXN_BKAccept* = 4
XkbAXN_BKReject* = 5
XkbAXN_AXKWarning* = 6 #
# AccessXNotify details:
# - Used as an event detail mask to limit the conditions under which
# AccessXNotify events are reported
#
const
XkbAXN_SKPressMask* = int(1) shl 0
XkbAXN_SKAcceptMask* = int(1) shl 1
XkbAXN_SKRejectMask* = int(1) shl 2
XkbAXN_SKReleaseMask* = int(1) shl 3
XkbAXN_BKAcceptMask* = int(1) shl 4
XkbAXN_BKRejectMask* = int(1) shl 5
XkbAXN_AXKWarningMask* = int(1) shl 6
XkbAllAccessXEventsMask* = 0x0000000F #
# State detail mask:
# - The 'changed' field of StateNotify events reports which of
# the keyboard state components have changed.
# - Used as an event detail mask to limit the conditions under
# which StateNotify events are reported.
#
const
XkbModifierStateMask* = int(1) shl 0
XkbModifierBaseMask* = int(1) shl 1
XkbModifierLatchMask* = int(1) shl 2
XkbModifierLockMask* = int(1) shl 3
XkbGroupStateMask* = int(1) shl 4
XkbGroupBaseMask* = int(1) shl 5
XkbGroupLatchMask* = int(1) shl 6
XkbGroupLockMask* = int(1) shl 7
XkbCompatStateMask* = int(1) shl 8
XkbGrabModsMask* = int(1) shl 9
XkbCompatGrabModsMask* = int(1) shl 10
XkbLookupModsMask* = int(1) shl 11
XkbCompatLookupModsMask* = int(1) shl 12
XkbPointerButtonMask* = int(1) shl 13
XkbAllStateComponentsMask* = 0x00003FFF #
# Controls detail masks:
# The controls specified in XkbAllControlsMask:
# - The 'changed' field of ControlsNotify events reports which of
# the keyboard controls have changed.
# - The 'changeControls' field of the SetControls request specifies
# the controls for which values are to be changed.
# - Used as an event detail mask to limit the conditions under
# which ControlsNotify events are reported.
#
# The controls specified in the XkbAllBooleanCtrlsMask:
# - The 'enabledControls' field of ControlsNotify events reports the
# current status of the boolean controls.
# - The 'enabledControlsChanges' field of ControlsNotify events reports
# any boolean controls that have been turned on or off.
# - The 'affectEnabledControls' and 'enabledControls' fields of the
# kbSetControls request change the set of enabled controls.
# - The 'accessXTimeoutMask' and 'accessXTimeoutValues' fields of
# an XkbControlsRec specify the controls to be changed if the keyboard
# times out and the values to which they should be changed.
# - The 'autoCtrls' and 'autoCtrlsValues' fields of the PerClientFlags
# request specifies the specify the controls to be reset when the
# client exits and the values to which they should be reset.
# - The 'ctrls' field of an indicator map specifies the controls
# that drive the indicator.
# - Specifies the boolean controls affected by the SetControls and
# LockControls key actions.
#
const
XkbRepeatKeysMask* = int(1) shl 0
XkbSlowKeysMask* = int(1) shl 1
XkbBounceKeysMask* = int(1) shl 2
XkbStickyKeysMask* = int(1) shl 3
XkbMouseKeysMask* = int(1) shl 4
XkbMouseKeysAccelMask* = int(1) shl 5
XkbAccessXKeysMask* = int(1) shl 6
XkbAccessXTimeoutMask* = int(1) shl 7
XkbAccessXFeedbackMask* = int(1) shl 8
XkbAudibleBellMask* = int(1) shl 9
XkbOverlay1Mask* = int(1) shl 10
XkbOverlay2Mask* = int(1) shl 11
XkbIgnoreGroupLockMask* = int(1) shl 12
XkbGroupsWrapMask* = int(1) shl 27
XkbInternalModsMask* = int(1) shl 28
XkbIgnoreLockModsMask* = int(1) shl 29
XkbPerKeyRepeatMask* = int(1) shl 30
XkbControlsEnabledMask* = int(1) shl 31
XkbAccessXOptionsMask* = XkbStickyKeysMask or XkbAccessXFeedbackMask
XkbAllBooleanCtrlsMask* = 0x00001FFF
XkbAllControlsMask* = 0xF8001FFF #
# Compatibility Map Compontents:
# - Specifies the components to be allocated in XkbAllocCompatMap.
#
const
XkbSymInterpMask* = 1 shl 0
XkbGroupCompatMask* = 1 shl 1
XkbAllCompatMask* = 0x00000003 #
# Assorted constants and limits.
#
const
XkbAllIndicatorsMask* = 0xFFFFFFFF #
# Map components masks:
# Those in AllMapComponentsMask:
# - Specifies the individual fields to be loaded or changed for the
# GetMap and SetMap requests.
# Those in ClientInfoMask:
# - Specifies the components to be allocated by XkbAllocClientMap.
# Those in ServerInfoMask:
# - Specifies the components to be allocated by XkbAllocServerMap.
#
const
XkbKeyTypesMask* = 1 shl 0
XkbKeySymsMask* = 1 shl 1
XkbModifierMapMask* = 1 shl 2
XkbExplicitComponentsMask* = 1 shl 3
XkbKeyActionsMask* = 1 shl 4
XkbKeyBehaviorsMask* = 1 shl 5
XkbVirtualModsMask* = 1 shl 6
XkbVirtualModMapMask* = 1 shl 7
XkbAllClientInfoMask* = XkbKeyTypesMask or XkbKeySymsMask or
XkbModifierMapMask
XkbAllServerInfoMask* = XkbExplicitComponentsMask or XkbKeyActionsMask or
XkbKeyBehaviorsMask or XkbVirtualModsMask or XkbVirtualModMapMask
XkbAllMapComponentsMask* = XkbAllClientInfoMask or XkbAllServerInfoMask #
# Names component mask:
# - Specifies the names to be loaded or changed for the GetNames and
# SetNames requests.
# - Specifies the names that have changed in a NamesNotify event.
# - Specifies the names components to be allocated by XkbAllocNames.
#
const
XkbKeycodesNameMask* = 1 shl 0
XkbGeometryNameMask* = 1 shl 1
XkbSymbolsNameMask* = 1 shl 2
XkbPhysSymbolsNameMask* = 1 shl 3
XkbTypesNameMask* = 1 shl 4
XkbCompatNameMask* = 1 shl 5
XkbKeyTypeNamesMask* = 1 shl 6
XkbKTLevelNamesMask* = 1 shl 7
XkbIndicatorNamesMask* = 1 shl 8
XkbKeyNamesMask* = 1 shl 9
XkbKeyAliasesMask* = 1 shl 10
XkbVirtualModNamesMask* = 1 shl 11
XkbGroupNamesMask* = 1 shl 12
XkbRGNamesMask* = 1 shl 13
XkbComponentNamesMask* = 0x0000003F
XkbAllNamesMask* = 0x00003FFF #
# Miscellaneous event details:
# - event detail masks for assorted events that don't reall
# have any details.
#
const
XkbAllStateEventsMask* = XkbAllStateComponentsMask
XkbAllMapEventsMask* = XkbAllMapComponentsMask
XkbAllControlEventsMask* = XkbAllControlsMask
XkbAllIndicatorEventsMask* = XkbAllIndicatorsMask
XkbAllNameEventsMask* = XkbAllNamesMask
XkbAllCompatMapEventsMask* = XkbAllCompatMask
XkbAllBellEventsMask* = int(1) shl 0
XkbAllActionMessagesMask* = int(1) shl 0 #
# XKB reports one error: BadKeyboard
# A further reason for the error is encoded into to most significant
# byte of the resourceID for the error:
# XkbErr_BadDevice - the device in question was not found
# XkbErr_BadClass - the device was found but it doesn't belong to
# the appropriate class.
# XkbErr_BadId - the device was found and belongs to the right
# class, but not feedback with a matching id was
# found.
# The low byte of the resourceID for this error contains the device
# id, class specifier or feedback id that failed.
#
const
XkbKeyboard* = 0
XkbNumberErrors* = 1
XkbErr_BadDevice* = 0x000000FF
XkbErr_BadClass* = 0x000000FE
XkbErr_BadId* = 0x000000FD #
# Keyboard Components Mask:
# - Specifies the components that follow a GetKeyboardByNameReply
#
const
XkbClientMapMask* = int(1) shl 0
XkbServerMapMask* = int(1) shl 1
XkbCompatMapMask* = int(1) shl 2
XkbIndicatorMapMask* = int(1) shl 3
XkbNamesMask* = int(1) shl 4
XkbGeometryMask* = int(1) shl 5
XkbControlsMask* = int(1) shl 6
XkbAllComponentsMask* = 0x0000007F #
# AccessX Options Mask
# - The 'accessXOptions' field of an XkbControlsRec specifies the
# AccessX options that are currently in effect.
# - The 'accessXTimeoutOptionsMask' and 'accessXTimeoutOptionsValues'
# fields of an XkbControlsRec specify the Access X options to be
# changed if the keyboard times out and the values to which they
# should be changed.
#
const
XkbAX_SKPressFBMask* = int(1) shl 0
XkbAX_SKAcceptFBMask* = int(1) shl 1
XkbAX_FeatureFBMask* = int(1) shl 2
XkbAX_SlowWarnFBMask* = int(1) shl 3
XkbAX_IndicatorFBMask* = int(1) shl 4
XkbAX_StickyKeysFBMask* = int(1) shl 5
XkbAX_TwoKeysMask* = int(1) shl 6
XkbAX_LatchToLockMask* = int(1) shl 7
XkbAX_SKReleaseFBMask* = int(1) shl 8
XkbAX_SKRejectFBMask* = int(1) shl 9
XkbAX_BKRejectFBMask* = int(1) shl 10
XkbAX_DumbBellFBMask* = int(1) shl 11
XkbAX_FBOptionsMask* = 0x00000F3F
XkbAX_SKOptionsMask* = 0x000000C0
XkbAX_AllOptionsMask* = 0x00000FFF #
# XkbUseCoreKbd is used to specify the core keyboard without having
# to look up its X input extension identifier.
# XkbUseCorePtr is used to specify the core pointer without having
# to look up its X input extension identifier.
# XkbDfltXIClass is used to specify "don't care" any place that the
# XKB protocol is looking for an X Input Extension
# device class.
# XkbDfltXIId is used to specify "don't care" any place that the
# XKB protocol is looking for an X Input Extension
# feedback identifier.
# XkbAllXIClasses is used to get information about all device indicators,
# whether they're part of the indicator feedback class
# or the keyboard feedback class.
# XkbAllXIIds is used to get information about all device indicator
# feedbacks without having to list them.
# XkbXINone is used to indicate that no class or id has been specified.
# XkbLegalXILedClass(c) True if 'c' specifies a legal class with LEDs
# XkbLegalXIBellClass(c) True if 'c' specifies a legal class with bells
# XkbExplicitXIDevice(d) True if 'd' explicitly specifies a device
# XkbExplicitXIClass(c) True if 'c' explicitly specifies a device class
# XkbExplicitXIId(c) True if 'i' explicitly specifies a device id
# XkbSingleXIClass(c) True if 'c' specifies exactly one device class,
# including the default.
# XkbSingleXIId(i) True if 'i' specifies exactly one device
# identifier, including the default.
#
const
XkbUseCoreKbd* = 0x00000100
XkbUseCorePtr* = 0x00000200
XkbDfltXIClass* = 0x00000300
XkbDfltXIId* = 0x00000400
XkbAllXIClasses* = 0x00000500
XkbAllXIIds* = 0x00000600
XkbXINone* = 0x0000FF00
proc XkbLegalXILedClass*(c: int): bool
proc XkbLegalXIBellClass*(c: int): bool
proc XkbExplicitXIDevice*(c: int): bool
proc XkbExplicitXIClass*(c: int): bool
proc XkbExplicitXIId*(c: int): bool
proc XkbSingleXIClass*(c: int): bool
proc XkbSingleXIId*(c: int): bool
const
XkbNoModifier* = 0x000000FF
XkbNoShiftLevel* = 0x000000FF
XkbNoShape* = 0x000000FF
XkbNoIndicator* = 0x000000FF
XkbNoModifierMask* = 0
XkbAllModifiersMask* = 0x000000FF
XkbAllVirtualModsMask* = 0x0000FFFF
XkbNumKbdGroups* = 4
XkbMaxKbdGroup* = XkbNumKbdGroups - 1
XkbMaxMouseKeysBtn* = 4 #
# Group Index and Mask:
# - Indices into the kt_index array of a key type.
# - Mask specifies types to be changed for XkbChangeTypesOfKey
#
const
XkbGroup1Index* = 0
XkbGroup2Index* = 1
XkbGroup3Index* = 2
XkbGroup4Index* = 3
XkbAnyGroup* = 254
XkbAllGroups* = 255
XkbGroup1Mask* = 1 shl 0
XkbGroup2Mask* = 1 shl 1
XkbGroup3Mask* = 1 shl 2
XkbGroup4Mask* = 1 shl 3
XkbAnyGroupMask* = 1 shl 7
XkbAllGroupsMask* = 0x0000000F #
# BuildCoreState: Given a keyboard group and a modifier state,
# construct the value to be reported an event.
# GroupForCoreState: Given the state reported in an event,
# determine the keyboard group.
# IsLegalGroup: Returns TRUE if 'g' is a valid group index.
#
proc XkbBuildCoreState*(m, g: int): int
proc XkbGroupForCoreState*(s: int): int
proc XkbIsLegalGroup*(g: int): bool
#
# GroupsWrap values:
# - The 'groupsWrap' field of an XkbControlsRec specifies the
# treatment of out of range groups.
# - Bits 6 and 7 of the group info field of a key symbol map
# specify the interpretation of out of range groups for the
# corresponding key.
#
const
XkbWrapIntoRange* = 0x00000000
XkbClampIntoRange* = 0x00000040
XkbRedirectIntoRange* = 0x00000080 #
# Action flags: Reported in the 'flags' field of most key actions.
# Interpretation depends on the type of the action; not all actions
# accept all flags.
#
# Option Used for Actions
# ------ ----------------
# ClearLocks SetMods, LatchMods, SetGroup, LatchGroup
# LatchToLock SetMods, LatchMods, SetGroup, LatchGroup
# LockNoLock LockMods, ISOLock, LockPtrBtn, LockDeviceBtn
# LockNoUnlock LockMods, ISOLock, LockPtrBtn, LockDeviceBtn
# UseModMapMods SetMods, LatchMods, LockMods, ISOLock
# GroupAbsolute SetGroup, LatchGroup, LockGroup, ISOLock
# UseDfltButton PtrBtn, LockPtrBtn
# NoAcceleration MovePtr
# MoveAbsoluteX MovePtr
# MoveAbsoluteY MovePtr
# ISODfltIsGroup ISOLock
# ISONoAffectMods ISOLock
# ISONoAffectGroup ISOLock
# ISONoAffectPtr ISOLock
# ISONoAffectCtrls ISOLock
# MessageOnPress ActionMessage
# MessageOnRelease ActionMessage
# MessageGenKeyEvent ActionMessage
# AffectDfltBtn SetPtrDflt
# DfltBtnAbsolute SetPtrDflt
# SwitchApplication SwitchScreen
# SwitchAbsolute SwitchScreen
#
const
XkbSA_ClearLocks* = int(1) shl 0
XkbSA_LatchToLock* = int(1) shl 1
XkbSA_LockNoLock* = int(1) shl 0
XkbSA_LockNoUnlock* = int(1) shl 1
XkbSA_UseModMapMods* = int(1) shl 2
XkbSA_GroupAbsolute* = int(1) shl 2
XkbSA_UseDfltButton* = 0
XkbSA_NoAcceleration* = int(1) shl 0
XkbSA_MoveAbsoluteX* = int(1) shl 1
XkbSA_MoveAbsoluteY* = int(1) shl 2
XkbSA_ISODfltIsGroup* = int(1) shl 7
XkbSA_ISONoAffectMods* = int(1) shl 6
XkbSA_ISONoAffectGroup* = int(1) shl 5
XkbSA_ISONoAffectPtr* = int(1) shl 4
XkbSA_ISONoAffectCtrls* = int(1) shl 3
XkbSA_ISOAffectMask* = 0x00000078
XkbSA_MessageOnPress* = int(1) shl 0
XkbSA_MessageOnRelease* = int(1) shl 1
XkbSA_MessageGenKeyEvent* = int(1) shl 2
XkbSA_AffectDfltBtn* = 1
XkbSA_DfltBtnAbsolute* = int(1) shl 2
XkbSA_SwitchApplication* = int(1) shl 0
XkbSA_SwitchAbsolute* = int(1) shl 2 #
# The following values apply to the SA_DeviceValuator
# action only. Valuator operations specify the action
# to be taken. Values specified in the action are
# multiplied by 2^scale before they are applied.
#
const
XkbSA_IgnoreVal* = 0x00000000
XkbSA_SetValMin* = 0x00000010
XkbSA_SetValCenter* = 0x00000020
XkbSA_SetValMax* = 0x00000030
XkbSA_SetValRelative* = 0x00000040
XkbSA_SetValAbsolute* = 0x00000050
XkbSA_ValOpMask* = 0x00000070
XkbSA_ValScaleMask* = 0x00000007
proc XkbSA_ValOp*(a: int): int
proc XkbSA_ValScale*(a: int): int
#
# Action types: specifies the type of a key action. Reported in the
# type field of all key actions.
#
const
XkbSA_NoAction* = 0x00000000
XkbSA_SetMods* = 0x00000001
XkbSA_LatchMods* = 0x00000002
XkbSA_LockMods* = 0x00000003
XkbSA_SetGroup* = 0x00000004
XkbSA_LatchGroup* = 0x00000005
XkbSA_LockGroup* = 0x00000006
XkbSA_MovePtr* = 0x00000007
XkbSA_PtrBtn* = 0x00000008
XkbSA_LockPtrBtn* = 0x00000009
XkbSA_SetPtrDflt* = 0x0000000A
XkbSA_ISOLock* = 0x0000000B
XkbSA_Terminate* = 0x0000000C
XkbSA_SwitchScreen* = 0x0000000D
XkbSA_SetControls* = 0x0000000E
XkbSA_LockControls* = 0x0000000F
XkbSA_ActionMessage* = 0x00000010
XkbSA_RedirectKey* = 0x00000011
XkbSA_DeviceBtn* = 0x00000012
XkbSA_LockDeviceBtn* = 0x00000013
XkbSA_DeviceValuator* = 0x00000014
XkbSA_LastAction* = XkbSA_DeviceValuator
XkbSA_NumActions* = XkbSA_LastAction + 1
const
XkbSA_XFree86Private* = 0x00000086
#
# Specifies the key actions that clear latched groups or modifiers.
#
const ##define XkbSA_BreakLatch \
# ((1<<XkbSA_NoAction)|(1<<XkbSA_PtrBtn)|(1<<XkbSA_LockPtrBtn)|\
# (1<<XkbSA_Terminate)|(1<<XkbSA_SwitchScreen)|(1<<XkbSA_SetControls)|\
# (1<<XkbSA_LockControls)|(1<<XkbSA_ActionMessage)|\
# (1<<XkbSA_RedirectKey)|(1<<XkbSA_DeviceBtn)|(1<<XkbSA_LockDeviceBtn))
#
XkbSA_BreakLatch* = (1 shl XkbSA_PtrBtn) or (1 shl XkbSA_LockPtrBtn) or
(1 shl XkbSA_Terminate) or (1 shl XkbSA_SwitchScreen) or
(1 shl XkbSA_SetControls) or (1 shl XkbSA_LockControls) or
(1 shl XkbSA_ActionMessage) or (1 shl XkbSA_RedirectKey) or
(1 shl XkbSA_DeviceBtn) or (1 shl XkbSA_LockDeviceBtn) #
# Key Behavior Qualifier:
# KB_Permanent indicates that the behavior describes an unalterable
# characteristic of the keyboard, not an XKB software-simulation of
# the listed behavior.
# Key Behavior Types:
# Specifies the behavior of the underlying key.
#
const
XkbKB_Permanent* = 0x00000080
XkbKB_OpMask* = 0x0000007F
XkbKB_Default* = 0x00000000
XkbKB_Lock* = 0x00000001
XkbKB_RadioGroup* = 0x00000002
XkbKB_Overlay1* = 0x00000003
XkbKB_Overlay2* = 0x00000004
XkbKB_RGAllowNone* = 0x00000080 #
# Various macros which describe the range of legal keycodes.
#
const
XkbMinLegalKeyCode* = 8
XkbMaxLegalKeyCode* = 255
XkbMaxKeyCount* = XkbMaxLegalKeyCode - XkbMinLegalKeyCode + 1
XkbPerKeyBitArraySize* = (XkbMaxLegalKeyCode + 1) div 8
proc XkbIsLegalKeycode*(k: int): bool
type
PXkbControlsPtr* = ptr TXkbControlsRec
TXkbControlsRec*{.final.} = object
mk_dflt_btn*: int8
num_groups*: int8
groups_wrap*: int8
internal*: TXkbModsRec
ignore_lock*: TXkbModsRec
enabled_ctrls*: int16
repeat_delay*: int16
repeat_interval*: int16
slow_keys_delay*: int16
debounce_delay*: int16
mk_delay*: int16
mk_interval*: int16
mk_time_to_max*: int16
mk_max_speed*: int16
mk_curve*: int16
ax_options*: int16
ax_timeout*: int16
axt_opts_mask*: int16
axt_opts_values*: int16
axt_ctrls_mask*: int16
axt_ctrls_values*: int16
per_key_repeat*: array[0..XkbPerKeyBitArraySize - 1, int8]
proc XkbAX_AnyFeedback*(c: PXkbControlsPtr): int16
proc XkbAX_NeedOption*(c: PXkbControlsPtr, w: int16): int16
proc XkbAX_NeedFeedback*(c: PXkbControlsPtr, w: int16): bool
#
# Assorted constants and limits.
#
const
XkbNumModifiers* = 8
XkbNumVirtualMods* = 16
XkbNumIndicators* = 32
XkbMaxRadioGroups* = 32
XkbAllRadioGroupsMask* = 0xFFFFFFFF
XkbMaxShiftLevel* = 63
XkbMaxSymsPerKey* = XkbMaxShiftLevel * XkbNumKbdGroups
XkbRGMaxMembers* = 12
XkbActionMessageLength* = 6
XkbKeyNameLength* = 4
XkbMaxRedirectCount* = 8
XkbGeomPtsPerMM* = 10
XkbGeomMaxColors* = 32
XkbGeomMaxLabelColors* = 3
XkbGeomMaxPriority* = 255
type
PXkbServerMapPtr* = ptr TXkbServerMapRec
TXkbServerMapRec*{.final.} = object
num_acts*: int16
size_acts*: int16
acts*: ptr array[0..0xfff, TXkbAction]
behaviors*: PXkbBehavior
key_acts*: PWord
explicit*: PByte
vmods*: array[0..XkbNumVirtualMods - 1, int8]
vmodmap*: PWord
proc XkbSMKeyActionsPtr*(m: PXkbServerMapPtr, k: int16): PXkbAction
#
# Structures and access macros used primarily by clients
#
type
PXkbSymMapPtr* = ptr TXkbSymMapRec
TXkbSymMapRec*{.final.} = object
kt_index*: array[0..XkbNumKbdGroups - 1, int8]
group_info*: int8
width*: int8
offset*: int8
type
PXkbClientMapPtr* = ptr TXkbClientMapRec
TXkbClientMapRec*{.final.} = object
size_types*: int8
num_types*: int8
types*: ptr array[0..0xffff, TXkbKeyTypeRec]
size_syms*: int16
num_syms*: int16
syms*: ptr array[0..0xffff, TKeySym]
key_sym_map*: ptr array[0..0xffff, TXkbSymMapRec]
modmap*: PByte
proc XkbCMKeyGroupInfo*(m: PXkbClientMapPtr, k: int16): int8
proc XkbCMKeyNumGroups*(m: PXkbClientMapPtr, k: int16): int8
proc XkbCMKeyGroupWidth*(m: PXkbClientMapPtr, k: int16, g: int8): int8
proc XkbCMKeyGroupsWidth*(m: PXkbClientMapPtr, k: int16): int8
proc XkbCMKeyTypeIndex*(m: PXkbClientMapPtr, k: int16, g: int8): int8
proc XkbCMKeyType*(m: PXkbClientMapPtr, k: int16, g: int8): PXkbKeyTypePtr
proc XkbCMKeyNumSyms*(m: PXkbClientMapPtr, k: int16): int16
proc XkbCMKeySymsOffset*(m: PXkbClientMapPtr, k: int16): int8
#
# Compatibility structures and access macros
#
type
PXkbSymInterpretPtr* = ptr TXkbSymInterpretRec
TXkbSymInterpretRec*{.final.} = object
sym*: TKeySym
flags*: int8
match*: int8
mods*: int8
virtual_mod*: int8
act*: TXkbAnyAction
type
PXkbCompatMapPtr* = ptr TXkbCompatMapRec
TXkbCompatMapRec*{.final.} = object
sym_interpret*: PXkbSymInterpretPtr
groups*: array[0..XkbNumKbdGroups - 1, TXkbModsRec]
num_si*: int16
size_si*: int16
type
PXkbIndicatorMapPtr* = ptr TXkbIndicatorMapRec
TXkbIndicatorMapRec*{.final.} = object
flags*: int8
which_groups*: int8
groups*: int8
which_mods*: int8
mods*: TXkbModsRec
ctrls*: int16
proc XkbIM_IsAuto*(i: PXkbIndicatorMapPtr): bool
proc XkbIM_InUse*(i: PXkbIndicatorMapPtr): bool
type
PXkbIndicatorPtr* = ptr TXkbIndicatorRec
TXkbIndicatorRec*{.final.} = object
phys_indicators*: int32
maps*: array[0..XkbNumIndicators - 1, TXkbIndicatorMapRec]
type
PXkbKeyNamePtr* = ptr TXkbKeyNameRec
TXkbKeyNameRec*{.final.} = object
name*: array[0..XkbKeyNameLength - 1, char]
type
PXkbKeyAliasPtr* = ptr TXkbKeyAliasRec
TXkbKeyAliasRec*{.final.} = object #
# Names for everything
#
float*: array[0..XkbKeyNameLength - 1, char]
alias*: array[0..XkbKeyNameLength - 1, char]
type
PXkbNamesPtr* = ptr TXkbNamesRec
TXkbNamesRec*{.final.} = object #
# Key Type index and mask for the four standard key types.
#
keycodes*: TAtom
geometry*: TAtom
symbols*: TAtom
types*: TAtom
compat*: TAtom
vmods*: array[0..XkbNumVirtualMods - 1, TAtom]
indicators*: array[0..XkbNumIndicators - 1, TAtom]
groups*: array[0..XkbNumKbdGroups - 1, TAtom]
keys*: PXkbKeyNamePtr
key_aliases*: PXkbKeyAliasPtr
radio_groups*: PAtom
phys_symbols*: TAtom
num_keys*: int8
num_key_aliases*: int8
num_rg*: int16
const
XkbOneLevelIndex* = 0
XkbTwoLevelIndex* = 1
XkbAlphabeticIndex* = 2
XkbKeypadIndex* = 3
XkbLastRequiredType* = XkbKeypadIndex
XkbNumRequiredTypes* = XkbLastRequiredType + 1
XkbMaxKeyTypes* = 255
XkbOneLevelMask* = 1 shl 0
XkbTwoLevelMask* = 1 shl 1
XkbAlphabeticMask* = 1 shl 2
XkbKeypadMask* = 1 shl 3
XkbAllRequiredTypes* = 0x0000000F
proc XkbShiftLevel*(n: int8): int8
proc XkbShiftLevelMask*(n: int8): int8
#
# Extension name and version information
#
const
XkbName* = "XKEYBOARD"
XkbMajorVersion* = 1
XkbMinorVersion* = 0 #
# Explicit map components:
# - Used in the 'explicit' field of an XkbServerMap. Specifies
# the keyboard components that should _not_ be updated automatically
# in response to core protocol keyboard mapping requests.
#
const
XkbExplicitKeyTypesMask* = 0x0000000F
XkbExplicitKeyType1Mask* = 1 shl 0
XkbExplicitKeyType2Mask* = 1 shl 1
XkbExplicitKeyType3Mask* = 1 shl 2
XkbExplicitKeyType4Mask* = 1 shl 3
XkbExplicitInterpretMask* = 1 shl 4
XkbExplicitAutoRepeatMask* = 1 shl 5
XkbExplicitBehaviorMask* = 1 shl 6
XkbExplicitVModMapMask* = 1 shl 7
XkbAllExplicitMask* = 0x000000FF #
# Symbol interpretations flags:
# - Used in the flags field of a symbol interpretation
#
const
XkbSI_AutoRepeat* = 1 shl 0
XkbSI_LockingKey* = 1 shl 1 #
# Symbol interpretations match specification:
# - Used in the match field of a symbol interpretation to specify
# the conditions under which an interpretation is used.
#
const
XkbSI_LevelOneOnly* = 0x00000080
XkbSI_OpMask* = 0x0000007F
XkbSI_NoneOf* = 0
XkbSI_AnyOfOrNone* = 1
XkbSI_AnyOf* = 2
XkbSI_AllOf* = 3
XkbSI_Exactly* = 4 #
# Indicator map flags:
# - Used in the flags field of an indicator map to indicate the
# conditions under which and indicator can be changed and the
# effects of changing the indicator.
#
const
XkbIM_NoExplicit* = int(1) shl 7
XkbIM_NoAutomatic* = int(1) shl 6
XkbIM_LEDDrivesKB* = int(1) shl 5 #
# Indicator map component specifications:
# - Used by the 'which_groups' and 'which_mods' fields of an indicator
# map to specify which keyboard components should be used to drive
# the indicator.
#
const
XkbIM_UseBase* = int(1) shl 0
XkbIM_UseLatched* = int(1) shl 1
XkbIM_UseLocked* = int(1) shl 2
XkbIM_UseEffective* = int(1) shl 3
XkbIM_UseCompat* = int(1) shl 4
XkbIM_UseNone* = 0
XkbIM_UseAnyGroup* = XkbIM_UseBase or XkbIM_UseLatched or XkbIM_UseLocked or
XkbIM_UseEffective
XkbIM_UseAnyMods* = XkbIM_UseAnyGroup or XkbIM_UseCompat #
# GetByName components:
# - Specifies desired or necessary components to GetKbdByName request.
# - Reports the components that were found in a GetKbdByNameReply
#
const
XkbGBN_TypesMask* = int(1) shl 0
XkbGBN_CompatMapMask* = int(1) shl 1
XkbGBN_ClientSymbolsMask* = int(1) shl 2
XkbGBN_ServerSymbolsMask* = int(1) shl 3
XkbGBN_SymbolsMask* = XkbGBN_ClientSymbolsMask or XkbGBN_ServerSymbolsMask
XkbGBN_IndicatorMapMask* = int(1) shl 4
XkbGBN_KeyNamesMask* = int(1) shl 5
XkbGBN_GeometryMask* = int(1) shl 6
XkbGBN_OtherNamesMask* = int(1) shl 7
XkbGBN_AllComponentsMask* = 0x000000FF #
# ListComponents flags
#
const
XkbLC_Hidden* = int(1) shl 0
XkbLC_Default* = int(1) shl 1
XkbLC_Partial* = int(1) shl 2
XkbLC_AlphanumericKeys* = int(1) shl 8
XkbLC_ModifierKeys* = int(1) shl 9
XkbLC_KeypadKeys* = int(1) shl 10
XkbLC_FunctionKeys* = int(1) shl 11
XkbLC_AlternateGroup* = int(1) shl 12 #
# X Input Extension Interactions
# - Specifies the possible interactions between XKB and the X input
# extension
# - Used to request (XkbGetDeviceInfo) or change (XKbSetDeviceInfo)
# XKB information about an extension device.
# - Reports the list of supported optional features in the reply to
# XkbGetDeviceInfo or in an XkbExtensionDeviceNotify event.
# XkbXI_UnsupportedFeature is reported in XkbExtensionDeviceNotify
# events to indicate an attempt to use an unsupported feature.
#
const
XkbXI_KeyboardsMask* = int(1) shl 0
XkbXI_ButtonActionsMask* = int(1) shl 1
XkbXI_IndicatorNamesMask* = int(1) shl 2
XkbXI_IndicatorMapsMask* = int(1) shl 3
XkbXI_IndicatorStateMask* = int(1) shl 4
XkbXI_UnsupportedFeatureMask* = int(1) shl 15
XkbXI_AllFeaturesMask* = 0x0000001F
XkbXI_AllDeviceFeaturesMask* = 0x0000001E
XkbXI_IndicatorsMask* = 0x0000001C
XkbAllExtensionDeviceEventsMask* = 0x0000801F #
# Per-Client Flags:
# - Specifies flags to be changed by the PerClientFlags request.
#
const
XkbPCF_DetectableAutoRepeatMask* = int(1) shl 0
XkbPCF_GrabsUseXKBStateMask* = int(1) shl 1
XkbPCF_AutoResetControlsMask* = int(1) shl 2
XkbPCF_LookupStateWhenGrabbed* = int(1) shl 3
XkbPCF_SendEventUsesXKBState* = int(1) shl 4
XkbPCF_AllFlagsMask* = 0x0000001F #
# Debugging flags and controls
#
const
XkbDF_DisableLocks* = 1 shl 0
type
PXkbPropertyPtr* = ptr TXkbPropertyRec
TXkbPropertyRec*{.final.} = object
name*: cstring
value*: cstring
type
PXkbColorPtr* = ptr TXkbColorRec
TXkbColorRec*{.final.} = object
pixel*: int16
spec*: cstring
type
PXkbPointPtr* = ptr TXkbPointRec
TXkbPointRec*{.final.} = object
x*: int16
y*: int16
type
PXkbBoundsPtr* = ptr TXkbBoundsRec
TXkbBoundsRec*{.final.} = object
x1*: int16
y1*: int16
x2*: int16
y2*: int16
proc XkbBoundsWidth*(b: PXkbBoundsPtr): int16
proc XkbBoundsHeight*(b: PXkbBoundsPtr): int16
type
PXkbOutlinePtr* = ptr TXkbOutlineRec
TXkbOutlineRec*{.final.} = object
num_points*: int16
sz_points*: int16
corner_radius*: int16
points*: PXkbPointPtr
type
PXkbShapePtr* = ptr TXkbShapeRec
TXkbShapeRec*{.final.} = object
name*: TAtom
num_outlines*: int16
sz_outlines*: int16
outlines*: ptr array [0..0xffff, TXkbOutlineRec]
approx*: ptr array[0..0xffff, TXkbOutlineRec]
primary*: ptr array[0..0xffff, TXkbOutlineRec]
bounds*: TXkbBoundsRec
proc XkbOutlineIndex*(s: PXkbShapePtr, o: PXkbOutlinePtr): int32
type
PXkbShapeDoodadPtr* = ptr TXkbShapeDoodadRec
TXkbShapeDoodadRec*{.final.} = object
name*: TAtom
theType*: int8
priority*: int8
top*: int16
left*: int16
angle*: int16
color_ndx*: int16
shape_ndx*: int16
type
PXkbTextDoodadPtr* = ptr TXkbTextDoodadRec
TXkbTextDoodadRec*{.final.} = object
name*: TAtom
theType*: int8
priority*: int8
top*: int16
left*: int16
angle*: int16
width*: int16
height*: int16
color_ndx*: int16
text*: cstring
font*: cstring
type
PXkbIndicatorDoodadPtr* = ptr TXkbIndicatorDoodadRec
TXkbIndicatorDoodadRec*{.final.} = object
name*: TAtom
theType*: int8
priority*: int8
top*: int16
left*: int16
angle*: int16
shape_ndx*: int16
on_color_ndx*: int16
off_color_ndx*: int16
type
PXkbLogoDoodadPtr* = ptr TXkbLogoDoodadRec
TXkbLogoDoodadRec*{.final.} = object
name*: TAtom
theType*: int8
priority*: int8
top*: int16
left*: int16
angle*: int16
color_ndx*: int16
shape_ndx*: int16
logo_name*: cstring
type
PXkbAnyDoodadPtr* = ptr TXkbAnyDoodadRec
TXkbAnyDoodadRec*{.final.} = object
name*: TAtom
theType*: int8
priority*: int8
top*: int16
left*: int16
angle*: int16
type
PXkbDoodadPtr* = ptr TXkbDoodadRec
TXkbDoodadRec*{.final.} = object
any*: TXkbAnyDoodadRec
shape*: TXkbShapeDoodadRec
text*: TXkbTextDoodadRec
indicator*: TXkbIndicatorDoodadRec
logo*: TXkbLogoDoodadRec
const
XkbUnknownDoodad* = 0
XkbOutlineDoodad* = 1
XkbSolidDoodad* = 2
XkbTextDoodad* = 3
XkbIndicatorDoodad* = 4
XkbLogoDoodad* = 5
type
PXkbKeyPtr* = ptr TXkbKeyRec
TXkbKeyRec*{.final.} = object
name*: TXkbKeyNameRec
gap*: int16
shape_ndx*: int8
color_ndx*: int8
type
PXkbRowPtr* = ptr TXkbRowRec
TXkbRowRec*{.final.} = object
top*: int16
left*: int16
num_keys*: int16
sz_keys*: int16
vertical*: int16
Keys*: PXkbKeyPtr
bounds*: TXkbBoundsRec
type
PXkbOverlayPtr* = ptr TXkbOverlayRec #forward for TXkbSectionRec use.
#Do not add more "type"
PXkbSectionPtr* = ptr TXkbSectionRec
TXkbSectionRec*{.final.} = object #Do not add more "type"
name*: TAtom
priority*: int8
top*: int16
left*: int16
width*: int16
height*: int16
angle*: int16
num_rows*: int16
num_doodads*: int16
num_overlays*: int16
rows*: PXkbRowPtr
doodads*: PXkbDoodadPtr
bounds*: TXkbBoundsRec
overlays*: PXkbOverlayPtr
PXkbOverlayKeyPtr* = ptr TXkbOverlayKeyRec
TXkbOverlayKeyRec*{.final.} = object #Do not add more "type"
over*: TXkbKeyNameRec
under*: TXkbKeyNameRec
PXkbOverlayRowPtr* = ptr TXkbOverlayRowRec
TXkbOverlayRowRec*{.final.} = object #Do not add more "type"
row_under*: int16
num_keys*: int16
sz_keys*: int16
keys*: PXkbOverlayKeyPtr
TXkbOverlayRec*{.final.} = object
name*: TAtom
section_under*: PXkbSectionPtr
num_rows*: int16
sz_rows*: int16
rows*: PXkbOverlayRowPtr
bounds*: PXkbBoundsPtr
type
PXkbGeometryRec* = ptr TXkbGeometryRec
PXkbGeometryPtr* = PXkbGeometryRec
TXkbGeometryRec*{.final.} = object
name*: TAtom
width_mm*: int16
height_mm*: int16
label_font*: cstring
label_color*: PXkbColorPtr
base_color*: PXkbColorPtr
sz_properties*: int16
sz_colors*: int16
sz_shapes*: int16
sz_sections*: int16
sz_doodads*: int16
sz_key_aliases*: int16
num_properties*: int16
num_colors*: int16
num_shapes*: int16
num_sections*: int16
num_doodads*: int16
num_key_aliases*: int16
properties*: ptr array[0..0xffff, TXkbPropertyRec]
colors*: ptr array[0..0xffff, TXkbColorRec]
shapes*: ptr array[0..0xffff, TXkbShapeRec]
sections*: ptr array[0..0xffff, TXkbSectionRec]
key_aliases*: ptr array[0..0xffff, TXkbKeyAliasRec]
const
XkbGeomPropertiesMask* = 1 shl 0
XkbGeomColorsMask* = 1 shl 1
XkbGeomShapesMask* = 1 shl 2
XkbGeomSectionsMask* = 1 shl 3
XkbGeomDoodadsMask* = 1 shl 4
XkbGeomKeyAliasesMask* = 1 shl 5
XkbGeomAllMask* = 0x0000003F
type
PXkbGeometrySizesPtr* = ptr TXkbGeometrySizesRec
TXkbGeometrySizesRec*{.final.} = object #
# Tie it all together into one big keyboard description
#
which*: int16
num_properties*: int16
num_colors*: int16
num_shapes*: int16
num_sections*: int16
num_doodads*: int16
num_key_aliases*: int16
type
PXkbDescPtr* = ptr TXkbDescRec
TXkbDescRec*{.final.} = object
dpy*: PDisplay
flags*: int16
device_spec*: int16
min_key_code*: TKeyCode
max_key_code*: TKeyCode
ctrls*: PXkbControlsPtr
server*: PXkbServerMapPtr
map*: PXkbClientMapPtr
indicators*: PXkbIndicatorPtr
names*: PXkbNamesPtr
compat*: PXkbCompatMapPtr
geom*: PXkbGeometryPtr
proc XkbKeyKeyTypeIndex*(d: PXkbDescPtr, k: int16, g: int8): int8
proc XkbKeyKeyType*(d: PXkbDescPtr, k: int16, g: int8): PXkbKeyTypePtr
proc XkbKeyGroupWidth*(d: PXkbDescPtr, k: int16, g: int8): int8
proc XkbKeyGroupsWidth*(d: PXkbDescPtr, k: int16): int8
proc XkbKeyGroupInfo*(d: PXkbDescPtr, k: int16): int8
proc XkbKeyNumGroups*(d: PXkbDescPtr, k: int16): int8
proc XkbKeyNumSyms*(d: PXkbDescPtr, k: int16): int16
proc XkbKeySym*(d: PXkbDescPtr, k: int16, n: int16): TKeySym
proc XkbKeySymEntry*(d: PXkbDescPtr, k: int16, sl: int16, g: int8): TKeySym
proc XkbKeyAction*(d: PXkbDescPtr, k: int16, n: int16): PXkbAction
proc XkbKeyActionEntry*(d: PXkbDescPtr, k: int16, sl: int16, g: int8): int8
proc XkbKeyHasActions*(d: PXkbDescPtr, k: int16): bool
proc XkbKeyNumActions*(d: PXkbDescPtr, k: int16): int16
proc XkbKeyActionsPtr*(d: PXkbDescPtr, k: int16): PXkbAction
proc XkbKeycodeInRange*(d: PXkbDescPtr, k: int16): bool
proc XkbNumKeys*(d: PXkbDescPtr): int8
#
# The following structures can be used to track changes
# to a keyboard device
#
type
PXkbMapChangesPtr* = ptr TXkbMapChangesRec
TXkbMapChangesRec*{.final.} = object
changed*: int16
min_key_code*: TKeyCode
max_key_code*: TKeyCode
first_type*: int8
num_types*: int8
first_key_sym*: TKeyCode
num_key_syms*: int8
first_key_act*: TKeyCode
num_key_acts*: int8
first_key_behavior*: TKeyCode
num_key_behaviors*: int8
first_key_explicit*: TKeyCode
num_key_explicit*: int8
first_modmap_key*: TKeyCode
num_modmap_keys*: int8
first_vmodmap_key*: TKeyCode
num_vmodmap_keys*: int8
pad*: int8
vmods*: int16
type
PXkbControlsChangesPtr* = ptr TXkbControlsChangesRec
TXkbControlsChangesRec*{.final.} = object
changed_ctrls*: int16
enabled_ctrls_changes*: int16
num_groups_changed*: bool
type
PXkbIndicatorChangesPtr* = ptr TXkbIndicatorChangesRec
TXkbIndicatorChangesRec*{.final.} = object
state_changes*: int16
map_changes*: int16
type
PXkbNameChangesPtr* = ptr TXkbNameChangesRec
TXkbNameChangesRec*{.final.} = object
changed*: int16
first_type*: int8
num_types*: int8
first_lvl*: int8
num_lvls*: int8
num_aliases*: int8
num_rg*: int8
first_key*: int8
num_keys*: int8
changed_vmods*: int16
changed_indicators*: int32
changed_groups*: int8
type
PXkbCompatChangesPtr* = ptr TXkbCompatChangesRec
TXkbCompatChangesRec*{.final.} = object
changed_groups*: int8
first_si*: int16
num_si*: int16
type
PXkbChangesPtr* = ptr TXkbChangesRec
TXkbChangesRec*{.final.} = object #
# These data structures are used to construct a keymap from
# a set of components or to list components in the server
# database.
#
device_spec*: int16
state_changes*: int16
map*: TXkbMapChangesRec
ctrls*: TXkbControlsChangesRec
indicators*: TXkbIndicatorChangesRec
names*: TXkbNameChangesRec
compat*: TXkbCompatChangesRec
type
PXkbComponentNamesPtr* = ptr TXkbComponentNamesRec
TXkbComponentNamesRec*{.final.} = object
keymap*: ptr int16
keycodes*: ptr int16
types*: ptr int16
compat*: ptr int16
symbols*: ptr int16
geometry*: ptr int16
type
PXkbComponentNamePtr* = ptr TXkbComponentNameRec
TXkbComponentNameRec*{.final.} = object
flags*: int16
name*: cstring
type
PXkbComponentListPtr* = ptr TXkbComponentListRec
TXkbComponentListRec*{.final.} = object #
# The following data structures describe and track changes to a
# non-keyboard extension device
#
num_keymaps*: int16
num_keycodes*: int16
num_types*: int16
num_compat*: int16
num_symbols*: int16
num_geometry*: int16
keymaps*: PXkbComponentNamePtr
keycodes*: PXkbComponentNamePtr
types*: PXkbComponentNamePtr
compat*: PXkbComponentNamePtr
symbols*: PXkbComponentNamePtr
geometry*: PXkbComponentNamePtr
type
PXkbDeviceLedInfoPtr* = ptr TXkbDeviceLedInfoRec
TXkbDeviceLedInfoRec*{.final.} = object
led_class*: int16
led_id*: int16
phys_indicators*: int16
maps_present*: int16
names_present*: int16
state*: int16
names*: array[0..XkbNumIndicators - 1, TAtom]
maps*: array[0..XkbNumIndicators - 1, TXkbIndicatorMapRec]
type
PXkbDeviceInfoPtr* = ptr TXkbDeviceInfoRec
TXkbDeviceInfoRec*{.final.} = object
name*: cstring
theType*: TAtom
device_spec*: int16
has_own_state*: bool
supported*: int16
unsupported*: int16
num_btns*: int16
btn_acts*: PXkbAction
sz_leds*: int16
num_leds*: int16
dflt_kbd_fb*: int16
dflt_led_fb*: int16
leds*: PXkbDeviceLedInfoPtr
proc XkbXI_DevHasBtnActs*(d: PXkbDeviceInfoPtr): bool
proc XkbXI_LegalDevBtn*(d: PXkbDeviceInfoPtr, b: int16): bool
proc XkbXI_DevHasLeds*(d: PXkbDeviceInfoPtr): bool
type
PXkbDeviceLedChangesPtr* = ptr TXkbDeviceLedChangesRec
TXkbDeviceLedChangesRec*{.final.} = object
led_class*: int16
led_id*: int16
defined*: int16 #names or maps changed
next*: PXkbDeviceLedChangesPtr
type
PXkbDeviceChangesPtr* = ptr TXkbDeviceChangesRec
TXkbDeviceChangesRec*{.final.} = object
changed*: int16
first_btn*: int16
num_btns*: int16
leds*: TXkbDeviceLedChangesRec
proc XkbShapeDoodadColor*(g: PXkbGeometryPtr, d: PXkbShapeDoodadPtr): PXkbColorPtr
proc XkbShapeDoodadShape*(g: PXkbGeometryPtr, d: PXkbShapeDoodadPtr): PXkbShapePtr
proc XkbSetShapeDoodadColor*(g: PXkbGeometryPtr, d: PXkbShapeDoodadPtr,
c: PXkbColorPtr)
proc XkbSetShapeDoodadShape*(g: PXkbGeometryPtr, d: PXkbShapeDoodadPtr,
s: PXkbShapePtr)
proc XkbTextDoodadColor*(g: PXkbGeometryPtr, d: PXkbTextDoodadPtr): PXkbColorPtr
proc XkbSetTextDoodadColor*(g: PXkbGeometryPtr, d: PXkbTextDoodadPtr,
c: PXkbColorPtr)
proc XkbIndicatorDoodadShape*(g: PXkbGeometryPtr, d: PXkbIndicatorDoodadPtr): PXkbShapeDoodadPtr
proc XkbIndicatorDoodadOnColor*(g: PXkbGeometryPtr, d: PXkbIndicatorDoodadPtr): PXkbColorPtr
proc XkbIndicatorDoodadOffColor*(g: PXkbGeometryPtr, d: PXkbIndicatorDoodadPtr): PXkbColorPtr
proc XkbSetIndicatorDoodadOnColor*(g: PXkbGeometryPtr,
d: PXkbIndicatorDoodadPtr, c: PXkbColorPtr)
proc XkbSetIndicatorDoodadOffColor*(g: PXkbGeometryPtr,
d: PXkbIndicatorDoodadPtr, c: PXkbColorPtr)
proc XkbSetIndicatorDoodadShape*(g: PXkbGeometryPtr, d: PXkbIndicatorDoodadPtr,
s: PXkbShapeDoodadPtr)
proc XkbLogoDoodadColor*(g: PXkbGeometryPtr, d: PXkbLogoDoodadPtr): PXkbColorPtr
proc XkbLogoDoodadShape*(g: PXkbGeometryPtr, d: PXkbLogoDoodadPtr): PXkbShapeDoodadPtr
proc XkbSetLogoDoodadColor*(g: PXkbGeometryPtr, d: PXkbLogoDoodadPtr,
c: PXkbColorPtr)
proc XkbSetLogoDoodadShape*(g: PXkbGeometryPtr, d: PXkbLogoDoodadPtr,
s: PXkbShapeDoodadPtr)
proc XkbKeyShape*(g: PXkbGeometryPtr, k: PXkbKeyPtr): PXkbShapeDoodadPtr
proc XkbKeyColor*(g: PXkbGeometryPtr, k: PXkbKeyPtr): PXkbColorPtr
proc XkbSetKeyShape*(g: PXkbGeometryPtr, k: PXkbKeyPtr, s: PXkbShapeDoodadPtr)
proc XkbSetKeyColor*(g: PXkbGeometryPtr, k: PXkbKeyPtr, c: PXkbColorPtr)
proc XkbGeomColorIndex*(g: PXkbGeometryPtr, c: PXkbColorPtr): int32
proc XkbAddGeomProperty*(geom: PXkbGeometryPtr, name: cstring, value: cstring): PXkbPropertyPtr{.
libx11c, importc: "XkbAddGeomProperty".}
proc XkbAddGeomKeyAlias*(geom: PXkbGeometryPtr, alias: cstring, float: cstring): PXkbKeyAliasPtr{.
libx11c, importc: "XkbAddGeomKeyAlias".}
proc XkbAddGeomColor*(geom: PXkbGeometryPtr, spec: cstring, pixel: int16): PXkbColorPtr{.
libx11c, importc: "XkbAddGeomColor".}
proc XkbAddGeomOutline*(shape: PXkbShapePtr, sz_points: int16): PXkbOutlinePtr{.
libx11c, importc: "XkbAddGeomOutline".}
proc XkbAddGeomShape*(geom: PXkbGeometryPtr, name: TAtom, sz_outlines: int16): PXkbShapePtr{.
libx11c, importc: "XkbAddGeomShape".}
proc XkbAddGeomKey*(row: PXkbRowPtr): PXkbKeyPtr{.libx11c,
importc: "XkbAddGeomKey".}
proc XkbAddGeomRow*(section: PXkbSectionPtr, sz_keys: int16): PXkbRowPtr{.libx11c, importc: "XkbAddGeomRow".}
proc XkbAddGeomSection*(geom: PXkbGeometryPtr, name: TAtom, sz_rows: int16,
sz_doodads: int16, sz_overlays: int16): PXkbSectionPtr{.
libx11c, importc: "XkbAddGeomSection".}
proc XkbAddGeomOverlay*(section: PXkbSectionPtr, name: TAtom, sz_rows: int16): PXkbOverlayPtr{.
libx11c, importc: "XkbAddGeomOverlay".}
proc XkbAddGeomOverlayRow*(overlay: PXkbOverlayPtr, row_under: int16,
sz_keys: int16): PXkbOverlayRowPtr{.libx11c, importc: "XkbAddGeomOverlayRow".}
proc XkbAddGeomOverlayKey*(overlay: PXkbOverlayPtr, row: PXkbOverlayRowPtr,
over: cstring, under: cstring): PXkbOverlayKeyPtr{.
libx11c, importc: "XkbAddGeomOverlayKey".}
proc XkbAddGeomDoodad*(geom: PXkbGeometryPtr, section: PXkbSectionPtr,
name: TAtom): PXkbDoodadPtr{.libx11c,
importc: "XkbAddGeomDoodad".}
proc XkbFreeGeomKeyAliases*(geom: PXkbGeometryPtr, first: int16, count: int16,
freeAll: bool){.libx11c,
importc: "XkbFreeGeomKeyAliases".}
proc XkbFreeGeomColors*(geom: PXkbGeometryPtr, first: int16, count: int16,
freeAll: bool){.libx11c,
importc: "XkbFreeGeomColors".}
proc XkbFreeGeomDoodads*(doodads: PXkbDoodadPtr, nDoodads: int16, freeAll: bool){.
libx11c, importc: "XkbFreeGeomDoodads".}
proc XkbFreeGeomProperties*(geom: PXkbGeometryPtr, first: int16, count: int16,
freeAll: bool){.libx11c,
importc: "XkbFreeGeomProperties".}
proc XkbFreeGeomOverlayKeys*(row: PXkbOverlayRowPtr, first: int16, count: int16,
freeAll: bool){.libx11c,
importc: "XkbFreeGeomOverlayKeys".}
proc XkbFreeGeomOverlayRows*(overlay: PXkbOverlayPtr, first: int16,
count: int16, freeAll: bool){.libx11c, importc: "XkbFreeGeomOverlayRows".}
proc XkbFreeGeomOverlays*(section: PXkbSectionPtr, first: int16, count: int16,
freeAll: bool){.libx11c,
importc: "XkbFreeGeomOverlays".}
proc XkbFreeGeomKeys*(row: PXkbRowPtr, first: int16, count: int16, freeAll: bool){.
libx11c, importc: "XkbFreeGeomKeys".}
proc XkbFreeGeomRows*(section: PXkbSectionPtr, first: int16, count: int16,
freeAll: bool){.libx11c,
importc: "XkbFreeGeomRows".}
proc XkbFreeGeomSections*(geom: PXkbGeometryPtr, first: int16, count: int16,
freeAll: bool){.libx11c,
importc: "XkbFreeGeomSections".}
proc XkbFreeGeomPoints*(outline: PXkbOutlinePtr, first: int16, count: int16,
freeAll: bool){.libx11c,
importc: "XkbFreeGeomPoints".}
proc XkbFreeGeomOutlines*(shape: PXkbShapePtr, first: int16, count: int16,
freeAll: bool){.libx11c,
importc: "XkbFreeGeomOutlines".}
proc XkbFreeGeomShapes*(geom: PXkbGeometryPtr, first: int16, count: int16,
freeAll: bool){.libx11c,
importc: "XkbFreeGeomShapes".}
proc XkbFreeGeometry*(geom: PXkbGeometryPtr, which: int16, freeMap: bool){.
libx11c, importc: "XkbFreeGeometry".}
proc XkbAllocGeomProps*(geom: PXkbGeometryPtr, nProps: int16): TStatus{.libx11c, importc: "XkbAllocGeomProps".}
proc XkbAllocGeomKeyAliases*(geom: PXkbGeometryPtr, nAliases: int16): TStatus{.
libx11c, importc: "XkbAllocGeomKeyAliases".}
proc XkbAllocGeomColors*(geom: PXkbGeometryPtr, nColors: int16): TStatus{.libx11c, importc: "XkbAllocGeomColors".}
proc XkbAllocGeomShapes*(geom: PXkbGeometryPtr, nShapes: int16): TStatus{.libx11c, importc: "XkbAllocGeomShapes".}
proc XkbAllocGeomSections*(geom: PXkbGeometryPtr, nSections: int16): TStatus{.
libx11c, importc: "XkbAllocGeomSections".}
proc XkbAllocGeomOverlays*(section: PXkbSectionPtr, num_needed: int16): TStatus{.
libx11c, importc: "XkbAllocGeomOverlays".}
proc XkbAllocGeomOverlayRows*(overlay: PXkbOverlayPtr, num_needed: int16): TStatus{.
libx11c, importc: "XkbAllocGeomOverlayRows".}
proc XkbAllocGeomOverlayKeys*(row: PXkbOverlayRowPtr, num_needed: int16): TStatus{.
libx11c, importc: "XkbAllocGeomOverlayKeys".}
proc XkbAllocGeomDoodads*(geom: PXkbGeometryPtr, nDoodads: int16): TStatus{.
libx11c, importc: "XkbAllocGeomDoodads".}
proc XkbAllocGeomSectionDoodads*(section: PXkbSectionPtr, nDoodads: int16): TStatus{.
libx11c, importc: "XkbAllocGeomSectionDoodads".}
proc XkbAllocGeomOutlines*(shape: PXkbShapePtr, nOL: int16): TStatus{.libx11c, importc: "XkbAllocGeomOutlines".}
proc XkbAllocGeomRows*(section: PXkbSectionPtr, nRows: int16): TStatus{.libx11c, importc: "XkbAllocGeomRows".}
proc XkbAllocGeomPoints*(ol: PXkbOutlinePtr, nPts: int16): TStatus{.libx11c, importc: "XkbAllocGeomPoints".}
proc XkbAllocGeomKeys*(row: PXkbRowPtr, nKeys: int16): TStatus{.libx11c, importc: "XkbAllocGeomKeys".}
proc XkbAllocGeometry*(xkb: PXkbDescPtr, sizes: PXkbGeometrySizesPtr): TStatus{.
libx11c, importc: "XkbAllocGeometry".}
proc XkbSetGeometryProc*(dpy: PDisplay, deviceSpec: int16, geom: PXkbGeometryPtr): TStatus{.
libx11c, importc: "XkbSetGeometry".}
proc XkbComputeShapeTop*(shape: PXkbShapePtr, bounds: PXkbBoundsPtr): bool{.
libx11c, importc: "XkbComputeShapeTop".}
proc XkbComputeShapeBounds*(shape: PXkbShapePtr): bool{.libx11c,
importc: "XkbComputeShapeBounds".}
proc XkbComputeRowBounds*(geom: PXkbGeometryPtr, section: PXkbSectionPtr,
row: PXkbRowPtr): bool{.libx11c,
importc: "XkbComputeRowBounds".}
proc XkbComputeSectionBounds*(geom: PXkbGeometryPtr, section: PXkbSectionPtr): bool{.
libx11c, importc: "XkbComputeSectionBounds".}
proc XkbFindOverlayForKey*(geom: PXkbGeometryPtr, wanted: PXkbSectionPtr,
under: cstring): cstring{.libx11c,
importc: "XkbFindOverlayForKey".}
proc XkbGetGeometryProc*(dpy: PDisplay, xkb: PXkbDescPtr): TStatus{.libx11c, importc: "XkbGetGeometry".}
proc XkbGetNamedGeometry*(dpy: PDisplay, xkb: PXkbDescPtr, name: TAtom): TStatus{.
libx11c, importc: "XkbGetNamedGeometry".}
when defined(XKB_IN_SERVER):
proc SrvXkbAddGeomKeyAlias*(geom: PXkbGeometryPtr, alias: cstring,
float: cstring): PXkbKeyAliasPtr{.libx11c, importc: "XkbAddGeomKeyAlias".}
proc SrvXkbAddGeomColor*(geom: PXkbGeometryPtr, spec: cstring, pixel: int16): PXkbColorPtr{.
libx11c, importc: "XkbAddGeomColor".}
proc SrvXkbAddGeomDoodad*(geom: PXkbGeometryPtr, section: PXkbSectionPtr,
name: TAtom): PXkbDoodadPtr{.libx11c,
importc: "XkbAddGeomDoodad".}
proc SrvXkbAddGeomKey*(geom: PXkbGeometryPtr, alias: cstring, float: cstring): PXkbKeyAliasPtr{.
libx11c, importc: "XkbAddGeomKeyAlias".}
proc SrvXkbAddGeomOutline*(shape: PXkbShapePtr, sz_points: int16): PXkbOutlinePtr{.
libx11c, importc: "XkbAddGeomOutline".}
proc SrvXkbAddGeomOverlay*(overlay: PXkbOverlayPtr, row: PXkbOverlayRowPtr,
over: cstring, under: cstring): PXkbOverlayKeyPtr{.
libx11c, importc: "XkbAddGeomOverlayKey".}
proc SrvXkbAddGeomOverlayRow*(overlay: PXkbOverlayPtr, row_under: int16,
sz_keys: int16): PXkbOverlayRowPtr{.libx11c, importc: "XkbAddGeomOverlayRow".}
proc SrvXkbAddGeomOverlayKey*(overlay: PXkbOverlayPtr, row: PXkbOverlayRowPtr,
over: cstring, under: cstring): PXkbOverlayKeyPtr{.
libx11c, importc: "XkbAddGeomOverlayKey".}
proc SrvXkbAddGeomProperty*(geom: PXkbGeometryPtr, name: cstring,
value: cstring): PXkbPropertyPtr{.libx11c, importc: "XkbAddGeomProperty".}
proc SrvXkbAddGeomRow*(section: PXkbSectionPtr, sz_keys: int16): PXkbRowPtr{.
libx11c, importc: "XkbAddGeomRow".}
proc SrvXkbAddGeomSection*(geom: PXkbGeometryPtr, name: TAtom, sz_rows: int16,
sz_doodads: int16, sz_overlays: int16): PXkbSectionPtr{.
libx11c, importc: "XkbAddGeomSection".}
proc SrvXkbAddGeomShape*(geom: PXkbGeometryPtr, name: TAtom,
sz_outlines: int16): PXkbShapePtr{.libx11c, importc: "XkbAddGeomShape".}
proc SrvXkbAllocGeomKeyAliases*(geom: PXkbGeometryPtr, nAliases: int16): TStatus{.
libx11c, importc: "XkbAllocGeomKeyAliases".}
proc SrvXkbAllocGeomColors*(geom: PXkbGeometryPtr, nColors: int16): TStatus{.
libx11c, importc: "XkbAllocGeomColors".}
proc SrvXkbAllocGeomDoodads*(geom: PXkbGeometryPtr, nDoodads: int16): TStatus{.
libx11c, importc: "XkbAllocGeomDoodads".}
proc SrvXkbAllocGeomKeys*(row: PXkbRowPtr, nKeys: int16): TStatus{.libx11c, importc: "XkbAllocGeomKeys".}
proc SrvXkbAllocGeomOutlines*(shape: PXkbShapePtr, nOL: int16): TStatus{.
libx11c, importc: "XkbAllocGeomOutlines".}
proc SrvXkbAllocGeomPoints*(ol: PXkbOutlinePtr, nPts: int16): TStatus{.libx11c, importc: "XkbAllocGeomPoints".}
proc SrvXkbAllocGeomProps*(geom: PXkbGeometryPtr, nProps: int16): TStatus{.
libx11c, importc: "XkbAllocGeomProps".}
proc SrvXkbAllocGeomRows*(section: PXkbSectionPtr, nRows: int16): TStatus{.
libx11c, importc: "XkbAllocGeomRows".}
proc SrvXkbAllocGeomSectionDoodads*(section: PXkbSectionPtr, nDoodads: int16): TStatus{.
libx11c, importc: "XkbAllocGeomSectionDoodads".}
proc SrvXkbAllocGeomSections*(geom: PXkbGeometryPtr, nSections: int16): TStatus{.
libx11c, importc: "XkbAllocGeomSections".}
proc SrvXkbAllocGeomOverlays*(section: PXkbSectionPtr, num_needed: int16): TStatus{.
libx11c, importc: "XkbAllocGeomOverlays".}
proc SrvXkbAllocGeomOverlayRows*(overlay: PXkbOverlayPtr, num_needed: int16): TStatus{.
libx11c, importc: "XkbAllocGeomOverlayRows".}
proc SrvXkbAllocGeomOverlayKeys*(row: PXkbOverlayRowPtr, num_needed: int16): TStatus{.
libx11c, importc: "XkbAllocGeomOverlayKeys".}
proc SrvXkbAllocGeomShapes*(geom: PXkbGeometryPtr, nShapes: int16): TStatus{.
libx11c, importc: "XkbAllocGeomShapes".}
proc SrvXkbAllocGeometry*(xkb: PXkbDescPtr, sizes: PXkbGeometrySizesPtr): TStatus{.
libx11c, importc: "XkbAllocGeometry".}
proc SrvXkbFreeGeomKeyAliases*(geom: PXkbGeometryPtr, first: int16,
count: int16, freeAll: bool){.libx11c, importc: "XkbFreeGeomKeyAliases".}
proc SrvXkbFreeGeomColors*(geom: PXkbGeometryPtr, first: int16, count: int16,
freeAll: bool){.libx11c,
importc: "XkbFreeGeomColors".}
proc SrvXkbFreeGeomDoodads*(doodads: PXkbDoodadPtr, nDoodads: int16,
freeAll: bool){.libx11c,
importc: "XkbFreeGeomDoodads".}
proc SrvXkbFreeGeomProperties*(geom: PXkbGeometryPtr, first: int16,
count: int16, freeAll: bool){.libx11c, importc: "XkbFreeGeomProperties".}
proc SrvXkbFreeGeomOverlayKeys*(row: PXkbOverlayRowPtr, first: int16,
count: int16, freeAll: bool){.libx11c, importc: "XkbFreeGeomOverlayKeys".}
proc SrvXkbFreeGeomOverlayRows*(overlay: PXkbOverlayPtr, first: int16,
count: int16, freeAll: bool){.libx11c, importc: "XkbFreeGeomOverlayRows".}
proc SrvXkbFreeGeomOverlays*(section: PXkbSectionPtr, first: int16,
count: int16, freeAll: bool){.libx11c, importc: "XkbFreeGeomOverlays".}
proc SrvXkbFreeGeomKeys*(row: PXkbRowPtr, first: int16, count: int16,
freeAll: bool){.libx11c,
importc: "XkbFreeGeomKeys".}
proc SrvXkbFreeGeomRows*(section: PXkbSectionPtr, first: int16, count: int16,
freeAll: bool){.libx11c,
importc: "XkbFreeGeomRows".}
proc SrvXkbFreeGeomSections*(geom: PXkbGeometryPtr, first: int16,
count: int16, freeAll: bool){.libx11c, importc: "XkbFreeGeomSections".}
proc SrvXkbFreeGeomPoints*(outline: PXkbOutlinePtr, first: int16,
count: int16, freeAll: bool){.libx11c, importc: "XkbFreeGeomPoints".}
proc SrvXkbFreeGeomOutlines*(shape: PXkbShapePtr, first: int16, count: int16,
freeAll: bool){.libx11c,
importc: "XkbFreeGeomOutlines".}
proc SrvXkbFreeGeomShapes*(geom: PXkbGeometryPtr, first: int16, count: int16,
freeAll: bool){.libx11c,
importc: "XkbFreeGeomShapes".}
proc SrvXkbFreeGeometry*(geom: PXkbGeometryPtr, which: int16, freeMap: bool){.
libx11c, importc: "XkbFreeGeometry".}
# implementation
import #************************************ xkb ************************************
xi
proc XkbLegalXILedClass(c: int): bool =
##define XkbLegalXILedClass(c) (((c)==KbdFeedbackClass)||((c)==LedFeedbackClass)||
# ((c)==XkbDfltXIClass)||((c)==XkbAllXIClasses))
result = (c == KbdFeedbackClass) or (c == LedFeedbackClass) or
(c == XkbDfltXIClass) or (c == XkbAllXIClasses)
proc XkbLegalXIBellClass(c: int): bool =
##define XkbLegalXIBellClass(c) (((c)==KbdFeedbackClass)||((c)==BellFeedbackClass)||
# ((c)==XkbDfltXIClass)||((c)==XkbAllXIClasses))
result = (c == KbdFeedbackClass) or (c == BellFeedbackClass) or
(c == XkbDfltXIClass) or (c == XkbAllXIClasses)
proc XkbExplicitXIDevice(c: int): bool =
##define XkbExplicitXIDevice(c) (((c)&(~0xff))==0)
result = (c and (not 0x000000FF)) == 0
proc XkbExplicitXIClass(c: int): bool =
##define XkbExplicitXIClass(c) (((c)&(~0xff))==0)
result = (c and (not 0x000000FF)) == 0
proc XkbExplicitXIId(c: int): bool =
##define XkbExplicitXIId(c) (((c)&(~0xff))==0)
result = (c and (not 0x000000FF)) == 0
proc XkbSingleXIClass(c: int): bool =
##define XkbSingleXIClass(c) ((((c)&(~0xff))==0)||((c)==XkbDfltXIClass))
result = ((c and (not 0x000000FF)) == 0) or (c == XkbDfltXIClass)
proc XkbSingleXIId(c: int): bool =
##define XkbSingleXIId(c) ((((c)&(~0xff))==0)||((c)==XkbDfltXIId))
result = ((c and (not 0x000000FF)) == 0) or (c == XkbDfltXIId)
proc XkbBuildCoreState(m, g: int): int =
##define XkbBuildCoreState(m,g) ((((g)&0x3)<<13)|((m)&0xff))
result = ((g and 0x00000003) shl 13) or (m and 0x000000FF)
proc XkbGroupForCoreState(s: int): int =
##define XkbGroupForCoreState(s) (((s)>>13)&0x3)
result = (s shr 13) and 0x00000003
proc XkbIsLegalGroup(g: int): bool =
##define XkbIsLegalGroup(g) (((g)>=0)&&((g)<XkbNumKbdGroups))
result = (g >= 0) and (g < XkbNumKbdGroups)
proc XkbSA_ValOp(a: int): int =
##define XkbSA_ValOp(a) ((a)&XkbSA_ValOpMask)
result = a and XkbSA_ValOpMask
proc XkbSA_ValScale(a: int): int =
##define XkbSA_ValScale(a) ((a)&XkbSA_ValScaleMask)
result = a and XkbSA_ValScaleMask
proc XkbIsModAction(a: PXkbAnyAction): bool =
##define XkbIsModAction(a) (((a)->type>=Xkb_SASetMods)&&((a)->type<=XkbSA_LockMods))
result = (ze(a.theType) >= XkbSA_SetMods) and (ze(a.theType) <= XkbSA_LockMods)
proc XkbIsGroupAction(a: PXkbAnyAction): bool =
##define XkbIsGroupAction(a) (((a)->type>=XkbSA_SetGroup)&&((a)->type<=XkbSA_LockGroup))
result = (ze(a.theType) >= XkbSA_SetGroup) or (ze(a.theType) <= XkbSA_LockGroup)
proc XkbIsPtrAction(a: PXkbAnyAction): bool =
##define XkbIsPtrAction(a) (((a)->type>=XkbSA_MovePtr)&&((a)->type<=XkbSA_SetPtrDflt))
result = (ze(a.theType) >= XkbSA_MovePtr) and
(ze(a.theType) <= XkbSA_SetPtrDflt)
proc XkbIsLegalKeycode(k: int): bool =
##define XkbIsLegalKeycode(k) (((k)>=XkbMinLegalKeyCode)&&((k)<=XkbMaxLegalKeyCode))
result = (k >= XkbMinLegalKeyCode) and (k <= XkbMaxLegalKeyCode)
proc XkbShiftLevel(n: int8): int8 =
##define XkbShiftLevel(n) ((n)-1)
result = n - 1'i8
proc XkbShiftLevelMask(n: int8): int8 =
##define XkbShiftLevelMask(n) (1<<((n)-1))
result = 1'i8 shl (n - 1'i8)
proc XkbcharToInt(v: int8): int16 =
##define XkbcharToInt(v) ((v)&0x80?(int)((v)|(~0xff)):(int)((v)&0x7f))
if ((v and 0x80'i8) != 0'i8): result = v or (not 0xFF'i16)
else: result = int16(v and 0x7F'i8)
proc XkbIntTo2chars(i: int16, h, L: var int8) =
##define XkbIntTo2chars(i,h,l) (((h)=((i>>8)&0xff)),((l)=((i)&0xff)))
h = toU8((i shr 8'i16) and 0x00FF'i16)
L = toU8(i and 0xFF'i16)
proc Xkb2charsToInt(h, L: int8): int16 =
when defined(cpu64):
##define Xkb2charsToInt(h,l) ((h)&0x80?(int)(((h)<<8)|(l)|(~0xffff)): (int)(((h)<<8)|(l)&0x7fff))
if (h and 0x80'i8) != 0'i8:
result = toU16((ze(h) shl 8) or ze(L) or not 0x0000FFFF)
else:
result = toU16((ze(h) shl 8) or ze(L) and 0x00007FFF)
else:
##define Xkb2charsToInt(h,l) ((short)(((h)<<8)|(l)))
result = toU16(ze(h) shl 8 or ze(L))
proc XkbModLocks(s: PXkbStatePtr): int8 =
##define XkbModLocks(s) ((s)->locked_mods)
result = s.locked_mods
proc XkbStateMods(s: PXkbStatePtr): int16 =
##define XkbStateMods(s) ((s)->base_mods|(s)->latched_mods|XkbModLocks(s))
result = s.base_mods or s.latched_mods or XkbModLocks(s)
proc XkbGroupLock(s: PXkbStatePtr): int8 =
##define XkbGroupLock(s) ((s)->locked_group)
result = s.locked_group
proc XkbStateGroup(s: PXkbStatePtr): int16 =
##define XkbStateGroup(s) ((s)->base_group+(s)->latched_group+XkbGroupLock(s))
result = s.base_group + (s.latched_group) + XkbGroupLock(s)
proc XkbStateFieldFromRec(s: PXkbStatePtr): int =
##define XkbStateFieldFromRec(s) XkbBuildCoreState((s)->lookup_mods,(s)->group)
result = XkbBuildCoreState(s.lookup_mods, s.group)
proc XkbGrabStateFromRec(s: PXkbStatePtr): int =
##define XkbGrabStateFromRec(s) XkbBuildCoreState((s)->grab_mods,(s)->group)
result = XkbBuildCoreState(s.grab_mods, s.group)
proc XkbNumGroups(g: int16): int16 =
##define XkbNumGroups(g) ((g)&0x0f)
result = g and 0x0000000F'i16
proc XkbOutOfRangeGroupInfo(g: int16): int16 =
##define XkbOutOfRangeGroupInfo(g) ((g)&0xf0)
result = g and 0x000000F0'i16
proc XkbOutOfRangeGroupAction(g: int16): int16 =
##define XkbOutOfRangeGroupAction(g) ((g)&0xc0)
result = g and 0x000000C0'i16
proc XkbOutOfRangeGroupNumber(g: int16): int16 =
##define XkbOutOfRangeGroupNumber(g) (((g)&0x30)>>4)
result = (g and 0x00000030'i16) shr 4'i16
proc XkbSetGroupInfo(g, w, n: int16): int16 =
##define XkbSetGroupInfo(g,w,n) (((w)&0xc0)|(((n)&3)<<4)|((g)&0x0f))
result = (w and 0x000000C0'i16) or
((n and 3'i16) shl 4'i16) or (g and 0x0000000F'i16)
proc XkbSetNumGroups(g, n: int16): int16 =
##define XkbSetNumGroups(g,n) (((g)&0xf0)|((n)&0x0f))
result = (g and 0x000000F0'i16) or (n and 0x0000000F'i16)
proc XkbModActionVMods(a: PXkbModAction): int16 =
##define XkbModActionVMods(a) ((short)(((a)->vmods1<<8)|((a)->vmods2)))
result = toU16((ze(a.vmods1) shl 8) or ze(a.vmods2))
proc XkbSetModActionVMods(a: PXkbModAction, v: int8) =
##define XkbSetModActionVMods(a,v) (((a)->vmods1=(((v)>>8)&0xff)),(a)->vmods2=((v)&0xff))
a.vmods1 = toU8((ze(v) shr 8) and 0x000000FF)
a.vmods2 = toU8(ze(v) and 0x000000FF)
proc XkbSAGroup(a: PXkbGroupAction): int8 =
##define XkbSAGroup(a) (XkbcharToInt((a)->group_XXX))
result = int8(XkbcharToInt(a.group_XXX))
proc XkbSASetGroupProc(a: PXkbGroupAction, g: int8) =
##define XkbSASetGroup(a,g) ((a)->group_XXX=(g))
a.group_XXX = g
proc XkbPtrActionX(a: PXkbPtrAction): int16 =
##define XkbPtrActionX(a) (Xkb2charsToInt((a)->high_XXX,(a)->low_XXX))
result = int16(Xkb2charsToInt(a.high_XXX, a.low_XXX))
proc XkbPtrActionY(a: PXkbPtrAction): int16 =
##define XkbPtrActionY(a) (Xkb2charsToInt((a)->high_YYY,(a)->low_YYY))
result = int16(Xkb2charsToInt(a.high_YYY, a.low_YYY))
proc XkbSetPtrActionX(a: PXkbPtrAction, x: int8) =
##define XkbSetPtrActionX(a,x) (XkbIntTo2chars(x,(a)->high_XXX,(a)->low_XXX))
XkbIntTo2chars(x, a.high_XXX, a.low_XXX)
proc XkbSetPtrActionY(a: PXkbPtrAction, y: int8) =
##define XkbSetPtrActionY(a,y) (XkbIntTo2chars(y,(a)->high_YYY,(a)->low_YYY))
XkbIntTo2chars(y, a.high_YYY, a.low_YYY)
proc XkbSAPtrDfltValue(a: PXkbPtrDfltAction): int8 =
##define XkbSAPtrDfltValue(a) (XkbcharToInt((a)->valueXXX))
result = int8(XkbcharToInt(a.valueXXX))
proc XkbSASetPtrDfltValue(a: PXkbPtrDfltAction, c: pointer) =
##define XkbSASetPtrDfltValue(a,c) ((a)->valueXXX= ((c)&0xff))
a.valueXXX = toU8(cast[int](c))
proc XkbSAScreen(a: PXkbSwitchScreenAction): int8 =
##define XkbSAScreen(a) (XkbcharToInt((a)->screenXXX))
result = toU8(XkbcharToInt(a.screenXXX))
proc XkbSASetScreen(a: PXkbSwitchScreenAction, s: pointer) =
##define XkbSASetScreen(a,s) ((a)->screenXXX= ((s)&0xff))
a.screenXXX = toU8(cast[int](s))
proc XkbActionSetCtrls(a: PXkbCtrlsAction, c: int8) =
##define XkbActionSetCtrls(a,c) (((a)->ctrls3=(((c)>>24)&0xff)),((a)->ctrls2=(((c)>>16)&0xff)),
# ((a)->ctrls1=(((c)>>8)&0xff)),((a)->ctrls0=((c)&0xff)))
a.ctrls3 = toU8((ze(c) shr 24) and 0x000000FF)
a.ctrls2 = toU8((ze(c) shr 16) and 0x000000FF)
a.ctrls1 = toU8((ze(c) shr 8) and 0x000000FF)
a.ctrls0 = toU8(ze(c) and 0x000000FF)
proc XkbActionCtrls(a: PXkbCtrlsAction): int16 =
##define XkbActionCtrls(a) ((((unsigned int)(a)->ctrls3)<<24)|(((unsigned int)(a)->ctrls2)<<16)|
# (((unsigned int)(a)->ctrls1)<<8)|((unsigned int)((a)->ctrls0)))
result = toU16((ze(a.ctrls3) shl 24) or (ze(a.ctrls2) shl 16) or
(ze(a.ctrls1) shl 8) or ze(a.ctrls0))
proc XkbSARedirectVMods(a: PXkbRedirectKeyAction): int16 =
##define XkbSARedirectVMods(a) ((((unsigned int)(a)->vmods1)<<8)|((unsigned int)(a)->vmods0))
result = toU16((ze(a.vmods1) shl 8) or ze(a.vmods0))
proc XkbSARedirectSetVMods(a: PXkbRedirectKeyAction, m: int8) =
##define XkbSARedirectSetVMods(a,m) (((a)->vmods_mask1=(((m)>>8)&0xff)),((a)->vmods_mask0=((m)&0xff)))
a.vmods_mask1 = toU8((ze(m) shr 8) and 0x000000FF)
a.vmods_mask0 = toU8(ze(m) or 0x000000FF)
proc XkbSARedirectVModsMask(a: PXkbRedirectKeyAction): int16 =
##define XkbSARedirectVModsMask(a) ((((unsigned int)(a)->vmods_mask1)<<8)|
# ((unsigned int)(a)->vmods_mask0))
result = toU16((ze(a.vmods_mask1) shl 8) or ze(a.vmods_mask0))
proc XkbSARedirectSetVModsMask(a: PXkbRedirectKeyAction, m: int8) =
##define XkbSARedirectSetVModsMask(a,m) (((a)->vmods_mask1=(((m)>>8)&0xff)),((a)->vmods_mask0=((m)&0xff)))
a.vmods_mask1 = toU8(ze(m) shr 8 and 0x000000FF)
a.vmods_mask0 = toU8(ze(m) and 0x000000FF)
proc XkbAX_AnyFeedback(c: PXkbControlsPtr): int16 =
##define XkbAX_AnyFeedback(c) ((c)->enabled_ctrls&XkbAccessXFeedbackMask)
result = toU16(ze(c.enabled_ctrls) and XkbAccessXFeedbackMask)
proc XkbAX_NeedOption(c: PXkbControlsPtr, w: int16): int16 =
##define XkbAX_NeedOption(c,w) ((c)->ax_options&(w))
result = toU16(ze(c.ax_options) and ze(w))
proc XkbAX_NeedFeedback(c: PXkbControlsPtr, w: int16): bool =
##define XkbAX_NeedFeedback(c,w) (XkbAX_AnyFeedback(c)&&XkbAX_NeedOption(c,w))
result = (XkbAX_AnyFeedback(c) > 0'i16) and (XkbAX_NeedOption(c, w) > 0'i16)
proc XkbSMKeyActionsPtr(m: PXkbServerMapPtr, k: int16): PXkbAction =
##define XkbSMKeyActionsPtr(m,k) (&(m)->acts[(m)->key_acts[k]])
result = addr(m.acts[ze(m.key_acts[ze(k)])])
proc XkbCMKeyGroupInfo(m: PXkbClientMapPtr, k: int16): int8 =
##define XkbCMKeyGroupInfo(m,k) ((m)->key_sym_map[k].group_info)
result = m.key_sym_map[ze(k)].group_info
proc XkbCMKeyNumGroups(m: PXkbClientMapPtr, k: int16): int8 =
##define XkbCMKeyNumGroups(m,k) (XkbNumGroups((m)->key_sym_map[k].group_info))
result = toU8(XkbNumGroups(m.key_sym_map[ze(k)].group_info))
proc XkbCMKeyGroupWidth(m: PXkbClientMapPtr, k: int16, g: int8): int8 =
##define XkbCMKeyGroupWidth(m,k,g) (XkbCMKeyType(m,k,g)->num_levels)
result = XkbCMKeyType(m, k, g).num_levels
proc XkbCMKeyGroupsWidth(m: PXkbClientMapPtr, k: int16): int8 =
##define XkbCMKeyGroupsWidth(m,k) ((m)->key_sym_map[k].width)
result = m.key_sym_map[ze(k)].width
proc XkbCMKeyTypeIndex(m: PXkbClientMapPtr, k: int16, g: int8): int8 =
##define XkbCMKeyTypeIndex(m,k,g) ((m)->key_sym_map[k].kt_index[g&0x3])
result = m.key_sym_map[ze(k)].kt_index[ze(g) and 0x00000003]
proc XkbCMKeyType(m: PXkbClientMapPtr, k: int16, g: int8): PXkbKeyTypePtr =
##define XkbCMKeyType(m,k,g) (&(m)->types[XkbCMKeyTypeIndex(m,k,g)])
result = addr(m.types[ze(XkbCMKeyTypeIndex(m, k, g))])
proc XkbCMKeyNumSyms(m: PXkbClientMapPtr, k: int16): int16 =
##define XkbCMKeyNumSyms(m,k) (XkbCMKeyGroupsWidth(m,k)*XkbCMKeyNumGroups(m,k))
result = toU16(ze(XkbCMKeyGroupsWidth(m, k)) or ze(XkbCMKeyNumGroups(m, k)))
proc XkbCMKeySymsOffset(m: PXkbClientMapPtr, k: int16): int8 =
##define XkbCMKeySymsOffset(m,k) ((m)->key_sym_map[k].offset)
result = m.key_sym_map[ze(k)].offset
proc XkbCMKeySymsPtr*(m: PXkbClientMapPtr, k: int16): PKeySym =
##define XkbCMKeySymsPtr(m,k) (&(m)->syms[XkbCMKeySymsOffset(m,k)])
result = addr(m.syms[ze(XkbCMKeySymsOffset(m, k))])
proc XkbIM_IsAuto(i: PXkbIndicatorMapPtr): bool =
##define XkbIM_IsAuto(i) ((((i)->flags&XkbIM_NoAutomatic)==0)&&(((i)->which_groups&&(i)->groups)||
# ((i)->which_mods&&(i)->mods.mask)|| ((i)->ctrls)))
result = ((ze(i.flags) and XkbIM_NoAutomatic) == 0) and
(((i.which_groups > 0'i8) and (i.groups > 0'i8)) or
((i.which_mods > 0'i8) and (i.mods.mask > 0'i8)) or (i.ctrls > 0'i8))
proc XkbIM_InUse(i: PXkbIndicatorMapPtr): bool =
##define XkbIM_InUse(i) (((i)->flags)||((i)->which_groups)||((i)->which_mods)||((i)->ctrls))
result = (i.flags > 0'i8) or (i.which_groups > 0'i8) or (i.which_mods > 0'i8) or
(i.ctrls > 0'i8)
proc XkbKeyKeyTypeIndex(d: PXkbDescPtr, k: int16, g: int8): int8 =
##define XkbKeyKeyTypeIndex(d,k,g) (XkbCMKeyTypeIndex((d)->map,k,g))
result = XkbCMKeyTypeIndex(d.map, k, g)
proc XkbKeyKeyType(d: PXkbDescPtr, k: int16, g: int8): PXkbKeyTypePtr =
##define XkbKeyKeyType(d,k,g) (XkbCMKeyType((d)->map,k,g))
result = XkbCMKeyType(d.map, k, g)
proc XkbKeyGroupWidth(d: PXkbDescPtr, k: int16, g: int8): int8 =
##define XkbKeyGroupWidth(d,k,g) (XkbCMKeyGroupWidth((d)->map,k,g))
result = XkbCMKeyGroupWidth(d.map, k, g)
proc XkbKeyGroupsWidth(d: PXkbDescPtr, k: int16): int8 =
##define XkbKeyGroupsWidth(d,k) (XkbCMKeyGroupsWidth((d)->map,k))
result = XkbCMKeyGroupsWidth(d.map, k)
proc XkbKeyGroupInfo(d: PXkbDescPtr, k: int16): int8 =
##define XkbKeyGroupInfo(d,k) (XkbCMKeyGroupInfo((d)->map,(k)))
result = XkbCMKeyGroupInfo(d.map, k)
proc XkbKeyNumGroups(d: PXkbDescPtr, k: int16): int8 =
##define XkbKeyNumGroups(d,k) (XkbCMKeyNumGroups((d)->map,(k)))
result = XkbCMKeyNumGroups(d.map, k)
proc XkbKeyNumSyms(d: PXkbDescPtr, k: int16): int16 =
##define XkbKeyNumSyms(d,k) (XkbCMKeyNumSyms((d)->map,(k)))
result = XkbCMKeyNumSyms(d.map, k)
proc XkbKeySymsPtr*(d: PXkbDescPtr, k: int16): PKeySym =
##define XkbKeySymsPtr(d,k) (XkbCMKeySymsPtr((d)->map,(k)))
result = XkbCMKeySymsPtr(d.map, k)
proc XkbKeySym(d: PXkbDescPtr, k: int16, n: int16): TKeySym =
##define XkbKeySym(d,k,n) (XkbKeySymsPtr(d,k)[n])
result = cast[ptr array[0..0xffff, TKeySym]](XkbKeySymsPtr(d, k))[ze(n)] # XXX: this seems strange!
proc XkbKeySymEntry(d: PXkbDescPtr, k: int16, sl: int16, g: int8): TKeySym =
##define XkbKeySymEntry(d,k,sl,g) (XkbKeySym(d,k,((XkbKeyGroupsWidth(d,k)*(g))+(sl))))
result = XkbKeySym(d, k, toU16(ze(XkbKeyGroupsWidth(d, k)) * ze(g) + ze(sl)))
proc XkbKeyAction(d: PXkbDescPtr, k: int16, n: int16): PXkbAction =
##define XkbKeyAction(d,k,n) (XkbKeyHasActions(d,k)?&XkbKeyActionsPtr(d,k)[n]:NULL)
#if (XkbKeyHasActions(d, k)):
# result = XkbKeyActionsPtr(d, k)[ze(n)] #Buggy !!!
assert(false)
result = nil
proc XkbKeyActionEntry(d: PXkbDescPtr, k: int16, sl: int16, g: int8): int8 =
##define XkbKeyActionEntry(d,k,sl,g) (XkbKeyHasActions(d,k) ?
# XkbKeyAction(d, k, ((XkbKeyGroupsWidth(d, k) * (g))+(sl))):NULL)
if XkbKeyHasActions(d, k):
result = XkbKeyGroupsWidth(d, k) *% g +% toU8(sl)
else:
result = 0'i8
proc XkbKeyHasActions(d: PXkbDescPtr, k: int16): bool =
##define XkbKeyHasActions(d,k) ((d)->server->key_acts[k]!=0)
result = d.server.key_acts[ze(k)] != 0'i16
proc XkbKeyNumActions(d: PXkbDescPtr, k: int16): int16 =
##define XkbKeyNumActions(d,k) (XkbKeyHasActions(d,k)?XkbKeyNumSyms(d,k):1)
if (XkbKeyHasActions(d, k)): result = XkbKeyNumSyms(d, k)
else: result = 1'i16
proc XkbKeyActionsPtr(d: PXkbDescPtr, k: int16): PXkbAction =
##define XkbKeyActionsPtr(d,k) (XkbSMKeyActionsPtr((d)->server,k))
result = XkbSMKeyActionsPtr(d.server, k)
proc XkbKeycodeInRange(d: PXkbDescPtr, k: int16): bool =
##define XkbKeycodeInRange(d,k) (((k)>=(d)->min_key_code)&& ((k)<=(d)->max_key_code))
result = (char(toU8(k)) >= d.min_key_code) and (char(toU8(k)) <= d.max_key_code)
proc XkbNumKeys(d: PXkbDescPtr): int8 =
##define XkbNumKeys(d) ((d)->max_key_code-(d)->min_key_code+1)
result = toU8(ord(d.max_key_code) - ord(d.min_key_code) + 1)
proc XkbXI_DevHasBtnActs(d: PXkbDeviceInfoPtr): bool =
##define XkbXI_DevHasBtnActs(d) (((d)->num_btns>0)&&((d)->btn_acts!=NULL))
result = (d.num_btns > 0'i16) and (not (d.btn_acts == nil))
proc XkbXI_LegalDevBtn(d: PXkbDeviceInfoPtr, b: int16): bool =
##define XkbXI_LegalDevBtn(d,b) (XkbXI_DevHasBtnActs(d)&&((b)<(d)->num_btns))
result = XkbXI_DevHasBtnActs(d) and (b <% d.num_btns)
proc XkbXI_DevHasLeds(d: PXkbDeviceInfoPtr): bool =
##define XkbXI_DevHasLeds(d) (((d)->num_leds>0)&&((d)->leds!=NULL))
result = (d.num_leds > 0'i16) and (not (d.leds == nil))
proc XkbBoundsWidth(b: PXkbBoundsPtr): int16 =
##define XkbBoundsWidth(b) (((b)->x2)-((b)->x1))
result = (b.x2) - b.x1
proc XkbBoundsHeight(b: PXkbBoundsPtr): int16 =
##define XkbBoundsHeight(b) (((b)->y2)-((b)->y1))
result = (b.y2) - b.y1
proc XkbOutlineIndex(s: PXkbShapePtr, o: PXkbOutlinePtr): int32 =
##define XkbOutlineIndex(s,o) ((int)((o)-&(s)->outlines[0]))
result = int32((cast[TAddress](o) - cast[TAddress](addr(s.outlines[0]))) div sizeof(PXkbOutlinePtr))
proc XkbShapeDoodadColor(g: PXkbGeometryPtr, d: PXkbShapeDoodadPtr): PXkbColorPtr =
##define XkbShapeDoodadColor(g,d) (&(g)->colors[(d)->color_ndx])
result = addr((g.colors[ze(d.color_ndx)]))
proc XkbShapeDoodadShape(g: PXkbGeometryPtr, d: PXkbShapeDoodadPtr): PXkbShapePtr =
##define XkbShapeDoodadShape(g,d) (&(g)->shapes[(d)->shape_ndx])
result = addr(g.shapes[ze(d.shape_ndx)])
proc XkbSetShapeDoodadColor(g: PXkbGeometryPtr, d: PXkbShapeDoodadPtr,
c: PXkbColorPtr) =
##define XkbSetShapeDoodadColor(g,d,c) ((d)->color_ndx= (c)-&(g)->colors[0])
d.color_ndx = toU16((cast[TAddress](c) - cast[TAddress](addr(g.colors[0]))) div sizeof(TXkbColorRec))
proc XkbSetShapeDoodadShape(g: PXkbGeometryPtr, d: PXkbShapeDoodadPtr,
s: PXkbShapePtr) =
##define XkbSetShapeDoodadShape(g,d,s) ((d)->shape_ndx= (s)-&(g)->shapes[0])
d.shape_ndx = toU16((cast[TAddress](s) - cast[TAddress](addr(g.shapes[0]))) div sizeof(TXkbShapeRec))
proc XkbTextDoodadColor(g: PXkbGeometryPtr, d: PXkbTextDoodadPtr): PXkbColorPtr =
##define XkbTextDoodadColor(g,d) (&(g)->colors[(d)->color_ndx])
result = addr(g.colors[ze(d.color_ndx)])
proc XkbSetTextDoodadColor(g: PXkbGeometryPtr, d: PXkbTextDoodadPtr,
c: PXkbColorPtr) =
##define XkbSetTextDoodadColor(g,d,c) ((d)->color_ndx= (c)-&(g)->colors[0])
d.color_ndx = toU16((cast[TAddress](c) - cast[TAddress](addr(g.colors[0]))) div sizeof(TXkbColorRec))
proc XkbIndicatorDoodadShape(g: PXkbGeometryPtr, d: PXkbIndicatorDoodadPtr): PXkbShapeDoodadPtr =
##define XkbIndicatorDoodadShape(g,d) (&(g)->shapes[(d)->shape_ndx])
result = cast[PXkbShapeDoodadPtr](addr(g.shapes[ze(d.shape_ndx)]))
proc XkbIndicatorDoodadOnColor(g: PXkbGeometryPtr, d: PXkbIndicatorDoodadPtr): PXkbColorPtr =
##define XkbIndicatorDoodadOnColor(g,d) (&(g)->colors[(d)->on_color_ndx])
result = addr(g.colors[ze(d.on_color_ndx)])
proc XkbIndicatorDoodadOffColor(g: PXkbGeometryPtr, d: PXkbIndicatorDoodadPtr): PXkbColorPtr =
##define XkbIndicatorDoodadOffColor(g,d) (&(g)->colors[(d)->off_color_ndx])
result = addr(g.colors[ze(d.off_color_ndx)])
proc XkbSetIndicatorDoodadOnColor(g: PXkbGeometryPtr, d: PXkbIndicatorDoodadPtr,
c: PXkbColorPtr) =
##define XkbSetIndicatorDoodadOnColor(g,d,c) ((d)->on_color_ndx= (c)-&(g)->colors[0])
d.on_color_ndx = toU16((cast[TAddress](c) - cast[TAddress](addr(g.colors[0]))) div sizeof(TXkbColorRec))
proc XkbSetIndicatorDoodadOffColor(g: PXkbGeometryPtr,
d: PXkbIndicatorDoodadPtr, c: PXkbColorPtr) =
##define XkbSetIndicatorDoodadOffColor(g,d,c) ((d)->off_color_ndx= (c)-&(g)->colors[0])
d.off_color_ndx = toU16((cast[TAddress](c) - cast[TAddress](addr(g.colors[0]))) div sizeof(TxkbColorRec))
proc XkbSetIndicatorDoodadShape(g: PXkbGeometryPtr, d: PXkbIndicatorDoodadPtr,
s: PXkbShapeDoodadPtr) =
##define XkbSetIndicatorDoodadShape(g,d,s) ((d)->shape_ndx= (s)-&(g)->shapes[0])
d.shape_ndx = toU16((cast[TAddress](s) - (cast[TAddress](addr(g.shapes[0])))) div sizeof(TXkbShapeRec))
proc XkbLogoDoodadColor(g: PXkbGeometryPtr, d: PXkbLogoDoodadPtr): PXkbColorPtr =
##define XkbLogoDoodadColor(g,d) (&(g)->colors[(d)->color_ndx])
result = addr(g.colors[ze(d.color_ndx)])
proc XkbLogoDoodadShape(g: PXkbGeometryPtr, d: PXkbLogoDoodadPtr): PXkbShapeDoodadPtr =
##define XkbLogoDoodadShape(g,d) (&(g)->shapes[(d)->shape_ndx])
result = cast[PXkbShapeDoodadPtr](addr(g.shapes[ze(d.shape_ndx)]))
proc XkbSetLogoDoodadColor(g: PXkbGeometryPtr, d: PXkbLogoDoodadPtr,
c: PXkbColorPtr) =
##define XkbSetLogoDoodadColor(g,d,c) ((d)->color_ndx= (c)-&(g)->colors[0])
d.color_ndx = toU16((cast[TAddress](c) - cast[TAddress](addr(g.colors[0]))) div sizeof(TXkbColorRec))
proc XkbSetLogoDoodadShape(g: PXkbGeometryPtr, d: PXkbLogoDoodadPtr,
s: PXkbShapeDoodadPtr) =
##define XkbSetLogoDoodadShape(g,d,s) ((d)->shape_ndx= (s)-&(g)->shapes[0])
d.shape_ndx = toU16((cast[TAddress](s) - cast[TAddress](addr(g.shapes[0]))) div sizeof(TXkbShapeRec))
proc XkbKeyShape(g: PXkbGeometryPtr, k: PXkbKeyPtr): PXkbShapeDoodadPtr =
##define XkbKeyShape(g,k) (&(g)->shapes[(k)->shape_ndx])
result = cast[PXkbShapeDoodadPtr](addr(g.shapes[ze(k.shape_ndx)]))
proc XkbKeyColor(g: PXkbGeometryPtr, k: PXkbKeyPtr): PXkbColorPtr =
##define XkbKeyColor(g,k) (&(g)->colors[(k)->color_ndx])
result = addr(g.colors[ze(k.color_ndx)])
proc XkbSetKeyShape(g: PXkbGeometryPtr, k: PXkbKeyPtr, s: PXkbShapeDoodadPtr) =
##define XkbSetKeyShape(g,k,s) ((k)->shape_ndx= (s)-&(g)->shapes[0])
k.shape_ndx = toU8((cast[TAddress](s) - cast[TAddress](addr(g.shapes[0]))) div sizeof(TXkbShapeRec))
proc XkbSetKeyColor(g: PXkbGeometryPtr, k: PXkbKeyPtr, c: PXkbColorPtr) =
##define XkbSetKeyColor(g,k,c) ((k)->color_ndx= (c)-&(g)->colors[0])
k.color_ndx = toU8((cast[TAddress](c) - cast[TAddress](addr(g.colors[0]))) div sizeof(TxkbColorRec))
proc XkbGeomColorIndex(g: PXkbGeometryPtr, c: PXkbColorPtr): int32 =
##define XkbGeomColorIndex(g,c) ((int)((c)-&(g)->colors[0]))
result = toU16((cast[TAddress](c) - (cast[TAddress](addr(g.colors[0])))) div sizeof(TxkbColorRec))