Remove internal API from xkbcommon.h
authorDaniel Stone <daniel@fooishbar.org>
Tue, 27 Mar 2012 12:44:48 +0000 (13:44 +0100)
committerDaniel Stone <daniel@fooishbar.org>
Tue, 27 Mar 2012 12:44:48 +0000 (13:44 +0100)
And move it to XKBcomminint.h.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
include/xkbcommon/xkbcommon.h
src/XKBcommonint.h
src/xkballoc.h
src/xkbmisc.h

index b865535..48a0e48 100644 (file)
@@ -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 <daniel@fooishbar.org>
+ */
+
 
 #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
index d09060b..c2040aa 100644 (file)
@@ -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 <daniel@fooishbar.org>
+ */
+
 #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_ */
index 83f7857..9abecc6 100644 (file)
@@ -30,6 +30,7 @@ authorization from the authors.
 #include <X11/X.h>
 #include <X11/Xdefs.h>
 #include "xkbcommon/xkbcommon.h"
+#include "XKBcommonint.h"
 
 extern int
 XkbcAllocCompatMap(struct xkb_desc * xkb, unsigned which, unsigned nSI);
index a10e6ae..1d74ef5 100644 (file)
@@ -30,6 +30,7 @@ authorization from the authors.
 #include <X11/X.h>
 #include <X11/Xdefs.h>
 #include "xkbcommon/xkbcommon.h"
+#include "XKBcommonint.h"
 
 typedef uint32_t xkb_atom_t;