Tizen 2.1 base
[framework/uifw/ecore.git] / src / lib / ecore_x / xcb / ecore_xcb_atom.c
1 /*
2  * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
3  */
4
5 #include "ecore_xcb_private.h"
6
7
8 /**
9  * @defgroup Ecore_X_Atom_Group XCB Atom Functions
10  *
11  * Functions that operate on atoms.
12  */
13
14 /*********/
15 /* Atoms */
16 /*********/
17
18 #include "ecore_x_atoms_decl.h"
19
20 /* To avoid round trips, the initialization is separated in 2
21    functions: _ecore_xcb_atom_init and
22    _ecore_xcb_atom_init_finalize. The first one gets the cookies and
23    the second one gets the replies and set the atoms. */
24
25 #define FETCH_ATOM(s) \
26    atom_cookies[i] = xcb_intern_atom(_ecore_xcb_conn, 0, strlen(s), s); \
27    i++
28
29 #define FETCH_ATOM_FINALIZE(x) \
30    reply = xcb_intern_atom_reply(_ecore_xcb_conn, atom_cookies[i], NULL); \
31    x = reply->atom; \
32    free(reply); \
33    i++;
34
35 void
36 _ecore_x_atom_init(xcb_intern_atom_cookie_t *atom_cookies)
37 {
38    int i = 0;
39
40    /* generic atoms */
41    FETCH_ATOM("COMPOUND_TEXT");
42    FETCH_ATOM("FILE_NAME");
43    FETCH_ATOM("TEXT");
44    FETCH_ATOM("UTF8_STRING");
45
46    /* dnd atoms */
47    FETCH_ATOM("JXSelectionWindowProperty");
48    FETCH_ATOM("XdndSelection");
49    FETCH_ATOM("XdndAware");
50    FETCH_ATOM("XdndEnter");
51    FETCH_ATOM("XdndTypeList");
52    FETCH_ATOM("XdndPosition");
53    FETCH_ATOM("XdndActionCopy");
54    FETCH_ATOM("XdndActionMove");
55    FETCH_ATOM("XdndActionPrivate");
56    FETCH_ATOM("XdndActionAsk");
57    FETCH_ATOM("XdndActionList");
58    FETCH_ATOM("XdndActionLink");
59    FETCH_ATOM("XdndActionDescription");
60    FETCH_ATOM("XdndProxy");
61    FETCH_ATOM("XdndStatus");
62    FETCH_ATOM("XdndLeave");
63    FETCH_ATOM("XdndDrop");
64    FETCH_ATOM("XdndFinished");
65
66    /* old E atom */
67    FETCH_ATOM("_E_FRAME_SIZE");
68
69    /* old Gnome atom */
70    FETCH_ATOM("_WIN_LAYER");
71
72    /* ICCCM */
73    FETCH_ATOM("WM_PROTOCOLS");
74    FETCH_ATOM("WM_COLORMAP_WINDOWS");
75
76    FETCH_ATOM("WM_STATE");
77
78    FETCH_ATOM("WM_CHANGE_STATE");
79
80    FETCH_ATOM("WM_TAKE_FOCUS");
81    FETCH_ATOM("WM_SAVE_YOURSELF");
82    FETCH_ATOM("WM_DELETE_WINDOW");
83
84    FETCH_ATOM("WM_COLORMAP_NOTIFY");
85
86    FETCH_ATOM("SM_CLIENT_ID");
87    FETCH_ATOM("WM_CLIENT_LEADER");
88    FETCH_ATOM("WM_WINDOW_ROLE");
89
90    /* Motif WM atom */
91    FETCH_ATOM("_MOTIF_WM_HINTS");
92
93    /* NetWM atoms */
94    FETCH_ATOM("_NET_SUPPORTED");
95    FETCH_ATOM("_NET_CLIENT_LIST");
96    FETCH_ATOM("_NET_CLIENT_LIST_STACKING");
97    FETCH_ATOM("_NET_NUMBER_OF_DESKTOPS");
98    FETCH_ATOM("_NET_DESKTOP_GEOMETRY");
99    FETCH_ATOM("_NET_DESKTOP_VIEWPORT");
100    FETCH_ATOM("_NET_CURRENT_DESKTOP");
101    FETCH_ATOM("_NET_DESKTOP_NAMES");
102    FETCH_ATOM("_NET_ACTIVE_WINDOW");
103    FETCH_ATOM("_NET_WORKAREA");
104    FETCH_ATOM("_NET_SUPPORTING_WM_CHECK");
105    FETCH_ATOM("_NET_VIRTUAL_ROOTS");
106    FETCH_ATOM("_NET_DESKTOP_LAYOUT");
107    FETCH_ATOM("_NET_SHOWING_DESKTOP");
108
109    FETCH_ATOM("_NET_CLOSE_WINDOW");
110    FETCH_ATOM("_NET_MOVERESIZE_WINDOW");
111    FETCH_ATOM("_NET_WM_MOVERESIZE");
112    FETCH_ATOM("_NET_RESTACK_WINDOW");
113    FETCH_ATOM("_NET_REQUEST_FRAME_EXTENTS");
114
115    FETCH_ATOM("_NET_WM_NAME");
116    FETCH_ATOM("_NET_WM_VISIBLE_NAME");
117    FETCH_ATOM("_NET_WM_ICON_NAME");
118    FETCH_ATOM("_NET_WM_VISIBLE_ICON_NAME");
119    FETCH_ATOM("_NET_WM_DESKTOP");
120
121    FETCH_ATOM("_NET_WM_WINDOW_TYPE");
122    FETCH_ATOM("_NET_WM_WINDOW_TYPE_DESKTOP");
123    FETCH_ATOM("_NET_WM_WINDOW_TYPE_DOCK");
124    FETCH_ATOM("_NET_WM_WINDOW_TYPE_TOOLBAR");
125    FETCH_ATOM("_NET_WM_WINDOW_TYPE_MENU");
126    FETCH_ATOM("_NET_WM_WINDOW_TYPE_UTILITY");
127    FETCH_ATOM("_NET_WM_WINDOW_TYPE_SPLASH");
128    FETCH_ATOM("_NET_WM_WINDOW_TYPE_DIALOG");
129    FETCH_ATOM("_NET_WM_WINDOW_TYPE_NORMAL");
130
131    FETCH_ATOM("_NET_WM_STATE");
132    FETCH_ATOM("_NET_WM_STATE_MODAL");
133    FETCH_ATOM("_NET_WM_STATE_STICKY");
134    FETCH_ATOM("_NET_WM_STATE_MAXIMIZED_VERT");
135    FETCH_ATOM("_NET_WM_STATE_MAXIMIZED_HORZ");
136    FETCH_ATOM("_NET_WM_STATE_SHADED");
137    FETCH_ATOM("_NET_WM_STATE_SKIP_TASKBAR");
138    FETCH_ATOM("_NET_WM_STATE_SKIP_PAGER");
139    FETCH_ATOM("_NET_WM_STATE_HIDDEN");
140    FETCH_ATOM("_NET_WM_STATE_FULLSCREEN");
141    FETCH_ATOM("_NET_WM_STATE_ABOVE");
142    FETCH_ATOM("_NET_WM_STATE_BELOW");
143    FETCH_ATOM("_NET_WM_STATE_DEMANDS_ATTENTION");
144
145    FETCH_ATOM("_NET_WM_ALLOWED_ACTIONS");
146    FETCH_ATOM("_NET_WM_ACTION_MOVE");
147    FETCH_ATOM("_NET_WM_ACTION_RESIZE");
148    FETCH_ATOM("_NET_WM_ACTION_MINIMIZE");
149    FETCH_ATOM("_NET_WM_ACTION_SHADE");
150    FETCH_ATOM("_NET_WM_ACTION_STICK");
151    FETCH_ATOM("_NET_WM_ACTION_MAXIMIZE_HORZ");
152    FETCH_ATOM("_NET_WM_ACTION_MAXIMIZE_VERT");
153    FETCH_ATOM("_NET_WM_ACTION_FULLSCREEN");
154    FETCH_ATOM("_NET_WM_ACTION_CHANGE_DESKTOP");
155    FETCH_ATOM("_NET_WM_ACTION_CLOSE");
156
157    FETCH_ATOM("_NET_WM_STRUT");
158    FETCH_ATOM("_NET_WM_STRUT_PARTIAL");
159    FETCH_ATOM("_NET_WM_ICON_GEOMETRY");
160    FETCH_ATOM("_NET_WM_ICON");
161    FETCH_ATOM("_NET_WM_PID");
162    FETCH_ATOM("_NET_WM_HANDLED_ICONS");
163    FETCH_ATOM("_NET_WM_USER_TIME");
164    FETCH_ATOM("_NET_STARTUP_ID");
165    FETCH_ATOM("_NET_FRAME_EXTENTS");
166
167    FETCH_ATOM("_NET_WM_PING");
168    FETCH_ATOM("_NET_WM_SYNC_REQUEST");
169    FETCH_ATOM("_NET_WM_SYNC_REQUEST_COUNTER");
170
171    FETCH_ATOM("_NET_WM_WINDOW_OPACITY");
172    FETCH_ATOM("_NET_WM_WINDOW_SHADOW");
173    FETCH_ATOM("_NET_WM_WINDOW_SHADE");
174
175    FETCH_ATOM("_NET_STARTUP_INFO_BEGIN");
176    FETCH_ATOM("_NET_STARTUP_INFO");
177
178    /* selection atoms */
179    FETCH_ATOM("TARGETS");
180    FETCH_ATOM("CLIPBOARD");
181    FETCH_ATOM("_ECORE_SELECTION_PRIMARY");
182    FETCH_ATOM("_ECORE_SELECTION_SECONDARY");
183    FETCH_ATOM("_ECORE_SELECTION_CLIPBOARD");
184
185    /* These atoms are already internally defined */
186    ECORE_X_ATOM_SELECTION_PRIMARY   = 1;
187    ECORE_X_ATOM_SELECTION_SECONDARY = 2;
188    ECORE_X_ATOM_ATOM                = 4;
189    ECORE_X_ATOM_CARDINAL            = 6;
190    ECORE_X_ATOM_STRING              = 31;
191    ECORE_X_ATOM_WINDOW              = 33;
192    ECORE_X_ATOM_WM_NAME             = 39;
193    ECORE_X_ATOM_WM_ICON_NAME        = 37;
194    ECORE_X_ATOM_WM_NORMAL_HINTS     = 40;
195    ECORE_X_ATOM_WM_SIZE_HINTS       = 41;
196    ECORE_X_ATOM_WM_HINTS            = 35;
197    ECORE_X_ATOM_WM_CLASS            = 67;
198    ECORE_X_ATOM_WM_TRANSIENT_FOR    = 68;
199    ECORE_X_ATOM_WM_COMMAND          = 34;
200    ECORE_X_ATOM_WM_CLIENT_MACHINE   = 36;
201    ECORE_X_ATOM_WM_ICON_SIZE        = 38;
202
203    /* Initialize the globally defined xdnd atoms */
204    ECORE_X_DND_ACTION_COPY          = ECORE_X_ATOM_XDND_ACTION_COPY;
205    ECORE_X_DND_ACTION_MOVE          = ECORE_X_ATOM_XDND_ACTION_MOVE;
206    ECORE_X_DND_ACTION_LINK          = ECORE_X_ATOM_XDND_ACTION_LINK;
207    ECORE_X_DND_ACTION_ASK           = ECORE_X_ATOM_XDND_ACTION_ASK;
208    ECORE_X_DND_ACTION_PRIVATE       = ECORE_X_ATOM_XDND_ACTION_PRIVATE;
209 }
210
211 void
212 _ecore_x_atom_init_finalize(xcb_intern_atom_cookie_t *atom_cookies)
213 {
214    xcb_intern_atom_reply_t *reply = NULL;
215    int i = 0;
216
217    /* generic atoms */
218    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_COMPOUND_TEXT);
219    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_FILE_NAME);
220    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_TEXT);
221    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_UTF8_STRING);
222
223    /* dnd atoms */
224    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_SELECTION_PROP_XDND);
225    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_SELECTION_XDND);
226    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_XDND_AWARE);
227    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_XDND_ENTER);
228    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_XDND_TYPE_LIST);
229    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_XDND_POSITION);
230    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_XDND_ACTION_COPY);
231    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_XDND_ACTION_MOVE);
232    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_XDND_ACTION_PRIVATE);
233    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_XDND_ACTION_ASK);
234    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_XDND_ACTION_LIST);
235    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_XDND_ACTION_LINK);
236    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_XDND_ACTION_DESCRIPTION);
237    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_XDND_PROXY);
238    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_XDND_STATUS);
239    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_XDND_LEAVE);
240    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_XDND_DROP);
241    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_XDND_FINISHED);
242
243    /* old E atom */
244    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_E_FRAME_SIZE);
245
246    /* old Gnome atom */
247    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_WIN_LAYER);
248
249    /* ICCCM */
250    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_WM_PROTOCOLS);
251    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_WM_COLORMAP_WINDOWS);
252
253    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_WM_STATE);
254
255    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_WM_CHANGE_STATE);
256
257    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_WM_TAKE_FOCUS);
258    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_WM_SAVE_YOURSELF);
259    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_WM_DELETE_WINDOW);
260
261    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_WM_COLORMAP_NOTIFY);
262
263    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_SM_CLIENT_ID);
264    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_WM_CLIENT_LEADER);
265    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_WM_WINDOW_ROLE);
266
267    /* Motif WM atom */
268    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_MOTIF_WM_HINTS);
269
270    /* NetWM atoms */
271    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_SUPPORTED);
272    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_CLIENT_LIST);
273    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_CLIENT_LIST_STACKING);
274    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_NUMBER_OF_DESKTOPS);
275    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_DESKTOP_GEOMETRY);
276    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_DESKTOP_VIEWPORT);
277    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_CURRENT_DESKTOP);
278    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_DESKTOP_NAMES);
279    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_ACTIVE_WINDOW);
280    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WORKAREA);
281    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_SUPPORTING_WM_CHECK);
282    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_VIRTUAL_ROOTS);
283    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_DESKTOP_LAYOUT);
284    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_SHOWING_DESKTOP);
285
286    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_CLOSE_WINDOW);
287    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_MOVERESIZE_WINDOW);
288    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_MOVERESIZE);
289    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_RESTACK_WINDOW);
290    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_REQUEST_FRAME_EXTENTS);
291
292    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_NAME);
293    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_VISIBLE_NAME);
294    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_ICON_NAME);
295    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_VISIBLE_ICON_NAME);
296    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_DESKTOP);
297
298    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_WINDOW_TYPE);
299    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DESKTOP);
300    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DOCK);
301    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_WINDOW_TYPE_TOOLBAR);
302    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_WINDOW_TYPE_MENU);
303    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_WINDOW_TYPE_UTILITY);
304    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_WINDOW_TYPE_SPLASH);
305    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DIALOG);
306    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_WINDOW_TYPE_NORMAL);
307
308    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_STATE);
309    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_STATE_MODAL);
310    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_STATE_STICKY);
311    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_VERT);
312    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_HORZ);
313    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_STATE_SHADED);
314    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_STATE_SKIP_TASKBAR);
315    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_STATE_SKIP_PAGER);
316    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_STATE_HIDDEN);
317    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_STATE_FULLSCREEN);
318    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_STATE_ABOVE);
319    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_STATE_BELOW);
320    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_STATE_DEMANDS_ATTENTION);
321
322    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_ALLOWED_ACTIONS);
323    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_ACTION_MOVE);
324    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_ACTION_RESIZE);
325    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_ACTION_MINIMIZE);
326    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_ACTION_SHADE);
327    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_ACTION_STICK);
328    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_ACTION_MAXIMIZE_HORZ);
329    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_ACTION_MAXIMIZE_VERT);
330    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_ACTION_FULLSCREEN);
331    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_ACTION_CHANGE_DESKTOP);
332    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_ACTION_CLOSE);
333
334    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_STRUT);
335    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_STRUT_PARTIAL);
336    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_ICON_GEOMETRY);
337    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_ICON);
338    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_PID);
339    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_HANDLED_ICONS);
340    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_USER_TIME);
341    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_STARTUP_ID);
342    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_FRAME_EXTENTS);
343
344    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_PING);
345    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_SYNC_REQUEST);
346    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_SYNC_REQUEST_COUNTER);
347
348    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_WINDOW_OPACITY);
349    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_WINDOW_SHADOW);
350    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_WM_WINDOW_SHADE);
351
352    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_STARTUP_INFO_BEGIN);
353    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_NET_STARTUP_INFO);
354
355    /* selection atoms */
356    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_SELECTION_TARGETS);
357    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_SELECTION_CLIPBOARD);
358    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_SELECTION_PROP_PRIMARY);
359    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_SELECTION_PROP_SECONDARY);
360    FETCH_ATOM_FINALIZE(ECORE_X_ATOM_SELECTION_PROP_CLIPBOARD);
361 }
362
363
364 /**
365  * Sends the InternAtom request.
366  * @param name Name of the requested atom.
367  * @ingroup Ecore_X_Atom_Group
368  */
369 EAPI void
370 ecore_x_atom_get_prefetch(const char *name)
371 {
372    xcb_intern_atom_cookie_t cookie;
373
374    cookie = xcb_intern_atom_unchecked(_ecore_xcb_conn, 0, strlen(name), name);
375    _ecore_xcb_cookie_cache(cookie.sequence);
376 }
377
378 /**
379  * Gets the reply of the InternAtom request sent by ecore_x_atom_get_prefetch().
380  * @ingroup Ecore_X_Atom_Group
381  */
382 EAPI void
383 ecore_x_atom_get_fetch(void)
384 {
385    xcb_intern_atom_cookie_t cookie;
386    xcb_intern_atom_reply_t *reply;
387
388    cookie.sequence = _ecore_xcb_cookie_get();
389    reply = xcb_intern_atom_reply(_ecore_xcb_conn, cookie, NULL);
390    _ecore_xcb_reply_cache(reply);
391 }
392
393 /**
394  * Retrieves the atom value associated to a name.
395  * @param  name Unused.
396  * @return      Associated atom value.
397  *
398  * Retrieves the atom value associated to a name. The reply is the
399  * returned value of the function ecore_xcb_intern_atom_reply(). If
400  * @p reply is @c NULL, the NULL atom is returned. Otherwise, the atom
401  * associated to the name is returned.
402  *
403  * To use this function, you must call before, and in order,
404  * ecore_x_atom_get_prefetch(), which sends the InternAtom request,
405  * then ecore_x_atom_get_fetch(), which gets the reply.
406  * @ingroup Ecore_X_Atom_Group
407  */
408 EAPI Ecore_X_Atom
409 ecore_x_atom_get(const char *name __UNUSED__)
410 {
411    xcb_intern_atom_reply_t *reply;
412
413    reply = _ecore_xcb_reply_get();
414    if (!reply) return XCB_NONE;
415
416    return reply->atom;
417 }