2009-01-20 08:46:12 -07:00
|
|
|
/*
|
|
|
|
Copyright 1985, 1987, 1990, 1998 The Open Group
|
|
|
|
Copyright 2008 Dan Nicholson
|
|
|
|
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a
|
|
|
|
copy of this software and associated documentation files (the "Software"),
|
|
|
|
to deal in the Software without restriction, including without limitation
|
|
|
|
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
|
|
and/or sell copies of the Software, and to permit persons to whom the
|
|
|
|
Software is furnished to do so, subject to the following conditions:
|
|
|
|
|
|
|
|
The above copyright notice and this permission notice shall be included in
|
|
|
|
all copies or substantial portions of the Software.
|
|
|
|
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
|
AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
|
|
|
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
|
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
|
|
|
|
Except as contained in this notice, the names of the authors or their
|
|
|
|
institutions shall not be used in advertising or otherwise to promote the
|
|
|
|
sale, use or other dealings in this Software without prior written
|
|
|
|
authorization from the authors.
|
|
|
|
*/
|
|
|
|
|
2010-06-21 07:28:34 -06:00
|
|
|
/************************************************************
|
|
|
|
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.
|
|
|
|
|
|
|
|
********************************************************/
|
|
|
|
|
|
|
|
|
2009-01-20 08:46:12 -07:00
|
|
|
#ifndef _XKBCOMMON_H_
|
|
|
|
#define _XKBCOMMON_H_
|
|
|
|
|
2010-06-16 17:51:49 -06:00
|
|
|
#include <stdint.h>
|
2009-04-10 13:25:51 -06:00
|
|
|
#include <stdio.h>
|
2009-03-17 07:19:56 -06:00
|
|
|
#include <X11/Xfuncproto.h>
|
2010-07-01 12:35:24 -06:00
|
|
|
#include <X11/extensions/XKB.h>
|
|
|
|
|
|
|
|
#ifndef X_PROTOCOL
|
|
|
|
typedef unsigned char KeyCode;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef _XTYPEDEF_BOOL
|
|
|
|
typedef int Bool;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* From filecommon */
|
|
|
|
|
|
|
|
#define XkbXKMFile 0
|
|
|
|
#define XkbCFile 1
|
|
|
|
#define XkbXKBFile 2
|
|
|
|
#define XkbMessage 3
|
|
|
|
|
|
|
|
#define XkbMapDefined (1 << 0)
|
|
|
|
#define XkbStateDefined (1 << 1)
|
|
|
|
|
|
|
|
/***====================================================================***/
|
|
|
|
|
|
|
|
#define _XkbSuccess 0
|
|
|
|
#define _XkbErrMissingNames 1
|
|
|
|
#define _XkbErrMissingTypes 2
|
|
|
|
#define _XkbErrMissingReqTypes 3
|
|
|
|
#define _XkbErrMissingSymbols 4
|
|
|
|
#define _XkbErrMissingVMods 5
|
|
|
|
#define _XkbErrMissingIndicators 6
|
|
|
|
#define _XkbErrMissingCompatMap 7
|
|
|
|
#define _XkbErrMissingSymInterps 8
|
|
|
|
#define _XkbErrMissingGeometry 9
|
|
|
|
#define _XkbErrIllegalDoodad 10
|
|
|
|
#define _XkbErrIllegalTOCType 11
|
|
|
|
#define _XkbErrIllegalContents 12
|
|
|
|
#define _XkbErrEmptyFile 13
|
|
|
|
#define _XkbErrFileNotFound 14
|
|
|
|
#define _XkbErrFileCannotOpen 15
|
|
|
|
#define _XkbErrBadValue 16
|
|
|
|
#define _XkbErrBadMatch 17
|
|
|
|
#define _XkbErrBadTypeName 18
|
|
|
|
#define _XkbErrBadTypeWidth 19
|
|
|
|
#define _XkbErrBadFileType 20
|
|
|
|
#define _XkbErrBadFileVersion 21
|
|
|
|
#define _XkbErrBadFileFormat 22
|
|
|
|
#define _XkbErrBadAlloc 23
|
|
|
|
#define _XkbErrBadLength 24
|
|
|
|
#define _XkbErrXReqFailure 25
|
|
|
|
#define _XkbErrBadImplementation 26
|
|
|
|
|
|
|
|
/* From rulescommon */
|
|
|
|
|
|
|
|
#define _XkbKSLower (1 << 0)
|
|
|
|
#define _XkbKSUpper (1 << 1)
|
|
|
|
|
|
|
|
#define XkbKSIsKeypad(k) (((k) >= XK_KP_Space) && ((k) <= XK_KP_Equal))
|
|
|
|
#define XkbKSIsDeadKey(k) \
|
|
|
|
(((k) >= XK_dead_grave) && ((k) <= XK_dead_semivoiced_sound))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct _XkbRMLVOSet {
|
|
|
|
char * rules;
|
|
|
|
char * model;
|
|
|
|
char * layout;
|
|
|
|
char * variant;
|
|
|
|
char * options;
|
|
|
|
} XkbRMLVOSet;
|
|
|
|
|
|
|
|
typedef struct _XkbRF_VarDefs {
|
|
|
|
char * model;
|
|
|
|
char * layout;
|
|
|
|
char * variant;
|
|
|
|
char * options;
|
|
|
|
unsigned short sz_extra;
|
|
|
|
unsigned short num_extra;
|
|
|
|
char * extra_names;
|
|
|
|
char ** extra_values;
|
|
|
|
} XkbRF_VarDefsRec,*XkbRF_VarDefsPtr;
|
|
|
|
|
|
|
|
typedef struct _XkbRF_VarDesc {
|
|
|
|
char * name;
|
|
|
|
char * desc;
|
|
|
|
} XkbRF_VarDescRec, *XkbRF_VarDescPtr;
|
|
|
|
|
|
|
|
typedef struct _XkbRF_DescribeVars {
|
|
|
|
int sz_desc;
|
|
|
|
int num_desc;
|
|
|
|
XkbRF_VarDescPtr desc;
|
|
|
|
} XkbRF_DescribeVarsRec,*XkbRF_DescribeVarsPtr;
|
|
|
|
|
|
|
|
typedef struct _XkbRF_Rule {
|
|
|
|
int number;
|
|
|
|
int layout_num;
|
|
|
|
int variant_num;
|
|
|
|
char * model;
|
|
|
|
char * layout;
|
|
|
|
char * variant;
|
|
|
|
char * option;
|
|
|
|
/* yields */
|
|
|
|
char * keycodes;
|
|
|
|
char * symbols;
|
|
|
|
char * types;
|
|
|
|
char * compat;
|
|
|
|
char * geometry;
|
|
|
|
char * keymap;
|
|
|
|
unsigned flags;
|
|
|
|
} XkbRF_RuleRec,*XkbRF_RulePtr;
|
|
|
|
|
|
|
|
typedef struct _XkbRF_Group {
|
|
|
|
int number;
|
|
|
|
char * name;
|
|
|
|
char * words;
|
|
|
|
} XkbRF_GroupRec, *XkbRF_GroupPtr;
|
|
|
|
|
|
|
|
#define XkbRF_PendingMatch (1L<<1)
|
|
|
|
#define XkbRF_Option (1L<<2)
|
|
|
|
#define XkbRF_Append (1L<<3)
|
|
|
|
#define XkbRF_Normal (1L<<4)
|
|
|
|
#define XkbRF_Invalid (1L<<5)
|
|
|
|
|
|
|
|
typedef struct _XkbRF_Rules {
|
|
|
|
XkbRF_DescribeVarsRec models;
|
|
|
|
XkbRF_DescribeVarsRec layouts;
|
|
|
|
XkbRF_DescribeVarsRec variants;
|
|
|
|
XkbRF_DescribeVarsRec options;
|
|
|
|
unsigned short sz_extra;
|
|
|
|
unsigned short num_extra;
|
|
|
|
char ** extra_names;
|
|
|
|
XkbRF_DescribeVarsPtr extra;
|
|
|
|
|
|
|
|
unsigned short sz_rules;
|
|
|
|
unsigned short num_rules;
|
|
|
|
XkbRF_RulePtr rules;
|
|
|
|
unsigned short sz_groups;
|
|
|
|
unsigned short num_groups;
|
|
|
|
XkbRF_GroupPtr groups;
|
|
|
|
} XkbRF_RulesRec, *XkbRF_RulesPtr;
|
|
|
|
|
|
|
|
#define _XKB_RF_NAMES_PROP_ATOM "_XKB_RULES_NAMES"
|
|
|
|
#define _XKB_RF_NAMES_PROP_MAXLEN 1024
|
|
|
|
|
|
|
|
|
2009-03-19 18:16:13 -06:00
|
|
|
|
2009-04-05 16:15:20 -06:00
|
|
|
/* Action structures used in the server */
|
2010-06-16 17:51:49 -06:00
|
|
|
|
|
|
|
#define XkbcAnyActionDataSize 18
|
2010-06-30 11:31:21 -06:00
|
|
|
struct xkb_any_action {
|
2010-06-16 17:51:49 -06:00
|
|
|
unsigned char type;
|
|
|
|
unsigned char pad[XkbcAnyActionDataSize];
|
2010-06-30 11:31:21 -06:00
|
|
|
};
|
2010-06-16 17:51:49 -06:00
|
|
|
|
2010-06-30 11:31:21 -06:00
|
|
|
struct xkb_mod_action {
|
2009-04-05 16:15:20 -06:00
|
|
|
unsigned char type;
|
2010-06-16 17:51:49 -06:00
|
|
|
uint8_t flags;
|
2010-06-23 09:25:02 -06:00
|
|
|
uint8_t real_mods;
|
2010-06-16 17:51:49 -06:00
|
|
|
uint32_t mask;
|
|
|
|
uint32_t vmods;
|
2010-06-30 11:31:21 -06:00
|
|
|
};
|
2009-04-05 16:15:20 -06:00
|
|
|
|
2010-06-30 11:31:21 -06:00
|
|
|
struct xkb_group_action {
|
2009-04-05 16:15:20 -06:00
|
|
|
unsigned char type;
|
|
|
|
unsigned char flags;
|
2010-07-01 12:35:24 -06:00
|
|
|
int16_t group;
|
2010-06-30 11:31:21 -06:00
|
|
|
};
|
2009-04-05 16:15:20 -06:00
|
|
|
|
2010-06-30 11:31:21 -06:00
|
|
|
struct xkb_iso_action {
|
2009-04-05 16:15:20 -06:00
|
|
|
unsigned char type;
|
2010-06-16 17:51:49 -06:00
|
|
|
uint8_t flags;
|
|
|
|
int16_t group;
|
|
|
|
uint32_t mask;
|
|
|
|
uint32_t vmods;
|
2010-06-23 09:25:02 -06:00
|
|
|
uint8_t real_mods;
|
2010-06-30 11:31:21 -06:00
|
|
|
|
|
|
|
uint8_t affect;
|
|
|
|
};
|
2009-04-05 16:15:20 -06:00
|
|
|
|
2010-06-30 11:31:21 -06:00
|
|
|
struct xkb_controls_action {
|
2009-04-05 16:15:20 -06:00
|
|
|
unsigned char type;
|
2010-06-23 09:25:02 -06:00
|
|
|
uint8_t flags;
|
2010-06-16 17:51:49 -06:00
|
|
|
uint32_t ctrls;
|
2010-06-30 11:31:21 -06:00
|
|
|
};
|
2009-04-05 16:15:20 -06:00
|
|
|
|
2010-06-30 11:31:21 -06:00
|
|
|
struct xkb_device_button_action {
|
2009-04-05 16:15:20 -06:00
|
|
|
unsigned char type;
|
2010-06-23 09:25:02 -06:00
|
|
|
uint8_t flags;
|
2010-06-16 17:51:49 -06:00
|
|
|
uint16_t device;
|
|
|
|
uint16_t button;
|
|
|
|
uint8_t count;
|
2010-06-30 11:31:21 -06:00
|
|
|
};
|
2010-06-16 17:51:49 -06:00
|
|
|
|
2010-06-30 11:31:21 -06:00
|
|
|
struct xkb_device_valuator_action {
|
2010-06-16 17:51:49 -06:00
|
|
|
unsigned char type;
|
|
|
|
uint8_t v1_what;
|
|
|
|
uint16_t device;
|
|
|
|
uint16_t v1_index;
|
|
|
|
int16_t v1_value;
|
|
|
|
uint16_t v2_index;
|
|
|
|
int16_t v2_value;
|
|
|
|
uint8_t v2_what;
|
2010-06-30 11:31:21 -06:00
|
|
|
};
|
2010-06-16 17:51:49 -06:00
|
|
|
|
2010-06-30 11:31:21 -06:00
|
|
|
struct xkb_pointer_default_action {
|
2010-06-16 17:51:49 -06:00
|
|
|
unsigned char type;
|
|
|
|
uint8_t flags;
|
|
|
|
uint8_t affect;
|
2010-07-01 12:35:24 -06:00
|
|
|
uint8_t value;
|
2010-06-30 11:31:21 -06:00
|
|
|
};
|
2010-06-16 17:51:49 -06:00
|
|
|
|
2010-06-30 11:31:21 -06:00
|
|
|
struct xkb_switch_screen_action {
|
2010-06-16 17:51:49 -06:00
|
|
|
unsigned char type;
|
|
|
|
uint8_t flags;
|
2010-07-01 12:35:24 -06:00
|
|
|
uint8_t screen;
|
2010-06-30 11:31:21 -06:00
|
|
|
};
|
|
|
|
|
2010-06-30 13:48:39 -06:00
|
|
|
struct xkb_redirect_key_action {
|
|
|
|
unsigned char type;
|
|
|
|
unsigned char new_key;
|
|
|
|
unsigned char mods_mask;
|
|
|
|
unsigned char mods;
|
|
|
|
unsigned char vmods_mask0;
|
|
|
|
unsigned char vmods_mask1;
|
|
|
|
unsigned char vmods0;
|
|
|
|
unsigned char vmods1;
|
|
|
|
};
|
2010-07-01 12:35:24 -06:00
|
|
|
#define XkbSARedirectVMods(a) ((((unsigned int)(a)->vmods1)<<8)|\
|
|
|
|
((unsigned int)(a)->vmods0))
|
|
|
|
#define XkbSARedirectSetVMods(a,m) (((a)->vmods_mask1=(((m)>>8)&0xff)),\
|
|
|
|
((a)->vmods_mask0=((m)&0xff)))
|
|
|
|
#define XkbSARedirectVModsMask(a) ((((unsigned int)(a)->vmods_mask1)<<8)|\
|
|
|
|
((unsigned int)(a)->vmods_mask0))
|
|
|
|
#define XkbSARedirectSetVModsMask(a,m) (((a)->vmods_mask1=(((m)>>8)&0xff)),\
|
|
|
|
((a)->vmods_mask0=((m)&0xff)))
|
|
|
|
|
2010-06-30 13:48:39 -06:00
|
|
|
|
|
|
|
struct xkb_pointer_action {
|
|
|
|
unsigned char type;
|
|
|
|
unsigned char flags;
|
|
|
|
unsigned char high_XXX;
|
|
|
|
unsigned char low_XXX;
|
|
|
|
unsigned char high_YYY;
|
|
|
|
unsigned char low_YYY;
|
|
|
|
};
|
2010-07-01 12:35:24 -06:00
|
|
|
#define XkbIntTo2Chars(i,h,l) (((h)=((i>>8)&0xff)),((l)=((i)&0xff)))
|
|
|
|
#define XkbPtrActionX(a) (Xkb2CharsToInt((a)->high_XXX,(a)->low_XXX))
|
|
|
|
#define XkbPtrActionY(a) (Xkb2CharsToInt((a)->high_YYY,(a)->low_YYY))
|
|
|
|
#define XkbSetPtrActionX(a,x) (XkbIntTo2Chars(x,(a)->high_XXX,(a)->low_XXX))
|
|
|
|
#define XkbSetPtrActionY(a,y) (XkbIntTo2Chars(y,(a)->high_YYY,(a)->low_YYY))
|
2010-06-30 13:48:39 -06:00
|
|
|
|
|
|
|
struct xkb_message_action {
|
|
|
|
unsigned char type;
|
|
|
|
unsigned char flags;
|
|
|
|
unsigned char message[6];
|
|
|
|
};
|
|
|
|
|
|
|
|
struct xkb_pointer_button_action {
|
|
|
|
unsigned char type;
|
|
|
|
unsigned char flags;
|
|
|
|
unsigned char count;
|
|
|
|
unsigned char button;
|
|
|
|
};
|
|
|
|
|
2010-06-30 11:31:21 -06:00
|
|
|
union xkb_action {
|
2010-06-30 13:48:39 -06:00
|
|
|
struct xkb_any_action any;
|
|
|
|
struct xkb_mod_action mods;
|
|
|
|
struct xkb_group_action group;
|
|
|
|
struct xkb_iso_action iso;
|
|
|
|
struct xkb_controls_action ctrls;
|
|
|
|
struct xkb_device_button_action devbtn;
|
2010-06-30 11:31:21 -06:00
|
|
|
struct xkb_device_valuator_action devval;
|
2010-06-30 13:48:39 -06:00
|
|
|
struct xkb_pointer_default_action dflt;
|
2010-06-30 11:31:21 -06:00
|
|
|
struct xkb_switch_screen_action screen;
|
2010-06-30 13:48:39 -06:00
|
|
|
struct xkb_redirect_key_action redirect; /* XXX wholly unnecessary? */
|
|
|
|
struct xkb_pointer_action ptr; /* XXX delete for DeviceValuator */
|
|
|
|
struct xkb_pointer_button_action btn; /* XXX delete for DeviceBtn */
|
|
|
|
struct xkb_message_action msg; /* XXX just delete */
|
|
|
|
unsigned char type;
|
2010-06-30 11:31:21 -06:00
|
|
|
};
|
2009-04-05 16:15:20 -06:00
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_mods {
|
2010-06-23 09:25:10 -06:00
|
|
|
uint32_t mask; /* effective mods */
|
|
|
|
uint32_t vmods;
|
|
|
|
uint8_t real_mods;
|
2010-07-01 12:35:24 -06:00
|
|
|
};
|
2010-06-23 09:25:10 -06:00
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_kt_map_entry {
|
2010-06-23 09:25:10 -06:00
|
|
|
Bool active;
|
|
|
|
uint16_t level;
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_mods mods;
|
|
|
|
};
|
2010-06-23 09:25:10 -06:00
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_key_type {
|
|
|
|
struct xkb_mods mods;
|
2010-06-23 09:25:10 -06:00
|
|
|
uint16_t num_levels;
|
2010-06-21 07:28:34 -06:00
|
|
|
unsigned char map_count;
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_kt_map_entry * map;
|
|
|
|
struct xkb_mods * preserve;
|
2010-06-28 04:50:12 -06:00
|
|
|
uint32_t name;
|
|
|
|
uint32_t *level_names;
|
2010-07-01 12:35:24 -06:00
|
|
|
};
|
2010-06-21 07:28:34 -06:00
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_sym_interpret {
|
2010-06-28 04:50:12 -06:00
|
|
|
uint32_t sym;
|
2010-06-16 20:16:09 -06:00
|
|
|
unsigned char flags;
|
|
|
|
unsigned char match;
|
2010-06-23 09:25:02 -06:00
|
|
|
uint8_t mods; /* XXX real or virt? */
|
|
|
|
uint32_t virtual_mod;
|
2010-06-30 11:31:21 -06:00
|
|
|
struct xkb_any_action act;
|
2010-07-01 12:35:24 -06:00
|
|
|
};
|
2010-06-16 20:16:09 -06:00
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_compat_map {
|
|
|
|
struct xkb_sym_interpret * sym_interpret;
|
|
|
|
struct xkb_mods groups[XkbNumKbdGroups];
|
2010-06-16 20:16:09 -06:00
|
|
|
unsigned short num_si;
|
|
|
|
unsigned short size_si;
|
2010-07-01 12:35:24 -06:00
|
|
|
};
|
2010-06-16 20:16:09 -06:00
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_sym_map {
|
|
|
|
unsigned char kt_index[XkbNumKbdGroups];
|
|
|
|
unsigned char group_info;
|
|
|
|
unsigned char width;
|
|
|
|
unsigned short offset;
|
|
|
|
};
|
|
|
|
|
|
|
|
#define XkbNumGroups(g) ((g)&0x0f)
|
|
|
|
#define XkbOutOfRangeGroupInfo(g) ((g)&0xf0)
|
|
|
|
#define XkbOutOfRangeGroupAction(g) ((g)&0xc0)
|
|
|
|
#define XkbOutOfRangeGroupNumber(g) (((g)&0x30)>>4)
|
|
|
|
#define XkbSetGroupInfo(g,w,n) (((w)&0xc0)|(((n)&3)<<4)|((g)&0x0f))
|
|
|
|
#define XkbSetNumGroups(g,n) (((g)&0xf0)|((n)&0x0f))
|
|
|
|
|
|
|
|
struct xkb_client_map {
|
2010-06-16 20:16:09 -06:00
|
|
|
unsigned char size_types;
|
|
|
|
unsigned char num_types;
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_key_type * types;
|
2010-06-16 20:16:09 -06:00
|
|
|
|
|
|
|
unsigned short size_syms;
|
|
|
|
unsigned short num_syms;
|
|
|
|
uint32_t *syms;
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_sym_map * key_sym_map;
|
2010-06-16 20:16:09 -06:00
|
|
|
|
|
|
|
unsigned char *modmap;
|
2010-07-01 12:35:24 -06:00
|
|
|
};
|
|
|
|
|
|
|
|
#define XkbCMKeyGroupInfo(m,k) ((m)->key_sym_map[k].group_info)
|
|
|
|
#define XkbCMKeyNumGroups(m,k) (XkbNumGroups((m)->key_sym_map[k].group_info))
|
|
|
|
#define XkbCMKeyGroupWidth(m,k,g) (XkbCMKeyType(m,k,g)->num_levels)
|
|
|
|
#define XkbCMKeyGroupsWidth(m,k) ((m)->key_sym_map[k].width)
|
|
|
|
#define XkbCMKeyTypeIndex(m,k,g) ((m)->key_sym_map[k].kt_index[g&0x3])
|
|
|
|
#define XkbCMKeyType(m,k,g) (&(m)->types[XkbCMKeyTypeIndex(m,k,g)])
|
|
|
|
#define XkbCMKeyNumSyms(m,k) (XkbCMKeyGroupsWidth(m,k)*XkbCMKeyNumGroups(m,k))
|
|
|
|
#define XkbCMKeySymsOffset(m,k) ((m)->key_sym_map[k].offset)
|
|
|
|
#define XkbCMKeySymsPtr(m,k) (&(m)->syms[XkbCMKeySymsOffset(m,k)])
|
|
|
|
|
|
|
|
struct xkb_behavior {
|
|
|
|
unsigned char type;
|
|
|
|
unsigned char data;
|
|
|
|
};
|
2010-06-16 20:16:09 -06:00
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_server_map {
|
2009-04-05 16:15:20 -06:00
|
|
|
unsigned short num_acts;
|
|
|
|
unsigned short size_acts;
|
|
|
|
|
|
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
|
|
/* explicit is a C++ reserved word */
|
|
|
|
unsigned char * c_explicit;
|
|
|
|
#else
|
|
|
|
unsigned char * explicit;
|
|
|
|
#endif
|
2010-06-16 17:51:49 -06:00
|
|
|
|
2010-06-30 11:31:21 -06:00
|
|
|
union xkb_action *acts;
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_behavior *behaviors;
|
2010-06-16 17:51:49 -06:00
|
|
|
unsigned short *key_acts;
|
|
|
|
unsigned char *explicits;
|
|
|
|
uint32_t vmods[XkbNumVirtualMods];
|
|
|
|
uint32_t *vmodmap;
|
2010-07-01 12:35:24 -06:00
|
|
|
};
|
|
|
|
|
|
|
|
#define XkbSMKeyActionsPtr(m,k) (&(m)->acts[(m)->key_acts[k]])
|
|
|
|
|
|
|
|
struct xkb_indicator_map {
|
|
|
|
unsigned char flags;
|
|
|
|
unsigned char which_groups;
|
|
|
|
unsigned char groups;
|
|
|
|
unsigned char which_mods;
|
|
|
|
struct xkb_mods mods;
|
|
|
|
unsigned int ctrls;
|
|
|
|
};
|
2009-04-05 16:15:20 -06:00
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_indicator {
|
|
|
|
unsigned long phys_indicators;
|
|
|
|
struct xkb_indicator_map maps[XkbNumIndicators];
|
|
|
|
};
|
|
|
|
|
|
|
|
struct xkb_key_name {
|
|
|
|
char name[XkbKeyNameLength];
|
|
|
|
};
|
|
|
|
|
|
|
|
struct xkb_key_alias {
|
|
|
|
char real[XkbKeyNameLength];
|
|
|
|
char alias[XkbKeyNameLength];
|
|
|
|
};
|
|
|
|
|
|
|
|
struct xkb_names {
|
2010-06-28 04:50:12 -06:00
|
|
|
uint32_t keycodes;
|
|
|
|
uint32_t geometry;
|
|
|
|
uint32_t symbols;
|
|
|
|
uint32_t types;
|
|
|
|
uint32_t compat;
|
|
|
|
uint32_t vmods[XkbNumVirtualMods];
|
|
|
|
uint32_t indicators[XkbNumIndicators];
|
|
|
|
uint32_t groups[XkbNumKbdGroups];
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_key_name * keys;
|
|
|
|
struct xkb_key_alias * key_aliases;
|
2010-06-28 04:50:12 -06:00
|
|
|
uint32_t *radio_groups;
|
|
|
|
uint32_t phys_symbols;
|
2010-06-21 07:28:34 -06:00
|
|
|
|
|
|
|
unsigned char num_keys;
|
|
|
|
unsigned char num_key_aliases;
|
|
|
|
unsigned short num_rg;
|
2010-07-01 12:35:24 -06:00
|
|
|
};
|
2010-06-21 07:28:34 -06:00
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_property {
|
2010-06-21 07:28:34 -06:00
|
|
|
char *name;
|
|
|
|
char *value;
|
2010-07-01 12:35:24 -06:00
|
|
|
};
|
2010-06-21 07:28:34 -06:00
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_color {
|
2010-06-21 07:28:34 -06:00
|
|
|
unsigned int pixel;
|
|
|
|
char * spec;
|
2010-07-01 12:35:24 -06:00
|
|
|
};
|
2010-06-21 07:28:34 -06:00
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_point {
|
2010-06-21 07:28:34 -06:00
|
|
|
short x;
|
|
|
|
short y;
|
2010-07-01 12:35:24 -06:00
|
|
|
};
|
2010-06-21 07:28:34 -06:00
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_bounds {
|
2010-06-21 07:28:34 -06:00
|
|
|
short x1,y1;
|
|
|
|
short x2,y2;
|
2010-07-01 12:35:24 -06:00
|
|
|
};
|
2010-06-21 07:28:34 -06:00
|
|
|
#define XkbBoundsWidth(b) (((b)->x2)-((b)->x1))
|
|
|
|
#define XkbBoundsHeight(b) (((b)->y2)-((b)->y1))
|
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_outline {
|
2010-06-21 07:28:34 -06:00
|
|
|
unsigned short num_points;
|
|
|
|
unsigned short sz_points;
|
|
|
|
unsigned short corner_radius;
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_point * points;
|
|
|
|
};
|
2010-06-21 07:28:34 -06:00
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_shape {
|
2010-06-28 04:50:12 -06:00
|
|
|
uint32_t name;
|
2010-06-21 07:28:34 -06:00
|
|
|
unsigned short num_outlines;
|
|
|
|
unsigned short sz_outlines;
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_outline * outlines;
|
|
|
|
struct xkb_outline * approx;
|
|
|
|
struct xkb_outline * primary;
|
|
|
|
struct xkb_bounds bounds;
|
|
|
|
};
|
2010-06-21 07:28:34 -06:00
|
|
|
#define XkbOutlineIndex(s,o) ((int)((o)-&(s)->outlines[0]))
|
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_shape_doodad {
|
2010-06-28 04:50:12 -06:00
|
|
|
uint32_t name;
|
2010-06-21 07:28:34 -06:00
|
|
|
unsigned char type;
|
|
|
|
unsigned char priority;
|
|
|
|
short top;
|
|
|
|
short left;
|
|
|
|
short angle;
|
|
|
|
unsigned short color_ndx;
|
|
|
|
unsigned short shape_ndx;
|
2010-07-01 12:35:24 -06:00
|
|
|
};
|
2010-06-21 07:28:34 -06:00
|
|
|
#define XkbShapeDoodadColor(g,d) (&(g)->colors[(d)->color_ndx])
|
|
|
|
#define XkbShapeDoodadShape(g,d) (&(g)->shapes[(d)->shape_ndx])
|
|
|
|
#define XkbSetShapeDoodadColor(g,d,c) ((d)->color_ndx= (c)-&(g)->colors[0])
|
|
|
|
#define XkbSetShapeDoodadShape(g,d,s) ((d)->shape_ndx= (s)-&(g)->shapes[0])
|
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_text_doodad {
|
2010-06-28 04:50:12 -06:00
|
|
|
uint32_t name;
|
2010-06-21 07:28:34 -06:00
|
|
|
unsigned char type;
|
|
|
|
unsigned char priority;
|
|
|
|
short top;
|
|
|
|
short left;
|
|
|
|
short angle;
|
|
|
|
short width;
|
|
|
|
short height;
|
|
|
|
unsigned short color_ndx;
|
|
|
|
char * text;
|
|
|
|
char * font;
|
2010-07-01 12:35:24 -06:00
|
|
|
};
|
2010-06-21 07:28:34 -06:00
|
|
|
#define XkbTextDoodadColor(g,d) (&(g)->colors[(d)->color_ndx])
|
|
|
|
#define XkbSetTextDoodadColor(g,d,c) ((d)->color_ndx= (c)-&(g)->colors[0])
|
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_indicator_doodad {
|
2010-06-28 04:50:12 -06:00
|
|
|
uint32_t name;
|
2010-06-21 07:28:34 -06:00
|
|
|
unsigned char type;
|
|
|
|
unsigned char priority;
|
|
|
|
short top;
|
|
|
|
short left;
|
|
|
|
short angle;
|
|
|
|
unsigned short shape_ndx;
|
|
|
|
unsigned short on_color_ndx;
|
|
|
|
unsigned short off_color_ndx;
|
2010-07-01 12:35:24 -06:00
|
|
|
};
|
2010-06-21 07:28:34 -06:00
|
|
|
#define XkbIndicatorDoodadShape(g,d) (&(g)->shapes[(d)->shape_ndx])
|
|
|
|
#define XkbIndicatorDoodadOnColor(g,d) (&(g)->colors[(d)->on_color_ndx])
|
|
|
|
#define XkbIndicatorDoodadOffColor(g,d) (&(g)->colors[(d)->off_color_ndx])
|
|
|
|
#define XkbSetIndicatorDoodadOnColor(g,d,c) \
|
|
|
|
((d)->on_color_ndx= (c)-&(g)->colors[0])
|
|
|
|
#define XkbSetIndicatorDoodadOffColor(g,d,c) \
|
|
|
|
((d)->off_color_ndx= (c)-&(g)->colors[0])
|
|
|
|
#define XkbSetIndicatorDoodadShape(g,d,s) \
|
|
|
|
((d)->shape_ndx= (s)-&(g)->shapes[0])
|
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_logo_doodad {
|
2010-06-28 04:50:12 -06:00
|
|
|
uint32_t name;
|
2010-06-21 07:28:34 -06:00
|
|
|
unsigned char type;
|
|
|
|
unsigned char priority;
|
|
|
|
short top;
|
|
|
|
short left;
|
|
|
|
short angle;
|
|
|
|
unsigned short color_ndx;
|
|
|
|
unsigned short shape_ndx;
|
|
|
|
char * logo_name;
|
2010-07-01 12:35:24 -06:00
|
|
|
};
|
2010-06-21 07:28:34 -06:00
|
|
|
#define XkbLogoDoodadColor(g,d) (&(g)->colors[(d)->color_ndx])
|
|
|
|
#define XkbLogoDoodadShape(g,d) (&(g)->shapes[(d)->shape_ndx])
|
|
|
|
#define XkbSetLogoDoodadColor(g,d,c) ((d)->color_ndx= (c)-&(g)->colors[0])
|
|
|
|
#define XkbSetLogoDoodadShape(g,d,s) ((d)->shape_ndx= (s)-&(g)->shapes[0])
|
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_any_doodad {
|
2010-06-28 04:50:12 -06:00
|
|
|
uint32_t name;
|
2010-06-21 07:28:34 -06:00
|
|
|
unsigned char type;
|
|
|
|
unsigned char priority;
|
|
|
|
short top;
|
|
|
|
short left;
|
|
|
|
short angle;
|
2010-07-01 12:35:24 -06:00
|
|
|
};
|
2010-06-21 07:28:34 -06:00
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
union xkb_doodad {
|
|
|
|
struct xkb_any_doodad any;
|
|
|
|
struct xkb_shape_doodad shape;
|
|
|
|
struct xkb_text_doodad text;
|
|
|
|
struct xkb_indicator_doodad indicator;
|
|
|
|
struct xkb_logo_doodad logo;
|
|
|
|
};
|
2010-06-21 07:28:34 -06:00
|
|
|
|
|
|
|
#define XkbUnknownDoodad 0
|
|
|
|
#define XkbOutlineDoodad 1
|
|
|
|
#define XkbSolidDoodad 2
|
|
|
|
#define XkbTextDoodad 3
|
|
|
|
#define XkbIndicatorDoodad 4
|
|
|
|
#define XkbLogoDoodad 5
|
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_key {
|
|
|
|
struct xkb_key_name name;
|
2010-06-21 07:28:34 -06:00
|
|
|
short gap;
|
|
|
|
unsigned char shape_ndx;
|
|
|
|
unsigned char color_ndx;
|
2010-07-01 12:35:24 -06:00
|
|
|
};
|
2010-06-21 07:28:34 -06:00
|
|
|
#define XkbKeyShape(g,k) (&(g)->shapes[(k)->shape_ndx])
|
|
|
|
#define XkbKeyColor(g,k) (&(g)->colors[(k)->color_ndx])
|
|
|
|
#define XkbSetKeyShape(g,k,s) ((k)->shape_ndx= (s)-&(g)->shapes[0])
|
|
|
|
#define XkbSetKeyColor(g,k,c) ((k)->color_ndx= (c)-&(g)->colors[0])
|
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_row {
|
2010-06-21 07:28:34 -06:00
|
|
|
short top;
|
|
|
|
short left;
|
|
|
|
unsigned short num_keys;
|
|
|
|
unsigned short sz_keys;
|
|
|
|
int vertical;
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_key * keys;
|
|
|
|
struct xkb_bounds bounds;
|
|
|
|
};
|
2010-06-21 07:28:34 -06:00
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_section {
|
2010-06-28 04:50:12 -06:00
|
|
|
uint32_t name;
|
2010-06-21 07:28:34 -06:00
|
|
|
unsigned char priority;
|
|
|
|
short top;
|
|
|
|
short left;
|
|
|
|
unsigned short width;
|
|
|
|
unsigned short height;
|
|
|
|
short angle;
|
|
|
|
unsigned short num_rows;
|
|
|
|
unsigned short num_doodads;
|
|
|
|
unsigned short num_overlays;
|
|
|
|
unsigned short sz_rows;
|
|
|
|
unsigned short sz_doodads;
|
|
|
|
unsigned short sz_overlays;
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_row * rows;
|
|
|
|
union xkb_doodad * doodads;
|
|
|
|
struct xkb_bounds bounds;
|
|
|
|
struct xkb_overlay *overlays;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct xkb_overlay_key {
|
|
|
|
struct xkb_key_name over;
|
|
|
|
struct xkb_key_name under;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct xkb_overlay_row {
|
2010-06-21 07:28:34 -06:00
|
|
|
unsigned short row_under;
|
|
|
|
unsigned short num_keys;
|
|
|
|
unsigned short sz_keys;
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_overlay_key * keys;
|
|
|
|
};
|
2010-06-21 07:28:34 -06:00
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_overlay {
|
2010-06-28 04:50:12 -06:00
|
|
|
uint32_t name;
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_section * section_under;
|
2010-06-21 07:28:34 -06:00
|
|
|
unsigned short num_rows;
|
|
|
|
unsigned short sz_rows;
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_overlay_row * rows;
|
|
|
|
struct xkb_bounds * bounds;
|
|
|
|
};
|
2010-06-21 07:28:34 -06:00
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_geometry {
|
2010-06-28 04:50:12 -06:00
|
|
|
uint32_t name;
|
2010-06-21 07:28:34 -06:00
|
|
|
unsigned short width_mm;
|
|
|
|
unsigned short height_mm;
|
|
|
|
char * label_font;
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_color * label_color;
|
|
|
|
struct xkb_color * base_color;
|
2010-06-21 07:28:34 -06:00
|
|
|
unsigned short sz_properties;
|
|
|
|
unsigned short sz_colors;
|
|
|
|
unsigned short sz_shapes;
|
|
|
|
unsigned short sz_sections;
|
|
|
|
unsigned short sz_doodads;
|
|
|
|
unsigned short sz_key_aliases;
|
|
|
|
unsigned short num_properties;
|
|
|
|
unsigned short num_colors;
|
|
|
|
unsigned short num_shapes;
|
|
|
|
unsigned short num_sections;
|
|
|
|
unsigned short num_doodads;
|
|
|
|
unsigned short num_key_aliases;
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_property * properties;
|
|
|
|
struct xkb_color * colors;
|
|
|
|
struct xkb_shape * shapes;
|
|
|
|
struct xkb_section * sections;
|
|
|
|
union xkb_doodad * doodads;
|
|
|
|
struct xkb_key_alias * key_aliases;
|
|
|
|
};
|
2010-06-21 07:28:34 -06:00
|
|
|
#define XkbGeomColorIndex(g,c) ((int)((c)-&(g)->colors[0]))
|
|
|
|
|
|
|
|
#define XkbGeomPropertiesMask (1<<0)
|
|
|
|
#define XkbGeomColorsMask (1<<1)
|
|
|
|
#define XkbGeomShapesMask (1<<2)
|
|
|
|
#define XkbGeomSectionsMask (1<<3)
|
|
|
|
#define XkbGeomDoodadsMask (1<<4)
|
|
|
|
#define XkbGeomKeyAliasesMask (1<<5)
|
|
|
|
#define XkbGeomAllMask (0x3f)
|
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_geometry_sizes {
|
2010-06-21 07:28:34 -06:00
|
|
|
unsigned int which;
|
|
|
|
unsigned short num_properties;
|
|
|
|
unsigned short num_colors;
|
|
|
|
unsigned short num_shapes;
|
|
|
|
unsigned short num_sections;
|
|
|
|
unsigned short num_doodads;
|
|
|
|
unsigned short num_key_aliases;
|
2010-07-01 12:35:24 -06:00
|
|
|
};
|
|
|
|
|
|
|
|
struct xkb_controls {
|
|
|
|
unsigned char mk_dflt_btn;
|
|
|
|
unsigned char num_groups;
|
|
|
|
unsigned char groups_wrap;
|
|
|
|
struct xkb_mods internal;
|
|
|
|
struct xkb_mods ignore_lock;
|
|
|
|
unsigned int enabled_ctrls;
|
|
|
|
unsigned short repeat_delay;
|
|
|
|
unsigned short repeat_interval;
|
|
|
|
unsigned short slow_keys_delay;
|
|
|
|
unsigned short debounce_delay;
|
|
|
|
unsigned short mk_delay;
|
|
|
|
unsigned short mk_interval;
|
|
|
|
unsigned short mk_time_to_max;
|
|
|
|
unsigned short mk_max_speed;
|
|
|
|
short mk_curve;
|
|
|
|
unsigned short ax_options;
|
|
|
|
unsigned short ax_timeout;
|
|
|
|
unsigned short axt_opts_mask;
|
|
|
|
unsigned short axt_opts_values;
|
|
|
|
unsigned int axt_ctrls_mask;
|
|
|
|
unsigned int axt_ctrls_values;
|
|
|
|
unsigned char per_key_repeat[XkbPerKeyBitArraySize];
|
|
|
|
};
|
2010-06-21 07:28:34 -06:00
|
|
|
|
2009-03-19 18:16:13 -06:00
|
|
|
/* Common keyboard description structure */
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_desc {
|
2009-03-19 18:16:13 -06:00
|
|
|
unsigned int defined;
|
|
|
|
unsigned short flags;
|
|
|
|
unsigned short device_spec;
|
|
|
|
KeyCode min_key_code;
|
|
|
|
KeyCode max_key_code;
|
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
struct xkb_controls * ctrls;
|
|
|
|
struct xkb_server_map * server;
|
|
|
|
struct xkb_client_map * map;
|
|
|
|
struct xkb_indicator * indicators;
|
|
|
|
struct xkb_names * names;
|
|
|
|
struct xkb_compat_map * compat;
|
|
|
|
struct xkb_geometry * geom;
|
|
|
|
};
|
|
|
|
|
|
|
|
#define XkbKeyKeyTypeIndex(d,k,g) (XkbCMKeyTypeIndex((d)->map,k,g))
|
|
|
|
#define XkbKeyKeyType(d,k,g) (XkbCMKeyType((d)->map,k,g))
|
|
|
|
#define XkbKeyGroupWidth(d,k,g) (XkbCMKeyGroupWidth((d)->map,k,g))
|
|
|
|
#define XkbKeyGroupsWidth(d,k) (XkbCMKeyGroupsWidth((d)->map,k))
|
|
|
|
#define XkbKeyGroupInfo(d,k) (XkbCMKeyGroupInfo((d)->map,(k)))
|
|
|
|
#define XkbKeyNumGroups(d,k) (XkbCMKeyNumGroups((d)->map,(k)))
|
|
|
|
#define XkbKeyNumSyms(d,k) (XkbCMKeyNumSyms((d)->map,(k)))
|
|
|
|
#define XkbKeySymsPtr(d,k) (XkbCMKeySymsPtr((d)->map,(k)))
|
|
|
|
#define XkbKeySym(d,k,n) (XkbKeySymsPtr(d,k)[n])
|
|
|
|
#define XkbKeySymEntry(d,k,sl,g) \
|
|
|
|
(XkbKeySym(d,k,((XkbKeyGroupsWidth(d,k)*(g))+(sl))))
|
|
|
|
#define XkbKeyAction(d,k,n) \
|
|
|
|
(XkbKeyHasActions(d,k)?&XkbKeyActionsPtr(d,k)[n]:NULL)
|
|
|
|
#define XkbKeyActionEntry(d,k,sl,g) \
|
|
|
|
(XkbKeyHasActions(d,k)?\
|
|
|
|
XkbKeyAction(d,k,((XkbKeyGroupsWidth(d,k)*(g))+(sl))):NULL)
|
|
|
|
|
|
|
|
#define XkbKeyHasActions(d,k) ((d)->server->key_acts[k]!=0)
|
|
|
|
#define XkbKeyNumActions(d,k) (XkbKeyHasActions(d,k)?XkbKeyNumSyms(d,k):1)
|
|
|
|
#define XkbKeyActionsPtr(d,k) (XkbSMKeyActionsPtr((d)->server,k))
|
|
|
|
#define XkbKeycodeInRange(d,k) (((k)>=(d)->min_key_code)&&\
|
|
|
|
((k)<=(d)->max_key_code))
|
|
|
|
#define XkbNumKeys(d) ((d)->max_key_code-(d)->min_key_code+1)
|
|
|
|
|
|
|
|
struct xkb_map_changes {
|
|
|
|
unsigned short changed;
|
|
|
|
KeyCode min_key_code;
|
|
|
|
KeyCode max_key_code;
|
|
|
|
unsigned char first_type;
|
|
|
|
unsigned char num_types;
|
|
|
|
KeyCode first_key_sym;
|
|
|
|
unsigned char num_key_syms;
|
|
|
|
KeyCode first_key_act;
|
|
|
|
unsigned char num_key_acts;
|
|
|
|
KeyCode first_key_behavior;
|
|
|
|
unsigned char num_key_behaviors;
|
|
|
|
KeyCode first_key_explicit;
|
|
|
|
unsigned char num_key_explicit;
|
|
|
|
KeyCode first_modmap_key;
|
|
|
|
unsigned char num_modmap_keys;
|
|
|
|
KeyCode first_vmodmap_key;
|
|
|
|
unsigned char num_vmodmap_keys;
|
|
|
|
unsigned char pad;
|
|
|
|
unsigned short vmods;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct xkb_controls_changes {
|
|
|
|
unsigned int changed_ctrls;
|
|
|
|
unsigned int enabled_ctrls_changes;
|
|
|
|
Bool num_groups_changed;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct xkb_indicator_changes {
|
|
|
|
unsigned int state_changes;
|
|
|
|
unsigned int map_changes;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct xkb_name_changes {
|
|
|
|
unsigned int changed;
|
|
|
|
unsigned char first_type;
|
|
|
|
unsigned char num_types;
|
|
|
|
unsigned char first_lvl;
|
|
|
|
unsigned char num_lvls;
|
|
|
|
unsigned char num_aliases;
|
|
|
|
unsigned char num_rg;
|
|
|
|
unsigned char first_key;
|
|
|
|
unsigned char num_keys;
|
|
|
|
unsigned short changed_vmods;
|
|
|
|
unsigned long changed_indicators;
|
|
|
|
unsigned char changed_groups;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct xkb_compat_changes {
|
|
|
|
unsigned char changed_groups;
|
|
|
|
unsigned short first_si;
|
|
|
|
unsigned short num_si;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct xkb_changes {
|
|
|
|
unsigned short device_spec;
|
|
|
|
unsigned short state_changes;
|
|
|
|
struct xkb_map_changes map;
|
|
|
|
struct xkb_controls_changes ctrls;
|
|
|
|
struct xkb_indicator_changes indicators;
|
|
|
|
struct xkb_name_changes names;
|
|
|
|
struct xkb_compat_changes compat;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct xkb_component_names {
|
|
|
|
char * keymap;
|
|
|
|
char * keycodes;
|
|
|
|
char * types;
|
|
|
|
char * compat;
|
|
|
|
char * symbols;
|
|
|
|
char * geometry;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct xkb_component_name {
|
|
|
|
unsigned short flags;
|
|
|
|
char * name;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct xkb_component_list {
|
|
|
|
int num_keymaps;
|
|
|
|
int num_keycodes;
|
|
|
|
int num_types;
|
|
|
|
int num_compat;
|
|
|
|
int num_symbols;
|
|
|
|
int num_geometry;
|
|
|
|
struct xkb_component_name * keymaps;
|
|
|
|
struct xkb_component_name * keycodes;
|
|
|
|
struct xkb_component_name * types;
|
|
|
|
struct xkb_component_name * compat;
|
|
|
|
struct xkb_component_name * symbols;
|
|
|
|
struct xkb_component_name * geometry;
|
|
|
|
};
|
2009-01-20 08:46:12 -07:00
|
|
|
|
2009-03-17 07:19:56 -06:00
|
|
|
_XFUNCPROTOBEGIN
|
|
|
|
|
2010-06-21 07:22:26 -06:00
|
|
|
typedef uint32_t (*InternAtomFuncPtr)(const char *val);
|
|
|
|
typedef const char *(*GetAtomValueFuncPtr)(uint32_t atom);
|
|
|
|
|
2009-04-09 15:29:32 -06:00
|
|
|
extern void
|
2010-06-21 07:22:26 -06:00
|
|
|
XkbcInitAtoms(InternAtomFuncPtr intern, GetAtomValueFuncPtr get_atom_value);
|
2009-04-09 15:29:32 -06:00
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
extern struct xkb_desc *
|
2009-04-08 18:59:15 -06:00
|
|
|
XkbcCompileKeymapFromRules(const XkbRMLVOSet *rmlvo);
|
2009-03-31 06:36:52 -06:00
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
extern struct xkb_desc *
|
|
|
|
XkbcCompileKeymapFromComponents(const struct xkb_component_names * ktcsg);
|
2009-03-29 09:55:18 -06:00
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
extern struct xkb_desc *
|
2009-04-10 13:25:51 -06:00
|
|
|
XkbcCompileKeymapFromFile(FILE *inputFile, const char *mapName);
|
|
|
|
|
2010-07-01 12:35:24 -06:00
|
|
|
extern struct xkb_component_list *
|
|
|
|
XkbcListComponents(struct xkb_component_names * ptrns, int *maxMatch);
|
2009-04-19 17:30:36 -06:00
|
|
|
|
2009-04-25 02:13:52 -06:00
|
|
|
/*
|
|
|
|
* Canonicalises component names by prepending the relevant component from
|
|
|
|
* 'old' to the one in 'names' when the latter has a leading '+' or '|', and
|
|
|
|
* by replacing a '%' with the relevant component, e.g.:
|
|
|
|
*
|
|
|
|
* names old output
|
|
|
|
* ------------------------------------------
|
|
|
|
* +bar foo foo+bar
|
|
|
|
* |quux baz baz|quux
|
|
|
|
* foo+%|baz bar foo+bar|baz
|
|
|
|
*
|
|
|
|
* If a component in names needs to be modified, the existing value will be
|
|
|
|
* free()d, and a new one allocated with malloc().
|
|
|
|
*/
|
|
|
|
extern void
|
2010-07-01 12:35:24 -06:00
|
|
|
XkbcCanonicaliseComponents(struct xkb_component_names * names,
|
|
|
|
const struct xkb_component_names * old);
|
2009-04-25 02:13:52 -06:00
|
|
|
|
2009-04-24 22:55:59 -06:00
|
|
|
/*
|
|
|
|
* Converts a keysym to a string; will return unknown Unicode codepoints
|
|
|
|
* as "Ua1b2", and other unknown keysyms as "0xabcd1234".
|
|
|
|
*
|
|
|
|
* The string returned may become invalidated after the next call to
|
|
|
|
* XkbcKeysymToString: if you need to preserve it, then you must
|
|
|
|
* duplicate it.
|
2010-06-16 20:16:09 -06:00
|
|
|
*
|
2010-06-28 04:50:12 -06:00
|
|
|
* This is uint32_t rather than KeySym, as KeySym changes size between
|
2010-06-16 20:16:09 -06:00
|
|
|
* client and server (no, really).
|
2009-04-24 22:55:59 -06:00
|
|
|
*/
|
2009-04-24 22:52:51 -06:00
|
|
|
extern char *
|
2010-06-28 04:50:12 -06:00
|
|
|
XkbcKeysymToString(uint32_t ks);
|
2009-04-24 22:52:51 -06:00
|
|
|
|
2009-04-24 22:55:59 -06:00
|
|
|
/*
|
|
|
|
* See XkbcKeysymToString comments: this function will accept any string
|
|
|
|
* from that function.
|
|
|
|
*/
|
2010-06-28 04:50:12 -06:00
|
|
|
extern uint32_t
|
2009-04-24 22:52:51 -06:00
|
|
|
XkbcStringToKeysym(const char *s);
|
|
|
|
|
2009-03-17 07:19:56 -06:00
|
|
|
_XFUNCPROTOEND
|
|
|
|
|
2009-01-20 08:46:12 -07:00
|
|
|
#endif /* _XKBCOMMON_H_ */
|