2 * Copyright © 2013 Ran Benita
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21 * DEALINGS IN THE SOFTWARE.
24 #ifndef _XKBCOMMON_X11_PRIV_H
25 #define _XKBCOMMON_X11_PRIV_H
30 #include "xkbcommon/xkbcommon-x11.h"
32 struct x11_atom_interner {
33 struct xkb_context *ctx;
34 xcb_connection_t *conn;
36 /* Atoms for which we send a GetAtomName request */
40 xcb_get_atom_name_cookie_t cookie;
43 /* Atoms which were already pending but queried again */
49 /* These are not interned, but saved directly (after XkbEscapeMapName) */
51 xcb_get_atom_name_cookie_t cookie;
58 x11_atom_interner_init(struct x11_atom_interner *interner,
59 struct xkb_context *ctx, xcb_connection_t *conn);
62 x11_atom_interner_round_trip(struct x11_atom_interner *interner);
65 * Make a xkb_atom_t's from X atoms. The actual write is delayed until the next
66 * call to x11_atom_interner_round_trip() or when too many atoms are pending.
69 x11_atom_interner_adopt_atom(struct x11_atom_interner *interner,
70 const xcb_atom_t atom, xkb_atom_t *out);
73 * Get a strdup'd and XkbEscapeMapName'd name of an X atom. The actual write is
74 * delayed until the next call to x11_atom_interner_round_trip().
77 x11_atom_interner_get_escaped_atom_name(struct x11_atom_interner *interner,
78 xcb_atom_t atom, char **out);