xref: /aosp_15_r20/external/libxkbcommon/include/xkbcommon/xkbcommon.h (revision 2b949d0487e80d67f1fda82db69e101e761f8064)
1*2b949d04SAndroid Build Coastguard Worker /*
2*2b949d04SAndroid Build Coastguard Worker  * Copyright 1985, 1987, 1990, 1998  The Open Group
3*2b949d04SAndroid Build Coastguard Worker  * Copyright 2008  Dan Nicholson
4*2b949d04SAndroid Build Coastguard Worker  *
5*2b949d04SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
6*2b949d04SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the "Software"),
7*2b949d04SAndroid Build Coastguard Worker  * to deal in the Software without restriction, including without limitation
8*2b949d04SAndroid Build Coastguard Worker  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9*2b949d04SAndroid Build Coastguard Worker  * and/or sell copies of the Software, and to permit persons to whom the
10*2b949d04SAndroid Build Coastguard Worker  * Software is furnished to do so, subject to the following conditions:
11*2b949d04SAndroid Build Coastguard Worker  *
12*2b949d04SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice shall be included in
13*2b949d04SAndroid Build Coastguard Worker  * all copies or substantial portions of the Software.
14*2b949d04SAndroid Build Coastguard Worker  *
15*2b949d04SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16*2b949d04SAndroid Build Coastguard Worker  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*2b949d04SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18*2b949d04SAndroid Build Coastguard Worker  * AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
19*2b949d04SAndroid Build Coastguard Worker  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20*2b949d04SAndroid Build Coastguard Worker  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21*2b949d04SAndroid Build Coastguard Worker  *
22*2b949d04SAndroid Build Coastguard Worker  * Except as contained in this notice, the names of the authors or their
23*2b949d04SAndroid Build Coastguard Worker  * institutions shall not be used in advertising or otherwise to promote the
24*2b949d04SAndroid Build Coastguard Worker  * sale, use or other dealings in this Software without prior written
25*2b949d04SAndroid Build Coastguard Worker  * authorization from the authors.
26*2b949d04SAndroid Build Coastguard Worker  */
27*2b949d04SAndroid Build Coastguard Worker 
28*2b949d04SAndroid Build Coastguard Worker /************************************************************
29*2b949d04SAndroid Build Coastguard Worker  * Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc.
30*2b949d04SAndroid Build Coastguard Worker  *
31*2b949d04SAndroid Build Coastguard Worker  * Permission to use, copy, modify, and distribute this
32*2b949d04SAndroid Build Coastguard Worker  * software and its documentation for any purpose and without
33*2b949d04SAndroid Build Coastguard Worker  * fee is hereby granted, provided that the above copyright
34*2b949d04SAndroid Build Coastguard Worker  * notice appear in all copies and that both that copyright
35*2b949d04SAndroid Build Coastguard Worker  * notice and this permission notice appear in supporting
36*2b949d04SAndroid Build Coastguard Worker  * documentation, and that the name of Silicon Graphics not be
37*2b949d04SAndroid Build Coastguard Worker  * used in advertising or publicity pertaining to distribution
38*2b949d04SAndroid Build Coastguard Worker  * of the software without specific prior written permission.
39*2b949d04SAndroid Build Coastguard Worker  * Silicon Graphics makes no representation about the suitability
40*2b949d04SAndroid Build Coastguard Worker  * of this software for any purpose. It is provided "as is"
41*2b949d04SAndroid Build Coastguard Worker  * without any express or implied warranty.
42*2b949d04SAndroid Build Coastguard Worker  *
43*2b949d04SAndroid Build Coastguard Worker  * SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
44*2b949d04SAndroid Build Coastguard Worker  * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
45*2b949d04SAndroid Build Coastguard Worker  * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
46*2b949d04SAndroid Build Coastguard Worker  * GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
47*2b949d04SAndroid Build Coastguard Worker  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
48*2b949d04SAndroid Build Coastguard Worker  * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
49*2b949d04SAndroid Build Coastguard Worker  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION  WITH
50*2b949d04SAndroid Build Coastguard Worker  * THE USE OR PERFORMANCE OF THIS SOFTWARE.
51*2b949d04SAndroid Build Coastguard Worker  *
52*2b949d04SAndroid Build Coastguard Worker  ********************************************************/
53*2b949d04SAndroid Build Coastguard Worker 
54*2b949d04SAndroid Build Coastguard Worker /*
55*2b949d04SAndroid Build Coastguard Worker  * Copyright © 2009-2012 Daniel Stone
56*2b949d04SAndroid Build Coastguard Worker  * Copyright © 2012 Intel Corporation
57*2b949d04SAndroid Build Coastguard Worker  * Copyright © 2012 Ran Benita
58*2b949d04SAndroid Build Coastguard Worker  *
59*2b949d04SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
60*2b949d04SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the "Software"),
61*2b949d04SAndroid Build Coastguard Worker  * to deal in the Software without restriction, including without limitation
62*2b949d04SAndroid Build Coastguard Worker  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
63*2b949d04SAndroid Build Coastguard Worker  * and/or sell copies of the Software, and to permit persons to whom the
64*2b949d04SAndroid Build Coastguard Worker  * Software is furnished to do so, subject to the following conditions:
65*2b949d04SAndroid Build Coastguard Worker  *
66*2b949d04SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice (including the next
67*2b949d04SAndroid Build Coastguard Worker  * paragraph) shall be included in all copies or substantial portions of the
68*2b949d04SAndroid Build Coastguard Worker  * Software.
69*2b949d04SAndroid Build Coastguard Worker  *
70*2b949d04SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
71*2b949d04SAndroid Build Coastguard Worker  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
72*2b949d04SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
73*2b949d04SAndroid Build Coastguard Worker  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
74*2b949d04SAndroid Build Coastguard Worker  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
75*2b949d04SAndroid Build Coastguard Worker  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
76*2b949d04SAndroid Build Coastguard Worker  * DEALINGS IN THE SOFTWARE.
77*2b949d04SAndroid Build Coastguard Worker  *
78*2b949d04SAndroid Build Coastguard Worker  * Author: Daniel Stone <[email protected]>
79*2b949d04SAndroid Build Coastguard Worker  */
80*2b949d04SAndroid Build Coastguard Worker 
81*2b949d04SAndroid Build Coastguard Worker #ifndef _XKBCOMMON_H_
82*2b949d04SAndroid Build Coastguard Worker #define _XKBCOMMON_H_
83*2b949d04SAndroid Build Coastguard Worker 
84*2b949d04SAndroid Build Coastguard Worker #include <stdint.h>
85*2b949d04SAndroid Build Coastguard Worker #include <stdio.h>
86*2b949d04SAndroid Build Coastguard Worker #include <stdarg.h>
87*2b949d04SAndroid Build Coastguard Worker 
88*2b949d04SAndroid Build Coastguard Worker #include <xkbcommon/xkbcommon-names.h>
89*2b949d04SAndroid Build Coastguard Worker #include <xkbcommon/xkbcommon-keysyms.h>
90*2b949d04SAndroid Build Coastguard Worker 
91*2b949d04SAndroid Build Coastguard Worker #ifdef __cplusplus
92*2b949d04SAndroid Build Coastguard Worker extern "C" {
93*2b949d04SAndroid Build Coastguard Worker #endif
94*2b949d04SAndroid Build Coastguard Worker 
95*2b949d04SAndroid Build Coastguard Worker /**
96*2b949d04SAndroid Build Coastguard Worker  * @file
97*2b949d04SAndroid Build Coastguard Worker  * Main libxkbcommon API.
98*2b949d04SAndroid Build Coastguard Worker  */
99*2b949d04SAndroid Build Coastguard Worker 
100*2b949d04SAndroid Build Coastguard Worker /**
101*2b949d04SAndroid Build Coastguard Worker  * @struct xkb_context
102*2b949d04SAndroid Build Coastguard Worker  * Opaque top level library context object.
103*2b949d04SAndroid Build Coastguard Worker  *
104*2b949d04SAndroid Build Coastguard Worker  * The context contains various general library data and state, like
105*2b949d04SAndroid Build Coastguard Worker  * logging level and include paths.
106*2b949d04SAndroid Build Coastguard Worker  *
107*2b949d04SAndroid Build Coastguard Worker  * Objects are created in a specific context, and multiple contexts may
108*2b949d04SAndroid Build Coastguard Worker  * coexist simultaneously.  Objects from different contexts are completely
109*2b949d04SAndroid Build Coastguard Worker  * separated and do not share any memory or state.
110*2b949d04SAndroid Build Coastguard Worker  */
111*2b949d04SAndroid Build Coastguard Worker struct xkb_context;
112*2b949d04SAndroid Build Coastguard Worker 
113*2b949d04SAndroid Build Coastguard Worker /**
114*2b949d04SAndroid Build Coastguard Worker  * @struct xkb_keymap
115*2b949d04SAndroid Build Coastguard Worker  * Opaque compiled keymap object.
116*2b949d04SAndroid Build Coastguard Worker  *
117*2b949d04SAndroid Build Coastguard Worker  * The keymap object holds all of the static keyboard information obtained
118*2b949d04SAndroid Build Coastguard Worker  * from compiling XKB files.
119*2b949d04SAndroid Build Coastguard Worker  *
120*2b949d04SAndroid Build Coastguard Worker  * A keymap is immutable after it is created (besides reference counts, etc.);
121*2b949d04SAndroid Build Coastguard Worker  * if you need to change it, you must create a new one.
122*2b949d04SAndroid Build Coastguard Worker  */
123*2b949d04SAndroid Build Coastguard Worker struct xkb_keymap;
124*2b949d04SAndroid Build Coastguard Worker 
125*2b949d04SAndroid Build Coastguard Worker /**
126*2b949d04SAndroid Build Coastguard Worker  * @struct xkb_state
127*2b949d04SAndroid Build Coastguard Worker  * Opaque keyboard state object.
128*2b949d04SAndroid Build Coastguard Worker  *
129*2b949d04SAndroid Build Coastguard Worker  * State objects contain the active state of a keyboard (or keyboards), such
130*2b949d04SAndroid Build Coastguard Worker  * as the currently effective layout and the active modifiers.  It acts as a
131*2b949d04SAndroid Build Coastguard Worker  * simple state machine, wherein key presses and releases are the input, and
132*2b949d04SAndroid Build Coastguard Worker  * key symbols (keysyms) are the output.
133*2b949d04SAndroid Build Coastguard Worker  */
134*2b949d04SAndroid Build Coastguard Worker struct xkb_state;
135*2b949d04SAndroid Build Coastguard Worker 
136*2b949d04SAndroid Build Coastguard Worker /**
137*2b949d04SAndroid Build Coastguard Worker  * A number used to represent a physical key on a keyboard.
138*2b949d04SAndroid Build Coastguard Worker  *
139*2b949d04SAndroid Build Coastguard Worker  * A standard PC-compatible keyboard might have 102 keys.  An appropriate
140*2b949d04SAndroid Build Coastguard Worker  * keymap would assign each of them a keycode, by which the user should
141*2b949d04SAndroid Build Coastguard Worker  * refer to the key throughout the library.
142*2b949d04SAndroid Build Coastguard Worker  *
143*2b949d04SAndroid Build Coastguard Worker  * Historically, the X11 protocol, and consequentially the XKB protocol,
144*2b949d04SAndroid Build Coastguard Worker  * assign only 8 bits for keycodes.  This limits the number of different
145*2b949d04SAndroid Build Coastguard Worker  * keys that can be used simultaneously in a single keymap to 256
146*2b949d04SAndroid Build Coastguard Worker  * (disregarding other limitations).  This library does not share this limit;
147*2b949d04SAndroid Build Coastguard Worker  * keycodes beyond 255 ('extended keycodes') are not treated specially.
148*2b949d04SAndroid Build Coastguard Worker  * Keymaps and applications which are compatible with X11 should not use
149*2b949d04SAndroid Build Coastguard Worker  * these keycodes.
150*2b949d04SAndroid Build Coastguard Worker  *
151*2b949d04SAndroid Build Coastguard Worker  * The values of specific keycodes are determined by the keymap and the
152*2b949d04SAndroid Build Coastguard Worker  * underlying input system.  For example, with an X11-compatible keymap
153*2b949d04SAndroid Build Coastguard Worker  * and Linux evdev scan codes (see linux/input.h), a fixed offset is used:
154*2b949d04SAndroid Build Coastguard Worker  *
155*2b949d04SAndroid Build Coastguard Worker  * The keymap defines a canonical name for each key, plus possible aliases.
156*2b949d04SAndroid Build Coastguard Worker  * Historically, the XKB protocol restricts these names to at most 4 (ASCII)
157*2b949d04SAndroid Build Coastguard Worker  * characters, but this library does not share this limit.
158*2b949d04SAndroid Build Coastguard Worker  *
159*2b949d04SAndroid Build Coastguard Worker  * @code
160*2b949d04SAndroid Build Coastguard Worker  * xkb_keycode_t keycode_A = KEY_A + 8;
161*2b949d04SAndroid Build Coastguard Worker  * @endcode
162*2b949d04SAndroid Build Coastguard Worker  *
163*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_keycode_is_legal_ext() xkb_keycode_is_legal_x11()
164*2b949d04SAndroid Build Coastguard Worker  */
165*2b949d04SAndroid Build Coastguard Worker typedef uint32_t xkb_keycode_t;
166*2b949d04SAndroid Build Coastguard Worker 
167*2b949d04SAndroid Build Coastguard Worker /**
168*2b949d04SAndroid Build Coastguard Worker  * A number used to represent the symbols generated from a key on a keyboard.
169*2b949d04SAndroid Build Coastguard Worker  *
170*2b949d04SAndroid Build Coastguard Worker  * A key, represented by a keycode, may generate different symbols according
171*2b949d04SAndroid Build Coastguard Worker  * to keyboard state.  For example, on a QWERTY keyboard, pressing the key
172*2b949d04SAndroid Build Coastguard Worker  * labled \<A\> generates the symbol 'a'.  If the Shift key is held, it
173*2b949d04SAndroid Build Coastguard Worker  * generates the symbol 'A'.  If a different layout is used, say Greek,
174*2b949d04SAndroid Build Coastguard Worker  * it generates the symbol 'α'.  And so on.
175*2b949d04SAndroid Build Coastguard Worker  *
176*2b949d04SAndroid Build Coastguard Worker  * Each such symbol is represented by a keysym.  Note that keysyms are
177*2b949d04SAndroid Build Coastguard Worker  * somewhat more general, in that they can also represent some "function",
178*2b949d04SAndroid Build Coastguard Worker  * such as "Left" or "Right" for the arrow keys.  For more information,
179*2b949d04SAndroid Build Coastguard Worker  * see:
180*2b949d04SAndroid Build Coastguard Worker  * https://www.x.org/releases/current/doc/xproto/x11protocol.html#keysym_encoding
181*2b949d04SAndroid Build Coastguard Worker  *
182*2b949d04SAndroid Build Coastguard Worker  * Specifically named keysyms can be found in the
183*2b949d04SAndroid Build Coastguard Worker  * xkbcommon/xkbcommon-keysyms.h header file.  Their name does not include
184*2b949d04SAndroid Build Coastguard Worker  * the XKB_KEY_ prefix.
185*2b949d04SAndroid Build Coastguard Worker  *
186*2b949d04SAndroid Build Coastguard Worker  * Besides those, any Unicode/ISO 10646 character in the range U0100 to
187*2b949d04SAndroid Build Coastguard Worker  * U10FFFF can be represented by a keysym value in the range 0x01000100 to
188*2b949d04SAndroid Build Coastguard Worker  * 0x0110FFFF.  The name of Unicode keysyms is "U<codepoint>", e.g. "UA1B2".
189*2b949d04SAndroid Build Coastguard Worker  *
190*2b949d04SAndroid Build Coastguard Worker  * The name of other unnamed keysyms is the hexadecimal representation of
191*2b949d04SAndroid Build Coastguard Worker  * their value, e.g. "0xabcd1234".
192*2b949d04SAndroid Build Coastguard Worker  *
193*2b949d04SAndroid Build Coastguard Worker  * Keysym names are case-sensitive.
194*2b949d04SAndroid Build Coastguard Worker  */
195*2b949d04SAndroid Build Coastguard Worker typedef uint32_t xkb_keysym_t;
196*2b949d04SAndroid Build Coastguard Worker 
197*2b949d04SAndroid Build Coastguard Worker /**
198*2b949d04SAndroid Build Coastguard Worker  * Index of a keyboard layout.
199*2b949d04SAndroid Build Coastguard Worker  *
200*2b949d04SAndroid Build Coastguard Worker  * The layout index is a state component which detemines which <em>keyboard
201*2b949d04SAndroid Build Coastguard Worker  * layout</em> is active.  These may be different alphabets, different key
202*2b949d04SAndroid Build Coastguard Worker  * arrangements, etc.
203*2b949d04SAndroid Build Coastguard Worker  *
204*2b949d04SAndroid Build Coastguard Worker  * Layout indices are consecutive.  The first layout has index 0.
205*2b949d04SAndroid Build Coastguard Worker  *
206*2b949d04SAndroid Build Coastguard Worker  * Each layout is not required to have a name, and the names are not
207*2b949d04SAndroid Build Coastguard Worker  * guaranteed to be unique (though they are usually provided and unique).
208*2b949d04SAndroid Build Coastguard Worker  * Therefore, it is not safe to use the name as a unique identifier for a
209*2b949d04SAndroid Build Coastguard Worker  * layout.  Layout names are case-sensitive.
210*2b949d04SAndroid Build Coastguard Worker  *
211*2b949d04SAndroid Build Coastguard Worker  * Layout names are specified in the layout's definition, for example
212*2b949d04SAndroid Build Coastguard Worker  * "English (US)".  These are different from the (conventionally) short names
213*2b949d04SAndroid Build Coastguard Worker  * which are used to locate the layout, for example "us" or "us(intl)".  These
214*2b949d04SAndroid Build Coastguard Worker  * names are not present in a compiled keymap.
215*2b949d04SAndroid Build Coastguard Worker  *
216*2b949d04SAndroid Build Coastguard Worker  * If the user selects layouts from a list generated from the XKB registry
217*2b949d04SAndroid Build Coastguard Worker  * (using libxkbregistry or directly), and this metadata is needed later on, it
218*2b949d04SAndroid Build Coastguard Worker  * is recommended to store it along with the keymap.
219*2b949d04SAndroid Build Coastguard Worker  *
220*2b949d04SAndroid Build Coastguard Worker  * Layouts are also called "groups" by XKB.
221*2b949d04SAndroid Build Coastguard Worker  *
222*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_keymap_num_layouts() xkb_keymap_num_layouts_for_key()
223*2b949d04SAndroid Build Coastguard Worker  */
224*2b949d04SAndroid Build Coastguard Worker typedef uint32_t xkb_layout_index_t;
225*2b949d04SAndroid Build Coastguard Worker /** A mask of layout indices. */
226*2b949d04SAndroid Build Coastguard Worker typedef uint32_t xkb_layout_mask_t;
227*2b949d04SAndroid Build Coastguard Worker 
228*2b949d04SAndroid Build Coastguard Worker /**
229*2b949d04SAndroid Build Coastguard Worker  * Index of a shift level.
230*2b949d04SAndroid Build Coastguard Worker  *
231*2b949d04SAndroid Build Coastguard Worker  * Any key, in any layout, can have several <em>shift levels</em>.  Each
232*2b949d04SAndroid Build Coastguard Worker  * shift level can assign different keysyms to the key.  The shift level
233*2b949d04SAndroid Build Coastguard Worker  * to use is chosen according to the current keyboard state; for example,
234*2b949d04SAndroid Build Coastguard Worker  * if no keys are pressed, the first level may be used; if the Left Shift
235*2b949d04SAndroid Build Coastguard Worker  * key is pressed, the second; if Num Lock is pressed, the third; and
236*2b949d04SAndroid Build Coastguard Worker  * many such combinations are possible (see xkb_mod_index_t).
237*2b949d04SAndroid Build Coastguard Worker  *
238*2b949d04SAndroid Build Coastguard Worker  * Level indices are consecutive.  The first level has index 0.
239*2b949d04SAndroid Build Coastguard Worker  */
240*2b949d04SAndroid Build Coastguard Worker typedef uint32_t xkb_level_index_t;
241*2b949d04SAndroid Build Coastguard Worker 
242*2b949d04SAndroid Build Coastguard Worker /**
243*2b949d04SAndroid Build Coastguard Worker  * Index of a modifier.
244*2b949d04SAndroid Build Coastguard Worker  *
245*2b949d04SAndroid Build Coastguard Worker  * A @e modifier is a state component which changes the way keys are
246*2b949d04SAndroid Build Coastguard Worker  * interpreted.  A keymap defines a set of modifiers, such as Alt, Shift,
247*2b949d04SAndroid Build Coastguard Worker  * Num Lock or Meta, and specifies which keys may @e activate which
248*2b949d04SAndroid Build Coastguard Worker  * modifiers (in a many-to-many relationship, i.e. a key can activate
249*2b949d04SAndroid Build Coastguard Worker  * several modifiers, and a modifier may be activated by several keys.
250*2b949d04SAndroid Build Coastguard Worker  * Different keymaps do this differently).
251*2b949d04SAndroid Build Coastguard Worker  *
252*2b949d04SAndroid Build Coastguard Worker  * When retrieving the keysyms for a key, the active modifier set is
253*2b949d04SAndroid Build Coastguard Worker  * consulted; this detemines the correct shift level to use within the
254*2b949d04SAndroid Build Coastguard Worker  * currently active layout (see xkb_level_index_t).
255*2b949d04SAndroid Build Coastguard Worker  *
256*2b949d04SAndroid Build Coastguard Worker  * Modifier indices are consecutive.  The first modifier has index 0.
257*2b949d04SAndroid Build Coastguard Worker  *
258*2b949d04SAndroid Build Coastguard Worker  * Each modifier must have a name, and the names are unique.  Therefore, it
259*2b949d04SAndroid Build Coastguard Worker  * is safe to use the name as a unique identifier for a modifier.  The names
260*2b949d04SAndroid Build Coastguard Worker  * of some common modifiers are provided in the xkbcommon/xkbcommon-names.h
261*2b949d04SAndroid Build Coastguard Worker  * header file.  Modifier names are case-sensitive.
262*2b949d04SAndroid Build Coastguard Worker  *
263*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_keymap_num_mods()
264*2b949d04SAndroid Build Coastguard Worker  */
265*2b949d04SAndroid Build Coastguard Worker typedef uint32_t xkb_mod_index_t;
266*2b949d04SAndroid Build Coastguard Worker /** A mask of modifier indices. */
267*2b949d04SAndroid Build Coastguard Worker typedef uint32_t xkb_mod_mask_t;
268*2b949d04SAndroid Build Coastguard Worker 
269*2b949d04SAndroid Build Coastguard Worker /**
270*2b949d04SAndroid Build Coastguard Worker  * Index of a keyboard LED.
271*2b949d04SAndroid Build Coastguard Worker  *
272*2b949d04SAndroid Build Coastguard Worker  * LEDs are logical objects which may be @e active or @e inactive.  They
273*2b949d04SAndroid Build Coastguard Worker  * typically correspond to the lights on the keyboard. Their state is
274*2b949d04SAndroid Build Coastguard Worker  * determined by the current keyboard state.
275*2b949d04SAndroid Build Coastguard Worker  *
276*2b949d04SAndroid Build Coastguard Worker  * LED indices are non-consecutive.  The first LED has index 0.
277*2b949d04SAndroid Build Coastguard Worker  *
278*2b949d04SAndroid Build Coastguard Worker  * Each LED must have a name, and the names are unique. Therefore,
279*2b949d04SAndroid Build Coastguard Worker  * it is safe to use the name as a unique identifier for a LED.  The names
280*2b949d04SAndroid Build Coastguard Worker  * of some common LEDs are provided in the xkbcommon/xkbcommon-names.h
281*2b949d04SAndroid Build Coastguard Worker  * header file.  LED names are case-sensitive.
282*2b949d04SAndroid Build Coastguard Worker  *
283*2b949d04SAndroid Build Coastguard Worker  * @warning A given keymap may specify an exact index for a given LED.
284*2b949d04SAndroid Build Coastguard Worker  * Therefore, LED indexing is not necessarily sequential, as opposed to
285*2b949d04SAndroid Build Coastguard Worker  * modifiers and layouts.  This means that when iterating over the LEDs
286*2b949d04SAndroid Build Coastguard Worker  * in a keymap using e.g. xkb_keymap_num_leds(), some indices might be
287*2b949d04SAndroid Build Coastguard Worker  * invalid.  Given such an index, functions like xkb_keymap_led_get_name()
288*2b949d04SAndroid Build Coastguard Worker  * will return NULL, and xkb_state_led_index_is_active() will return -1.
289*2b949d04SAndroid Build Coastguard Worker  *
290*2b949d04SAndroid Build Coastguard Worker  * LEDs are also called "indicators" by XKB.
291*2b949d04SAndroid Build Coastguard Worker  *
292*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_keymap_num_leds()
293*2b949d04SAndroid Build Coastguard Worker  */
294*2b949d04SAndroid Build Coastguard Worker typedef uint32_t xkb_led_index_t;
295*2b949d04SAndroid Build Coastguard Worker /** A mask of LED indices. */
296*2b949d04SAndroid Build Coastguard Worker typedef uint32_t xkb_led_mask_t;
297*2b949d04SAndroid Build Coastguard Worker 
298*2b949d04SAndroid Build Coastguard Worker #define XKB_KEYCODE_INVALID (0xffffffff)
299*2b949d04SAndroid Build Coastguard Worker #define XKB_LAYOUT_INVALID  (0xffffffff)
300*2b949d04SAndroid Build Coastguard Worker #define XKB_LEVEL_INVALID   (0xffffffff)
301*2b949d04SAndroid Build Coastguard Worker #define XKB_MOD_INVALID     (0xffffffff)
302*2b949d04SAndroid Build Coastguard Worker #define XKB_LED_INVALID     (0xffffffff)
303*2b949d04SAndroid Build Coastguard Worker 
304*2b949d04SAndroid Build Coastguard Worker #define XKB_KEYCODE_MAX     (0xffffffff - 1)
305*2b949d04SAndroid Build Coastguard Worker 
306*2b949d04SAndroid Build Coastguard Worker /**
307*2b949d04SAndroid Build Coastguard Worker  * Test whether a value is a valid extended keycode.
308*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_keycode_t
309*2b949d04SAndroid Build Coastguard Worker  **/
310*2b949d04SAndroid Build Coastguard Worker #define xkb_keycode_is_legal_ext(key) (key <= XKB_KEYCODE_MAX)
311*2b949d04SAndroid Build Coastguard Worker 
312*2b949d04SAndroid Build Coastguard Worker /**
313*2b949d04SAndroid Build Coastguard Worker  * Test whether a value is a valid X11 keycode.
314*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_keycode_t
315*2b949d04SAndroid Build Coastguard Worker  */
316*2b949d04SAndroid Build Coastguard Worker #define xkb_keycode_is_legal_x11(key) (key >= 8 && key <= 255)
317*2b949d04SAndroid Build Coastguard Worker 
318*2b949d04SAndroid Build Coastguard Worker /**
319*2b949d04SAndroid Build Coastguard Worker  * Names to compile a keymap with, also known as RMLVO.
320*2b949d04SAndroid Build Coastguard Worker  *
321*2b949d04SAndroid Build Coastguard Worker  * The names are the common configuration values by which a user picks
322*2b949d04SAndroid Build Coastguard Worker  * a keymap.
323*2b949d04SAndroid Build Coastguard Worker  *
324*2b949d04SAndroid Build Coastguard Worker  * If the entire struct is NULL, then each field is taken to be NULL.
325*2b949d04SAndroid Build Coastguard Worker  * You should prefer passing NULL instead of choosing your own defaults.
326*2b949d04SAndroid Build Coastguard Worker  */
327*2b949d04SAndroid Build Coastguard Worker struct xkb_rule_names {
328*2b949d04SAndroid Build Coastguard Worker     /**
329*2b949d04SAndroid Build Coastguard Worker      * The rules file to use. The rules file describes how to interpret
330*2b949d04SAndroid Build Coastguard Worker      * the values of the model, layout, variant and options fields.
331*2b949d04SAndroid Build Coastguard Worker      *
332*2b949d04SAndroid Build Coastguard Worker      * If NULL or the empty string "", a default value is used.
333*2b949d04SAndroid Build Coastguard Worker      * If the XKB_DEFAULT_RULES environment variable is set, it is used
334*2b949d04SAndroid Build Coastguard Worker      * as the default.  Otherwise the system default is used.
335*2b949d04SAndroid Build Coastguard Worker      */
336*2b949d04SAndroid Build Coastguard Worker     const char *rules;
337*2b949d04SAndroid Build Coastguard Worker     /**
338*2b949d04SAndroid Build Coastguard Worker      * The keyboard model by which to interpret keycodes and LEDs.
339*2b949d04SAndroid Build Coastguard Worker      *
340*2b949d04SAndroid Build Coastguard Worker      * If NULL or the empty string "", a default value is used.
341*2b949d04SAndroid Build Coastguard Worker      * If the XKB_DEFAULT_MODEL environment variable is set, it is used
342*2b949d04SAndroid Build Coastguard Worker      * as the default.  Otherwise the system default is used.
343*2b949d04SAndroid Build Coastguard Worker      */
344*2b949d04SAndroid Build Coastguard Worker     const char *model;
345*2b949d04SAndroid Build Coastguard Worker     /**
346*2b949d04SAndroid Build Coastguard Worker      * A comma separated list of layouts (languages) to include in the
347*2b949d04SAndroid Build Coastguard Worker      * keymap.
348*2b949d04SAndroid Build Coastguard Worker      *
349*2b949d04SAndroid Build Coastguard Worker      * If NULL or the empty string "", a default value is used.
350*2b949d04SAndroid Build Coastguard Worker      * If the XKB_DEFAULT_LAYOUT environment variable is set, it is used
351*2b949d04SAndroid Build Coastguard Worker      * as the default.  Otherwise the system default is used.
352*2b949d04SAndroid Build Coastguard Worker      */
353*2b949d04SAndroid Build Coastguard Worker     const char *layout;
354*2b949d04SAndroid Build Coastguard Worker     /**
355*2b949d04SAndroid Build Coastguard Worker      * A comma separated list of variants, one per layout, which may
356*2b949d04SAndroid Build Coastguard Worker      * modify or augment the respective layout in various ways.
357*2b949d04SAndroid Build Coastguard Worker      *
358*2b949d04SAndroid Build Coastguard Worker      * Generally, should either be empty or have the same number of values
359*2b949d04SAndroid Build Coastguard Worker      * as the number of layouts. You may use empty values as in "intl,,neo".
360*2b949d04SAndroid Build Coastguard Worker      *
361*2b949d04SAndroid Build Coastguard Worker      * If NULL or the empty string "", and a default value is also used
362*2b949d04SAndroid Build Coastguard Worker      * for the layout, a default value is used.  Otherwise no variant is
363*2b949d04SAndroid Build Coastguard Worker      * used.
364*2b949d04SAndroid Build Coastguard Worker      * If the XKB_DEFAULT_VARIANT environment variable is set, it is used
365*2b949d04SAndroid Build Coastguard Worker      * as the default.  Otherwise the system default is used.
366*2b949d04SAndroid Build Coastguard Worker      */
367*2b949d04SAndroid Build Coastguard Worker     const char *variant;
368*2b949d04SAndroid Build Coastguard Worker     /**
369*2b949d04SAndroid Build Coastguard Worker      * A comma separated list of options, through which the user specifies
370*2b949d04SAndroid Build Coastguard Worker      * non-layout related preferences, like which key combinations are used
371*2b949d04SAndroid Build Coastguard Worker      * for switching layouts, or which key is the Compose key.
372*2b949d04SAndroid Build Coastguard Worker      *
373*2b949d04SAndroid Build Coastguard Worker      * If NULL, a default value is used.  If the empty string "", no
374*2b949d04SAndroid Build Coastguard Worker      * options are used.
375*2b949d04SAndroid Build Coastguard Worker      * If the XKB_DEFAULT_OPTIONS environment variable is set, it is used
376*2b949d04SAndroid Build Coastguard Worker      * as the default.  Otherwise the system default is used.
377*2b949d04SAndroid Build Coastguard Worker      */
378*2b949d04SAndroid Build Coastguard Worker     const char *options;
379*2b949d04SAndroid Build Coastguard Worker };
380*2b949d04SAndroid Build Coastguard Worker 
381*2b949d04SAndroid Build Coastguard Worker /**
382*2b949d04SAndroid Build Coastguard Worker  * @defgroup keysyms Keysyms
383*2b949d04SAndroid Build Coastguard Worker  * Utility functions related to keysyms.
384*2b949d04SAndroid Build Coastguard Worker  *
385*2b949d04SAndroid Build Coastguard Worker  * @{
386*2b949d04SAndroid Build Coastguard Worker  */
387*2b949d04SAndroid Build Coastguard Worker 
388*2b949d04SAndroid Build Coastguard Worker /**
389*2b949d04SAndroid Build Coastguard Worker  * @page keysym-transformations Keysym Transformations
390*2b949d04SAndroid Build Coastguard Worker  *
391*2b949d04SAndroid Build Coastguard Worker  * Keysym translation is subject to several "keysym transformations",
392*2b949d04SAndroid Build Coastguard Worker  * as described in the XKB specification.  These are:
393*2b949d04SAndroid Build Coastguard Worker  *
394*2b949d04SAndroid Build Coastguard Worker  * - Capitalization transformation.  If the Caps Lock modifier is
395*2b949d04SAndroid Build Coastguard Worker  *   active and was not consumed by the translation process, a single
396*2b949d04SAndroid Build Coastguard Worker  *   keysym is transformed to its upper-case form (if applicable).
397*2b949d04SAndroid Build Coastguard Worker  *   Similarly, the UTF-8/UTF-32 string produced is capitalized.
398*2b949d04SAndroid Build Coastguard Worker  *
399*2b949d04SAndroid Build Coastguard Worker  *   This is described in:
400*2b949d04SAndroid Build Coastguard Worker  *   https://www.x.org/releases/current/doc/kbproto/xkbproto.html#Interpreting_the_Lock_Modifier
401*2b949d04SAndroid Build Coastguard Worker  *
402*2b949d04SAndroid Build Coastguard Worker  * - Control transformation.  If the Control modifier is active and
403*2b949d04SAndroid Build Coastguard Worker  *   was not consumed by the translation process, the string produced
404*2b949d04SAndroid Build Coastguard Worker  *   is transformed to its matching ASCII control character (if
405*2b949d04SAndroid Build Coastguard Worker  *   applicable).  Keysyms are not affected.
406*2b949d04SAndroid Build Coastguard Worker  *
407*2b949d04SAndroid Build Coastguard Worker  *   This is described in:
408*2b949d04SAndroid Build Coastguard Worker  *   https://www.x.org/releases/current/doc/kbproto/xkbproto.html#Interpreting_the_Control_Modifier
409*2b949d04SAndroid Build Coastguard Worker  *
410*2b949d04SAndroid Build Coastguard Worker  * Each relevant function discusses which transformations it performs.
411*2b949d04SAndroid Build Coastguard Worker  *
412*2b949d04SAndroid Build Coastguard Worker  * These transformations are not applicable when a key produces multiple
413*2b949d04SAndroid Build Coastguard Worker  * keysyms.
414*2b949d04SAndroid Build Coastguard Worker  */
415*2b949d04SAndroid Build Coastguard Worker 
416*2b949d04SAndroid Build Coastguard Worker 
417*2b949d04SAndroid Build Coastguard Worker /**
418*2b949d04SAndroid Build Coastguard Worker  * Get the name of a keysym.
419*2b949d04SAndroid Build Coastguard Worker  *
420*2b949d04SAndroid Build Coastguard Worker  * For a description of how keysyms are named, see @ref xkb_keysym_t.
421*2b949d04SAndroid Build Coastguard Worker  *
422*2b949d04SAndroid Build Coastguard Worker  * @param[in]  keysym The keysym.
423*2b949d04SAndroid Build Coastguard Worker  * @param[out] buffer A string buffer to write the name into.
424*2b949d04SAndroid Build Coastguard Worker  * @param[in]  size   Size of the buffer.
425*2b949d04SAndroid Build Coastguard Worker  *
426*2b949d04SAndroid Build Coastguard Worker  * @warning If the buffer passed is too small, the string is truncated
427*2b949d04SAndroid Build Coastguard Worker  * (though still NUL-terminated); a size of at least 64 bytes is recommended.
428*2b949d04SAndroid Build Coastguard Worker  *
429*2b949d04SAndroid Build Coastguard Worker  * @returns The number of bytes in the name, excluding the NUL byte. If
430*2b949d04SAndroid Build Coastguard Worker  * the keysym is invalid, returns -1.
431*2b949d04SAndroid Build Coastguard Worker  *
432*2b949d04SAndroid Build Coastguard Worker  * You may check if truncation has occurred by comparing the return value
433*2b949d04SAndroid Build Coastguard Worker  * with the length of buffer, similarly to the snprintf(3) function.
434*2b949d04SAndroid Build Coastguard Worker  *
435*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_keysym_t
436*2b949d04SAndroid Build Coastguard Worker  */
437*2b949d04SAndroid Build Coastguard Worker int
438*2b949d04SAndroid Build Coastguard Worker xkb_keysym_get_name(xkb_keysym_t keysym, char *buffer, size_t size);
439*2b949d04SAndroid Build Coastguard Worker 
440*2b949d04SAndroid Build Coastguard Worker /** Flags for xkb_keysym_from_name(). */
441*2b949d04SAndroid Build Coastguard Worker enum xkb_keysym_flags {
442*2b949d04SAndroid Build Coastguard Worker     /** Do not apply any flags. */
443*2b949d04SAndroid Build Coastguard Worker     XKB_KEYSYM_NO_FLAGS = 0,
444*2b949d04SAndroid Build Coastguard Worker     /** Find keysym by case-insensitive search. */
445*2b949d04SAndroid Build Coastguard Worker     XKB_KEYSYM_CASE_INSENSITIVE = (1 << 0)
446*2b949d04SAndroid Build Coastguard Worker };
447*2b949d04SAndroid Build Coastguard Worker 
448*2b949d04SAndroid Build Coastguard Worker /**
449*2b949d04SAndroid Build Coastguard Worker  * Get a keysym from its name.
450*2b949d04SAndroid Build Coastguard Worker  *
451*2b949d04SAndroid Build Coastguard Worker  * @param name The name of a keysym. See remarks in xkb_keysym_get_name();
452*2b949d04SAndroid Build Coastguard Worker  * this function will accept any name returned by that function.
453*2b949d04SAndroid Build Coastguard Worker  * @param flags A set of flags controlling how the search is done. If
454*2b949d04SAndroid Build Coastguard Worker  * invalid flags are passed, this will fail with XKB_KEY_NoSymbol.
455*2b949d04SAndroid Build Coastguard Worker  *
456*2b949d04SAndroid Build Coastguard Worker  * If you use the XKB_KEYSYM_CASE_INSENSITIVE flag and two keysym names
457*2b949d04SAndroid Build Coastguard Worker  * differ only by case, then the lower-case keysym is returned.  For
458*2b949d04SAndroid Build Coastguard Worker  * instance, for KEY_a and KEY_A, this function would return KEY_a for the
459*2b949d04SAndroid Build Coastguard Worker  * case-insensitive search.  If this functionality is needed, it is
460*2b949d04SAndroid Build Coastguard Worker  * recommended to first call this function without this flag; and if that
461*2b949d04SAndroid Build Coastguard Worker  * fails, only then to try with this flag, while possibly warning the user
462*2b949d04SAndroid Build Coastguard Worker  * he had misspelled the name, and might get wrong results.
463*2b949d04SAndroid Build Coastguard Worker  *
464*2b949d04SAndroid Build Coastguard Worker  * Case folding is done according to the C locale; the current locale is not
465*2b949d04SAndroid Build Coastguard Worker  * consulted.
466*2b949d04SAndroid Build Coastguard Worker  *
467*2b949d04SAndroid Build Coastguard Worker  * @returns The keysym. If the name is invalid, returns XKB_KEY_NoSymbol.
468*2b949d04SAndroid Build Coastguard Worker  *
469*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_keysym_t
470*2b949d04SAndroid Build Coastguard Worker  */
471*2b949d04SAndroid Build Coastguard Worker xkb_keysym_t
472*2b949d04SAndroid Build Coastguard Worker xkb_keysym_from_name(const char *name, enum xkb_keysym_flags flags);
473*2b949d04SAndroid Build Coastguard Worker 
474*2b949d04SAndroid Build Coastguard Worker /**
475*2b949d04SAndroid Build Coastguard Worker  * Get the Unicode/UTF-8 representation of a keysym.
476*2b949d04SAndroid Build Coastguard Worker  *
477*2b949d04SAndroid Build Coastguard Worker  * @param[in]  keysym The keysym.
478*2b949d04SAndroid Build Coastguard Worker  * @param[out] buffer A buffer to write the UTF-8 string into.
479*2b949d04SAndroid Build Coastguard Worker  * @param[in]  size   The size of buffer.  Must be at least 7.
480*2b949d04SAndroid Build Coastguard Worker  *
481*2b949d04SAndroid Build Coastguard Worker  * @returns The number of bytes written to the buffer (including the
482*2b949d04SAndroid Build Coastguard Worker  * terminating byte).  If the keysym does not have a Unicode
483*2b949d04SAndroid Build Coastguard Worker  * representation, returns 0.  If the buffer is too small, returns -1.
484*2b949d04SAndroid Build Coastguard Worker  *
485*2b949d04SAndroid Build Coastguard Worker  * This function does not perform any @ref keysym-transformations.
486*2b949d04SAndroid Build Coastguard Worker  * Therefore, prefer to use xkb_state_key_get_utf8() if possible.
487*2b949d04SAndroid Build Coastguard Worker  *
488*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_state_key_get_utf8()
489*2b949d04SAndroid Build Coastguard Worker  */
490*2b949d04SAndroid Build Coastguard Worker int
491*2b949d04SAndroid Build Coastguard Worker xkb_keysym_to_utf8(xkb_keysym_t keysym, char *buffer, size_t size);
492*2b949d04SAndroid Build Coastguard Worker 
493*2b949d04SAndroid Build Coastguard Worker /**
494*2b949d04SAndroid Build Coastguard Worker  * Get the Unicode/UTF-32 representation of a keysym.
495*2b949d04SAndroid Build Coastguard Worker  *
496*2b949d04SAndroid Build Coastguard Worker  * @returns The Unicode/UTF-32 representation of keysym, which is also
497*2b949d04SAndroid Build Coastguard Worker  * compatible with UCS-4.  If the keysym does not have a Unicode
498*2b949d04SAndroid Build Coastguard Worker  * representation, returns 0.
499*2b949d04SAndroid Build Coastguard Worker  *
500*2b949d04SAndroid Build Coastguard Worker  * This function does not perform any @ref keysym-transformations.
501*2b949d04SAndroid Build Coastguard Worker  * Therefore, prefer to use xkb_state_key_get_utf32() if possible.
502*2b949d04SAndroid Build Coastguard Worker  *
503*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_state_key_get_utf32()
504*2b949d04SAndroid Build Coastguard Worker  */
505*2b949d04SAndroid Build Coastguard Worker uint32_t
506*2b949d04SAndroid Build Coastguard Worker xkb_keysym_to_utf32(xkb_keysym_t keysym);
507*2b949d04SAndroid Build Coastguard Worker 
508*2b949d04SAndroid Build Coastguard Worker /**
509*2b949d04SAndroid Build Coastguard Worker  * Get the keysym corresponding to a Unicode/UTF-32 codepoint.
510*2b949d04SAndroid Build Coastguard Worker  *
511*2b949d04SAndroid Build Coastguard Worker  * @returns The keysym corresponding to the specified Unicode
512*2b949d04SAndroid Build Coastguard Worker  * codepoint, or XKB_KEY_NoSymbol if there is none.
513*2b949d04SAndroid Build Coastguard Worker  *
514*2b949d04SAndroid Build Coastguard Worker  * This function is the inverse of @ref xkb_keysym_to_utf32. In cases
515*2b949d04SAndroid Build Coastguard Worker  * where a single codepoint corresponds to multiple keysyms, returns
516*2b949d04SAndroid Build Coastguard Worker  * the keysym with the lowest value.
517*2b949d04SAndroid Build Coastguard Worker  *
518*2b949d04SAndroid Build Coastguard Worker  * Unicode codepoints which do not have a special (legacy) keysym
519*2b949d04SAndroid Build Coastguard Worker  * encoding use a direct encoding scheme. These keysyms don't usually
520*2b949d04SAndroid Build Coastguard Worker  * have an associated keysym constant (XKB_KEY_*).
521*2b949d04SAndroid Build Coastguard Worker  *
522*2b949d04SAndroid Build Coastguard Worker  * For noncharacter Unicode codepoints and codepoints outside of the
523*2b949d04SAndroid Build Coastguard Worker  * defined Unicode planes this function returns XKB_KEY_NoSymbol.
524*2b949d04SAndroid Build Coastguard Worker  *
525*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_keysym_to_utf32()
526*2b949d04SAndroid Build Coastguard Worker  * @since 1.0.0
527*2b949d04SAndroid Build Coastguard Worker  */
528*2b949d04SAndroid Build Coastguard Worker xkb_keysym_t
529*2b949d04SAndroid Build Coastguard Worker xkb_utf32_to_keysym(uint32_t ucs);
530*2b949d04SAndroid Build Coastguard Worker 
531*2b949d04SAndroid Build Coastguard Worker /**
532*2b949d04SAndroid Build Coastguard Worker  * Convert a keysym to its uppercase form.
533*2b949d04SAndroid Build Coastguard Worker  *
534*2b949d04SAndroid Build Coastguard Worker  * If there is no such form, the keysym is returned unchanged.
535*2b949d04SAndroid Build Coastguard Worker  *
536*2b949d04SAndroid Build Coastguard Worker  * The conversion rules may be incomplete; prefer to work with the Unicode
537*2b949d04SAndroid Build Coastguard Worker  * representation instead, when possible.
538*2b949d04SAndroid Build Coastguard Worker  */
539*2b949d04SAndroid Build Coastguard Worker xkb_keysym_t
540*2b949d04SAndroid Build Coastguard Worker xkb_keysym_to_upper(xkb_keysym_t ks);
541*2b949d04SAndroid Build Coastguard Worker 
542*2b949d04SAndroid Build Coastguard Worker /**
543*2b949d04SAndroid Build Coastguard Worker  * Convert a keysym to its lowercase form.
544*2b949d04SAndroid Build Coastguard Worker  *
545*2b949d04SAndroid Build Coastguard Worker  * The conversion rules may be incomplete; prefer to work with the Unicode
546*2b949d04SAndroid Build Coastguard Worker  * representation instead, when possible.
547*2b949d04SAndroid Build Coastguard Worker  */
548*2b949d04SAndroid Build Coastguard Worker xkb_keysym_t
549*2b949d04SAndroid Build Coastguard Worker xkb_keysym_to_lower(xkb_keysym_t ks);
550*2b949d04SAndroid Build Coastguard Worker 
551*2b949d04SAndroid Build Coastguard Worker /** @} */
552*2b949d04SAndroid Build Coastguard Worker 
553*2b949d04SAndroid Build Coastguard Worker /**
554*2b949d04SAndroid Build Coastguard Worker  * @defgroup context Library Context
555*2b949d04SAndroid Build Coastguard Worker  * Creating, destroying and using library contexts.
556*2b949d04SAndroid Build Coastguard Worker  *
557*2b949d04SAndroid Build Coastguard Worker  * Every keymap compilation request must have a context associated with
558*2b949d04SAndroid Build Coastguard Worker  * it.  The context keeps around state such as the include path.
559*2b949d04SAndroid Build Coastguard Worker  *
560*2b949d04SAndroid Build Coastguard Worker  * @{
561*2b949d04SAndroid Build Coastguard Worker  */
562*2b949d04SAndroid Build Coastguard Worker 
563*2b949d04SAndroid Build Coastguard Worker /**
564*2b949d04SAndroid Build Coastguard Worker  * @page envvars Environment Variables
565*2b949d04SAndroid Build Coastguard Worker  *
566*2b949d04SAndroid Build Coastguard Worker  * The user may set some environment variables which affect the library:
567*2b949d04SAndroid Build Coastguard Worker  *
568*2b949d04SAndroid Build Coastguard Worker  * - `XKB_CONFIG_ROOT`, `XKB_CONFIG_EXTRA_PATH`, `XDG_CONFIG_DIR`, `HOME` - see @ref include-path.
569*2b949d04SAndroid Build Coastguard Worker  * - `XKB_LOG_LEVEL` - see xkb_context_set_log_level().
570*2b949d04SAndroid Build Coastguard Worker  * - `XKB_LOG_VERBOSITY` - see xkb_context_set_log_verbosity().
571*2b949d04SAndroid Build Coastguard Worker  * - `XKB_DEFAULT_RULES`, `XKB_DEFAULT_MODEL`, `XKB_DEFAULT_LAYOUT`,
572*2b949d04SAndroid Build Coastguard Worker  *   `XKB_DEFAULT_VARIANT`, `XKB_DEFAULT_OPTIONS` - see xkb_rule_names.
573*2b949d04SAndroid Build Coastguard Worker  */
574*2b949d04SAndroid Build Coastguard Worker 
575*2b949d04SAndroid Build Coastguard Worker /** Flags for context creation. */
576*2b949d04SAndroid Build Coastguard Worker enum xkb_context_flags {
577*2b949d04SAndroid Build Coastguard Worker     /** Do not apply any context flags. */
578*2b949d04SAndroid Build Coastguard Worker     XKB_CONTEXT_NO_FLAGS = 0,
579*2b949d04SAndroid Build Coastguard Worker     /** Create this context with an empty include path. */
580*2b949d04SAndroid Build Coastguard Worker     XKB_CONTEXT_NO_DEFAULT_INCLUDES = (1 << 0),
581*2b949d04SAndroid Build Coastguard Worker     /**
582*2b949d04SAndroid Build Coastguard Worker      * Don't take RMLVO names from the environment.
583*2b949d04SAndroid Build Coastguard Worker      * @since 0.3.0
584*2b949d04SAndroid Build Coastguard Worker      */
585*2b949d04SAndroid Build Coastguard Worker     XKB_CONTEXT_NO_ENVIRONMENT_NAMES = (1 << 1)
586*2b949d04SAndroid Build Coastguard Worker };
587*2b949d04SAndroid Build Coastguard Worker 
588*2b949d04SAndroid Build Coastguard Worker /**
589*2b949d04SAndroid Build Coastguard Worker  * Create a new context.
590*2b949d04SAndroid Build Coastguard Worker  *
591*2b949d04SAndroid Build Coastguard Worker  * @param flags Optional flags for the context, or 0.
592*2b949d04SAndroid Build Coastguard Worker  *
593*2b949d04SAndroid Build Coastguard Worker  * @returns A new context, or NULL on failure.
594*2b949d04SAndroid Build Coastguard Worker  *
595*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_context
596*2b949d04SAndroid Build Coastguard Worker  */
597*2b949d04SAndroid Build Coastguard Worker struct xkb_context *
598*2b949d04SAndroid Build Coastguard Worker xkb_context_new(enum xkb_context_flags flags);
599*2b949d04SAndroid Build Coastguard Worker 
600*2b949d04SAndroid Build Coastguard Worker /**
601*2b949d04SAndroid Build Coastguard Worker  * Take a new reference on a context.
602*2b949d04SAndroid Build Coastguard Worker  *
603*2b949d04SAndroid Build Coastguard Worker  * @returns The passed in context.
604*2b949d04SAndroid Build Coastguard Worker  *
605*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_context
606*2b949d04SAndroid Build Coastguard Worker  */
607*2b949d04SAndroid Build Coastguard Worker struct xkb_context *
608*2b949d04SAndroid Build Coastguard Worker xkb_context_ref(struct xkb_context *context);
609*2b949d04SAndroid Build Coastguard Worker 
610*2b949d04SAndroid Build Coastguard Worker /**
611*2b949d04SAndroid Build Coastguard Worker  * Release a reference on a context, and possibly free it.
612*2b949d04SAndroid Build Coastguard Worker  *
613*2b949d04SAndroid Build Coastguard Worker  * @param context The context.  If it is NULL, this function does nothing.
614*2b949d04SAndroid Build Coastguard Worker  *
615*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_context
616*2b949d04SAndroid Build Coastguard Worker  */
617*2b949d04SAndroid Build Coastguard Worker void
618*2b949d04SAndroid Build Coastguard Worker xkb_context_unref(struct xkb_context *context);
619*2b949d04SAndroid Build Coastguard Worker 
620*2b949d04SAndroid Build Coastguard Worker /**
621*2b949d04SAndroid Build Coastguard Worker  * Store custom user data in the context.
622*2b949d04SAndroid Build Coastguard Worker  *
623*2b949d04SAndroid Build Coastguard Worker  * This may be useful in conjunction with xkb_context_set_log_fn() or other
624*2b949d04SAndroid Build Coastguard Worker  * callbacks.
625*2b949d04SAndroid Build Coastguard Worker  *
626*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_context
627*2b949d04SAndroid Build Coastguard Worker  */
628*2b949d04SAndroid Build Coastguard Worker void
629*2b949d04SAndroid Build Coastguard Worker xkb_context_set_user_data(struct xkb_context *context, void *user_data);
630*2b949d04SAndroid Build Coastguard Worker 
631*2b949d04SAndroid Build Coastguard Worker /**
632*2b949d04SAndroid Build Coastguard Worker  * Retrieves stored user data from the context.
633*2b949d04SAndroid Build Coastguard Worker  *
634*2b949d04SAndroid Build Coastguard Worker  * @returns The stored user data.  If the user data wasn't set, or the
635*2b949d04SAndroid Build Coastguard Worker  * passed in context is NULL, returns NULL.
636*2b949d04SAndroid Build Coastguard Worker  *
637*2b949d04SAndroid Build Coastguard Worker  * This may be useful to access private user data from callbacks like a
638*2b949d04SAndroid Build Coastguard Worker  * custom logging function.
639*2b949d04SAndroid Build Coastguard Worker  *
640*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_context
641*2b949d04SAndroid Build Coastguard Worker  **/
642*2b949d04SAndroid Build Coastguard Worker void *
643*2b949d04SAndroid Build Coastguard Worker xkb_context_get_user_data(struct xkb_context *context);
644*2b949d04SAndroid Build Coastguard Worker 
645*2b949d04SAndroid Build Coastguard Worker /** @} */
646*2b949d04SAndroid Build Coastguard Worker 
647*2b949d04SAndroid Build Coastguard Worker /**
648*2b949d04SAndroid Build Coastguard Worker  * @defgroup include-path Include Paths
649*2b949d04SAndroid Build Coastguard Worker  * Manipulating the include paths in a context.
650*2b949d04SAndroid Build Coastguard Worker  *
651*2b949d04SAndroid Build Coastguard Worker  * The include paths are the file-system paths that are searched when an
652*2b949d04SAndroid Build Coastguard Worker  * include statement is encountered during keymap compilation.
653*2b949d04SAndroid Build Coastguard Worker  *
654*2b949d04SAndroid Build Coastguard Worker  * The default include paths are, in that lookup order:
655*2b949d04SAndroid Build Coastguard Worker  * - The path `$XDG_CONFIG_HOME/xkb`, with the usual `XDG_CONFIG_HOME`
656*2b949d04SAndroid Build Coastguard Worker  *   fallback to `$HOME/.config/` if unset.
657*2b949d04SAndroid Build Coastguard Worker  * - The path `$HOME/.xkb`, where $HOME is the value of the environment
658*2b949d04SAndroid Build Coastguard Worker  *   variable `HOME`.
659*2b949d04SAndroid Build Coastguard Worker  * - The `XKB_CONFIG_EXTRA_PATH` environment variable, if defined, otherwise the
660*2b949d04SAndroid Build Coastguard Worker  *   system configuration directory, defined at library configuration time
661*2b949d04SAndroid Build Coastguard Worker  *   (usually `/etc/xkb`).
662*2b949d04SAndroid Build Coastguard Worker  * - The `XKB_CONFIG_ROOT` environment variable, if defined, otherwise
663*2b949d04SAndroid Build Coastguard Worker  *   the system XKB root, defined at library configuration time.
664*2b949d04SAndroid Build Coastguard Worker  *
665*2b949d04SAndroid Build Coastguard Worker  * @{
666*2b949d04SAndroid Build Coastguard Worker  */
667*2b949d04SAndroid Build Coastguard Worker 
668*2b949d04SAndroid Build Coastguard Worker /**
669*2b949d04SAndroid Build Coastguard Worker  * Append a new entry to the context's include path.
670*2b949d04SAndroid Build Coastguard Worker  *
671*2b949d04SAndroid Build Coastguard Worker  * @returns 1 on success, or 0 if the include path could not be added or is
672*2b949d04SAndroid Build Coastguard Worker  * inaccessible.
673*2b949d04SAndroid Build Coastguard Worker  *
674*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_context
675*2b949d04SAndroid Build Coastguard Worker  */
676*2b949d04SAndroid Build Coastguard Worker int
677*2b949d04SAndroid Build Coastguard Worker xkb_context_include_path_append(struct xkb_context *context, const char *path);
678*2b949d04SAndroid Build Coastguard Worker 
679*2b949d04SAndroid Build Coastguard Worker /**
680*2b949d04SAndroid Build Coastguard Worker  * Append the default include paths to the context's include path.
681*2b949d04SAndroid Build Coastguard Worker  *
682*2b949d04SAndroid Build Coastguard Worker  * @returns 1 on success, or 0 if the primary include path could not be added.
683*2b949d04SAndroid Build Coastguard Worker  *
684*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_context
685*2b949d04SAndroid Build Coastguard Worker  */
686*2b949d04SAndroid Build Coastguard Worker int
687*2b949d04SAndroid Build Coastguard Worker xkb_context_include_path_append_default(struct xkb_context *context);
688*2b949d04SAndroid Build Coastguard Worker 
689*2b949d04SAndroid Build Coastguard Worker /**
690*2b949d04SAndroid Build Coastguard Worker  * Reset the context's include path to the default.
691*2b949d04SAndroid Build Coastguard Worker  *
692*2b949d04SAndroid Build Coastguard Worker  * Removes all entries from the context's include path, and inserts the
693*2b949d04SAndroid Build Coastguard Worker  * default paths.
694*2b949d04SAndroid Build Coastguard Worker  *
695*2b949d04SAndroid Build Coastguard Worker  * @returns 1 on success, or 0 if the primary include path could not be added.
696*2b949d04SAndroid Build Coastguard Worker  *
697*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_context
698*2b949d04SAndroid Build Coastguard Worker  */
699*2b949d04SAndroid Build Coastguard Worker int
700*2b949d04SAndroid Build Coastguard Worker xkb_context_include_path_reset_defaults(struct xkb_context *context);
701*2b949d04SAndroid Build Coastguard Worker 
702*2b949d04SAndroid Build Coastguard Worker /**
703*2b949d04SAndroid Build Coastguard Worker  * Remove all entries from the context's include path.
704*2b949d04SAndroid Build Coastguard Worker  *
705*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_context
706*2b949d04SAndroid Build Coastguard Worker  */
707*2b949d04SAndroid Build Coastguard Worker void
708*2b949d04SAndroid Build Coastguard Worker xkb_context_include_path_clear(struct xkb_context *context);
709*2b949d04SAndroid Build Coastguard Worker 
710*2b949d04SAndroid Build Coastguard Worker /**
711*2b949d04SAndroid Build Coastguard Worker  * Get the number of paths in the context's include path.
712*2b949d04SAndroid Build Coastguard Worker  *
713*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_context
714*2b949d04SAndroid Build Coastguard Worker  */
715*2b949d04SAndroid Build Coastguard Worker unsigned int
716*2b949d04SAndroid Build Coastguard Worker xkb_context_num_include_paths(struct xkb_context *context);
717*2b949d04SAndroid Build Coastguard Worker 
718*2b949d04SAndroid Build Coastguard Worker /**
719*2b949d04SAndroid Build Coastguard Worker  * Get a specific include path from the context's include path.
720*2b949d04SAndroid Build Coastguard Worker  *
721*2b949d04SAndroid Build Coastguard Worker  * @returns The include path at the specified index.  If the index is
722*2b949d04SAndroid Build Coastguard Worker  * invalid, returns NULL.
723*2b949d04SAndroid Build Coastguard Worker  *
724*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_context
725*2b949d04SAndroid Build Coastguard Worker  */
726*2b949d04SAndroid Build Coastguard Worker const char *
727*2b949d04SAndroid Build Coastguard Worker xkb_context_include_path_get(struct xkb_context *context, unsigned int index);
728*2b949d04SAndroid Build Coastguard Worker 
729*2b949d04SAndroid Build Coastguard Worker /** @} */
730*2b949d04SAndroid Build Coastguard Worker 
731*2b949d04SAndroid Build Coastguard Worker /**
732*2b949d04SAndroid Build Coastguard Worker  * @defgroup logging Logging Handling
733*2b949d04SAndroid Build Coastguard Worker  * Manipulating how logging from this library is handled.
734*2b949d04SAndroid Build Coastguard Worker  *
735*2b949d04SAndroid Build Coastguard Worker  * @{
736*2b949d04SAndroid Build Coastguard Worker  */
737*2b949d04SAndroid Build Coastguard Worker 
738*2b949d04SAndroid Build Coastguard Worker /** Specifies a logging level. */
739*2b949d04SAndroid Build Coastguard Worker enum xkb_log_level {
740*2b949d04SAndroid Build Coastguard Worker     XKB_LOG_LEVEL_CRITICAL = 10, /**< Log critical internal errors only. */
741*2b949d04SAndroid Build Coastguard Worker     XKB_LOG_LEVEL_ERROR = 20,    /**< Log all errors. */
742*2b949d04SAndroid Build Coastguard Worker     XKB_LOG_LEVEL_WARNING = 30,  /**< Log warnings and errors. */
743*2b949d04SAndroid Build Coastguard Worker     XKB_LOG_LEVEL_INFO = 40,     /**< Log information, warnings, and errors. */
744*2b949d04SAndroid Build Coastguard Worker     XKB_LOG_LEVEL_DEBUG = 50     /**< Log everything. */
745*2b949d04SAndroid Build Coastguard Worker };
746*2b949d04SAndroid Build Coastguard Worker 
747*2b949d04SAndroid Build Coastguard Worker /**
748*2b949d04SAndroid Build Coastguard Worker  * Set the current logging level.
749*2b949d04SAndroid Build Coastguard Worker  *
750*2b949d04SAndroid Build Coastguard Worker  * @param context The context in which to set the logging level.
751*2b949d04SAndroid Build Coastguard Worker  * @param level   The logging level to use.  Only messages from this level
752*2b949d04SAndroid Build Coastguard Worker  * and below will be logged.
753*2b949d04SAndroid Build Coastguard Worker  *
754*2b949d04SAndroid Build Coastguard Worker  * The default level is XKB_LOG_LEVEL_ERROR.  The environment variable
755*2b949d04SAndroid Build Coastguard Worker  * XKB_LOG_LEVEL, if set in the time the context was created, overrides the
756*2b949d04SAndroid Build Coastguard Worker  * default value.  It may be specified as a level number or name.
757*2b949d04SAndroid Build Coastguard Worker  *
758*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_context
759*2b949d04SAndroid Build Coastguard Worker  */
760*2b949d04SAndroid Build Coastguard Worker void
761*2b949d04SAndroid Build Coastguard Worker xkb_context_set_log_level(struct xkb_context *context,
762*2b949d04SAndroid Build Coastguard Worker                           enum xkb_log_level level);
763*2b949d04SAndroid Build Coastguard Worker 
764*2b949d04SAndroid Build Coastguard Worker /**
765*2b949d04SAndroid Build Coastguard Worker  * Get the current logging level.
766*2b949d04SAndroid Build Coastguard Worker  *
767*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_context
768*2b949d04SAndroid Build Coastguard Worker  */
769*2b949d04SAndroid Build Coastguard Worker enum xkb_log_level
770*2b949d04SAndroid Build Coastguard Worker xkb_context_get_log_level(struct xkb_context *context);
771*2b949d04SAndroid Build Coastguard Worker 
772*2b949d04SAndroid Build Coastguard Worker /**
773*2b949d04SAndroid Build Coastguard Worker  * Sets the current logging verbosity.
774*2b949d04SAndroid Build Coastguard Worker  *
775*2b949d04SAndroid Build Coastguard Worker  * The library can generate a number of warnings which are not helpful to
776*2b949d04SAndroid Build Coastguard Worker  * ordinary users of the library.  The verbosity may be increased if more
777*2b949d04SAndroid Build Coastguard Worker  * information is desired (e.g. when developing a new keymap).
778*2b949d04SAndroid Build Coastguard Worker  *
779*2b949d04SAndroid Build Coastguard Worker  * The default verbosity is 0.  The environment variable XKB_LOG_VERBOSITY,
780*2b949d04SAndroid Build Coastguard Worker  * if set in the time the context was created, overrides the default value.
781*2b949d04SAndroid Build Coastguard Worker  *
782*2b949d04SAndroid Build Coastguard Worker  * @param context   The context in which to use the set verbosity.
783*2b949d04SAndroid Build Coastguard Worker  * @param verbosity The verbosity to use.  Currently used values are
784*2b949d04SAndroid Build Coastguard Worker  * 1 to 10, higher values being more verbose.  0 would result in no verbose
785*2b949d04SAndroid Build Coastguard Worker  * messages being logged.
786*2b949d04SAndroid Build Coastguard Worker  *
787*2b949d04SAndroid Build Coastguard Worker  * Most verbose messages are of level XKB_LOG_LEVEL_WARNING or lower.
788*2b949d04SAndroid Build Coastguard Worker  *
789*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_context
790*2b949d04SAndroid Build Coastguard Worker  */
791*2b949d04SAndroid Build Coastguard Worker void
792*2b949d04SAndroid Build Coastguard Worker xkb_context_set_log_verbosity(struct xkb_context *context, int verbosity);
793*2b949d04SAndroid Build Coastguard Worker 
794*2b949d04SAndroid Build Coastguard Worker /**
795*2b949d04SAndroid Build Coastguard Worker  * Get the current logging verbosity of the context.
796*2b949d04SAndroid Build Coastguard Worker  *
797*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_context
798*2b949d04SAndroid Build Coastguard Worker  */
799*2b949d04SAndroid Build Coastguard Worker int
800*2b949d04SAndroid Build Coastguard Worker xkb_context_get_log_verbosity(struct xkb_context *context);
801*2b949d04SAndroid Build Coastguard Worker 
802*2b949d04SAndroid Build Coastguard Worker /**
803*2b949d04SAndroid Build Coastguard Worker  * Set a custom function to handle logging messages.
804*2b949d04SAndroid Build Coastguard Worker  *
805*2b949d04SAndroid Build Coastguard Worker  * @param context The context in which to use the set logging function.
806*2b949d04SAndroid Build Coastguard Worker  * @param log_fn  The function that will be called for logging messages.
807*2b949d04SAndroid Build Coastguard Worker  * Passing NULL restores the default function, which logs to stderr.
808*2b949d04SAndroid Build Coastguard Worker  *
809*2b949d04SAndroid Build Coastguard Worker  * By default, log messages from this library are printed to stderr.  This
810*2b949d04SAndroid Build Coastguard Worker  * function allows you to replace the default behavior with a custom
811*2b949d04SAndroid Build Coastguard Worker  * handler.  The handler is only called with messages which match the
812*2b949d04SAndroid Build Coastguard Worker  * current logging level and verbosity settings for the context.
813*2b949d04SAndroid Build Coastguard Worker  * level is the logging level of the message.  @a format and @a args are
814*2b949d04SAndroid Build Coastguard Worker  * the same as in the vprintf(3) function.
815*2b949d04SAndroid Build Coastguard Worker  *
816*2b949d04SAndroid Build Coastguard Worker  * You may use xkb_context_set_user_data() on the context, and then call
817*2b949d04SAndroid Build Coastguard Worker  * xkb_context_get_user_data() from within the logging function to provide
818*2b949d04SAndroid Build Coastguard Worker  * it with additional private context.
819*2b949d04SAndroid Build Coastguard Worker  *
820*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_context
821*2b949d04SAndroid Build Coastguard Worker  */
822*2b949d04SAndroid Build Coastguard Worker void
823*2b949d04SAndroid Build Coastguard Worker xkb_context_set_log_fn(struct xkb_context *context,
824*2b949d04SAndroid Build Coastguard Worker                        void (*log_fn)(struct xkb_context *context,
825*2b949d04SAndroid Build Coastguard Worker                                       enum xkb_log_level level,
826*2b949d04SAndroid Build Coastguard Worker                                       const char *format, va_list args));
827*2b949d04SAndroid Build Coastguard Worker 
828*2b949d04SAndroid Build Coastguard Worker /** @} */
829*2b949d04SAndroid Build Coastguard Worker 
830*2b949d04SAndroid Build Coastguard Worker /**
831*2b949d04SAndroid Build Coastguard Worker  * @defgroup keymap Keymap Creation
832*2b949d04SAndroid Build Coastguard Worker  * Creating and destroying keymaps.
833*2b949d04SAndroid Build Coastguard Worker  *
834*2b949d04SAndroid Build Coastguard Worker  * @{
835*2b949d04SAndroid Build Coastguard Worker  */
836*2b949d04SAndroid Build Coastguard Worker 
837*2b949d04SAndroid Build Coastguard Worker /** Flags for keymap compilation. */
838*2b949d04SAndroid Build Coastguard Worker enum xkb_keymap_compile_flags {
839*2b949d04SAndroid Build Coastguard Worker     /** Do not apply any flags. */
840*2b949d04SAndroid Build Coastguard Worker     XKB_KEYMAP_COMPILE_NO_FLAGS = 0
841*2b949d04SAndroid Build Coastguard Worker };
842*2b949d04SAndroid Build Coastguard Worker 
843*2b949d04SAndroid Build Coastguard Worker /**
844*2b949d04SAndroid Build Coastguard Worker  * Create a keymap from RMLVO names.
845*2b949d04SAndroid Build Coastguard Worker  *
846*2b949d04SAndroid Build Coastguard Worker  * The primary keymap entry point: creates a new XKB keymap from a set of
847*2b949d04SAndroid Build Coastguard Worker  * RMLVO (Rules + Model + Layouts + Variants + Options) names.
848*2b949d04SAndroid Build Coastguard Worker  *
849*2b949d04SAndroid Build Coastguard Worker  * @param context The context in which to create the keymap.
850*2b949d04SAndroid Build Coastguard Worker  * @param names   The RMLVO names to use.  See xkb_rule_names.
851*2b949d04SAndroid Build Coastguard Worker  * @param flags   Optional flags for the keymap, or 0.
852*2b949d04SAndroid Build Coastguard Worker  *
853*2b949d04SAndroid Build Coastguard Worker  * @returns A keymap compiled according to the RMLVO names, or NULL if
854*2b949d04SAndroid Build Coastguard Worker  * the compilation failed.
855*2b949d04SAndroid Build Coastguard Worker  *
856*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_rule_names
857*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_keymap
858*2b949d04SAndroid Build Coastguard Worker  */
859*2b949d04SAndroid Build Coastguard Worker struct xkb_keymap *
860*2b949d04SAndroid Build Coastguard Worker xkb_keymap_new_from_names(struct xkb_context *context,
861*2b949d04SAndroid Build Coastguard Worker                           const struct xkb_rule_names *names,
862*2b949d04SAndroid Build Coastguard Worker                           enum xkb_keymap_compile_flags flags);
863*2b949d04SAndroid Build Coastguard Worker 
864*2b949d04SAndroid Build Coastguard Worker /** The possible keymap formats. */
865*2b949d04SAndroid Build Coastguard Worker enum xkb_keymap_format {
866*2b949d04SAndroid Build Coastguard Worker     /** The current/classic XKB text format, as generated by xkbcomp -xkb. */
867*2b949d04SAndroid Build Coastguard Worker     XKB_KEYMAP_FORMAT_TEXT_V1 = 1
868*2b949d04SAndroid Build Coastguard Worker };
869*2b949d04SAndroid Build Coastguard Worker 
870*2b949d04SAndroid Build Coastguard Worker /**
871*2b949d04SAndroid Build Coastguard Worker  * Create a keymap from a keymap file.
872*2b949d04SAndroid Build Coastguard Worker  *
873*2b949d04SAndroid Build Coastguard Worker  * @param context The context in which to create the keymap.
874*2b949d04SAndroid Build Coastguard Worker  * @param file    The keymap file to compile.
875*2b949d04SAndroid Build Coastguard Worker  * @param format  The text format of the keymap file to compile.
876*2b949d04SAndroid Build Coastguard Worker  * @param flags   Optional flags for the keymap, or 0.
877*2b949d04SAndroid Build Coastguard Worker  *
878*2b949d04SAndroid Build Coastguard Worker  * @returns A keymap compiled from the given XKB keymap file, or NULL if
879*2b949d04SAndroid Build Coastguard Worker  * the compilation failed.
880*2b949d04SAndroid Build Coastguard Worker  *
881*2b949d04SAndroid Build Coastguard Worker  * The file must contain a complete keymap.  For example, in the
882*2b949d04SAndroid Build Coastguard Worker  * XKB_KEYMAP_FORMAT_TEXT_V1 format, this means the file must contain one
883*2b949d04SAndroid Build Coastguard Worker  * top level '%xkb_keymap' section, which in turn contains other required
884*2b949d04SAndroid Build Coastguard Worker  * sections.
885*2b949d04SAndroid Build Coastguard Worker  *
886*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_keymap
887*2b949d04SAndroid Build Coastguard Worker  */
888*2b949d04SAndroid Build Coastguard Worker struct xkb_keymap *
889*2b949d04SAndroid Build Coastguard Worker xkb_keymap_new_from_file(struct xkb_context *context, FILE *file,
890*2b949d04SAndroid Build Coastguard Worker                          enum xkb_keymap_format format,
891*2b949d04SAndroid Build Coastguard Worker                          enum xkb_keymap_compile_flags flags);
892*2b949d04SAndroid Build Coastguard Worker 
893*2b949d04SAndroid Build Coastguard Worker /**
894*2b949d04SAndroid Build Coastguard Worker  * Create a keymap from a keymap string.
895*2b949d04SAndroid Build Coastguard Worker  *
896*2b949d04SAndroid Build Coastguard Worker  * This is just like xkb_keymap_new_from_file(), but instead of a file, gets
897*2b949d04SAndroid Build Coastguard Worker  * the keymap as one enormous string.
898*2b949d04SAndroid Build Coastguard Worker  *
899*2b949d04SAndroid Build Coastguard Worker  * @see xkb_keymap_new_from_file()
900*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_keymap
901*2b949d04SAndroid Build Coastguard Worker  */
902*2b949d04SAndroid Build Coastguard Worker struct xkb_keymap *
903*2b949d04SAndroid Build Coastguard Worker xkb_keymap_new_from_string(struct xkb_context *context, const char *string,
904*2b949d04SAndroid Build Coastguard Worker                            enum xkb_keymap_format format,
905*2b949d04SAndroid Build Coastguard Worker                            enum xkb_keymap_compile_flags flags);
906*2b949d04SAndroid Build Coastguard Worker 
907*2b949d04SAndroid Build Coastguard Worker /**
908*2b949d04SAndroid Build Coastguard Worker  * Create a keymap from a memory buffer.
909*2b949d04SAndroid Build Coastguard Worker  *
910*2b949d04SAndroid Build Coastguard Worker  * This is just like xkb_keymap_new_from_string(), but takes a length argument
911*2b949d04SAndroid Build Coastguard Worker  * so the input string does not have to be zero-terminated.
912*2b949d04SAndroid Build Coastguard Worker  *
913*2b949d04SAndroid Build Coastguard Worker  * @see xkb_keymap_new_from_string()
914*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_keymap
915*2b949d04SAndroid Build Coastguard Worker  * @since 0.3.0
916*2b949d04SAndroid Build Coastguard Worker  */
917*2b949d04SAndroid Build Coastguard Worker struct xkb_keymap *
918*2b949d04SAndroid Build Coastguard Worker xkb_keymap_new_from_buffer(struct xkb_context *context, const char *buffer,
919*2b949d04SAndroid Build Coastguard Worker                            size_t length, enum xkb_keymap_format format,
920*2b949d04SAndroid Build Coastguard Worker                            enum xkb_keymap_compile_flags flags);
921*2b949d04SAndroid Build Coastguard Worker 
922*2b949d04SAndroid Build Coastguard Worker /**
923*2b949d04SAndroid Build Coastguard Worker  * Take a new reference on a keymap.
924*2b949d04SAndroid Build Coastguard Worker  *
925*2b949d04SAndroid Build Coastguard Worker  * @returns The passed in keymap.
926*2b949d04SAndroid Build Coastguard Worker  *
927*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_keymap
928*2b949d04SAndroid Build Coastguard Worker  */
929*2b949d04SAndroid Build Coastguard Worker struct xkb_keymap *
930*2b949d04SAndroid Build Coastguard Worker xkb_keymap_ref(struct xkb_keymap *keymap);
931*2b949d04SAndroid Build Coastguard Worker 
932*2b949d04SAndroid Build Coastguard Worker /**
933*2b949d04SAndroid Build Coastguard Worker  * Release a reference on a keymap, and possibly free it.
934*2b949d04SAndroid Build Coastguard Worker  *
935*2b949d04SAndroid Build Coastguard Worker  * @param keymap The keymap.  If it is NULL, this function does nothing.
936*2b949d04SAndroid Build Coastguard Worker  *
937*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_keymap
938*2b949d04SAndroid Build Coastguard Worker  */
939*2b949d04SAndroid Build Coastguard Worker void
940*2b949d04SAndroid Build Coastguard Worker xkb_keymap_unref(struct xkb_keymap *keymap);
941*2b949d04SAndroid Build Coastguard Worker 
942*2b949d04SAndroid Build Coastguard Worker /**
943*2b949d04SAndroid Build Coastguard Worker  * Get the keymap as a string in the format from which it was created.
944*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_keymap_get_as_string()
945*2b949d04SAndroid Build Coastguard Worker  **/
946*2b949d04SAndroid Build Coastguard Worker #define XKB_KEYMAP_USE_ORIGINAL_FORMAT ((enum xkb_keymap_format) -1)
947*2b949d04SAndroid Build Coastguard Worker 
948*2b949d04SAndroid Build Coastguard Worker /**
949*2b949d04SAndroid Build Coastguard Worker  * Get the compiled keymap as a string.
950*2b949d04SAndroid Build Coastguard Worker  *
951*2b949d04SAndroid Build Coastguard Worker  * @param keymap The keymap to get as a string.
952*2b949d04SAndroid Build Coastguard Worker  * @param format The keymap format to use for the string.  You can pass
953*2b949d04SAndroid Build Coastguard Worker  * in the special value XKB_KEYMAP_USE_ORIGINAL_FORMAT to use the format
954*2b949d04SAndroid Build Coastguard Worker  * from which the keymap was originally created.
955*2b949d04SAndroid Build Coastguard Worker  *
956*2b949d04SAndroid Build Coastguard Worker  * @returns The keymap as a NUL-terminated string, or NULL if unsuccessful.
957*2b949d04SAndroid Build Coastguard Worker  *
958*2b949d04SAndroid Build Coastguard Worker  * The returned string may be fed back into xkb_keymap_new_from_string() to get
959*2b949d04SAndroid Build Coastguard Worker  * the exact same keymap (possibly in another process, etc.).
960*2b949d04SAndroid Build Coastguard Worker  *
961*2b949d04SAndroid Build Coastguard Worker  * The returned string is dynamically allocated and should be freed by the
962*2b949d04SAndroid Build Coastguard Worker  * caller.
963*2b949d04SAndroid Build Coastguard Worker  *
964*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_keymap
965*2b949d04SAndroid Build Coastguard Worker  */
966*2b949d04SAndroid Build Coastguard Worker char *
967*2b949d04SAndroid Build Coastguard Worker xkb_keymap_get_as_string(struct xkb_keymap *keymap,
968*2b949d04SAndroid Build Coastguard Worker                          enum xkb_keymap_format format);
969*2b949d04SAndroid Build Coastguard Worker 
970*2b949d04SAndroid Build Coastguard Worker /** @} */
971*2b949d04SAndroid Build Coastguard Worker 
972*2b949d04SAndroid Build Coastguard Worker /**
973*2b949d04SAndroid Build Coastguard Worker  * @defgroup components Keymap Components
974*2b949d04SAndroid Build Coastguard Worker  * Enumeration of state components in a keymap.
975*2b949d04SAndroid Build Coastguard Worker  *
976*2b949d04SAndroid Build Coastguard Worker  * @{
977*2b949d04SAndroid Build Coastguard Worker  */
978*2b949d04SAndroid Build Coastguard Worker 
979*2b949d04SAndroid Build Coastguard Worker /**
980*2b949d04SAndroid Build Coastguard Worker  * Get the minimum keycode in the keymap.
981*2b949d04SAndroid Build Coastguard Worker  *
982*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_keycode_t
983*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_keymap
984*2b949d04SAndroid Build Coastguard Worker  * @since 0.3.1
985*2b949d04SAndroid Build Coastguard Worker  */
986*2b949d04SAndroid Build Coastguard Worker xkb_keycode_t
987*2b949d04SAndroid Build Coastguard Worker xkb_keymap_min_keycode(struct xkb_keymap *keymap);
988*2b949d04SAndroid Build Coastguard Worker 
989*2b949d04SAndroid Build Coastguard Worker /**
990*2b949d04SAndroid Build Coastguard Worker  * Get the maximum keycode in the keymap.
991*2b949d04SAndroid Build Coastguard Worker  *
992*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_keycode_t
993*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_keymap
994*2b949d04SAndroid Build Coastguard Worker  * @since 0.3.1
995*2b949d04SAndroid Build Coastguard Worker  */
996*2b949d04SAndroid Build Coastguard Worker xkb_keycode_t
997*2b949d04SAndroid Build Coastguard Worker xkb_keymap_max_keycode(struct xkb_keymap *keymap);
998*2b949d04SAndroid Build Coastguard Worker 
999*2b949d04SAndroid Build Coastguard Worker /**
1000*2b949d04SAndroid Build Coastguard Worker  * The iterator used by xkb_keymap_key_for_each().
1001*2b949d04SAndroid Build Coastguard Worker  *
1002*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_keymap_key_for_each
1003*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_keymap
1004*2b949d04SAndroid Build Coastguard Worker  * @since 0.3.1
1005*2b949d04SAndroid Build Coastguard Worker  */
1006*2b949d04SAndroid Build Coastguard Worker typedef void
1007*2b949d04SAndroid Build Coastguard Worker (*xkb_keymap_key_iter_t)(struct xkb_keymap *keymap, xkb_keycode_t key,
1008*2b949d04SAndroid Build Coastguard Worker                          void *data);
1009*2b949d04SAndroid Build Coastguard Worker 
1010*2b949d04SAndroid Build Coastguard Worker /**
1011*2b949d04SAndroid Build Coastguard Worker  * Run a specified function for every valid keycode in the keymap.  If a
1012*2b949d04SAndroid Build Coastguard Worker  * keymap is sparse, this function may be called fewer than
1013*2b949d04SAndroid Build Coastguard Worker  * (max_keycode - min_keycode + 1) times.
1014*2b949d04SAndroid Build Coastguard Worker  *
1015*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_keymap_min_keycode() xkb_keymap_max_keycode() xkb_keycode_t
1016*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_keymap
1017*2b949d04SAndroid Build Coastguard Worker  * @since 0.3.1
1018*2b949d04SAndroid Build Coastguard Worker  */
1019*2b949d04SAndroid Build Coastguard Worker void
1020*2b949d04SAndroid Build Coastguard Worker xkb_keymap_key_for_each(struct xkb_keymap *keymap, xkb_keymap_key_iter_t iter,
1021*2b949d04SAndroid Build Coastguard Worker                         void *data);
1022*2b949d04SAndroid Build Coastguard Worker 
1023*2b949d04SAndroid Build Coastguard Worker /**
1024*2b949d04SAndroid Build Coastguard Worker  * Find the name of the key with the given keycode.
1025*2b949d04SAndroid Build Coastguard Worker  *
1026*2b949d04SAndroid Build Coastguard Worker  * This function always returns the canonical name of the key (see
1027*2b949d04SAndroid Build Coastguard Worker  * description in xkb_keycode_t).
1028*2b949d04SAndroid Build Coastguard Worker  *
1029*2b949d04SAndroid Build Coastguard Worker  * @returns The key name. If no key with this keycode exists,
1030*2b949d04SAndroid Build Coastguard Worker  * returns NULL.
1031*2b949d04SAndroid Build Coastguard Worker  *
1032*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_keycode_t
1033*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_keymap
1034*2b949d04SAndroid Build Coastguard Worker  * @since 0.6.0
1035*2b949d04SAndroid Build Coastguard Worker  */
1036*2b949d04SAndroid Build Coastguard Worker const char *
1037*2b949d04SAndroid Build Coastguard Worker xkb_keymap_key_get_name(struct xkb_keymap *keymap, xkb_keycode_t key);
1038*2b949d04SAndroid Build Coastguard Worker 
1039*2b949d04SAndroid Build Coastguard Worker /**
1040*2b949d04SAndroid Build Coastguard Worker  * Find the keycode of the key with the given name.
1041*2b949d04SAndroid Build Coastguard Worker  *
1042*2b949d04SAndroid Build Coastguard Worker  * The name can be either a canonical name or an alias.
1043*2b949d04SAndroid Build Coastguard Worker  *
1044*2b949d04SAndroid Build Coastguard Worker  * @returns The keycode. If no key with this name exists,
1045*2b949d04SAndroid Build Coastguard Worker  * returns XKB_KEYCODE_INVALID.
1046*2b949d04SAndroid Build Coastguard Worker  *
1047*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_keycode_t
1048*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_keymap
1049*2b949d04SAndroid Build Coastguard Worker  * @since 0.6.0
1050*2b949d04SAndroid Build Coastguard Worker  */
1051*2b949d04SAndroid Build Coastguard Worker xkb_keycode_t
1052*2b949d04SAndroid Build Coastguard Worker xkb_keymap_key_by_name(struct xkb_keymap *keymap, const char *name);
1053*2b949d04SAndroid Build Coastguard Worker 
1054*2b949d04SAndroid Build Coastguard Worker /**
1055*2b949d04SAndroid Build Coastguard Worker  * Get the number of modifiers in the keymap.
1056*2b949d04SAndroid Build Coastguard Worker  *
1057*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_mod_index_t
1058*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_keymap
1059*2b949d04SAndroid Build Coastguard Worker  */
1060*2b949d04SAndroid Build Coastguard Worker xkb_mod_index_t
1061*2b949d04SAndroid Build Coastguard Worker xkb_keymap_num_mods(struct xkb_keymap *keymap);
1062*2b949d04SAndroid Build Coastguard Worker 
1063*2b949d04SAndroid Build Coastguard Worker /**
1064*2b949d04SAndroid Build Coastguard Worker  * Get the name of a modifier by index.
1065*2b949d04SAndroid Build Coastguard Worker  *
1066*2b949d04SAndroid Build Coastguard Worker  * @returns The name.  If the index is invalid, returns NULL.
1067*2b949d04SAndroid Build Coastguard Worker  *
1068*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_mod_index_t
1069*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_keymap
1070*2b949d04SAndroid Build Coastguard Worker  */
1071*2b949d04SAndroid Build Coastguard Worker const char *
1072*2b949d04SAndroid Build Coastguard Worker xkb_keymap_mod_get_name(struct xkb_keymap *keymap, xkb_mod_index_t idx);
1073*2b949d04SAndroid Build Coastguard Worker 
1074*2b949d04SAndroid Build Coastguard Worker /**
1075*2b949d04SAndroid Build Coastguard Worker  * Get the index of a modifier by name.
1076*2b949d04SAndroid Build Coastguard Worker  *
1077*2b949d04SAndroid Build Coastguard Worker  * @returns The index.  If no modifier with this name exists, returns
1078*2b949d04SAndroid Build Coastguard Worker  * XKB_MOD_INVALID.
1079*2b949d04SAndroid Build Coastguard Worker  *
1080*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_mod_index_t
1081*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_keymap
1082*2b949d04SAndroid Build Coastguard Worker  */
1083*2b949d04SAndroid Build Coastguard Worker xkb_mod_index_t
1084*2b949d04SAndroid Build Coastguard Worker xkb_keymap_mod_get_index(struct xkb_keymap *keymap, const char *name);
1085*2b949d04SAndroid Build Coastguard Worker 
1086*2b949d04SAndroid Build Coastguard Worker /**
1087*2b949d04SAndroid Build Coastguard Worker  * Get the number of layouts in the keymap.
1088*2b949d04SAndroid Build Coastguard Worker  *
1089*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_layout_index_t xkb_rule_names xkb_keymap_num_layouts_for_key()
1090*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_keymap
1091*2b949d04SAndroid Build Coastguard Worker  */
1092*2b949d04SAndroid Build Coastguard Worker xkb_layout_index_t
1093*2b949d04SAndroid Build Coastguard Worker xkb_keymap_num_layouts(struct xkb_keymap *keymap);
1094*2b949d04SAndroid Build Coastguard Worker 
1095*2b949d04SAndroid Build Coastguard Worker /**
1096*2b949d04SAndroid Build Coastguard Worker  * Get the name of a layout by index.
1097*2b949d04SAndroid Build Coastguard Worker  *
1098*2b949d04SAndroid Build Coastguard Worker  * @returns The name.  If the index is invalid, or the layout does not have
1099*2b949d04SAndroid Build Coastguard Worker  * a name, returns NULL.
1100*2b949d04SAndroid Build Coastguard Worker  *
1101*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_layout_index_t
1102*2b949d04SAndroid Build Coastguard Worker  *     For notes on layout names.
1103*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_keymap
1104*2b949d04SAndroid Build Coastguard Worker  */
1105*2b949d04SAndroid Build Coastguard Worker const char *
1106*2b949d04SAndroid Build Coastguard Worker xkb_keymap_layout_get_name(struct xkb_keymap *keymap, xkb_layout_index_t idx);
1107*2b949d04SAndroid Build Coastguard Worker 
1108*2b949d04SAndroid Build Coastguard Worker /**
1109*2b949d04SAndroid Build Coastguard Worker  * Get the index of a layout by name.
1110*2b949d04SAndroid Build Coastguard Worker  *
1111*2b949d04SAndroid Build Coastguard Worker  * @returns The index.  If no layout exists with this name, returns
1112*2b949d04SAndroid Build Coastguard Worker  * XKB_LAYOUT_INVALID.  If more than one layout in the keymap has this name,
1113*2b949d04SAndroid Build Coastguard Worker  * returns the lowest index among them.
1114*2b949d04SAndroid Build Coastguard Worker  *
1115*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_layout_index_t
1116*2b949d04SAndroid Build Coastguard Worker  *     For notes on layout names.
1117*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_keymap
1118*2b949d04SAndroid Build Coastguard Worker  */
1119*2b949d04SAndroid Build Coastguard Worker xkb_layout_index_t
1120*2b949d04SAndroid Build Coastguard Worker xkb_keymap_layout_get_index(struct xkb_keymap *keymap, const char *name);
1121*2b949d04SAndroid Build Coastguard Worker 
1122*2b949d04SAndroid Build Coastguard Worker /**
1123*2b949d04SAndroid Build Coastguard Worker  * Get the number of LEDs in the keymap.
1124*2b949d04SAndroid Build Coastguard Worker  *
1125*2b949d04SAndroid Build Coastguard Worker  * @warning The range [ 0...xkb_keymap_num_leds() ) includes all of the LEDs
1126*2b949d04SAndroid Build Coastguard Worker  * in the keymap, but may also contain inactive LEDs.  When iterating over
1127*2b949d04SAndroid Build Coastguard Worker  * this range, you need the handle this case when calling functions such as
1128*2b949d04SAndroid Build Coastguard Worker  * xkb_keymap_led_get_name() or xkb_state_led_index_is_active().
1129*2b949d04SAndroid Build Coastguard Worker  *
1130*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_led_index_t
1131*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_keymap
1132*2b949d04SAndroid Build Coastguard Worker  */
1133*2b949d04SAndroid Build Coastguard Worker xkb_led_index_t
1134*2b949d04SAndroid Build Coastguard Worker xkb_keymap_num_leds(struct xkb_keymap *keymap);
1135*2b949d04SAndroid Build Coastguard Worker 
1136*2b949d04SAndroid Build Coastguard Worker /**
1137*2b949d04SAndroid Build Coastguard Worker  * Get the name of a LED by index.
1138*2b949d04SAndroid Build Coastguard Worker  *
1139*2b949d04SAndroid Build Coastguard Worker  * @returns The name.  If the index is invalid, returns NULL.
1140*2b949d04SAndroid Build Coastguard Worker  *
1141*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_keymap
1142*2b949d04SAndroid Build Coastguard Worker  */
1143*2b949d04SAndroid Build Coastguard Worker const char *
1144*2b949d04SAndroid Build Coastguard Worker xkb_keymap_led_get_name(struct xkb_keymap *keymap, xkb_led_index_t idx);
1145*2b949d04SAndroid Build Coastguard Worker 
1146*2b949d04SAndroid Build Coastguard Worker /**
1147*2b949d04SAndroid Build Coastguard Worker  * Get the index of a LED by name.
1148*2b949d04SAndroid Build Coastguard Worker  *
1149*2b949d04SAndroid Build Coastguard Worker  * @returns The index.  If no LED with this name exists, returns
1150*2b949d04SAndroid Build Coastguard Worker  * XKB_LED_INVALID.
1151*2b949d04SAndroid Build Coastguard Worker  *
1152*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_keymap
1153*2b949d04SAndroid Build Coastguard Worker  */
1154*2b949d04SAndroid Build Coastguard Worker xkb_led_index_t
1155*2b949d04SAndroid Build Coastguard Worker xkb_keymap_led_get_index(struct xkb_keymap *keymap, const char *name);
1156*2b949d04SAndroid Build Coastguard Worker 
1157*2b949d04SAndroid Build Coastguard Worker /**
1158*2b949d04SAndroid Build Coastguard Worker  * Get the number of layouts for a specific key.
1159*2b949d04SAndroid Build Coastguard Worker  *
1160*2b949d04SAndroid Build Coastguard Worker  * This number can be different from xkb_keymap_num_layouts(), but is always
1161*2b949d04SAndroid Build Coastguard Worker  * smaller.  It is the appropriate value to use when iterating over the
1162*2b949d04SAndroid Build Coastguard Worker  * layouts of a key.
1163*2b949d04SAndroid Build Coastguard Worker  *
1164*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_layout_index_t
1165*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_keymap
1166*2b949d04SAndroid Build Coastguard Worker  */
1167*2b949d04SAndroid Build Coastguard Worker xkb_layout_index_t
1168*2b949d04SAndroid Build Coastguard Worker xkb_keymap_num_layouts_for_key(struct xkb_keymap *keymap, xkb_keycode_t key);
1169*2b949d04SAndroid Build Coastguard Worker 
1170*2b949d04SAndroid Build Coastguard Worker /**
1171*2b949d04SAndroid Build Coastguard Worker  * Get the number of shift levels for a specific key and layout.
1172*2b949d04SAndroid Build Coastguard Worker  *
1173*2b949d04SAndroid Build Coastguard Worker  * If @c layout is out of range for this key (that is, larger or equal to
1174*2b949d04SAndroid Build Coastguard Worker  * the value returned by xkb_keymap_num_layouts_for_key()), it is brought
1175*2b949d04SAndroid Build Coastguard Worker  * back into range in a manner consistent with xkb_state_key_get_layout().
1176*2b949d04SAndroid Build Coastguard Worker  *
1177*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_level_index_t
1178*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_keymap
1179*2b949d04SAndroid Build Coastguard Worker  */
1180*2b949d04SAndroid Build Coastguard Worker xkb_level_index_t
1181*2b949d04SAndroid Build Coastguard Worker xkb_keymap_num_levels_for_key(struct xkb_keymap *keymap, xkb_keycode_t key,
1182*2b949d04SAndroid Build Coastguard Worker                               xkb_layout_index_t layout);
1183*2b949d04SAndroid Build Coastguard Worker 
1184*2b949d04SAndroid Build Coastguard Worker /**
1185*2b949d04SAndroid Build Coastguard Worker  * Retrieves every possible modifier mask that produces the specified
1186*2b949d04SAndroid Build Coastguard Worker  * shift level for a specific key and layout.
1187*2b949d04SAndroid Build Coastguard Worker  *
1188*2b949d04SAndroid Build Coastguard Worker  * This API is useful for inverse key transformation; i.e. finding out
1189*2b949d04SAndroid Build Coastguard Worker  * which modifiers need to be active in order to be able to type the
1190*2b949d04SAndroid Build Coastguard Worker  * keysym(s) corresponding to the specific key code, layout and level.
1191*2b949d04SAndroid Build Coastguard Worker  *
1192*2b949d04SAndroid Build Coastguard Worker  * @warning It returns only up to masks_size modifier masks. If the
1193*2b949d04SAndroid Build Coastguard Worker  * buffer passed is too small, some of the possible modifier combinations
1194*2b949d04SAndroid Build Coastguard Worker  * will not be returned.
1195*2b949d04SAndroid Build Coastguard Worker  *
1196*2b949d04SAndroid Build Coastguard Worker  * @param[in] keymap      The keymap.
1197*2b949d04SAndroid Build Coastguard Worker  * @param[in] key         The keycode of the key.
1198*2b949d04SAndroid Build Coastguard Worker  * @param[in] layout      The layout for which to get modifiers.
1199*2b949d04SAndroid Build Coastguard Worker  * @param[in] level       The shift level in the layout for which to get the
1200*2b949d04SAndroid Build Coastguard Worker  * modifiers. This should be smaller than:
1201*2b949d04SAndroid Build Coastguard Worker  * @code xkb_keymap_num_levels_for_key(keymap, key) @endcode
1202*2b949d04SAndroid Build Coastguard Worker  * @param[out] masks_out  A buffer in which the requested masks should be
1203*2b949d04SAndroid Build Coastguard Worker  * stored.
1204*2b949d04SAndroid Build Coastguard Worker  * @param[out] masks_size The size of the buffer pointed to by masks_out.
1205*2b949d04SAndroid Build Coastguard Worker  *
1206*2b949d04SAndroid Build Coastguard Worker  * If @c layout is out of range for this key (that is, larger or equal to
1207*2b949d04SAndroid Build Coastguard Worker  * the value returned by xkb_keymap_num_layouts_for_key()), it is brought
1208*2b949d04SAndroid Build Coastguard Worker  * back into range in a manner consistent with xkb_state_key_get_layout().
1209*2b949d04SAndroid Build Coastguard Worker  *
1210*2b949d04SAndroid Build Coastguard Worker  * @returns The number of modifier masks stored in the masks_out array.
1211*2b949d04SAndroid Build Coastguard Worker  * If the key is not in the keymap or if the specified shift level cannot
1212*2b949d04SAndroid Build Coastguard Worker  * be reached it returns 0 and does not modify the masks_out buffer.
1213*2b949d04SAndroid Build Coastguard Worker  *
1214*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_level_index_t
1215*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_mod_mask_t
1216*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_keymap
1217*2b949d04SAndroid Build Coastguard Worker  * @since 1.0.0
1218*2b949d04SAndroid Build Coastguard Worker  */
1219*2b949d04SAndroid Build Coastguard Worker size_t
1220*2b949d04SAndroid Build Coastguard Worker xkb_keymap_key_get_mods_for_level(struct xkb_keymap *keymap,
1221*2b949d04SAndroid Build Coastguard Worker                                   xkb_keycode_t key,
1222*2b949d04SAndroid Build Coastguard Worker                                   xkb_layout_index_t layout,
1223*2b949d04SAndroid Build Coastguard Worker                                   xkb_level_index_t level,
1224*2b949d04SAndroid Build Coastguard Worker                                   xkb_mod_mask_t *masks_out,
1225*2b949d04SAndroid Build Coastguard Worker                                   size_t masks_size);
1226*2b949d04SAndroid Build Coastguard Worker 
1227*2b949d04SAndroid Build Coastguard Worker /**
1228*2b949d04SAndroid Build Coastguard Worker  * Get the keysyms obtained from pressing a key in a given layout and
1229*2b949d04SAndroid Build Coastguard Worker  * shift level.
1230*2b949d04SAndroid Build Coastguard Worker  *
1231*2b949d04SAndroid Build Coastguard Worker  * This function is like xkb_state_key_get_syms(), only the layout and
1232*2b949d04SAndroid Build Coastguard Worker  * shift level are not derived from the keyboard state but are instead
1233*2b949d04SAndroid Build Coastguard Worker  * specified explicitly.
1234*2b949d04SAndroid Build Coastguard Worker  *
1235*2b949d04SAndroid Build Coastguard Worker  * @param[in] keymap    The keymap.
1236*2b949d04SAndroid Build Coastguard Worker  * @param[in] key       The keycode of the key.
1237*2b949d04SAndroid Build Coastguard Worker  * @param[in] layout    The layout for which to get the keysyms.
1238*2b949d04SAndroid Build Coastguard Worker  * @param[in] level     The shift level in the layout for which to get the
1239*2b949d04SAndroid Build Coastguard Worker  * keysyms. This should be smaller than:
1240*2b949d04SAndroid Build Coastguard Worker  * @code xkb_keymap_num_levels_for_key(keymap, key) @endcode
1241*2b949d04SAndroid Build Coastguard Worker  * @param[out] syms_out An immutable array of keysyms corresponding to the
1242*2b949d04SAndroid Build Coastguard Worker  * key in the given layout and shift level.
1243*2b949d04SAndroid Build Coastguard Worker  *
1244*2b949d04SAndroid Build Coastguard Worker  * If @c layout is out of range for this key (that is, larger or equal to
1245*2b949d04SAndroid Build Coastguard Worker  * the value returned by xkb_keymap_num_layouts_for_key()), it is brought
1246*2b949d04SAndroid Build Coastguard Worker  * back into range in a manner consistent with xkb_state_key_get_layout().
1247*2b949d04SAndroid Build Coastguard Worker  *
1248*2b949d04SAndroid Build Coastguard Worker  * @returns The number of keysyms in the syms_out array.  If no keysyms
1249*2b949d04SAndroid Build Coastguard Worker  * are produced by the key in the given layout and shift level, returns 0
1250*2b949d04SAndroid Build Coastguard Worker  * and sets syms_out to NULL.
1251*2b949d04SAndroid Build Coastguard Worker  *
1252*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_state_key_get_syms()
1253*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_keymap
1254*2b949d04SAndroid Build Coastguard Worker  */
1255*2b949d04SAndroid Build Coastguard Worker int
1256*2b949d04SAndroid Build Coastguard Worker xkb_keymap_key_get_syms_by_level(struct xkb_keymap *keymap,
1257*2b949d04SAndroid Build Coastguard Worker                                  xkb_keycode_t key,
1258*2b949d04SAndroid Build Coastguard Worker                                  xkb_layout_index_t layout,
1259*2b949d04SAndroid Build Coastguard Worker                                  xkb_level_index_t level,
1260*2b949d04SAndroid Build Coastguard Worker                                  const xkb_keysym_t **syms_out);
1261*2b949d04SAndroid Build Coastguard Worker 
1262*2b949d04SAndroid Build Coastguard Worker /**
1263*2b949d04SAndroid Build Coastguard Worker  * Determine whether a key should repeat or not.
1264*2b949d04SAndroid Build Coastguard Worker  *
1265*2b949d04SAndroid Build Coastguard Worker  * A keymap may specify different repeat behaviors for different keys.
1266*2b949d04SAndroid Build Coastguard Worker  * Most keys should generally exhibit repeat behavior; for example, holding
1267*2b949d04SAndroid Build Coastguard Worker  * the 'a' key down in a text editor should normally insert a single 'a'
1268*2b949d04SAndroid Build Coastguard Worker  * character every few milliseconds, until the key is released.  However,
1269*2b949d04SAndroid Build Coastguard Worker  * there are keys which should not or do not need to be repeated.  For
1270*2b949d04SAndroid Build Coastguard Worker  * example, repeating modifier keys such as Left/Right Shift or Caps Lock
1271*2b949d04SAndroid Build Coastguard Worker  * is not generally useful or desired.
1272*2b949d04SAndroid Build Coastguard Worker  *
1273*2b949d04SAndroid Build Coastguard Worker  * @returns 1 if the key should repeat, 0 otherwise.
1274*2b949d04SAndroid Build Coastguard Worker  *
1275*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_keymap
1276*2b949d04SAndroid Build Coastguard Worker  */
1277*2b949d04SAndroid Build Coastguard Worker int
1278*2b949d04SAndroid Build Coastguard Worker xkb_keymap_key_repeats(struct xkb_keymap *keymap, xkb_keycode_t key);
1279*2b949d04SAndroid Build Coastguard Worker 
1280*2b949d04SAndroid Build Coastguard Worker /** @} */
1281*2b949d04SAndroid Build Coastguard Worker 
1282*2b949d04SAndroid Build Coastguard Worker /**
1283*2b949d04SAndroid Build Coastguard Worker  * @defgroup state Keyboard State
1284*2b949d04SAndroid Build Coastguard Worker  * Creating, destroying and manipulating keyboard state objects.
1285*2b949d04SAndroid Build Coastguard Worker  *
1286*2b949d04SAndroid Build Coastguard Worker  * @{
1287*2b949d04SAndroid Build Coastguard Worker  */
1288*2b949d04SAndroid Build Coastguard Worker 
1289*2b949d04SAndroid Build Coastguard Worker /**
1290*2b949d04SAndroid Build Coastguard Worker  * Create a new keyboard state object.
1291*2b949d04SAndroid Build Coastguard Worker  *
1292*2b949d04SAndroid Build Coastguard Worker  * @param keymap The keymap which the state will use.
1293*2b949d04SAndroid Build Coastguard Worker  *
1294*2b949d04SAndroid Build Coastguard Worker  * @returns A new keyboard state object, or NULL on failure.
1295*2b949d04SAndroid Build Coastguard Worker  *
1296*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_state
1297*2b949d04SAndroid Build Coastguard Worker  */
1298*2b949d04SAndroid Build Coastguard Worker struct xkb_state *
1299*2b949d04SAndroid Build Coastguard Worker xkb_state_new(struct xkb_keymap *keymap);
1300*2b949d04SAndroid Build Coastguard Worker 
1301*2b949d04SAndroid Build Coastguard Worker /**
1302*2b949d04SAndroid Build Coastguard Worker  * Take a new reference on a keyboard state object.
1303*2b949d04SAndroid Build Coastguard Worker  *
1304*2b949d04SAndroid Build Coastguard Worker  * @returns The passed in object.
1305*2b949d04SAndroid Build Coastguard Worker  *
1306*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_state
1307*2b949d04SAndroid Build Coastguard Worker  */
1308*2b949d04SAndroid Build Coastguard Worker struct xkb_state *
1309*2b949d04SAndroid Build Coastguard Worker xkb_state_ref(struct xkb_state *state);
1310*2b949d04SAndroid Build Coastguard Worker 
1311*2b949d04SAndroid Build Coastguard Worker /**
1312*2b949d04SAndroid Build Coastguard Worker  * Release a reference on a keybaord state object, and possibly free it.
1313*2b949d04SAndroid Build Coastguard Worker  *
1314*2b949d04SAndroid Build Coastguard Worker  * @param state The state.  If it is NULL, this function does nothing.
1315*2b949d04SAndroid Build Coastguard Worker  *
1316*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_state
1317*2b949d04SAndroid Build Coastguard Worker  */
1318*2b949d04SAndroid Build Coastguard Worker void
1319*2b949d04SAndroid Build Coastguard Worker xkb_state_unref(struct xkb_state *state);
1320*2b949d04SAndroid Build Coastguard Worker 
1321*2b949d04SAndroid Build Coastguard Worker /**
1322*2b949d04SAndroid Build Coastguard Worker  * Get the keymap which a keyboard state object is using.
1323*2b949d04SAndroid Build Coastguard Worker  *
1324*2b949d04SAndroid Build Coastguard Worker  * @returns The keymap which was passed to xkb_state_new() when creating
1325*2b949d04SAndroid Build Coastguard Worker  * this state object.
1326*2b949d04SAndroid Build Coastguard Worker  *
1327*2b949d04SAndroid Build Coastguard Worker  * This function does not take a new reference on the keymap; you must
1328*2b949d04SAndroid Build Coastguard Worker  * explicitly reference it yourself if you plan to use it beyond the
1329*2b949d04SAndroid Build Coastguard Worker  * lifetime of the state.
1330*2b949d04SAndroid Build Coastguard Worker  *
1331*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_state
1332*2b949d04SAndroid Build Coastguard Worker  */
1333*2b949d04SAndroid Build Coastguard Worker struct xkb_keymap *
1334*2b949d04SAndroid Build Coastguard Worker xkb_state_get_keymap(struct xkb_state *state);
1335*2b949d04SAndroid Build Coastguard Worker 
1336*2b949d04SAndroid Build Coastguard Worker /** Specifies the direction of the key (press / release). */
1337*2b949d04SAndroid Build Coastguard Worker enum xkb_key_direction {
1338*2b949d04SAndroid Build Coastguard Worker     XKB_KEY_UP,   /**< The key was released. */
1339*2b949d04SAndroid Build Coastguard Worker     XKB_KEY_DOWN  /**< The key was pressed. */
1340*2b949d04SAndroid Build Coastguard Worker };
1341*2b949d04SAndroid Build Coastguard Worker 
1342*2b949d04SAndroid Build Coastguard Worker /**
1343*2b949d04SAndroid Build Coastguard Worker  * Modifier and layout types for state objects.  This enum is bitmaskable,
1344*2b949d04SAndroid Build Coastguard Worker  * e.g. (XKB_STATE_MODS_DEPRESSED | XKB_STATE_MODS_LATCHED) is valid to
1345*2b949d04SAndroid Build Coastguard Worker  * exclude locked modifiers.
1346*2b949d04SAndroid Build Coastguard Worker  *
1347*2b949d04SAndroid Build Coastguard Worker  * In XKB, the DEPRESSED components are also known as 'base'.
1348*2b949d04SAndroid Build Coastguard Worker  */
1349*2b949d04SAndroid Build Coastguard Worker enum xkb_state_component {
1350*2b949d04SAndroid Build Coastguard Worker     /** Depressed modifiers, i.e. a key is physically holding them. */
1351*2b949d04SAndroid Build Coastguard Worker     XKB_STATE_MODS_DEPRESSED = (1 << 0),
1352*2b949d04SAndroid Build Coastguard Worker     /** Latched modifiers, i.e. will be unset after the next non-modifier
1353*2b949d04SAndroid Build Coastguard Worker      *  key press. */
1354*2b949d04SAndroid Build Coastguard Worker     XKB_STATE_MODS_LATCHED = (1 << 1),
1355*2b949d04SAndroid Build Coastguard Worker     /** Locked modifiers, i.e. will be unset after the key provoking the
1356*2b949d04SAndroid Build Coastguard Worker      *  lock has been pressed again. */
1357*2b949d04SAndroid Build Coastguard Worker     XKB_STATE_MODS_LOCKED = (1 << 2),
1358*2b949d04SAndroid Build Coastguard Worker     /** Effective modifiers, i.e. currently active and affect key
1359*2b949d04SAndroid Build Coastguard Worker      *  processing (derived from the other state components).
1360*2b949d04SAndroid Build Coastguard Worker      *  Use this unless you explicitly care how the state came about. */
1361*2b949d04SAndroid Build Coastguard Worker     XKB_STATE_MODS_EFFECTIVE = (1 << 3),
1362*2b949d04SAndroid Build Coastguard Worker     /** Depressed layout, i.e. a key is physically holding it. */
1363*2b949d04SAndroid Build Coastguard Worker     XKB_STATE_LAYOUT_DEPRESSED = (1 << 4),
1364*2b949d04SAndroid Build Coastguard Worker     /** Latched layout, i.e. will be unset after the next non-modifier
1365*2b949d04SAndroid Build Coastguard Worker      *  key press. */
1366*2b949d04SAndroid Build Coastguard Worker     XKB_STATE_LAYOUT_LATCHED = (1 << 5),
1367*2b949d04SAndroid Build Coastguard Worker     /** Locked layout, i.e. will be unset after the key provoking the lock
1368*2b949d04SAndroid Build Coastguard Worker      *  has been pressed again. */
1369*2b949d04SAndroid Build Coastguard Worker     XKB_STATE_LAYOUT_LOCKED = (1 << 6),
1370*2b949d04SAndroid Build Coastguard Worker     /** Effective layout, i.e. currently active and affects key processing
1371*2b949d04SAndroid Build Coastguard Worker      *  (derived from the other state components).
1372*2b949d04SAndroid Build Coastguard Worker      *  Use this unless you explicitly care how the state came about. */
1373*2b949d04SAndroid Build Coastguard Worker     XKB_STATE_LAYOUT_EFFECTIVE = (1 << 7),
1374*2b949d04SAndroid Build Coastguard Worker     /** LEDs (derived from the other state components). */
1375*2b949d04SAndroid Build Coastguard Worker     XKB_STATE_LEDS = (1 << 8)
1376*2b949d04SAndroid Build Coastguard Worker };
1377*2b949d04SAndroid Build Coastguard Worker 
1378*2b949d04SAndroid Build Coastguard Worker /**
1379*2b949d04SAndroid Build Coastguard Worker  * Update the keyboard state to reflect a given key being pressed or
1380*2b949d04SAndroid Build Coastguard Worker  * released.
1381*2b949d04SAndroid Build Coastguard Worker  *
1382*2b949d04SAndroid Build Coastguard Worker  * This entry point is intended for programs which track the keyboard state
1383*2b949d04SAndroid Build Coastguard Worker  * explicitly (like an evdev client).  If the state is serialized to you by
1384*2b949d04SAndroid Build Coastguard Worker  * a master process (like a Wayland compositor) using functions like
1385*2b949d04SAndroid Build Coastguard Worker  * xkb_state_serialize_mods(), you should use xkb_state_update_mask() instead.
1386*2b949d04SAndroid Build Coastguard Worker  * The two functions should not generally be used together.
1387*2b949d04SAndroid Build Coastguard Worker  *
1388*2b949d04SAndroid Build Coastguard Worker  * A series of calls to this function should be consistent; that is, a call
1389*2b949d04SAndroid Build Coastguard Worker  * with XKB_KEY_DOWN for a key should be matched by an XKB_KEY_UP; if a key
1390*2b949d04SAndroid Build Coastguard Worker  * is pressed twice, it should be released twice; etc. Otherwise (e.g. due
1391*2b949d04SAndroid Build Coastguard Worker  * to missed input events), situations like "stuck modifiers" may occur.
1392*2b949d04SAndroid Build Coastguard Worker  *
1393*2b949d04SAndroid Build Coastguard Worker  * This function is often used in conjunction with the function
1394*2b949d04SAndroid Build Coastguard Worker  * xkb_state_key_get_syms() (or xkb_state_key_get_one_sym()), for example,
1395*2b949d04SAndroid Build Coastguard Worker  * when handling a key event.  In this case, you should prefer to get the
1396*2b949d04SAndroid Build Coastguard Worker  * keysyms *before* updating the key, such that the keysyms reported for
1397*2b949d04SAndroid Build Coastguard Worker  * the key event are not affected by the event itself.  This is the
1398*2b949d04SAndroid Build Coastguard Worker  * conventional behavior.
1399*2b949d04SAndroid Build Coastguard Worker  *
1400*2b949d04SAndroid Build Coastguard Worker  * @returns A mask of state components that have changed as a result of
1401*2b949d04SAndroid Build Coastguard Worker  * the update.  If nothing in the state has changed, returns 0.
1402*2b949d04SAndroid Build Coastguard Worker  *
1403*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_state
1404*2b949d04SAndroid Build Coastguard Worker  *
1405*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_state_update_mask()
1406*2b949d04SAndroid Build Coastguard Worker  */
1407*2b949d04SAndroid Build Coastguard Worker enum xkb_state_component
1408*2b949d04SAndroid Build Coastguard Worker xkb_state_update_key(struct xkb_state *state, xkb_keycode_t key,
1409*2b949d04SAndroid Build Coastguard Worker                      enum xkb_key_direction direction);
1410*2b949d04SAndroid Build Coastguard Worker 
1411*2b949d04SAndroid Build Coastguard Worker /**
1412*2b949d04SAndroid Build Coastguard Worker  * Update a keyboard state from a set of explicit masks.
1413*2b949d04SAndroid Build Coastguard Worker  *
1414*2b949d04SAndroid Build Coastguard Worker  * This entry point is intended for window systems and the like, where a
1415*2b949d04SAndroid Build Coastguard Worker  * master process holds an xkb_state, then serializes it over a wire
1416*2b949d04SAndroid Build Coastguard Worker  * protocol, and clients then use the serialization to feed in to their own
1417*2b949d04SAndroid Build Coastguard Worker  * xkb_state.
1418*2b949d04SAndroid Build Coastguard Worker  *
1419*2b949d04SAndroid Build Coastguard Worker  * All parameters must always be passed, or the resulting state may be
1420*2b949d04SAndroid Build Coastguard Worker  * incoherent.
1421*2b949d04SAndroid Build Coastguard Worker  *
1422*2b949d04SAndroid Build Coastguard Worker  * The serialization is lossy and will not survive round trips; it must only
1423*2b949d04SAndroid Build Coastguard Worker  * be used to feed slave state objects, and must not be used to update the
1424*2b949d04SAndroid Build Coastguard Worker  * master state.
1425*2b949d04SAndroid Build Coastguard Worker  *
1426*2b949d04SAndroid Build Coastguard Worker  * If you do not fit the description above, you should use
1427*2b949d04SAndroid Build Coastguard Worker  * xkb_state_update_key() instead.  The two functions should not generally be
1428*2b949d04SAndroid Build Coastguard Worker  * used together.
1429*2b949d04SAndroid Build Coastguard Worker  *
1430*2b949d04SAndroid Build Coastguard Worker  * @returns A mask of state components that have changed as a result of
1431*2b949d04SAndroid Build Coastguard Worker  * the update.  If nothing in the state has changed, returns 0.
1432*2b949d04SAndroid Build Coastguard Worker  *
1433*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_state
1434*2b949d04SAndroid Build Coastguard Worker  *
1435*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_state_component
1436*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_state_update_key
1437*2b949d04SAndroid Build Coastguard Worker  */
1438*2b949d04SAndroid Build Coastguard Worker enum xkb_state_component
1439*2b949d04SAndroid Build Coastguard Worker xkb_state_update_mask(struct xkb_state *state,
1440*2b949d04SAndroid Build Coastguard Worker                       xkb_mod_mask_t depressed_mods,
1441*2b949d04SAndroid Build Coastguard Worker                       xkb_mod_mask_t latched_mods,
1442*2b949d04SAndroid Build Coastguard Worker                       xkb_mod_mask_t locked_mods,
1443*2b949d04SAndroid Build Coastguard Worker                       xkb_layout_index_t depressed_layout,
1444*2b949d04SAndroid Build Coastguard Worker                       xkb_layout_index_t latched_layout,
1445*2b949d04SAndroid Build Coastguard Worker                       xkb_layout_index_t locked_layout);
1446*2b949d04SAndroid Build Coastguard Worker 
1447*2b949d04SAndroid Build Coastguard Worker /**
1448*2b949d04SAndroid Build Coastguard Worker  * Get the keysyms obtained from pressing a particular key in a given
1449*2b949d04SAndroid Build Coastguard Worker  * keyboard state.
1450*2b949d04SAndroid Build Coastguard Worker  *
1451*2b949d04SAndroid Build Coastguard Worker  * Get the keysyms for a key according to the current active layout,
1452*2b949d04SAndroid Build Coastguard Worker  * modifiers and shift level for the key, as determined by a keyboard
1453*2b949d04SAndroid Build Coastguard Worker  * state.
1454*2b949d04SAndroid Build Coastguard Worker  *
1455*2b949d04SAndroid Build Coastguard Worker  * @param[in]  state    The keyboard state object.
1456*2b949d04SAndroid Build Coastguard Worker  * @param[in]  key      The keycode of the key.
1457*2b949d04SAndroid Build Coastguard Worker  * @param[out] syms_out An immutable array of keysyms corresponding the
1458*2b949d04SAndroid Build Coastguard Worker  * key in the given keyboard state.
1459*2b949d04SAndroid Build Coastguard Worker  *
1460*2b949d04SAndroid Build Coastguard Worker  * As an extension to XKB, this function can return more than one keysym.
1461*2b949d04SAndroid Build Coastguard Worker  * If you do not want to handle this case, you can use
1462*2b949d04SAndroid Build Coastguard Worker  * xkb_state_key_get_one_sym() for a simpler interface.
1463*2b949d04SAndroid Build Coastguard Worker  *
1464*2b949d04SAndroid Build Coastguard Worker  * This function does not perform any @ref keysym-transformations.
1465*2b949d04SAndroid Build Coastguard Worker  * (This might change).
1466*2b949d04SAndroid Build Coastguard Worker  *
1467*2b949d04SAndroid Build Coastguard Worker  * @returns The number of keysyms in the syms_out array.  If no keysyms
1468*2b949d04SAndroid Build Coastguard Worker  * are produced by the key in the given keyboard state, returns 0 and sets
1469*2b949d04SAndroid Build Coastguard Worker  * syms_out to NULL.
1470*2b949d04SAndroid Build Coastguard Worker  *
1471*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_state
1472*2b949d04SAndroid Build Coastguard Worker  */
1473*2b949d04SAndroid Build Coastguard Worker int
1474*2b949d04SAndroid Build Coastguard Worker xkb_state_key_get_syms(struct xkb_state *state, xkb_keycode_t key,
1475*2b949d04SAndroid Build Coastguard Worker                        const xkb_keysym_t **syms_out);
1476*2b949d04SAndroid Build Coastguard Worker 
1477*2b949d04SAndroid Build Coastguard Worker /**
1478*2b949d04SAndroid Build Coastguard Worker  * Get the Unicode/UTF-8 string obtained from pressing a particular key
1479*2b949d04SAndroid Build Coastguard Worker  * in a given keyboard state.
1480*2b949d04SAndroid Build Coastguard Worker  *
1481*2b949d04SAndroid Build Coastguard Worker  * @param[in]  state  The keyboard state object.
1482*2b949d04SAndroid Build Coastguard Worker  * @param[in]  key    The keycode of the key.
1483*2b949d04SAndroid Build Coastguard Worker  * @param[out] buffer A buffer to write the string into.
1484*2b949d04SAndroid Build Coastguard Worker  * @param[in]  size   Size of the buffer.
1485*2b949d04SAndroid Build Coastguard Worker  *
1486*2b949d04SAndroid Build Coastguard Worker  * @warning If the buffer passed is too small, the string is truncated
1487*2b949d04SAndroid Build Coastguard Worker  * (though still NUL-terminated).
1488*2b949d04SAndroid Build Coastguard Worker  *
1489*2b949d04SAndroid Build Coastguard Worker  * @returns The number of bytes required for the string, excluding the
1490*2b949d04SAndroid Build Coastguard Worker  * NUL byte.  If there is nothing to write, returns 0.
1491*2b949d04SAndroid Build Coastguard Worker  *
1492*2b949d04SAndroid Build Coastguard Worker  * You may check if truncation has occurred by comparing the return value
1493*2b949d04SAndroid Build Coastguard Worker  * with the size of @p buffer, similarly to the snprintf(3) function.
1494*2b949d04SAndroid Build Coastguard Worker  * You may safely pass NULL and 0 to @p buffer and @p size to find the
1495*2b949d04SAndroid Build Coastguard Worker  * required size (without the NUL-byte).
1496*2b949d04SAndroid Build Coastguard Worker  *
1497*2b949d04SAndroid Build Coastguard Worker  * This function performs Capitalization and Control @ref
1498*2b949d04SAndroid Build Coastguard Worker  * keysym-transformations.
1499*2b949d04SAndroid Build Coastguard Worker  *
1500*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_state
1501*2b949d04SAndroid Build Coastguard Worker  * @since 0.4.1
1502*2b949d04SAndroid Build Coastguard Worker  */
1503*2b949d04SAndroid Build Coastguard Worker int
1504*2b949d04SAndroid Build Coastguard Worker xkb_state_key_get_utf8(struct xkb_state *state, xkb_keycode_t key,
1505*2b949d04SAndroid Build Coastguard Worker                        char *buffer, size_t size);
1506*2b949d04SAndroid Build Coastguard Worker 
1507*2b949d04SAndroid Build Coastguard Worker /**
1508*2b949d04SAndroid Build Coastguard Worker  * Get the Unicode/UTF-32 codepoint obtained from pressing a particular
1509*2b949d04SAndroid Build Coastguard Worker  * key in a a given keyboard state.
1510*2b949d04SAndroid Build Coastguard Worker  *
1511*2b949d04SAndroid Build Coastguard Worker  * @returns The UTF-32 representation for the key, if it consists of only
1512*2b949d04SAndroid Build Coastguard Worker  * a single codepoint.  Otherwise, returns 0.
1513*2b949d04SAndroid Build Coastguard Worker  *
1514*2b949d04SAndroid Build Coastguard Worker  * This function performs Capitalization and Control @ref
1515*2b949d04SAndroid Build Coastguard Worker  * keysym-transformations.
1516*2b949d04SAndroid Build Coastguard Worker  *
1517*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_state
1518*2b949d04SAndroid Build Coastguard Worker  * @since 0.4.1
1519*2b949d04SAndroid Build Coastguard Worker  */
1520*2b949d04SAndroid Build Coastguard Worker uint32_t
1521*2b949d04SAndroid Build Coastguard Worker xkb_state_key_get_utf32(struct xkb_state *state, xkb_keycode_t key);
1522*2b949d04SAndroid Build Coastguard Worker 
1523*2b949d04SAndroid Build Coastguard Worker /**
1524*2b949d04SAndroid Build Coastguard Worker  * Get the single keysym obtained from pressing a particular key in a
1525*2b949d04SAndroid Build Coastguard Worker  * given keyboard state.
1526*2b949d04SAndroid Build Coastguard Worker  *
1527*2b949d04SAndroid Build Coastguard Worker  * This function is similar to xkb_state_key_get_syms(), but intended
1528*2b949d04SAndroid Build Coastguard Worker  * for users which cannot or do not want to handle the case where
1529*2b949d04SAndroid Build Coastguard Worker  * multiple keysyms are returned (in which case this function is
1530*2b949d04SAndroid Build Coastguard Worker  * preferred).
1531*2b949d04SAndroid Build Coastguard Worker  *
1532*2b949d04SAndroid Build Coastguard Worker  * @returns The keysym.  If the key does not have exactly one keysym,
1533*2b949d04SAndroid Build Coastguard Worker  * returns XKB_KEY_NoSymbol
1534*2b949d04SAndroid Build Coastguard Worker  *
1535*2b949d04SAndroid Build Coastguard Worker  * This function performs Capitalization @ref keysym-transformations.
1536*2b949d04SAndroid Build Coastguard Worker  *
1537*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_state_key_get_syms()
1538*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_state
1539*2b949d04SAndroid Build Coastguard Worker  */
1540*2b949d04SAndroid Build Coastguard Worker xkb_keysym_t
1541*2b949d04SAndroid Build Coastguard Worker xkb_state_key_get_one_sym(struct xkb_state *state, xkb_keycode_t key);
1542*2b949d04SAndroid Build Coastguard Worker 
1543*2b949d04SAndroid Build Coastguard Worker /**
1544*2b949d04SAndroid Build Coastguard Worker  * Get the effective layout index for a key in a given keyboard state.
1545*2b949d04SAndroid Build Coastguard Worker  *
1546*2b949d04SAndroid Build Coastguard Worker  * @returns The layout index for the key in the given keyboard state.  If
1547*2b949d04SAndroid Build Coastguard Worker  * the given keycode is invalid, or if the key is not included in any
1548*2b949d04SAndroid Build Coastguard Worker  * layout at all, returns XKB_LAYOUT_INVALID.
1549*2b949d04SAndroid Build Coastguard Worker  *
1550*2b949d04SAndroid Build Coastguard Worker  * @invariant If the returned layout is valid, the following always holds:
1551*2b949d04SAndroid Build Coastguard Worker  * @code
1552*2b949d04SAndroid Build Coastguard Worker  * xkb_state_key_get_layout(state, key) < xkb_keymap_num_layouts_for_key(keymap, key)
1553*2b949d04SAndroid Build Coastguard Worker  * @endcode
1554*2b949d04SAndroid Build Coastguard Worker  *
1555*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_state
1556*2b949d04SAndroid Build Coastguard Worker  */
1557*2b949d04SAndroid Build Coastguard Worker xkb_layout_index_t
1558*2b949d04SAndroid Build Coastguard Worker xkb_state_key_get_layout(struct xkb_state *state, xkb_keycode_t key);
1559*2b949d04SAndroid Build Coastguard Worker 
1560*2b949d04SAndroid Build Coastguard Worker /**
1561*2b949d04SAndroid Build Coastguard Worker  * Get the effective shift level for a key in a given keyboard state and
1562*2b949d04SAndroid Build Coastguard Worker  * layout.
1563*2b949d04SAndroid Build Coastguard Worker  *
1564*2b949d04SAndroid Build Coastguard Worker  * @param state The keyboard state.
1565*2b949d04SAndroid Build Coastguard Worker  * @param key The keycode of the key.
1566*2b949d04SAndroid Build Coastguard Worker  * @param layout The layout for which to get the shift level.  This must be
1567*2b949d04SAndroid Build Coastguard Worker  * smaller than:
1568*2b949d04SAndroid Build Coastguard Worker  * @code xkb_keymap_num_layouts_for_key(keymap, key) @endcode
1569*2b949d04SAndroid Build Coastguard Worker  * usually it would be:
1570*2b949d04SAndroid Build Coastguard Worker  * @code xkb_state_key_get_layout(state, key) @endcode
1571*2b949d04SAndroid Build Coastguard Worker  *
1572*2b949d04SAndroid Build Coastguard Worker  * @return The shift level index.  If the key or layout are invalid,
1573*2b949d04SAndroid Build Coastguard Worker  * returns XKB_LEVEL_INVALID.
1574*2b949d04SAndroid Build Coastguard Worker  *
1575*2b949d04SAndroid Build Coastguard Worker  * @invariant If the returned level is valid, the following always holds:
1576*2b949d04SAndroid Build Coastguard Worker  * @code
1577*2b949d04SAndroid Build Coastguard Worker  * xkb_state_key_get_level(state, key, layout) < xkb_keymap_num_levels_for_key(keymap, key, layout)
1578*2b949d04SAndroid Build Coastguard Worker  * @endcode
1579*2b949d04SAndroid Build Coastguard Worker  *
1580*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_state
1581*2b949d04SAndroid Build Coastguard Worker  */
1582*2b949d04SAndroid Build Coastguard Worker xkb_level_index_t
1583*2b949d04SAndroid Build Coastguard Worker xkb_state_key_get_level(struct xkb_state *state, xkb_keycode_t key,
1584*2b949d04SAndroid Build Coastguard Worker                         xkb_layout_index_t layout);
1585*2b949d04SAndroid Build Coastguard Worker 
1586*2b949d04SAndroid Build Coastguard Worker /**
1587*2b949d04SAndroid Build Coastguard Worker  * Match flags for xkb_state_mod_indices_are_active() and
1588*2b949d04SAndroid Build Coastguard Worker  * xkb_state_mod_names_are_active(), specifying the conditions for a
1589*2b949d04SAndroid Build Coastguard Worker  * successful match.  XKB_STATE_MATCH_NON_EXCLUSIVE is bitmaskable with
1590*2b949d04SAndroid Build Coastguard Worker  * the other modes.
1591*2b949d04SAndroid Build Coastguard Worker  */
1592*2b949d04SAndroid Build Coastguard Worker enum xkb_state_match {
1593*2b949d04SAndroid Build Coastguard Worker     /** Returns true if any of the modifiers are active. */
1594*2b949d04SAndroid Build Coastguard Worker     XKB_STATE_MATCH_ANY = (1 << 0),
1595*2b949d04SAndroid Build Coastguard Worker     /** Returns true if all of the modifiers are active. */
1596*2b949d04SAndroid Build Coastguard Worker     XKB_STATE_MATCH_ALL = (1 << 1),
1597*2b949d04SAndroid Build Coastguard Worker     /** Makes matching non-exclusive, i.e. will not return false if a
1598*2b949d04SAndroid Build Coastguard Worker      *  modifier not specified in the arguments is active. */
1599*2b949d04SAndroid Build Coastguard Worker     XKB_STATE_MATCH_NON_EXCLUSIVE = (1 << 16)
1600*2b949d04SAndroid Build Coastguard Worker };
1601*2b949d04SAndroid Build Coastguard Worker 
1602*2b949d04SAndroid Build Coastguard Worker /**
1603*2b949d04SAndroid Build Coastguard Worker  * The counterpart to xkb_state_update_mask for modifiers, to be used on
1604*2b949d04SAndroid Build Coastguard Worker  * the server side of serialization.
1605*2b949d04SAndroid Build Coastguard Worker  *
1606*2b949d04SAndroid Build Coastguard Worker  * @param state      The keyboard state.
1607*2b949d04SAndroid Build Coastguard Worker  * @param components A mask of the modifier state components to serialize.
1608*2b949d04SAndroid Build Coastguard Worker  * State components other than XKB_STATE_MODS_* are ignored.
1609*2b949d04SAndroid Build Coastguard Worker  * If XKB_STATE_MODS_EFFECTIVE is included, all other state components are
1610*2b949d04SAndroid Build Coastguard Worker  * ignored.
1611*2b949d04SAndroid Build Coastguard Worker  *
1612*2b949d04SAndroid Build Coastguard Worker  * @returns A xkb_mod_mask_t representing the given components of the
1613*2b949d04SAndroid Build Coastguard Worker  * modifier state.
1614*2b949d04SAndroid Build Coastguard Worker  *
1615*2b949d04SAndroid Build Coastguard Worker  * This function should not be used in regular clients; please use the
1616*2b949d04SAndroid Build Coastguard Worker  * xkb_state_mod_*_is_active API instead.
1617*2b949d04SAndroid Build Coastguard Worker  *
1618*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_state
1619*2b949d04SAndroid Build Coastguard Worker  */
1620*2b949d04SAndroid Build Coastguard Worker xkb_mod_mask_t
1621*2b949d04SAndroid Build Coastguard Worker xkb_state_serialize_mods(struct xkb_state *state,
1622*2b949d04SAndroid Build Coastguard Worker                          enum xkb_state_component components);
1623*2b949d04SAndroid Build Coastguard Worker 
1624*2b949d04SAndroid Build Coastguard Worker /**
1625*2b949d04SAndroid Build Coastguard Worker  * The counterpart to xkb_state_update_mask for layouts, to be used on
1626*2b949d04SAndroid Build Coastguard Worker  * the server side of serialization.
1627*2b949d04SAndroid Build Coastguard Worker  *
1628*2b949d04SAndroid Build Coastguard Worker  * @param state      The keyboard state.
1629*2b949d04SAndroid Build Coastguard Worker  * @param components A mask of the layout state components to serialize.
1630*2b949d04SAndroid Build Coastguard Worker  * State components other than XKB_STATE_LAYOUT_* are ignored.
1631*2b949d04SAndroid Build Coastguard Worker  * If XKB_STATE_LAYOUT_EFFECTIVE is included, all other state components are
1632*2b949d04SAndroid Build Coastguard Worker  * ignored.
1633*2b949d04SAndroid Build Coastguard Worker  *
1634*2b949d04SAndroid Build Coastguard Worker  * @returns A layout index representing the given components of the
1635*2b949d04SAndroid Build Coastguard Worker  * layout state.
1636*2b949d04SAndroid Build Coastguard Worker  *
1637*2b949d04SAndroid Build Coastguard Worker  * This function should not be used in regular clients; please use the
1638*2b949d04SAndroid Build Coastguard Worker  * xkb_state_layout_*_is_active API instead.
1639*2b949d04SAndroid Build Coastguard Worker  *
1640*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_state
1641*2b949d04SAndroid Build Coastguard Worker  */
1642*2b949d04SAndroid Build Coastguard Worker xkb_layout_index_t
1643*2b949d04SAndroid Build Coastguard Worker xkb_state_serialize_layout(struct xkb_state *state,
1644*2b949d04SAndroid Build Coastguard Worker                            enum xkb_state_component components);
1645*2b949d04SAndroid Build Coastguard Worker 
1646*2b949d04SAndroid Build Coastguard Worker /**
1647*2b949d04SAndroid Build Coastguard Worker  * Test whether a modifier is active in a given keyboard state by name.
1648*2b949d04SAndroid Build Coastguard Worker  *
1649*2b949d04SAndroid Build Coastguard Worker  * @returns 1 if the modifier is active, 0 if it is not.  If the modifier
1650*2b949d04SAndroid Build Coastguard Worker  * name does not exist in the keymap, returns -1.
1651*2b949d04SAndroid Build Coastguard Worker  *
1652*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_state
1653*2b949d04SAndroid Build Coastguard Worker  */
1654*2b949d04SAndroid Build Coastguard Worker int
1655*2b949d04SAndroid Build Coastguard Worker xkb_state_mod_name_is_active(struct xkb_state *state, const char *name,
1656*2b949d04SAndroid Build Coastguard Worker                              enum xkb_state_component type);
1657*2b949d04SAndroid Build Coastguard Worker 
1658*2b949d04SAndroid Build Coastguard Worker /**
1659*2b949d04SAndroid Build Coastguard Worker  * Test whether a set of modifiers are active in a given keyboard state by
1660*2b949d04SAndroid Build Coastguard Worker  * name.
1661*2b949d04SAndroid Build Coastguard Worker  *
1662*2b949d04SAndroid Build Coastguard Worker  * @param state The keyboard state.
1663*2b949d04SAndroid Build Coastguard Worker  * @param type  The component of the state against which to match the
1664*2b949d04SAndroid Build Coastguard Worker  * given modifiers.
1665*2b949d04SAndroid Build Coastguard Worker  * @param match The manner by which to match the state against the
1666*2b949d04SAndroid Build Coastguard Worker  * given modifiers.
1667*2b949d04SAndroid Build Coastguard Worker  * @param ...   The set of of modifier names to test, terminated by a NULL
1668*2b949d04SAndroid Build Coastguard Worker  * argument (sentinel).
1669*2b949d04SAndroid Build Coastguard Worker  *
1670*2b949d04SAndroid Build Coastguard Worker  * @returns 1 if the modifiers are active, 0 if they are not.  If any of
1671*2b949d04SAndroid Build Coastguard Worker  * the modifier names do not exist in the keymap, returns -1.
1672*2b949d04SAndroid Build Coastguard Worker  *
1673*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_state
1674*2b949d04SAndroid Build Coastguard Worker  */
1675*2b949d04SAndroid Build Coastguard Worker int
1676*2b949d04SAndroid Build Coastguard Worker xkb_state_mod_names_are_active(struct xkb_state *state,
1677*2b949d04SAndroid Build Coastguard Worker                                enum xkb_state_component type,
1678*2b949d04SAndroid Build Coastguard Worker                                enum xkb_state_match match,
1679*2b949d04SAndroid Build Coastguard Worker                                ...);
1680*2b949d04SAndroid Build Coastguard Worker 
1681*2b949d04SAndroid Build Coastguard Worker /**
1682*2b949d04SAndroid Build Coastguard Worker  * Test whether a modifier is active in a given keyboard state by index.
1683*2b949d04SAndroid Build Coastguard Worker  *
1684*2b949d04SAndroid Build Coastguard Worker  * @returns 1 if the modifier is active, 0 if it is not.  If the modifier
1685*2b949d04SAndroid Build Coastguard Worker  * index is invalid in the keymap, returns -1.
1686*2b949d04SAndroid Build Coastguard Worker  *
1687*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_state
1688*2b949d04SAndroid Build Coastguard Worker  */
1689*2b949d04SAndroid Build Coastguard Worker int
1690*2b949d04SAndroid Build Coastguard Worker xkb_state_mod_index_is_active(struct xkb_state *state, xkb_mod_index_t idx,
1691*2b949d04SAndroid Build Coastguard Worker                               enum xkb_state_component type);
1692*2b949d04SAndroid Build Coastguard Worker 
1693*2b949d04SAndroid Build Coastguard Worker /**
1694*2b949d04SAndroid Build Coastguard Worker  * Test whether a set of modifiers are active in a given keyboard state by
1695*2b949d04SAndroid Build Coastguard Worker  * index.
1696*2b949d04SAndroid Build Coastguard Worker  *
1697*2b949d04SAndroid Build Coastguard Worker  * @param state The keyboard state.
1698*2b949d04SAndroid Build Coastguard Worker  * @param type  The component of the state against which to match the
1699*2b949d04SAndroid Build Coastguard Worker  * given modifiers.
1700*2b949d04SAndroid Build Coastguard Worker  * @param match The manner by which to match the state against the
1701*2b949d04SAndroid Build Coastguard Worker  * given modifiers.
1702*2b949d04SAndroid Build Coastguard Worker  * @param ...   The set of of modifier indices to test, terminated by a
1703*2b949d04SAndroid Build Coastguard Worker  * XKB_MOD_INVALID argument (sentinel).
1704*2b949d04SAndroid Build Coastguard Worker  *
1705*2b949d04SAndroid Build Coastguard Worker  * @returns 1 if the modifiers are active, 0 if they are not.  If any of
1706*2b949d04SAndroid Build Coastguard Worker  * the modifier indices are invalid in the keymap, returns -1.
1707*2b949d04SAndroid Build Coastguard Worker  *
1708*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_state
1709*2b949d04SAndroid Build Coastguard Worker  */
1710*2b949d04SAndroid Build Coastguard Worker int
1711*2b949d04SAndroid Build Coastguard Worker xkb_state_mod_indices_are_active(struct xkb_state *state,
1712*2b949d04SAndroid Build Coastguard Worker                                  enum xkb_state_component type,
1713*2b949d04SAndroid Build Coastguard Worker                                  enum xkb_state_match match,
1714*2b949d04SAndroid Build Coastguard Worker                                  ...);
1715*2b949d04SAndroid Build Coastguard Worker 
1716*2b949d04SAndroid Build Coastguard Worker /**
1717*2b949d04SAndroid Build Coastguard Worker  * @page consumed-modifiers Consumed Modifiers
1718*2b949d04SAndroid Build Coastguard Worker  * @parblock
1719*2b949d04SAndroid Build Coastguard Worker  *
1720*2b949d04SAndroid Build Coastguard Worker  * Some functions, like xkb_state_key_get_syms(), look at the state of
1721*2b949d04SAndroid Build Coastguard Worker  * the modifiers in the keymap and derive from it the correct shift level
1722*2b949d04SAndroid Build Coastguard Worker  * to use for the key.  For example, in a US layout, pressing the key
1723*2b949d04SAndroid Build Coastguard Worker  * labeled \<A\> while the Shift modifier is active, generates the keysym
1724*2b949d04SAndroid Build Coastguard Worker  * 'A'.  In this case, the Shift modifier is said to be "consumed".
1725*2b949d04SAndroid Build Coastguard Worker  * However, the Num Lock modifier does not affect this translation at all,
1726*2b949d04SAndroid Build Coastguard Worker  * even if it is active, so it is not consumed by this translation.
1727*2b949d04SAndroid Build Coastguard Worker  *
1728*2b949d04SAndroid Build Coastguard Worker  * It may be desirable for some application to not reuse consumed modifiers
1729*2b949d04SAndroid Build Coastguard Worker  * for further processing, e.g. for hotkeys or keyboard shortcuts.  To
1730*2b949d04SAndroid Build Coastguard Worker  * understand why, consider some requirements from a standard shortcut
1731*2b949d04SAndroid Build Coastguard Worker  * mechanism, and how they are implemented:
1732*2b949d04SAndroid Build Coastguard Worker  *
1733*2b949d04SAndroid Build Coastguard Worker  * 1. The shortcut's modifiers must match exactly to the state.  For
1734*2b949d04SAndroid Build Coastguard Worker  *    example, it is possible to bind separate actions to \<Alt\>\<Tab\>
1735*2b949d04SAndroid Build Coastguard Worker  *    and to \<Alt\>\<Shift\>\<Tab\>.  Further, if only \<Alt\>\<Tab\> is
1736*2b949d04SAndroid Build Coastguard Worker  *    bound to an action, pressing \<Alt\>\<Shift\>\<Tab\> should not
1737*2b949d04SAndroid Build Coastguard Worker  *    trigger the shortcut.
1738*2b949d04SAndroid Build Coastguard Worker  *    Effectively, this means that the modifiers are compared using the
1739*2b949d04SAndroid Build Coastguard Worker  *    equality operator (==).
1740*2b949d04SAndroid Build Coastguard Worker  *
1741*2b949d04SAndroid Build Coastguard Worker  * 2. Only relevant modifiers are considered for the matching.  For example,
1742*2b949d04SAndroid Build Coastguard Worker  *    Caps Lock and Num Lock should not generally affect the matching, e.g.
1743*2b949d04SAndroid Build Coastguard Worker  *    when matching \<Alt\>\<Tab\> against the state, it does not matter
1744*2b949d04SAndroid Build Coastguard Worker  *    whether Num Lock is active or not.  These relevant, or "significant",
1745*2b949d04SAndroid Build Coastguard Worker  *    modifiers usually include Alt, Control, Shift, Super and similar.
1746*2b949d04SAndroid Build Coastguard Worker  *    Effectively, this means that non-significant modifiers are masked out,
1747*2b949d04SAndroid Build Coastguard Worker  *    before doing the comparison as described above.
1748*2b949d04SAndroid Build Coastguard Worker  *
1749*2b949d04SAndroid Build Coastguard Worker  * 3. The matching must be independent of the layout/keymap.  For example,
1750*2b949d04SAndroid Build Coastguard Worker  *    the \<Plus\> (+) symbol is found on the first level on some layouts,
1751*2b949d04SAndroid Build Coastguard Worker  *    but requires holding Shift on others.  If you simply bind the action
1752*2b949d04SAndroid Build Coastguard Worker  *    to the \<Plus\> keysym, it would work for the unshifted kind, but
1753*2b949d04SAndroid Build Coastguard Worker  *    not for the others, because the match against Shift would fail.  If
1754*2b949d04SAndroid Build Coastguard Worker  *    you bind the action to \<Shift\>\<Plus\>, only the shifted kind would
1755*2b949d04SAndroid Build Coastguard Worker  *    work.  So what is needed is to recognize that Shift is used up in the
1756*2b949d04SAndroid Build Coastguard Worker  *    translation of the keysym itself, and therefore should not be included
1757*2b949d04SAndroid Build Coastguard Worker  *    in the matching.
1758*2b949d04SAndroid Build Coastguard Worker  *    Effectively, this means that consumed modifiers (Shift in this example)
1759*2b949d04SAndroid Build Coastguard Worker  *    are masked out as well, before doing the comparison.
1760*2b949d04SAndroid Build Coastguard Worker  *
1761*2b949d04SAndroid Build Coastguard Worker  * In summary, this is approximately how the matching would be performed:
1762*2b949d04SAndroid Build Coastguard Worker  * @code
1763*2b949d04SAndroid Build Coastguard Worker  *   (keysym == shortcut_keysym) &&
1764*2b949d04SAndroid Build Coastguard Worker  *   ((state_mods & ~consumed_mods & significant_mods) == shortcut_mods)
1765*2b949d04SAndroid Build Coastguard Worker  * @endcode
1766*2b949d04SAndroid Build Coastguard Worker  *
1767*2b949d04SAndroid Build Coastguard Worker  * @c state_mods are the modifiers reported by
1768*2b949d04SAndroid Build Coastguard Worker  * xkb_state_mod_index_is_active() and similar functions.
1769*2b949d04SAndroid Build Coastguard Worker  * @c consumed_mods are the modifiers reported by
1770*2b949d04SAndroid Build Coastguard Worker  * xkb_state_mod_index_is_consumed() and similar functions.
1771*2b949d04SAndroid Build Coastguard Worker  * @c significant_mods are decided upon by the application/toolkit/user;
1772*2b949d04SAndroid Build Coastguard Worker  * it is up to them to decide whether these are configurable or hard-coded.
1773*2b949d04SAndroid Build Coastguard Worker  *
1774*2b949d04SAndroid Build Coastguard Worker  * @endparblock
1775*2b949d04SAndroid Build Coastguard Worker  */
1776*2b949d04SAndroid Build Coastguard Worker 
1777*2b949d04SAndroid Build Coastguard Worker /**
1778*2b949d04SAndroid Build Coastguard Worker  * Consumed modifiers mode.
1779*2b949d04SAndroid Build Coastguard Worker  *
1780*2b949d04SAndroid Build Coastguard Worker  * There are several possible methods for deciding which modifiers are
1781*2b949d04SAndroid Build Coastguard Worker  * consumed and which are not, each applicable for different systems or
1782*2b949d04SAndroid Build Coastguard Worker  * situations. The mode selects the method to use.
1783*2b949d04SAndroid Build Coastguard Worker  *
1784*2b949d04SAndroid Build Coastguard Worker  * Keep in mind that in all methods, the keymap may decide to "preserve"
1785*2b949d04SAndroid Build Coastguard Worker  * a modifier, meaning it is not reported as consumed even if it would
1786*2b949d04SAndroid Build Coastguard Worker  * have otherwise.
1787*2b949d04SAndroid Build Coastguard Worker  */
1788*2b949d04SAndroid Build Coastguard Worker enum xkb_consumed_mode {
1789*2b949d04SAndroid Build Coastguard Worker     /**
1790*2b949d04SAndroid Build Coastguard Worker      * This is the mode defined in the XKB specification and used by libX11.
1791*2b949d04SAndroid Build Coastguard Worker      *
1792*2b949d04SAndroid Build Coastguard Worker      * A modifier is consumed if and only if it *may affect* key translation.
1793*2b949d04SAndroid Build Coastguard Worker      *
1794*2b949d04SAndroid Build Coastguard Worker      * For example, if `Control+Alt+<Backspace>` produces some assigned keysym,
1795*2b949d04SAndroid Build Coastguard Worker      * then when pressing just `<Backspace>`, `Control` and `Alt` are consumed,
1796*2b949d04SAndroid Build Coastguard Worker      * even though they are not active, since if they *were* active they would
1797*2b949d04SAndroid Build Coastguard Worker      * have affected key translation.
1798*2b949d04SAndroid Build Coastguard Worker      */
1799*2b949d04SAndroid Build Coastguard Worker     XKB_CONSUMED_MODE_XKB,
1800*2b949d04SAndroid Build Coastguard Worker     /**
1801*2b949d04SAndroid Build Coastguard Worker      * This is the mode used by the GTK+ toolkit.
1802*2b949d04SAndroid Build Coastguard Worker      *
1803*2b949d04SAndroid Build Coastguard Worker      * The mode consists of the following two independent heuristics:
1804*2b949d04SAndroid Build Coastguard Worker      *
1805*2b949d04SAndroid Build Coastguard Worker      * - The currently active set of modifiers, excluding modifiers which do
1806*2b949d04SAndroid Build Coastguard Worker      *   not affect the key (as described for @ref XKB_CONSUMED_MODE_XKB), are
1807*2b949d04SAndroid Build Coastguard Worker      *   considered consumed, if the keysyms produced when all of them are
1808*2b949d04SAndroid Build Coastguard Worker      *   active are different from the keysyms produced when no modifiers are
1809*2b949d04SAndroid Build Coastguard Worker      *   active.
1810*2b949d04SAndroid Build Coastguard Worker      *
1811*2b949d04SAndroid Build Coastguard Worker      * - A single modifier is considered consumed if the keysyms produced for
1812*2b949d04SAndroid Build Coastguard Worker      *   the key when it is the only active modifier are different from the
1813*2b949d04SAndroid Build Coastguard Worker      *   keysyms produced when no modifiers are active.
1814*2b949d04SAndroid Build Coastguard Worker      */
1815*2b949d04SAndroid Build Coastguard Worker     XKB_CONSUMED_MODE_GTK
1816*2b949d04SAndroid Build Coastguard Worker };
1817*2b949d04SAndroid Build Coastguard Worker 
1818*2b949d04SAndroid Build Coastguard Worker /**
1819*2b949d04SAndroid Build Coastguard Worker  * Get the mask of modifiers consumed by translating a given key.
1820*2b949d04SAndroid Build Coastguard Worker  *
1821*2b949d04SAndroid Build Coastguard Worker  * @param state The keyboard state.
1822*2b949d04SAndroid Build Coastguard Worker  * @param key   The keycode of the key.
1823*2b949d04SAndroid Build Coastguard Worker  * @param mode  The consumed modifiers mode to use; see enum description.
1824*2b949d04SAndroid Build Coastguard Worker  *
1825*2b949d04SAndroid Build Coastguard Worker  * @returns a mask of the consumed modifiers.
1826*2b949d04SAndroid Build Coastguard Worker  *
1827*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_state
1828*2b949d04SAndroid Build Coastguard Worker  * @since 0.7.0
1829*2b949d04SAndroid Build Coastguard Worker  */
1830*2b949d04SAndroid Build Coastguard Worker xkb_mod_mask_t
1831*2b949d04SAndroid Build Coastguard Worker xkb_state_key_get_consumed_mods2(struct xkb_state *state, xkb_keycode_t key,
1832*2b949d04SAndroid Build Coastguard Worker                                  enum xkb_consumed_mode mode);
1833*2b949d04SAndroid Build Coastguard Worker 
1834*2b949d04SAndroid Build Coastguard Worker /**
1835*2b949d04SAndroid Build Coastguard Worker  * Same as xkb_state_key_get_consumed_mods2() with mode XKB_CONSUMED_MODE_XKB.
1836*2b949d04SAndroid Build Coastguard Worker  *
1837*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_state
1838*2b949d04SAndroid Build Coastguard Worker  * @since 0.4.1
1839*2b949d04SAndroid Build Coastguard Worker  */
1840*2b949d04SAndroid Build Coastguard Worker xkb_mod_mask_t
1841*2b949d04SAndroid Build Coastguard Worker xkb_state_key_get_consumed_mods(struct xkb_state *state, xkb_keycode_t key);
1842*2b949d04SAndroid Build Coastguard Worker 
1843*2b949d04SAndroid Build Coastguard Worker /**
1844*2b949d04SAndroid Build Coastguard Worker  * Test whether a modifier is consumed by keyboard state translation for
1845*2b949d04SAndroid Build Coastguard Worker  * a key.
1846*2b949d04SAndroid Build Coastguard Worker  *
1847*2b949d04SAndroid Build Coastguard Worker  * @param state The keyboard state.
1848*2b949d04SAndroid Build Coastguard Worker  * @param key   The keycode of the key.
1849*2b949d04SAndroid Build Coastguard Worker  * @param idx   The index of the modifier to check.
1850*2b949d04SAndroid Build Coastguard Worker  * @param mode  The consumed modifiers mode to use; see enum description.
1851*2b949d04SAndroid Build Coastguard Worker  *
1852*2b949d04SAndroid Build Coastguard Worker  * @returns 1 if the modifier is consumed, 0 if it is not.  If the modifier
1853*2b949d04SAndroid Build Coastguard Worker  * index is not valid in the keymap, returns -1.
1854*2b949d04SAndroid Build Coastguard Worker  *
1855*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_state_mod_mask_remove_consumed()
1856*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_state_key_get_consumed_mods()
1857*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_state
1858*2b949d04SAndroid Build Coastguard Worker  * @since 0.7.0
1859*2b949d04SAndroid Build Coastguard Worker  */
1860*2b949d04SAndroid Build Coastguard Worker int
1861*2b949d04SAndroid Build Coastguard Worker xkb_state_mod_index_is_consumed2(struct xkb_state *state,
1862*2b949d04SAndroid Build Coastguard Worker                                  xkb_keycode_t key,
1863*2b949d04SAndroid Build Coastguard Worker                                  xkb_mod_index_t idx,
1864*2b949d04SAndroid Build Coastguard Worker                                  enum xkb_consumed_mode mode);
1865*2b949d04SAndroid Build Coastguard Worker 
1866*2b949d04SAndroid Build Coastguard Worker /**
1867*2b949d04SAndroid Build Coastguard Worker  * Same as xkb_state_mod_index_is_consumed2() with mode XKB_CONSUMED_MOD_XKB.
1868*2b949d04SAndroid Build Coastguard Worker  *
1869*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_state
1870*2b949d04SAndroid Build Coastguard Worker  * @since 0.4.1
1871*2b949d04SAndroid Build Coastguard Worker  */
1872*2b949d04SAndroid Build Coastguard Worker int
1873*2b949d04SAndroid Build Coastguard Worker xkb_state_mod_index_is_consumed(struct xkb_state *state, xkb_keycode_t key,
1874*2b949d04SAndroid Build Coastguard Worker                                 xkb_mod_index_t idx);
1875*2b949d04SAndroid Build Coastguard Worker 
1876*2b949d04SAndroid Build Coastguard Worker /**
1877*2b949d04SAndroid Build Coastguard Worker  * Remove consumed modifiers from a modifier mask for a key.
1878*2b949d04SAndroid Build Coastguard Worker  *
1879*2b949d04SAndroid Build Coastguard Worker  * @deprecated Use xkb_state_key_get_consumed_mods2() instead.
1880*2b949d04SAndroid Build Coastguard Worker  *
1881*2b949d04SAndroid Build Coastguard Worker  * Takes the given modifier mask, and removes all modifiers which are
1882*2b949d04SAndroid Build Coastguard Worker  * consumed for that particular key (as in xkb_state_mod_index_is_consumed()).
1883*2b949d04SAndroid Build Coastguard Worker  *
1884*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_state_mod_index_is_consumed()
1885*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_state
1886*2b949d04SAndroid Build Coastguard Worker  */
1887*2b949d04SAndroid Build Coastguard Worker xkb_mod_mask_t
1888*2b949d04SAndroid Build Coastguard Worker xkb_state_mod_mask_remove_consumed(struct xkb_state *state, xkb_keycode_t key,
1889*2b949d04SAndroid Build Coastguard Worker                                    xkb_mod_mask_t mask);
1890*2b949d04SAndroid Build Coastguard Worker 
1891*2b949d04SAndroid Build Coastguard Worker /**
1892*2b949d04SAndroid Build Coastguard Worker  * Test whether a layout is active in a given keyboard state by name.
1893*2b949d04SAndroid Build Coastguard Worker  *
1894*2b949d04SAndroid Build Coastguard Worker  * @returns 1 if the layout is active, 0 if it is not.  If no layout with
1895*2b949d04SAndroid Build Coastguard Worker  * this name exists in the keymap, return -1.
1896*2b949d04SAndroid Build Coastguard Worker  *
1897*2b949d04SAndroid Build Coastguard Worker  * If multiple layouts in the keymap have this name, the one with the lowest
1898*2b949d04SAndroid Build Coastguard Worker  * index is tested.
1899*2b949d04SAndroid Build Coastguard Worker  *
1900*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_layout_index_t
1901*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_state
1902*2b949d04SAndroid Build Coastguard Worker  */
1903*2b949d04SAndroid Build Coastguard Worker int
1904*2b949d04SAndroid Build Coastguard Worker xkb_state_layout_name_is_active(struct xkb_state *state, const char *name,
1905*2b949d04SAndroid Build Coastguard Worker                                 enum xkb_state_component type);
1906*2b949d04SAndroid Build Coastguard Worker 
1907*2b949d04SAndroid Build Coastguard Worker /**
1908*2b949d04SAndroid Build Coastguard Worker  * Test whether a layout is active in a given keyboard state by index.
1909*2b949d04SAndroid Build Coastguard Worker  *
1910*2b949d04SAndroid Build Coastguard Worker  * @returns 1 if the layout is active, 0 if it is not.  If the layout index
1911*2b949d04SAndroid Build Coastguard Worker  * is not valid in the keymap, returns -1.
1912*2b949d04SAndroid Build Coastguard Worker  *
1913*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_layout_index_t
1914*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_state
1915*2b949d04SAndroid Build Coastguard Worker  */
1916*2b949d04SAndroid Build Coastguard Worker int
1917*2b949d04SAndroid Build Coastguard Worker xkb_state_layout_index_is_active(struct xkb_state *state,
1918*2b949d04SAndroid Build Coastguard Worker                                  xkb_layout_index_t idx,
1919*2b949d04SAndroid Build Coastguard Worker                                  enum xkb_state_component type);
1920*2b949d04SAndroid Build Coastguard Worker 
1921*2b949d04SAndroid Build Coastguard Worker /**
1922*2b949d04SAndroid Build Coastguard Worker  * Test whether a LED is active in a given keyboard state by name.
1923*2b949d04SAndroid Build Coastguard Worker  *
1924*2b949d04SAndroid Build Coastguard Worker  * @returns 1 if the LED is active, 0 if it not.  If no LED with this name
1925*2b949d04SAndroid Build Coastguard Worker  * exists in the keymap, returns -1.
1926*2b949d04SAndroid Build Coastguard Worker  *
1927*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_led_index_t
1928*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_state
1929*2b949d04SAndroid Build Coastguard Worker  */
1930*2b949d04SAndroid Build Coastguard Worker int
1931*2b949d04SAndroid Build Coastguard Worker xkb_state_led_name_is_active(struct xkb_state *state, const char *name);
1932*2b949d04SAndroid Build Coastguard Worker 
1933*2b949d04SAndroid Build Coastguard Worker /**
1934*2b949d04SAndroid Build Coastguard Worker  * Test whether a LED is active in a given keyboard state by index.
1935*2b949d04SAndroid Build Coastguard Worker  *
1936*2b949d04SAndroid Build Coastguard Worker  * @returns 1 if the LED is active, 0 if it not.  If the LED index is not
1937*2b949d04SAndroid Build Coastguard Worker  * valid in the keymap, returns -1.
1938*2b949d04SAndroid Build Coastguard Worker  *
1939*2b949d04SAndroid Build Coastguard Worker  * @sa xkb_led_index_t
1940*2b949d04SAndroid Build Coastguard Worker  * @memberof xkb_state
1941*2b949d04SAndroid Build Coastguard Worker  */
1942*2b949d04SAndroid Build Coastguard Worker int
1943*2b949d04SAndroid Build Coastguard Worker xkb_state_led_index_is_active(struct xkb_state *state, xkb_led_index_t idx);
1944*2b949d04SAndroid Build Coastguard Worker 
1945*2b949d04SAndroid Build Coastguard Worker /** @} */
1946*2b949d04SAndroid Build Coastguard Worker 
1947*2b949d04SAndroid Build Coastguard Worker /* Leave this include last, so it can pick up our types, etc. */
1948*2b949d04SAndroid Build Coastguard Worker #include <xkbcommon/xkbcommon-compat.h>
1949*2b949d04SAndroid Build Coastguard Worker 
1950*2b949d04SAndroid Build Coastguard Worker #ifdef __cplusplus
1951*2b949d04SAndroid Build Coastguard Worker } /* extern "C" */
1952*2b949d04SAndroid Build Coastguard Worker #endif
1953*2b949d04SAndroid Build Coastguard Worker 
1954*2b949d04SAndroid Build Coastguard Worker #endif /* _XKBCOMMON_H_ */
1955