summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorDaniel Stone <daniel@fooishbar.org>2012-03-27 13:44:48 +0100
committerDaniel Stone <daniel@fooishbar.org>2012-03-27 13:44:48 +0100
commit389c2db1d778f4a7bbe94abfad1e6de4dbd45858 (patch)
treec5e100c5bb859783418d48800c559016d457410c /include
parent3dcd7ae02ccfd47b2a9a552daa225255803e66cf (diff)
downloadxorg-lib-libxkbcommon-389c2db1d778f4a7bbe94abfad1e6de4dbd45858.tar.gz
Remove internal API from xkbcommon.h
And move it to XKBcomminint.h. Signed-off-by: Daniel Stone <daniel@fooishbar.org>
Diffstat (limited to 'include')
-rw-r--r--include/xkbcommon/xkbcommon.h393
1 files changed, 51 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 <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