registry: don't call xmlCleanupParser()
[platform/upstream/libxkbcommon.git] / src / x11 / x11-priv.h
1 /*
2  * Copyright © 2013 Ran Benita
3  *
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:
10  *
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
13  * Software.
14  *
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.
22  */
23
24 #ifndef _XKBCOMMON_X11_PRIV_H
25 #define _XKBCOMMON_X11_PRIV_H
26
27 #include <xcb/xkb.h>
28
29 #include "keymap.h"
30 #include "xkbcommon/xkbcommon-x11.h"
31
32 struct x11_atom_interner {
33     struct xkb_context *ctx;
34     xcb_connection_t *conn;
35     bool had_error;
36     /* Atoms for which we send a GetAtomName request */
37     struct {
38         xcb_atom_t from;
39         xkb_atom_t *out;
40         xcb_get_atom_name_cookie_t cookie;
41     } pending[128];
42     size_t num_pending;
43     /* Atoms which were already pending but queried again */
44     struct {
45         xcb_atom_t from;
46         xkb_atom_t *out;
47     } copies[128];
48     size_t num_copies;
49     /* These are not interned, but saved directly (after XkbEscapeMapName) */
50     struct {
51         xcb_get_atom_name_cookie_t cookie;
52         char **out;
53     } escaped[4];
54     size_t num_escaped;
55 };
56
57 void
58 x11_atom_interner_init(struct x11_atom_interner *interner,
59                        struct xkb_context *ctx, xcb_connection_t *conn);
60
61 void
62 x11_atom_interner_round_trip(struct x11_atom_interner *interner);
63
64 /*
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.
67  */
68 void
69 x11_atom_interner_adopt_atom(struct x11_atom_interner *interner,
70                              const xcb_atom_t atom, xkb_atom_t *out);
71
72 /*
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().
75  */
76 void
77 x11_atom_interner_get_escaped_atom_name(struct x11_atom_interner *interner,
78                                         xcb_atom_t atom, char **out);
79
80 #endif