From 389c2db1d778f4a7bbe94abfad1e6de4dbd45858 Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Tue, 27 Mar 2012 13:44:48 +0100 Subject: [PATCH] Remove internal API from xkbcommon.h And move it to XKBcomminint.h. Signed-off-by: Daniel Stone --- include/xkbcommon/xkbcommon.h | 393 ++++++------------------------------------ src/XKBcommonint.h | 383 ++++++++++++++++++++++++++++++++++++++++ src/xkballoc.h | 1 + src/xkbmisc.h | 1 + 4 files changed, 436 insertions(+), 342 deletions(-) diff --git a/include/xkbcommon/xkbcommon.h b/include/xkbcommon/xkbcommon.h index b865535..48a0e48 100644 --- a/include/xkbcommon/xkbcommon.h +++ b/include/xkbcommon/xkbcommon.h @@ -51,6 +51,31 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE. ********************************************************/ +/* + * Copyright © 2009 Daniel Stone + * + * 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 (including the next + * paragraph) 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 OR COPYRIGHT HOLDERS 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. + * + * Author: Daniel Stone + */ + #ifndef _XKBCOMMON_H_ #define _XKBCOMMON_H_ @@ -82,352 +107,36 @@ typedef uint32_t xkb_led_index_t; xkb_keycode_is_legal_ext(xkb->max_key_code)) +/** + * Names to compile a keymap with, also known as RMLVO. These names together + * should be the primary identifier for a keymap. + */ struct xkb_rule_names { - const char * rules; - const char * model; - const char * layout; - const char * variant; - const char * options; -}; - -struct xkb_any_action { - uint8_t type; - uint8_t data[7]; -}; - -struct xkb_mod_action { - uint8_t type; - uint8_t flags; - uint8_t mask; - uint8_t real_mods; - uint16_t vmods; -}; - -struct xkb_group_action { - uint8_t type; - uint8_t flags; - int16_t group; -}; - -struct xkb_iso_action { - uint8_t type; - uint8_t flags; - uint8_t mask; - uint8_t real_mods; - uint8_t group; - uint8_t affect; - uint16_t vmods; -}; - -struct xkb_controls_action { - uint8_t type; - uint8_t flags; - uint32_t ctrls; -}; - -struct xkb_device_button_action { - uint8_t type; - uint8_t flags; - uint8_t count; - uint8_t button; - uint8_t device; -}; - -struct xkb_device_valuator_action { - uint8_t type; - uint8_t device; - uint8_t v1_what; - uint8_t v1_index; - uint8_t v1_value; - uint8_t v2_what; - uint8_t v2_index; - uint8_t v2_value; -}; - -struct xkb_pointer_default_action { - uint8_t type; - uint8_t flags; - uint8_t affect; - uint8_t value; -}; - -struct xkb_switch_screen_action { - uint8_t type; - uint8_t flags; - uint8_t screen; -}; - -struct xkb_redirect_key_action { - uint8_t type; - xkb_keycode_t new_key; - uint8_t mods_mask; - uint8_t mods; - uint16_t vmods_mask; - uint16_t vmods; -}; - -struct xkb_pointer_action { - uint8_t type; - uint8_t flags; - uint16_t x; - uint16_t y; -}; - -struct xkb_message_action { - uint8_t type; - uint8_t flags; - uint8_t message[6]; + const char *rules; + const char *model; + const char *layout; + const char *variant; + const char *options; }; -struct xkb_pointer_button_action { - uint8_t type; - uint8_t flags; - uint8_t count; - uint8_t button; -}; - -union xkb_action { - 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; - struct xkb_device_valuator_action devval; - struct xkb_pointer_default_action dflt; - struct xkb_switch_screen_action screen; - 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; -}; - -struct xkb_mods { - uint32_t mask; /* effective mods */ - uint32_t vmods; - uint8_t real_mods; -}; - -struct xkb_kt_map_entry { - int active; - uint16_t level; - struct xkb_mods mods; -}; - -struct xkb_key_type { - struct xkb_mods mods; - uint16_t num_levels; - unsigned char map_count; - struct xkb_kt_map_entry * map; - struct xkb_mods * preserve; - const char *name; - const char **level_names; -}; - -struct xkb_sym_interpret { - xkb_keysym_t sym; - unsigned char flags; - unsigned char match; - uint8_t mods; - uint32_t virtual_mod; - union xkb_action act; -}; - -struct xkb_compat_map { - struct xkb_sym_interpret * sym_interpret; - struct xkb_mods groups[XkbNumKbdGroups]; - unsigned short num_si; - unsigned short size_si; -}; - -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 { - unsigned char size_types; - unsigned char num_types; - struct xkb_key_type * types; - - uint32_t size_syms; - uint32_t num_syms; - xkb_keysym_t *syms; - struct xkb_sym_map * key_sym_map; - - unsigned char *modmap; -}; - -struct xkb_behavior { - unsigned char type; - unsigned char data; -}; - -struct xkb_server_map { - 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 - - union xkb_action *acts; - struct xkb_behavior *behaviors; - unsigned short *key_acts; - unsigned char *explicits; - uint32_t vmods[XkbNumVirtualMods]; /* vmod -> mod mapping */ - uint32_t *vmodmap; /* key -> vmod mapping */ -}; - - -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; -}; - -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 { - const char *vmods[XkbNumVirtualMods]; - const char *indicators[XkbNumIndicators]; - const char *groups[XkbNumKbdGroups]; - struct xkb_key_name * keys; - struct xkb_key_alias * key_aliases; - - xkb_keycode_t num_keys; - xkb_keycode_t num_key_aliases; -}; - -struct xkb_controls { - 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 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; -}; - -/* Common keyboard description structure */ -struct xkb_desc { - unsigned int refcnt; - unsigned int defined; - unsigned short flags; - unsigned short device_spec; - xkb_keycode_t min_key_code; - xkb_keycode_t max_key_code; - - 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; -}; - -#define XkbKeyGroupInfo(d,k) ((d)->map->key_sym_map[k].group_info) -#define XkbKeyNumGroups(d,k) (XkbNumGroups((d)->map->key_sym_map[k].group_info)) -#define XkbKeyGroupWidth(d,k,g) (XkbKeyType(d,k,g)->num_levels) -#define XkbKeyGroupsWidth(d,k) ((d)->map->key_sym_map[k].width) -#define XkbKeyTypeIndex(d,k,g) ((d)->map->key_sym_map[k].kt_index[g&0x3]) -#define XkbKeyType(d,k,g) (&(d)->map->types[XkbKeyTypeIndex(d,k,g)]) -#define XkbKeyNumSyms(d,k) (XkbKeyGroupsWidth(d,k)*XkbKeyNumGroups(d,k)) -#define XkbKeySymsOffset(d,k) ((d)->map->key_sym_map[k].offset) -#define XkbKeySymsPtr(d,k) (&(d)->map->syms[XkbKeySymsOffset(d,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 XkbKeyHasActions(d,k) ((d)->server->key_acts[k]!=0) -#define XkbKeyNumActions(d,k) (XkbKeyHasActions(d,k)?XkbKeyNumSyms(d,k):1) -#define XkbKeyActionsPtr(d,k) (&(d)->server->acts[(d)->server->key_acts[k]]) -#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 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) - +/** + * Legacy names for the components of an XKB keymap, also known as KcCGST. + * This is only used in deprecated entrypoints which might be removed or + * shuffled off to a support library. + */ struct xkb_component_names { - char * keymap; - char * keycodes; - char * types; - char * compat; - char * symbols; + char *keymap; + char *keycodes; + char *types; + char *compat; + char *symbols; }; -struct xkb_component_name { - unsigned short flags; - char * name; -}; - -struct xkb_state { - xkb_group_index_t base_group; /**< depressed */ - xkb_group_index_t latched_group; - xkb_group_index_t locked_group; - xkb_group_index_t group; /**< effective */ - - xkb_mod_mask_t base_mods; /**< depressed */ - xkb_mod_mask_t latched_mods; - xkb_mod_mask_t locked_mods; - xkb_mod_mask_t mods; /**< effective */ - - uint32_t leds; - - int refcnt; - void *filters; - int num_filters; - struct xkb_desc *xkb; -}; - -#define XkbStateFieldFromRec(s) XkbBuildCoreState((s)->lookup_mods,(s)->group) -#define XkbGrabStateFromRec(s) XkbBuildCoreState((s)->grab_mods,(s)->group) - -#define XkbNumGroups(g) ((g)&0x0f) -#define XkbOutOfRangeGroupInfo(g) ((g)&0xf0) -#define XkbOutOfRangeGroupAction(g) ((g)&0xc0) -#define XkbOutOfRangeGroupNumber(g) (((g)&0x30)>>4) -#define XkbSetNumGroups(g,n) (((g)&0xf0)|((n)&0x0f)) +/** + * Opaque state object, may only be created, accessed, manipulated and + * destroyed through the xkb_state_*() API. + */ +struct xkb_state; _XFUNCPROTOBEGIN @@ -446,8 +155,8 @@ _XFUNCPROTOBEGIN * free()d, and a new one allocated with malloc(). */ _X_EXPORT extern void -xkb_canonicalise_components(struct xkb_component_names * names, - const struct xkb_component_names * old); +xkb_canonicalise_components(struct xkb_component_names *names, + const struct xkb_component_names *old); /* * Converts a keysym to a string; will return unknown Unicode codepoints diff --git a/src/XKBcommonint.h b/src/XKBcommonint.h index d09060b..c2040aa 100644 --- a/src/XKBcommonint.h +++ b/src/XKBcommonint.h @@ -1,4 +1,5 @@ /* +Copyright 1985, 1987, 1990, 1998 The Open Group Copyright 2008 Dan Nicholson Permission is hereby granted, free of charge, to any person obtaining a @@ -24,6 +25,57 @@ sale, use or other dealings in this Software without prior written authorization from the authors. */ +/************************************************************ +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. + +********************************************************/ + +/* + * Copyright © 2012 Intel Corporation + * + * 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 (including the next + * paragraph) 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 OR COPYRIGHT HOLDERS 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. + * + * Author: Daniel Stone + */ + #ifndef _XKBCOMMONINT_H_ #define _XKBCOMMONINT_H_ @@ -92,4 +144,335 @@ extern unsigned int xkb_key_get_level(struct xkb_state *state, xkb_keycode_t key, unsigned int group); +struct xkb_any_action { + uint8_t type; + uint8_t data[7]; +}; + +struct xkb_mod_action { + uint8_t type; + uint8_t flags; + uint8_t mask; + uint8_t real_mods; + uint16_t vmods; +}; + +struct xkb_group_action { + uint8_t type; + uint8_t flags; + int16_t group; +}; + +struct xkb_iso_action { + uint8_t type; + uint8_t flags; + uint8_t mask; + uint8_t real_mods; + uint8_t group; + uint8_t affect; + uint16_t vmods; +}; + +struct xkb_controls_action { + uint8_t type; + uint8_t flags; + uint32_t ctrls; +}; + +struct xkb_device_button_action { + uint8_t type; + uint8_t flags; + uint8_t count; + uint8_t button; + uint8_t device; +}; + +struct xkb_device_valuator_action { + uint8_t type; + uint8_t device; + uint8_t v1_what; + uint8_t v1_index; + uint8_t v1_value; + uint8_t v2_what; + uint8_t v2_index; + uint8_t v2_value; +}; + +struct xkb_pointer_default_action { + uint8_t type; + uint8_t flags; + uint8_t affect; + uint8_t value; +}; + +struct xkb_switch_screen_action { + uint8_t type; + uint8_t flags; + uint8_t screen; +}; + +struct xkb_redirect_key_action { + uint8_t type; + xkb_keycode_t new_key; + uint8_t mods_mask; + uint8_t mods; + uint16_t vmods_mask; + uint16_t vmods; +}; + +struct xkb_pointer_action { + uint8_t type; + uint8_t flags; + uint16_t x; + uint16_t y; +}; + +struct xkb_message_action { + uint8_t type; + uint8_t flags; + uint8_t message[6]; +}; + +struct xkb_pointer_button_action { + uint8_t type; + uint8_t flags; + uint8_t count; + uint8_t button; +}; + +union xkb_action { + 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; + struct xkb_device_valuator_action devval; + struct xkb_pointer_default_action dflt; + struct xkb_switch_screen_action screen; + 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; +}; + +struct xkb_mods { + uint32_t mask; /* effective mods */ + uint32_t vmods; + uint8_t real_mods; +}; + +struct xkb_kt_map_entry { + int active; + uint16_t level; + struct xkb_mods mods; +}; + +struct xkb_key_type { + struct xkb_mods mods; + uint16_t num_levels; + unsigned char map_count; + struct xkb_kt_map_entry * map; + struct xkb_mods * preserve; + const char *name; + const char **level_names; +}; + +struct xkb_sym_interpret { + xkb_keysym_t sym; + unsigned char flags; + unsigned char match; + uint8_t mods; + uint32_t virtual_mod; + union xkb_action act; +}; + +struct xkb_compat_map { + struct xkb_sym_interpret * sym_interpret; + struct xkb_mods groups[XkbNumKbdGroups]; + unsigned short num_si; + unsigned short size_si; +}; + +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 { + unsigned char size_types; + unsigned char num_types; + struct xkb_key_type * types; + + uint32_t size_syms; + uint32_t num_syms; + xkb_keysym_t *syms; + struct xkb_sym_map * key_sym_map; + + unsigned char *modmap; +}; + +struct xkb_behavior { + unsigned char type; + unsigned char data; +}; + +struct xkb_server_map { + 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 + + union xkb_action *acts; + struct xkb_behavior *behaviors; + unsigned short *key_acts; + unsigned char *explicits; + uint32_t vmods[XkbNumVirtualMods]; /* vmod -> mod mapping */ + uint32_t *vmodmap; /* key -> vmod mapping */ +}; + + +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; +}; + +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 { + const char *vmods[XkbNumVirtualMods]; + const char *indicators[XkbNumIndicators]; + const char *groups[XkbNumKbdGroups]; + struct xkb_key_name * keys; + struct xkb_key_alias * key_aliases; + + xkb_keycode_t num_keys; + xkb_keycode_t num_key_aliases; +}; + +struct xkb_controls { + 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 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; +}; + +/* Common keyboard description structure */ +struct xkb_desc { + unsigned int refcnt; + unsigned int defined; + unsigned short flags; + unsigned short device_spec; + xkb_keycode_t min_key_code; + xkb_keycode_t max_key_code; + + 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; +}; + +#define XkbKeyGroupInfo(d,k) ((d)->map->key_sym_map[k].group_info) +#define XkbKeyNumGroups(d,k) (XkbNumGroups((d)->map->key_sym_map[k].group_info)) +#define XkbKeyGroupWidth(d,k,g) (XkbKeyType(d,k,g)->num_levels) +#define XkbKeyGroupsWidth(d,k) ((d)->map->key_sym_map[k].width) +#define XkbKeyTypeIndex(d,k,g) ((d)->map->key_sym_map[k].kt_index[g&0x3]) +#define XkbKeyType(d,k,g) (&(d)->map->types[XkbKeyTypeIndex(d,k,g)]) +#define XkbKeyNumSyms(d,k) (XkbKeyGroupsWidth(d,k)*XkbKeyNumGroups(d,k)) +#define XkbKeySymsOffset(d,k) ((d)->map->key_sym_map[k].offset) +#define XkbKeySymsPtr(d,k) (&(d)->map->syms[XkbKeySymsOffset(d,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 XkbKeyHasActions(d,k) ((d)->server->key_acts[k]!=0) +#define XkbKeyNumActions(d,k) (XkbKeyHasActions(d,k)?XkbKeyNumSyms(d,k):1) +#define XkbKeyActionsPtr(d,k) (&(d)->server->acts[(d)->server->key_acts[k]]) +#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 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_component_name { + unsigned short flags; + char * name; +}; + +struct xkb_state { + xkb_group_index_t base_group; /**< depressed */ + xkb_group_index_t latched_group; + xkb_group_index_t locked_group; + xkb_group_index_t group; /**< effective */ + + xkb_mod_mask_t base_mods; /**< depressed */ + xkb_mod_mask_t latched_mods; + xkb_mod_mask_t locked_mods; + xkb_mod_mask_t mods; /**< effective */ + + uint32_t leds; + + int refcnt; + void *filters; + int num_filters; + struct xkb_desc *xkb; +}; + +#define XkbStateFieldFromRec(s) XkbBuildCoreState((s)->lookup_mods,(s)->group) +#define XkbGrabStateFromRec(s) XkbBuildCoreState((s)->grab_mods,(s)->group) + +#define XkbNumGroups(g) ((g)&0x0f) +#define XkbOutOfRangeGroupInfo(g) ((g)&0xf0) +#define XkbOutOfRangeGroupAction(g) ((g)&0xc0) +#define XkbOutOfRangeGroupNumber(g) (((g)&0x30)>>4) +#define XkbSetNumGroups(g,n) (((g)&0xf0)|((n)&0x0f)) + #endif /* _XKBCOMMONINT_H_ */ diff --git a/src/xkballoc.h b/src/xkballoc.h index 83f7857..9abecc6 100644 --- a/src/xkballoc.h +++ b/src/xkballoc.h @@ -30,6 +30,7 @@ authorization from the authors. #include #include #include "xkbcommon/xkbcommon.h" +#include "XKBcommonint.h" extern int XkbcAllocCompatMap(struct xkb_desc * xkb, unsigned which, unsigned nSI); diff --git a/src/xkbmisc.h b/src/xkbmisc.h index a10e6ae..1d74ef5 100644 --- a/src/xkbmisc.h +++ b/src/xkbmisc.h @@ -30,6 +30,7 @@ authorization from the authors. #include #include #include "xkbcommon/xkbcommon.h" +#include "XKBcommonint.h" typedef uint32_t xkb_atom_t; -- 2.7.4