import x, xlib, xkb #, bitops include "x11pragma.nim" type PXkbAnyEvent* = ptr XkbAnyEvent XkbAnyEvent*{.final.} = object theType*: int16 # XkbAnyEvent serial*: int32 # # of last req processed by server send_event*: bool # is this `from` a SendEvent request? display*: PDisplay # Display the event was read `from` time*: Time # milliseconds; xkb_type*: int16 # XKB event minor code device*: int16 # device ID {.deprecated: [TXkbAnyEvent: XkbAnyEvent].} type PXkbNewKeyboardNotifyEvent* = ptr XkbNewKeyboardNotifyEvent XkbNewKeyboardNotifyEvent*{.final.} = object theType*: int16 # XkbAnyEvent serial*: int32 # of last req processed by server send_event*: bool # is this `from` a SendEvent request? display*: PDisplay # Display the event was read `from` time*: Time # milliseconds xkb_type*: int16 # XkbNewKeyboardNotify device*: int16 # device ID old_device*: int16 # device ID of previous keyboard min_key_code*: int16 # minimum key code max_key_code*: int16 # maximum key code old_min_key_code*: int16 # min key code of previous kbd old_max_key_code*: int16 # max key code of previous kbd changed*: int16 # changed aspects of the keyboard req_major*: int8 # major and minor opcode of req req_minor*: int8 # that caused change, if applicable {.deprecated: [TXkbNewKeyboardNotifyEvent: XkbNewKeyboardNotifyEvent].} type PXkbMapNotifyEvent* = ptr XkbMapNotifyEvent XkbMapNotifyEvent*{.final.} = object theType*: int16 # XkbAnyEvent serial*: int32 # of last req processed by server send_event*: bool # is this `from` a SendEvent request display*: PDisplay # Display the event was read `from` time*: Time # milliseconds xkb_type*: int16 # XkbMapNotify device*: int16 # device ID changed*: int16 # fields which have been changed flags*: int16 # reserved first_type*: int16 # first changed key type num_types*: int16 # number of changed key types min_key_code*: KeyCode max_key_code*: KeyCode first_key_sym*: KeyCode first_key_act*: KeyCode first_key_behavior*: KeyCode first_key_explicit*: KeyCode first_modmap_key*: KeyCode first_vmodmap_key*: KeyCode num_key_syms*: int16 num_key_acts*: int16 num_key_behaviors*: int16 num_key_explicit*: int16 num_modmap_keys*: int16 num_vmodmap_keys*: int16 vmods*: int16 # mask of changed virtual mods {.deprecated: [TXkbMapNotifyEvent: XkbMapNotifyEvent].} type PXkbStateNotifyEvent* = ptr XkbStateNotifyEvent XkbStateNotifyEvent*{.final.} = object theType*: int16 # XkbAnyEvent serial*: int32 # # of last req processed by server send_event*: bool # is this `from` a SendEvent request? display*: PDisplay # Display the event was read `from` time*: Time # milliseconds xkb_type*: int16 # XkbStateNotify device*: int16 # device ID changed*: int16 # mask of changed state components group*: int16 # keyboard group base_group*: int16 # base keyboard group latched_group*: int16 # latched keyboard group locked_group*: int16 # locked keyboard group mods*: int16 # modifier state base_mods*: int16 # base modifier state latched_mods*: int16 # latched modifiers locked_mods*: int16 # locked modifiers compat_state*: int16 # compatibility state grab_mods*: int8 # mods used for grabs compat_grab_mods*: int8 # grab mods for non-XKB clients lookup_mods*: int8 # mods sent to clients compat_lookup_mods*: int8 # mods sent to non-XKB clients ptr_buttons*: int16 # pointer button state keycode*: KeyCode # keycode that caused the change event_type*: int8 # KeyPress or KeyRelease req_major*: int8 # Major opcode of request req_minor*: int8 # Minor opcode of request {.deprecated: [TXkbStateNotifyEvent: XkbStateNotifyEvent].} type PXkbControlsNotifyEvent* = ptr XkbControlsNotifyEvent XkbControlsNotifyEvent*{.final.} = object theType*: int16 # XkbAnyEvent serial*: int32 # of last req processed by server send_event*: bool # is this `from` a SendEvent request? display*: PDisplay # Display the event was read `from` time*: Time # milliseconds xkb_type*: int16 # XkbControlsNotify device*: int16 # device ID changed_ctrls*: int16 # controls with changed sub-values enabled_ctrls*: int16 # controls currently enabled enabled_ctrl_changes*: int16 # controls just {en,dis}abled num_groups*: int16 # total groups on keyboard keycode*: KeyCode # key that caused change or 0 event_type*: int8 # type of event that caused change req_major*: int8 # if keycode==0, major and minor req_minor*: int8 # opcode of req that caused change {.deprecated: [TXkbControlsNotifyEvent: XkbControlsNotifyEvent].} type PXkbIndicatorNotifyEvent* = ptr XkbIndicatorNotifyEvent XkbIndicatorNotifyEvent*{.final.} = object theType*: int16 # XkbAnyEvent serial*: int32 # of last req processed by server send_event*: bool # is this `from` a SendEvent request? display*: PDisplay # Display the event was read `from` time*: Time # milliseconds xkb_type*: int16 # XkbIndicatorNotify device*: int16 # device changed*: int16 # indicators with new state or map state*: int16 # current state of all indicators {.deprecated: [TXkbIndicatorNotifyEvent: XkbIndicatorNotifyEvent].} type PXkbNamesNotifyEvent* = ptr XkbNamesNotifyEvent XkbNamesNotifyEvent*{.final.} = object theType*: int16 # XkbAnyEvent serial*: int32 # of last req processed by server send_event*: bool # is this `from` a SendEvent request? display*: PDisplay # Display the event was read `from` time*: Time # milliseconds xkb_type*: int16 # XkbNamesNotify device*: int16 # device ID changed*: int32 # names that have changed first_type*: int16 # first key type with new name num_types*: int16 # number of key types with new names first_lvl*: int16 # first key type new new level names num_lvls*: int16 # # of key types w/new level names num_aliases*: int16 # total number of key aliases num_radio_groups*: int16 # total number of radio groups changed_vmods*: int16 # virtual modifiers with new names changed_groups*: int16 # groups with new names changed_indicators*: int16 # indicators with new names first_key*: int16 # first key with new name num_keys*: int16 # number of keys with new names {.deprecated: [TXkbNamesNotifyEvent: XkbNamesNotifyEvent].} type PXkbCompatMapNotifyEvent* = ptr XkbCompatMapNotifyEvent XkbCompatMapNotifyEvent*{.final.} = object theType*: int16 # XkbAnyEvent serial*: int32 # of last req processed by server send_event*: bool # is this `from` a SendEvent request? display*: PDisplay # Display the event was read `from` time*: Time # milliseconds xkb_type*: int16 # XkbCompatMapNotify device*: int16 # device ID changed_groups*: int16 # groups with new compat maps first_si*: int16 # first new symbol interp num_si*: int16 # number of new symbol interps num_total_si*: int16 # total # of symbol interps {.deprecated: [TXkbCompatMapNotifyEvent: XkbCompatMapNotifyEvent].} type PXkbBellNotifyEvent* = ptr XkbBellNotifyEvent XkbBellNotifyEvent*{.final.} = object theType*: int16 # XkbAnyEvent serial*: int32 # of last req processed by server send_event*: bool # is this `from` a SendEvent request? display*: PDisplay # Display the event was read `from` time*: Time # milliseconds xkb_type*: int16 # XkbBellNotify device*: int16 # device ID percent*: int16 # requested volume as a % of maximum pitch*: int16 # requested pitch in Hz duration*: int16 # requested duration in useconds bell_class*: int16 # (input extension) feedback class bell_id*: int16 # (input extension) ID of feedback name*: Atom # "name" of requested bell window*: Window # window associated with event event_only*: bool # "event only" requested {.deprecated: [TXkbBellNotifyEvent: XkbBellNotifyEvent].} type PXkbActionMessageEvent* = ptr XkbActionMessageEvent XkbActionMessageEvent*{.final.} = object theType*: int16 # XkbAnyEvent serial*: int32 # of last req processed by server send_event*: bool # is this `from` a SendEvent request? display*: PDisplay # Display the event was read `from` time*: Time # milliseconds xkb_type*: int16 # XkbActionMessage device*: int16 # device ID keycode*: KeyCode # key that generated the event press*: bool # true if act caused by key press key_event_follows*: bool # true if key event also generated group*: int16 # effective group mods*: int16 # effective mods message*: array[0..XkbActionMessageLength, char] # message -- leave space for NUL {.deprecated: [TXkbActionMessageEvent: XkbActionMessageEvent].} type PXkbAccessXNotifyEvent* = ptr XkbAccessXNotifyEvent XkbAccessXNotifyEvent*{.final.} = object theType*: int16 # XkbAnyEvent serial*: int32 # of last req processed by server send_event*: bool # is this `from` a SendEvent request? display*: PDisplay # Display the event was read `from` time*: Time # milliseconds xkb_type*: int16 # XkbAccessXNotify device*: int16 # device ID detail*: int16 # XkbAXN_* keycode*: int16 # key of event sk_delay*: int16 # current slow keys delay debounce_delay*: int16 # current debounce delay {.deprecated: [TXkbAccessXNotifyEvent: XkbAccessXNotifyEvent].} type PXkbExtensionDeviceNotifyEvent* = ptr XkbExtensionDeviceNotifyEvent XkbExtensionDeviceNotifyEvent*{.final.} = object theType*: int16 # XkbAnyEvent serial*: int32 # of last req processed by server send_event*: bool # is this `from` a SendEvent request? display*: PDisplay # Display the event was read `from` time*: Time # milliseconds xkb_type*: int16 # XkbExtensionDeviceNotify device*: int16 # device ID reason*: int16 # reason for the event supported*: int16 # mask of supported features unsupported*: int16 # mask of unsupported features # that some app tried to use first_btn*: int16 # first button that changed num_btns*: int16 # range of buttons changed leds_defined*: int16 # indicators with names or maps led_state*: int16 # current state of the indicators led_class*: int16 # feedback class for led changes led_id*: int16 # feedback id for led changes {.deprecated: [TXkbExtensionDeviceNotifyEvent: XkbExtensionDeviceNotifyEvent].} type PXkbEvent* = ptr XkbEvent XkbEvent*{.final.} = object theType*: int16 any*: XkbAnyEvent new_kbd*: XkbNewKeyboardNotifyEvent map*: XkbMapNotifyEvent state*: XkbStateNotifyEvent ctrls*: XkbControlsNotifyEvent indicators*: XkbIndicatorNotifyEvent names*: XkbNamesNotifyEvent compat*: XkbCompatMapNotifyEvent bell*: XkbBellNotifyEvent message*: XkbActionMessageEvent accessx*: XkbAccessXNotifyEvent device*: XkbExtensionDeviceNotifyEvent core*: XEvent {.deprecated: [TXkbEvent: XkbEvent].} type PXkbKbdDpyStatePtr* = ptr XkbKbdDpyStateRec XkbKbdDpyStateRec*{.final.} = object # XkbOpenDisplay error codes {.deprecated: [TXkbKbdDpyStateRec: XkbKbdDpyStateRec].} const XkbOD_Success* = 0 XkbOD_BadLibraryVersion* = 1 XkbOD_ConnectionRefused* = 2 XkbOD_NonXkbServer* = 3 XkbOD_BadServerVersion* = 4 # Values for XlibFlags const XkbLC_ForceLatin1Lookup* = 1 shl 0 XkbLC_ConsumeLookupMods* = 1 shl 1 XkbLC_AlwaysConsumeShiftAndLock* = 1 shl 2 XkbLC_IgnoreNewKeyboards* = 1 shl 3 XkbLC_ControlFallback* = 1 shl 4 XkbLC_ConsumeKeysOnComposeFail* = 1 shl 29 XkbLC_ComposeLED* = 1 shl 30 XkbLC_BeepOnComposeFail* = 1 shl 31 XkbLC_AllComposeControls* = 0xC0000000 XkbLC_AllControls* = 0xC000001F proc XkbIgnoreExtension*(ignore: bool): bool{.libx11c, importc: "XkbIgnoreExtension".} proc XkbOpenDisplay*(name: cstring, ev_rtrn, err_rtrn, major_rtrn, minor_rtrn, reason: ptr int16): PDisplay{.libx11c, importc: "XkbOpenDisplay".} proc XkbQueryExtension*(dpy: PDisplay, opcodeReturn, eventBaseReturn, errorBaseReturn, majorRtrn, minorRtrn: ptr int16): bool{. libx11c, importc: "XkbQueryExtension".} proc XkbUseExtension*(dpy: PDisplay, major_rtrn, minor_rtrn: ptr int16): bool{. libx11c, importc: "XkbUseExtension".} proc XkbLibraryVersion*(libMajorRtrn, libMinorRtrn: ptr int16): bool{.libx11c, importc: "XkbLibraryVersion".} proc XkbSetXlibControls*(dpy: PDisplay, affect, values: int16): int16{.libx11c, importc: "XkbSetXlibControls".} proc XkbGetXlibControls*(dpy: PDisplay): int16{.libx11c, importc: "XkbGetXlibControls".} type XkbInternAtomFunc* = proc (dpy: PDisplay, name: cstring, only_if_exists: bool): Atom{. cdecl.} type XkbGetAtomNameFunc* = proc (dpy: PDisplay, atom: Atom): cstring{.cdecl.} proc XkbSetAtomFuncs*(getAtom: XkbInternAtomFunc, getName: XkbGetAtomNameFunc){. libx11c, importc: "XkbSetAtomFuncs".} proc XkbKeycodeToKeysym*(dpy: PDisplay, kc: KeyCode, group, level: int16): KeySym{. libx11c, importc: "XkbKeycodeToKeysym".} proc XkbKeysymToModifiers*(dpy: PDisplay, ks: KeySym): int16{.libx11c, importc: "XkbKeysymToModifiers".} proc XkbLookupKeySym*(dpy: PDisplay, keycode: KeyCode, modifiers, modifiers_return: int16, keysym_return: PKeySym): bool{. libx11c, importc: "XkbLookupKeySym".} proc XkbLookupKeyBinding*(dpy: PDisplay, sym_rtrn: KeySym, mods: int16, buffer: cstring, nbytes: int16, extra_rtrn: ptr int16): int16{. libx11c, importc: "XkbLookupKeyBinding".} proc XkbTranslateKeyCode*(xkb: PXkbDescPtr, keycode: KeyCode, modifiers, modifiers_return: int16, keysym_return: PKeySym): bool{.libx11c, importc: "XkbTranslateKeyCode".} proc XkbTranslateKeySym*(dpy: PDisplay, sym_return: KeySym, modifiers: int16, buffer: cstring, nbytes: int16, extra_rtrn: ptr int16): int16{. libx11c, importc: "XkbTranslateKeySym".} proc XkbSetAutoRepeatRate*(dpy: PDisplay, deviceSpec, delay, interval: int16): bool{. libx11c, importc: "XkbSetAutoRepeatRate".} proc XkbGetAutoRepeatRate*(dpy: PDisplay, deviceSpec: int16, delayRtrn, intervalRtrn: PWord): bool{.libx11c, importc: "XkbGetAutoRepeatRate".} proc XkbChangeEnabledControls*(dpy: PDisplay, deviceSpec, affect, values: int16): bool{. libx11c, importc: "XkbChangeEnabledControls".} proc XkbDeviceBell*(dpy: PDisplay, win: Window, deviceSpec, bellClass, bellID, percent: int16, name: Atom): bool{. libx11c, importc: "XkbDeviceBell".} proc XkbForceDeviceBell*(dpy: PDisplay, deviceSpec, bellClass, bellID, percent: int16): bool{. libx11c, importc: "XkbForceDeviceBell".} proc XkbDeviceBellEvent*(dpy: PDisplay, win: Window, deviceSpec, bellClass, bellID, percent: int16, name: Atom): bool{.libx11c, importc: "XkbDeviceBellEvent".} proc XkbBell*(dpy: PDisplay, win: Window, percent: int16, name: Atom): bool{. libx11c, importc: "XkbBell".} proc XkbForceBell*(dpy: PDisplay, percent: int16): bool{.libx11c, importc: "XkbForceBell".} proc XkbBellEvent*(dpy: PDisplay, win: Window, percent: int16, name: Atom): bool{. libx11c, importc: "XkbBellEvent".} proc XkbSelectEvents*(dpy: PDisplay, deviceID, affect, values: int16): bool{. libx11c, importc: "XkbSelectEvents".} proc XkbSelectEventDetails*(dpy: PDisplay, deviceID, eventType: int16, affect, details: int32): bool{.libx11c, importc: "XkbSelectEventDetails".} proc XkbNoteMapChanges*(old: PXkbMapChangesPtr, new: PXkbMapNotifyEvent, wanted: int16){.libx11c, importc: "XkbNoteMapChanges".} proc XkbNoteNameChanges*(old: PXkbNameChangesPtr, new: PXkbNamesNotifyEvent, wanted: int16){.libx11c, importc: "XkbNoteNameChanges".} proc XkbGetIndicatorState*(dpy: PDisplay, deviceSpec: int16, pStateRtrn: PWord): Status{. libx11c, importc: "XkbGetIndicatorState".} proc XkbGetDeviceIndicatorState*(dpy: PDisplay, deviceSpec, ledClass, ledID: int16, pStateRtrn: PWord): Status{.libx11c, importc: "XkbGetDeviceIndicatorState".} proc XkbGetIndicatorMap*(dpy: PDisplay, which: int32, desc: PXkbDescPtr): Status{. libx11c, importc: "XkbGetIndicatorMap".} proc XkbSetIndicatorMap*(dpy: PDisplay, which: int32, desc: PXkbDescPtr): bool{. libx11c, importc: "XkbSetIndicatorMap".} proc XkbNoteIndicatorMapChanges*(o, n: PXkbIndicatorChangesPtr, w: int16) proc XkbNoteIndicatorStateChanges*(o, n: PXkbIndicatorChangesPtr, w: int16) proc XkbGetIndicatorMapChanges*(d: PDisplay, x: PXkbDescPtr, c: PXkbIndicatorChangesPtr): Status proc XkbChangeIndicatorMaps*(d: PDisplay, x: PXkbDescPtr, c: PXkbIndicatorChangesPtr): bool proc XkbGetNamedIndicator*(dpy: PDisplay, name: Atom, pNdxRtrn: ptr int16, pStateRtrn: ptr bool, pMapRtrn: PXkbIndicatorMapPtr, pRealRtrn: ptr bool): bool{.libx11c, importc: "XkbGetNamedIndicator".} proc XkbGetNamedDeviceIndicator*(dpy: PDisplay, deviceSpec, ledClass, ledID: int16, name: Atom, pNdxRtrn: ptr int16, pStateRtrn: ptr bool, pMapRtrn: PXkbIndicatorMapPtr, pRealRtrn: ptr bool): bool{.libx11c, importc: "XkbGetNamedDeviceIndicator".} proc XkbSetNamedIndicator*(dpy: PDisplay, name: Atom, changeState, state, createNewMap: bool, pMap: PXkbIndicatorMapPtr): bool{.libx11c, importc: "XkbSetNamedIndicator".} proc XkbSetNamedDeviceIndicator*(dpy: PDisplay, deviceSpec, ledClass, ledID: int16, name: Atom, changeState, state, createNewMap: bool, pMap: PXkbIndicatorMapPtr): bool{.libx11c, importc: "XkbSetNamedDeviceIndicator".} proc XkbLockModifiers*(dpy: PDisplay, deviceSpec, affect, values: int16): bool{. libx11c, importc: "XkbLockModifiers".} proc XkbLatchModifiers*(dpy: PDisplay, deviceSpec, affect, values: int16): bool{. libx11c, importc: "XkbLatchModifiers".} proc XkbLockGroup*(dpy: PDisplay, deviceSpec, group: int16): bool{.libx11c, importc: "XkbLockGroup".} proc XkbLatchGroup*(dpy: PDisplay, deviceSpec, group: int16): bool{.libx11c, importc: "XkbLatchGroup".} proc XkbSetServerInternalMods*(dpy: PDisplay, deviceSpec, affectReal, realValues, affectVirtual, virtualValues: int16): bool{.libx11c, importc: "XkbSetServerInternalMods".} proc XkbSetIgnoreLockMods*(dpy: PDisplay, deviceSpec, affectReal, realValues, affectVirtual, virtualValues: int16): bool{.libx11c, importc: "XkbSetIgnoreLockMods".} proc XkbVirtualModsToReal*(dpy: PDisplay, virtual_mask: int16, mask_rtrn: PWord): bool{. libx11c, importc: "XkbVirtualModsToReal".} proc XkbComputeEffectiveMap*(xkb: PXkbDescPtr, theType: PXkbKeyTypePtr, map_rtrn: PByte): bool{.libx11c, importc: "XkbComputeEffectiveMap".} proc XkbInitCanonicalKeyTypes*(xkb: PXkbDescPtr, which: int16, keypadVMod: int16): Status{. libx11c, importc: "XkbInitCanonicalKeyTypes".} proc XkbAllocKeyboard*(): PXkbDescPtr{.libx11c, importc: "XkbAllocKeyboard".} proc XkbFreeKeyboard*(xkb: PXkbDescPtr, which: int16, freeDesc: bool){.libx11c, importc: "XkbFreeKeyboard".} proc XkbAllocClientMap*(xkb: PXkbDescPtr, which, nTypes: int16): Status{.libx11c, importc: "XkbAllocClientMap".} proc XkbAllocServerMap*(xkb: PXkbDescPtr, which, nActions: int16): Status{. libx11c, importc: "XkbAllocServerMap".} proc XkbFreeClientMap*(xkb: PXkbDescPtr, what: int16, freeMap: bool){.libx11c, importc: "XkbFreeClientMap".} proc XkbFreeServerMap*(xkb: PXkbDescPtr, what: int16, freeMap: bool){.libx11c, importc: "XkbFreeServerMap".} proc XkbAddKeyType*(xkb: PXkbDescPtr, name: Atom, map_count: int16, want_preserve: bool, num_lvls: int16): PXkbKeyTypePtr{. libx11c, importc: "XkbAddKeyType".} proc XkbAllocIndicatorMaps*(xkb: PXkbDescPtr): Status{.libx11c, importc: "XkbAllocIndicatorMaps".} proc XkbFreeIndicatorMaps*(xkb: PXkbDescPtr){.libx11c, importc: "XkbFreeIndicatorMaps".} proc XkbGetMap*(dpy: PDisplay, which, deviceSpec: int16): PXkbDescPtr{.libx11c, importc: "XkbGetMap".} proc XkbGetUpdatedMap*(dpy: PDisplay, which: int16, desc: PXkbDescPtr): Status{. libx11c, importc: "XkbGetUpdatedMap".} proc XkbGetMapChanges*(dpy: PDisplay, xkb: PXkbDescPtr, changes: PXkbMapChangesPtr): Status{.libx11c, importc: "XkbGetMapChanges".} proc XkbRefreshKeyboardMapping*(event: PXkbMapNotifyEvent): Status{.libx11c, importc: "XkbRefreshKeyboardMapping".} proc XkbGetKeyTypes*(dpy: PDisplay, first, num: int16, xkb: PXkbDescPtr): Status{. libx11c, importc: "XkbGetKeyTypes".} proc XkbGetKeySyms*(dpy: PDisplay, first, num: int16, xkb: PXkbDescPtr): Status{. libx11c, importc: "XkbGetKeySyms".} proc XkbGetKeyActions*(dpy: PDisplay, first, num: int16, xkb: PXkbDescPtr): Status{. libx11c, importc: "XkbGetKeyActions".} proc XkbGetKeyBehaviors*(dpy: PDisplay, firstKey, nKeys: int16, desc: PXkbDescPtr): Status{.libx11c, importc: "XkbGetKeyBehaviors".} proc XkbGetVirtualMods*(dpy: PDisplay, which: int16, desc: PXkbDescPtr): Status{. libx11c, importc: "XkbGetVirtualMods".} proc XkbGetKeyExplicitComponents*(dpy: PDisplay, firstKey, nKeys: int16, desc: PXkbDescPtr): Status{.libx11c, importc: "XkbGetKeyExplicitComponents".} proc XkbGetKeyModifierMap*(dpy: PDisplay, firstKey, nKeys: int16, desc: PXkbDescPtr): Status{.libx11c, importc: "XkbGetKeyModifierMap".} proc XkbAllocControls*(xkb: PXkbDescPtr, which: int16): Status{.libx11c, importc: "XkbAllocControls".} proc XkbFreeControls*(xkb: PXkbDescPtr, which: int16, freeMap: bool){.libx11c, importc: "XkbFreeControls".} # should which be int32 like it originally was? proc XkbGetControls*(dpy: PDisplay, which: int64, desc: PXkbDescPtr): Status{. libx11c, importc: "XkbGetControls".} proc XkbSetControls*(dpy: PDisplay, which: int32, desc: PXkbDescPtr): bool{. libx11c, importc: "XkbSetControls".} proc XkbNoteControlsChanges*(old: PXkbControlsChangesPtr, new: PXkbControlsNotifyEvent, wanted: int16){. libx11c, importc: "XkbNoteControlsChanges".} proc XkbGetControlsChanges*(d: PDisplay, x: PXkbDescPtr, c: PXkbControlsChangesPtr): Status proc XkbChangeControls*(d: PDisplay, x: PXkbDescPtr, c: PXkbControlsChangesPtr): bool proc XkbAllocCompatMap*(xkb: PXkbDescPtr, which, nInterpret: int16): Status{. libx11c, importc: "XkbAllocCompatMap".} proc XkbFreeCompatMap*(xkib: PXkbDescPtr, which: int16, freeMap: bool){.libx11c, importc: "XkbFreeCompatMap".} proc XkbGetCompatMap*(dpy: PDisplay, which: int16, xkb: PXkbDescPtr): Status{. libx11c, importc: "XkbGetCompatMap".} proc XkbSetCompatMap*(dpy: PDisplay, which: int16, xkb: PXkbDescPtr, updateActions: bool): bool{.libx11c, importc: "XkbSetCompatMap".} proc XkbAddSymInterpret*(xkb: PXkbDescPtr, si: PXkbSymInterpretPtr, updateMap: bool, changes: PXkbChangesPtr): PXkbSymInterpretPtr{. libx11c, importc: "XkbAddSymInterpret".} proc XkbAllocNames*(xkb: PXkbDescPtr, which: int16, nTotalRG, nTotalAliases: int16): Status{.libx11c, importc: "XkbAllocNames".} proc XkbGetNames*(dpy: PDisplay, which: int16, desc: PXkbDescPtr): Status{.libx11c, importc: "XkbGetNames".} proc XkbSetNames*(dpy: PDisplay, which, firstType, nTypes: int16, desc: PXkbDescPtr): bool{.libx11c,importc: "XkbSetNames".} proc XkbChangeNames*(dpy: PDisplay, xkb: PXkbDescPtr,changes: PXkbNameChangesPtr): bool{.libx11c, importc: "XkbChangeNames".} proc XkbFreeNames*(xkb: PXkbDescPtr, which: int16, freeMap: bool){.libx11c, importc: "XkbFreeNames".} proc XkbGetState*(dpy: PDisplay, deviceSpec: int16, rtrnState: PXkbStatePtr): Status{. libx11c, importc: "XkbGetState".} proc XkbSetMap*(dpy: PDisplay, which: int16, desc: PXkbDescPtr): bool{.libx11c, importc: "XkbSetMap".} proc XkbChangeMap*(dpy: PDisplay, desc: PXkbDescPtr, changes: PXkbMapChangesPtr): bool{. libx11c, importc: "XkbChangeMap".} proc XkbSetDetectableAutoRepeat*(dpy: PDisplay, detectable: bool, supported: ptr bool): bool{.libx11c, importc: "XkbSetDetectableAutoRepeat".} proc XkbGetDetectableAutoRepeat*(dpy: PDisplay, supported: ptr bool): bool{. libx11c, importc: "XkbGetDetectableAutoRepeat".} proc XkbSetAutoResetControls*(dpy: PDisplay, changes: int16, auto_ctrls, auto_values: PWord): bool{.libx11c, importc: "XkbSetAutoResetControls".} proc XkbGetAutoResetControls*(dpy: PDisplay, auto_ctrls, auto_ctrl_values: PWord): bool{. libx11c, importc: "XkbGetAutoResetControls".} proc XkbSetPerClientControls*(dpy: PDisplay, change: int16, values: PWord): bool{. libx11c, importc: "XkbSetPerClientControls".} proc XkbGetPerClientControls*(dpy: PDisplay, ctrls: PWord): bool{.libx11c, importc: "XkbGetPerClientControls".} proc XkbCopyKeyType*(`from`, into: PXkbKeyTypePtr): Status{.libx11c, importc: "XkbCopyKeyType".} proc XkbCopyKeyTypes*(`from`, into: PXkbKeyTypePtr, num_types: int16): Status{. libx11c, importc: "XkbCopyKeyTypes".} proc XkbResizeKeyType*(xkb: PXkbDescPtr, type_ndx, map_count: int16, want_preserve: bool, new_num_lvls: int16): Status{. libx11c, importc: "XkbResizeKeyType".} proc XkbResizeKeySyms*(desc: PXkbDescPtr, forKey, symsNeeded: int16): PKeySym{. libx11c, importc: "XkbResizeKeySyms".} proc XkbResizeKeyActions*(desc: PXkbDescPtr, forKey, actsNeeded: int16): PXkbAction{. libx11c, importc: "XkbResizeKeyActions".} proc XkbChangeTypesOfKey*(xkb: PXkbDescPtr, key, num_groups: int16, groups: int16, newTypes: ptr int16, pChanges: PXkbMapChangesPtr): Status{.libx11c, importc: "XkbChangeTypesOfKey".} proc XkbListComponents*(dpy: PDisplay, deviceSpec: int16, ptrns: PXkbComponentNamesPtr, max_inout: ptr int16): PXkbComponentListPtr{. libx11c, importc: "XkbListComponents".} proc XkbFreeComponentList*(list: PXkbComponentListPtr){.libx11c, importc: "XkbFreeComponentList".} proc XkbGetKeyboard*(dpy: PDisplay, which, deviceSpec: int16): PXkbDescPtr{. libx11c, importc: "XkbGetKeyboard".} proc XkbGetKeyboardByName*(dpy: PDisplay, deviceSpec: int16, names: PXkbComponentNamesPtr, want, need: int16, load: bool): PXkbDescPtr{.libx11c, importc: "XkbGetKeyboardByName".} proc XkbKeyTypesForCoreSymbols*(xkb: PXkbDescPtr, map_width: int16, # keyboard device core_syms: PKeySym, # always mapWidth symbols protected: int16, # explicit key types types_inout: ptr int16, # always four type indices xkb_syms_rtrn: PKeySym): int16{.libx11c, importc: "XkbKeyTypesForCoreSymbols".} # must have enough space proc XkbApplyCompatMapToKey*(xkb: PXkbDescPtr, key: KeyCode, # key to be updated changes: PXkbChangesPtr): bool{.libx11c, importc: "XkbApplyCompatMapToKey".} # resulting changes to map proc XkbUpdateMapFromCore*(xkb: PXkbDescPtr, first_key: KeyCode, # first changed key num_keys, map_width: int16, core_keysyms: PKeySym, # symbols `from` core keymap changes: PXkbChangesPtr): bool{.libx11c, importc: "XkbUpdateMapFromCore".} proc XkbAddDeviceLedInfo*(devi: PXkbDeviceInfoPtr, ledClass, ledId: int16): PXkbDeviceLedInfoPtr{. libx11c, importc: "XkbAddDeviceLedInfo".} proc XkbResizeDeviceButtonActions*(devi: PXkbDeviceInfoPtr, newTotal: int16): Status{. libx11c, importc: "XkbResizeDeviceButtonActions".} proc XkbAllocDeviceInfo*(deviceSpec, nButtons, szLeds: int16): PXkbDeviceInfoPtr{. libx11c, importc: "XkbAllocDeviceInfo".} proc XkbFreeDeviceInfo*(devi: PXkbDeviceInfoPtr, which: int16, freeDevI: bool){. libx11c, importc: "XkbFreeDeviceInfo".} proc XkbNoteDeviceChanges*(old: PXkbDeviceChangesPtr, new: PXkbExtensionDeviceNotifyEvent, wanted: int16){. libx11c, importc: "XkbNoteDeviceChanges".} proc XkbGetDeviceInfo*(dpy: PDisplay, which, deviceSpec, ledClass, ledID: int16): PXkbDeviceInfoPtr{. libx11c, importc: "XkbGetDeviceInfo".} proc XkbGetDeviceInfoChanges*(dpy: PDisplay, devi: PXkbDeviceInfoPtr, changes: PXkbDeviceChangesPtr): Status{.libx11c, importc: "XkbGetDeviceInfoChanges".} proc XkbGetDeviceButtonActions*(dpy: PDisplay, devi: PXkbDeviceInfoPtr, all: bool, first, nBtns: int16): Status{.libx11c, importc: "XkbGetDeviceButtonActions".} proc XkbGetDeviceLedInfo*(dpy: PDisplay, devi: PXkbDeviceInfoPtr, ledClass, ledId, which: int16): Status{.libx11c, importc: "XkbGetDeviceLedInfo".} proc XkbSetDeviceInfo*(dpy: PDisplay, which: int16, devi: PXkbDeviceInfoPtr): bool{. libx11c, importc: "XkbSetDeviceInfo".} proc XkbChangeDeviceInfo*(dpy: PDisplay, desc: PXkbDeviceInfoPtr, changes: PXkbDeviceChangesPtr): bool{.libx11c, importc: "XkbChangeDeviceInfo".} proc XkbSetDeviceLedInfo*(dpy: PDisplay, devi: PXkbDeviceInfoPtr, ledClass, ledID, which: int16): bool{.libx11c, importc: "XkbSetDeviceLedInfo".} proc XkbSetDeviceButtonActions*(dpy: PDisplay, devi: PXkbDeviceInfoPtr, first, nBtns: int16): bool{.libx11c, importc: "XkbSetDeviceButtonActions".} proc XkbToControl*(c: int8): int8{.libx11c, importc: "XkbToControl".} proc XkbSetDebuggingFlags*(dpy: PDisplay, mask, flags: int16, msg: cstring, ctrls_mask, ctrls, rtrn_flags, rtrn_ctrls: int16): bool{. libx11c, importc: "XkbSetDebuggingFlags".} proc XkbApplyVirtualModChanges*(xkb: PXkbDescPtr, changed: int16, changes: PXkbChangesPtr): bool{.libx11c, importc: "XkbApplyVirtualModChanges".} # implementation proc XkbNoteIndicatorMapChanges(o, n: PXkbIndicatorChangesPtr, w: int16) = # XkbNoteIndicatorMapChanges(o,n,w) ((o)->map_changes|=((n)->map_changes&(w))) o.map_changes = o.map_changes or (n.map_changes and w) proc XkbNoteIndicatorStateChanges(o, n: PXkbIndicatorChangesPtr, w: int16) = # XkbNoteIndicatorStateChanges(o,n,w) ((o)->state_changes|=((n)->state_changes&(w))) o.state_changes = o.state_changes or (n.state_changes and (w)) proc XkbGetIndicatorMapChanges(d: PDisplay, x: PXkbDescPtr, c: PXkbIndicatorChangesPtr): Status = # XkbGetIndicatorMapChanges(d,x,c) (XkbGetIndicatorMap((d),(c)->map_changes,x) result = XkbGetIndicatorMap(d, c.map_changes, x) proc XkbChangeIndicatorMaps(d: PDisplay, x: PXkbDescPtr, c: PXkbIndicatorChangesPtr): bool = # XkbChangeIndicatorMaps(d,x,c) (XkbSetIndicatorMap((d),(c)->map_changes,x)) result = XkbSetIndicatorMap(d, c.map_changes, x) proc XkbGetControlsChanges(d: PDisplay, x: PXkbDescPtr, c: PXkbControlsChangesPtr): Status = # XkbGetControlsChanges(d,x,c) XkbGetControls(d,(c)->changed_ctrls,x) result = XkbGetControls(d, c.changed_ctrls, x) proc XkbChangeControls(d: PDisplay, x: PXkbDescPtr, c: PXkbControlsChangesPtr): bool = # XkbChangeControls(d,x,c) XkbSetControls(d,(c)->changed_ctrls,x) result = XkbSetControls(d, c.changed_ctrls, x)