1 /*
2 * Copyright (C) 2001-2006 Bart Massey, Jamey Sharp, and Josh Triplett.
3 * All Rights Reserved.
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the "Software"),
7 * to deal in the Software without restriction, including without limitation
8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 * and/or sell copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, subject to the following conditions:
11 *
12 * The above copyright notice and this permission notice shall be included in
13 * all copies or substantial portions of the 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 THE
18 * AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
19 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 *
22 * Except as contained in this notice, the names of the authors or their
23 * institutions shall not be used in advertising or otherwise to promote the
24 * sale, use or other dealings in this Software without prior written
25 * authorization from the authors.
26 */27 28 modulestd.c.linux.X11.xcb.xcb;
29 version(USE_XCB):
30 /* Include the generated xproto module. */31 importstd.c.linux.X11.xcb.xproto;
32 /*#include <sys/uio.h>
33 #include <pthread.h>*/34 35 /**
36 * @file xcb.d
37 */38 39 /**
40 * @defgroup XCB_Core_API XCB Core API
41 * @brief Core API of the XCB library.
42 *
43 * @{
44 */45 46 /* Pre-defined constants */47 48 /** Current protocol version */49 constintX_PROTOCOL=11;
50 51 /** Current minor version */52 constintX_PROTOCOL_REVISION=0;
53 54 /** X_TCP_PORT + display number = server port for TCP transport */55 constintX_TCP_PORT =6000;
56 57 intXCB_TYPE_PAD(T)(Tt,inti) { return -(i) & (t.sizeof > 4 ? 3 : t.sizeof - 1);}
58 59 /* Opaque structures */60 61 /**
62 * @brief XCB Connection structure.
63 *
64 * A structure that contain all data that XCB needs to communicate with an X server.
65 */66 structxcb_connection_t{}; /**< Opaque structure containing all data that XCB needs to communicate with an X server. */67 68 69 /* Other types */70 71 /**
72 * @brief Generic iterator.
73 *
74 * A generic iterator structure.
75 */76 structxcb_generic_iterator_t{
77 void *data; /**< Data of the current iterator */78 intrem; /**< remaining elements */79 intindex; /**< index of the current iterator */80 } ;
81 82 /**
83 * @brief Generic reply.
84 *
85 * A generic reply structure.
86 */87 structxcb_generic_reply_t{
88 ubyteresponse_type; /**< Type of the response */89 ubytepad0; /**< Padding */90 ushortsequence; /**< Sequence number */91 uintlength; /**< Length of the response */92 };
93 94 /**
95 * @brief Generic event.
96 *
97 * A generic event structure.
98 */99 structxcb_generic_event_t{
100 ubyteresponse_type; /**< Type of the response */101 ubytepad0; /**< Padding */102 ushortsequence; /**< Sequence number */103 uintpad[7]; /**< Padding */104 uintfull_sequence; /**< full sequence */105 };
106 107 /**
108 * @brief Generic error.
109 *
110 * A generic error structure.
111 */112 structxcb_generic_error_t{
113 ubyteresponse_type; /**< Type of the response */114 ubyteerror_code; /**< Error code */115 ushortsequence; /**< Sequence number */116 uintpad[7]; /**< Padding */117 uintfull_sequence; /**< full sequence */118 };
119 120 /**
121 * @brief Generic cookie.
122 *
123 * A generic cookie structure.
124 */125 structxcb_void_cookie_t{
126 uintsequence; /**< Sequence number */127 };
128 129 /** XCB_NONE is the universal null resource or null atom parameter value for many core X requests */130 constintXCB_NONE=0L;
131 132 /** XCB_COPY_FROM_PARENT can be used for many xcb_create_window parameters */133 constintXCB_COPY_FROM_PARENT=0L;
134 135 /** XCB_CURRENT_TIME can be used in most requests that take an xcb_timestamp_t */136 constintXCB_CURRENT_TIME=0L;
137 138 /** XCB_NO_SYMBOL fills in unused entries in xcb_keysym_t tables */139 constintXCB_NO_SYMBOL=0L;
140 141 142 /* xcb_auth.c */143 144 /**
145 * @brief Container for authorization information.
146 *
147 * A container for authorization information to be sent to the X server.
148 */149 structxcb_auth_info_t {
150 intnamelen; /**< Length of the string name (as returned by strlen). */151 char *name; /**< String containing the authentication protocol name, such as "MIT-MAGIC-COOKIE-1" or "XDM-AUTHORIZATION-1". */152 intdatalen; /**< Length of the data member. */153 char *data; /**< Data interpreted in a protocol-specific manner. */154 };
155 156 157 /* xcb_out.c */158 extern(C){
159 /**
160 * @brief Forces any buffered output to be written to the server.
161 * @param c: The connection to the X server.
162 * @return > @c 0 on success, <= @c 0 otherwise.
163 *
164 * Forces any buffered output to be written to the server. Blocks
165 * until the write is complete.
166 */167 intxcb_flush(xcb_connection_t *c);
168 169 /**
170 * @brief Returns the maximum request length that this server accepts.
171 * @param c: The connection to the X server.
172 * @return The maximum request length field.
173 *
174 * In the absence of the BIG-REQUESTS extension, returns the
175 * maximum request length field from the connection setup data, which
176 * may be as much as 65535. If the server supports BIG-REQUESTS, then
177 * the maximum request length field from the reply to the
178 * BigRequestsEnable request will be returned instead.
179 *
180 * Note that this length is measured in four-byte units, making the
181 * theoretical maximum lengths roughly 256kB without BIG-REQUESTS and
182 * 16GB with.
183 */184 uintxcb_get_maximum_request_length(xcb_connection_t *c);
185 186 /**
187 * @brief Prefetch the maximum request length without blocking.
188 * @param c: The connection to the X server.
189 *
190 * Without blocking, does as much work as possible toward computing
191 * the maximum request length accepted by the X server.
192 *
193 * Invoking this function may cause a call to xcb_big_requests_enable,
194 * but will not block waiting for the reply.
195 * xcb_get_maximum_request_length will return the prefetched data
196 * after possibly blocking while the reply is retrieved.
197 *
198 * Note that in order for this function to be fully non-blocking, the
199 * application must previously have called
200 * xcb_prefetch_extension_data(c, &xcb_big_requests_id) and the reply
201 * must have already arrived.
202 */203 voidxcb_prefetch_maximum_request_length(xcb_connection_t *c);
204 205 206 /* xcb_in.c */207 208 /**
209 * @brief Returns the next event or error from the server.
210 * @param c: The connection to the X server.
211 * @return The next event from the server.
212 *
213 * Returns the next event or error from the server, or returns null in
214 * the event of an I/O error. Blocks until either an event or error
215 * arrive, or an I/O error occurs.
216 */217 xcb_generic_event_t *xcb_wait_for_event(xcb_connection_t *c);
218 219 /**
220 * @brief Returns the next event or error from the server.
221 * @param c: The connection to the X server.
222 * error status of the operation.
223 * @return The next event from the server.
224 *
225 * Returns the next event or error from the server, if one is
226 * available, or returns @c NULL otherwise. If no event is available, that
227 * might be because an I/O error like connection close occurred while
228 * attempting to read the next event, in which case the connection is
229 * shut down when this function returns.
230 */231 xcb_generic_event_t *xcb_poll_for_event(xcb_connection_t *c);
232 233 /**
234 * @brief Return the error for a request, or NULL if none can ever arrive.
235 * @param c: The connection to the X server.
236 * @param cookie: The request cookie.
237 * @return The error for the request, or NULL if none can ever arrive.
238 *
239 * The xcb_void_cookie_t cookie supplied to this function must have resulted
240 * from a call to xcb_[request_name]_checked(). This function will block
241 * until one of two conditions happens. If an error is received, it will be
242 * returned. If a reply to a subsequent request has already arrived, no error
243 * can arrive for this request, so this function will return NULL.
244 *
245 * Note that this function will perform a sync if needed to ensure that the
246 * sequence number will advance beyond that provided in cookie; this is a
247 * convenience to avoid races in determining whether the sync is needed.
248 */249 xcb_generic_error_t *xcb_request_check(xcb_connection_t *c, xcb_void_cookie_tcookie);
250 }
251 /* xcb_ext.c */252 253 /**
254 * @typedef typedef struct xcb_extension_t xcb_extension_t
255 */256 structxcb_extension_t{}; /**< Opaque structure used as key for xcb_get_extension_data_t. */257 258 extern(C){
259 /**
260 * @brief Caches reply information from QueryExtension requests.
261 * @param c: The connection.
262 * @param ext: The extension data.
263 * @return A pointer to the xcb_query_extension_reply_t for the extension.
264 *
265 * This function is the primary interface to the "extension cache",
266 * which caches reply information from QueryExtension
267 * requests. Invoking this function may cause a call to
268 * xcb_query_extension to retrieve extension information from the
269 * server, and may block until extension data is received from the
270 * server.
271 *
272 * The result must not be freed. This storage is managed by the cache
273 * itself.
274 */275 /+const+/xcb_query_extension_reply_t *xcb_get_extension_data(xcb_connection_t *c, xcb_extension_t *ext);
276 277 /**
278 * @brief Prefetch of extension data into the extension cache
279 * @param c: The connection.
280 * @param ext: The extension data.
281 *
282 * This function allows a "prefetch" of extension data into the
283 * extension cache. Invoking the function may cause a call to
284 * xcb_query_extension, but will not block waiting for the
285 * reply. xcb_get_extension_data will return the prefetched data after
286 * possibly blocking while it is retrieved.
287 */288 voidxcb_prefetch_extension_data(xcb_connection_t *c, xcb_extension_t *ext);
289 290 291 /* xcb_conn.c */292 293 /**
294 * @brief Access the data returned by the server.
295 * @param c: The connection.
296 * @return A pointer to an xcb_setup_t structure.
297 *
298 * Accessor for the data returned by the server when the xcb_connection_t
299 * was initialized. This data includes
300 * - the server's required format for images,
301 * - a list of available visuals,
302 * - a list of available screens,
303 * - the server's maximum request length (in the absence of the
304 * BIG-REQUESTS extension),
305 * - and other assorted information.
306 *
307 * See the X protocol specification for more details.
308 *
309 * The result must not be freed.
310 */311 /+const+/xcb_setup_t *xcb_get_setup(xcb_connection_t *c);
312 313 /**
314 * @brief Access the file descriptor of the connection.
315 * @param c: The connection.
316 * @return The file descriptor.
317 *
318 * Accessor for the file descriptor that was passed to the
319 * xcb_connect_to_fd call that returned @p c.
320 */321 intxcb_get_file_descriptor(xcb_connection_t *c);
322 323 /**
324 * @brief Test whether the connection has shut down due to a fatal error.
325 * @param c: The connection.
326 * @return 1 if the connection is in an error state; 0 otherwise.
327 *
328 * Some errors that occur in the context of an xcb_connection_t
329 * are unrecoverable. When such an error occurs, the
330 * connection is shut down and further operations on the
331 * xcb_connection_t have no effect.
332 *
333 * @todo Other functions should document the conditions in
334 * which they shut down the connection.
335 */336 intxcb_connection_has_error(xcb_connection_t *c);
337 338 /**
339 * @brief Connects to the X server.
340 * @param fd: The file descriptor.
341 * @param auth_info: Authentication data.
342 * @return A newly allocated xcb_connection_t structure.
343 *
344 * Connects to an X server, given the open socket @p fd and the
345 * xcb_auth_info_t @p auth_info. The file descriptor @p fd is
346 * bidirectionally connected to an X server. If the connection
347 * should be unauthenticated, @p auth_info must be @c
348 * NULL.
349 */350 xcb_connection_t *xcb_connect_to_fd(intfd, xcb_auth_info_t *auth_info);
351 352 /**
353 * @brief Closes the connection.
354 * @param c: The connection.
355 *
356 * Closes the file descriptor and frees all memory associated with the
357 * connection @c c.
358 */359 voidxcb_disconnect(xcb_connection_t *c);
360 361 362 /* xcb_util.c */363 364 /**
365 * @brief Parses a display string name in the form documented by X(7x).
366 * @param name: The name of the display.
367 * @param host: A pointer to a malloc'd copy of the hostname.
368 * @param display: A pointer to the display number.
369 * @param screen: A pointer to the screen number.
370 * @return 0 on failure, non 0 otherwise.
371 *
372 * Parses the display string name @p display_name in the form
373 * documented by X(7x). Has no side effects on failure. If
374 * @p displayname is @c NULL or empty, it uses the environment
375 * variable DISPLAY. @p hostp is a pointer to a newly allocated string
376 * that contain the host name. @p displayp is set to the display
377 * number and @p screenp to the preferred screen number. @p screenp
378 * can be @c NULL. If @p displayname does not contain a screen number,
379 * it is set to @c 0.
380 */381 intxcb_parse_display(/+const+/char *name, char **host, int *display, int *screen);
382 383 /**
384 * @brief Connects to the X server.
385 * @param displayname: The name of the display.
386 * @param screenp: A pointer to a preferred screen number.
387 * @return A newly allocated xcb_connection_t structure.
388 *
389 * Connects to the X server specified by @p displayname. If @p
390 * displayname is @c NULL, uses the value of the DISPLAY environment
391 * variable. If a particular screen on that server is preferred, the
392 * int pointed to by @p screenp (if not @c NULL) will be set to that
393 * screen; otherwise the screen will be set to 0.
394 */395 xcb_connection_t *xcb_connect(/+const+/char *displayname, int *screenp);
396 397 /**
398 * @brief Connects to the X server, using an authorization information.
399 * @param display: The name of the display.
400 * @param auth: The authorization information.
401 * @param screen: A pointer to a preferred screen number.
402 * @return A newly allocated xcb_connection_t structure.
403 *
404 * Connects to the X server specified by @p displayname, using the
405 * authorization @p auth. If a particular screen on that server is
406 * preferred, the int pointed to by @p screenp (if not @c NULL) will
407 * be set to that screen; otherwise @p screenp will be set to 0.
408 */409 xcb_connection_t *xcb_connect_to_display_with_auth_info(/+const+/char *display, xcb_auth_info_t *auth, int *screen);
410 411 412 /* xcb_xid.c */413 414 /**
415 * @brief Allocates an XID for a new object.
416 * @param c: The connection.
417 * @return A newly allocated XID.
418 *
419 * Allocates an XID for a new object. Typically used just prior to
420 * various object creation functions, such as xcb_create_window.
421 */422 uintxcb_generate_id(xcb_connection_t *c);
423 424 }
425 /**
426 * @}
427 */