Use local XCB header copies

This change adds copies of the XCB and XCB Shm 1.2 client API headers
to our repository's include directory. This way the libx11-xcb-dev and
libxcb-shm0-dev packages are not required to build WSI support for XCB,
which is now enabled by default.

Note that we already dynamically look for the XCB shared library before
actually exposing the VK_KHR_xcb_surface extension.

Only the CMake build for desktop Linux is affected. The implementation
of the extension is very small, but if XCB support is not needed at all
the SWIFTSHADER_BUILD_WSI_XCB CMake variable can be set to FALSE.

Bug: b/249015129
Change-Id: Icce177fd05332f26a95a39fcfbaa903b6dde8baa
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/68672
Tested-by: Nicolas Capens <nicolascapens@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 59b0db3..50454ad 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -130,14 +130,6 @@
     include(CheckSymbolExists)
     check_symbol_exists(mallinfo malloc.h HAVE_MALLINFO)
     check_symbol_exists(mallinfo2 malloc.h HAVE_MALLINFO2)
-
-    include(CheckIncludeFiles)
-
-    CHECK_INCLUDE_FILES("xcb/xcb.h;xcb/shm.h" HAVE_XCB_H)
-    if(NOT HAVE_XCB_H)
-        message(WARNING "xcb/xcb.h or xcb/shm.h was not found. Install the libx11-xcb-dev and "
-                        "libxcb-shm0-dev packages to build with WSI support for XCB surfaces.")
-    endif()
 endif()
 
 if(SWIFTSHADER_BUILD_WSI_DIRECTFB)
@@ -170,6 +162,7 @@
     endif()
 endfunction()
 
+option_if_not_defined(SWIFTSHADER_BUILD_WSI_XCB "Build the XCB WSI support" LINUX)
 option_if_not_defined(SWIFTSHADER_BUILD_WSI_WAYLAND "Build the Wayland WSI support" LINUX)
 option_if_not_defined(SWIFTSHADER_BUILD_WSI_DIRECTFB "Build the DirectFB WSI support" FALSE)
 option_if_not_defined(SWIFTSHADER_BUILD_WSI_D2D "Build the Direct-to-Display WSI support" FALSE)
@@ -816,7 +809,7 @@
 if(WIN32)
     target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_WIN32_KHR")
 elseif(LINUX)
-    if(HAVE_XCB_H)
+    if(SWIFTSHADER_BUILD_WSI_XCB)
         target_compile_definitions(vk_base INTERFACE "VK_USE_PLATFORM_XCB_KHR")
     endif()
     if(SWIFTSHADER_BUILD_WSI_WAYLAND)
diff --git a/include/xcb/shm.h b/include/xcb/shm.h
new file mode 100644
index 0000000..248e0f4
--- /dev/null
+++ b/include/xcb/shm.h
@@ -0,0 +1,648 @@
+/*
+ * This file generated automatically from shm.xml by c_client.py.
+ * Edit at your peril.
+ */
+
+/**
+ * @defgroup XCB_Shm_API XCB Shm API
+ * @brief Shm XCB Protocol Implementation.
+ * @{
+ **/
+
+#ifndef __SHM_H
+#define __SHM_H
+
+#include "xcb.h"
+#include "xproto.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define XCB_SHM_MAJOR_VERSION 1
+#define XCB_SHM_MINOR_VERSION 2
+
+extern xcb_extension_t xcb_shm_id;
+
+typedef uint32_t xcb_shm_seg_t;
+
+/**
+ * @brief xcb_shm_seg_iterator_t
+ **/
+typedef struct xcb_shm_seg_iterator_t {
+    xcb_shm_seg_t *data;
+    int            rem;
+    int            index;
+} xcb_shm_seg_iterator_t;
+
+/** Opcode for xcb_shm_completion. */
+#define XCB_SHM_COMPLETION 0
+
+/**
+ * @brief xcb_shm_completion_event_t
+ **/
+typedef struct xcb_shm_completion_event_t {
+    uint8_t        response_type;
+    uint8_t        pad0;
+    uint16_t       sequence;
+    xcb_drawable_t drawable;
+    uint16_t       minor_event;
+    uint8_t        major_event;
+    uint8_t        pad1;
+    xcb_shm_seg_t  shmseg;
+    uint32_t       offset;
+} xcb_shm_completion_event_t;
+
+/** Opcode for xcb_shm_bad_seg. */
+#define XCB_SHM_BAD_SEG 0
+
+typedef xcb_value_error_t xcb_shm_bad_seg_error_t;
+
+/**
+ * @brief xcb_shm_query_version_cookie_t
+ **/
+typedef struct xcb_shm_query_version_cookie_t {
+    unsigned int sequence;
+} xcb_shm_query_version_cookie_t;
+
+/** Opcode for xcb_shm_query_version. */
+#define XCB_SHM_QUERY_VERSION 0
+
+/**
+ * @brief xcb_shm_query_version_request_t
+ **/
+typedef struct xcb_shm_query_version_request_t {
+    uint8_t  major_opcode;
+    uint8_t  minor_opcode;
+    uint16_t length;
+} xcb_shm_query_version_request_t;
+
+/**
+ * @brief xcb_shm_query_version_reply_t
+ **/
+typedef struct xcb_shm_query_version_reply_t {
+    uint8_t  response_type;
+    uint8_t  shared_pixmaps;
+    uint16_t sequence;
+    uint32_t length;
+    uint16_t major_version;
+    uint16_t minor_version;
+    uint16_t uid;
+    uint16_t gid;
+    uint8_t  pixmap_format;
+    uint8_t  pad0[15];
+} xcb_shm_query_version_reply_t;
+
+/** Opcode for xcb_shm_attach. */
+#define XCB_SHM_ATTACH 1
+
+/**
+ * @brief xcb_shm_attach_request_t
+ **/
+typedef struct xcb_shm_attach_request_t {
+    uint8_t       major_opcode;
+    uint8_t       minor_opcode;
+    uint16_t      length;
+    xcb_shm_seg_t shmseg;
+    uint32_t      shmid;
+    uint8_t       read_only;
+    uint8_t       pad0[3];
+} xcb_shm_attach_request_t;
+
+/** Opcode for xcb_shm_detach. */
+#define XCB_SHM_DETACH 2
+
+/**
+ * @brief xcb_shm_detach_request_t
+ **/
+typedef struct xcb_shm_detach_request_t {
+    uint8_t       major_opcode;
+    uint8_t       minor_opcode;
+    uint16_t      length;
+    xcb_shm_seg_t shmseg;
+} xcb_shm_detach_request_t;
+
+/** Opcode for xcb_shm_put_image. */
+#define XCB_SHM_PUT_IMAGE 3
+
+/**
+ * @brief xcb_shm_put_image_request_t
+ **/
+typedef struct xcb_shm_put_image_request_t {
+    uint8_t        major_opcode;
+    uint8_t        minor_opcode;
+    uint16_t       length;
+    xcb_drawable_t drawable;
+    xcb_gcontext_t gc;
+    uint16_t       total_width;
+    uint16_t       total_height;
+    uint16_t       src_x;
+    uint16_t       src_y;
+    uint16_t       src_width;
+    uint16_t       src_height;
+    int16_t        dst_x;
+    int16_t        dst_y;
+    uint8_t        depth;
+    uint8_t        format;
+    uint8_t        send_event;
+    uint8_t        pad0;
+    xcb_shm_seg_t  shmseg;
+    uint32_t       offset;
+} xcb_shm_put_image_request_t;
+
+/**
+ * @brief xcb_shm_get_image_cookie_t
+ **/
+typedef struct xcb_shm_get_image_cookie_t {
+    unsigned int sequence;
+} xcb_shm_get_image_cookie_t;
+
+/** Opcode for xcb_shm_get_image. */
+#define XCB_SHM_GET_IMAGE 4
+
+/**
+ * @brief xcb_shm_get_image_request_t
+ **/
+typedef struct xcb_shm_get_image_request_t {
+    uint8_t        major_opcode;
+    uint8_t        minor_opcode;
+    uint16_t       length;
+    xcb_drawable_t drawable;
+    int16_t        x;
+    int16_t        y;
+    uint16_t       width;
+    uint16_t       height;
+    uint32_t       plane_mask;
+    uint8_t        format;
+    uint8_t        pad0[3];
+    xcb_shm_seg_t  shmseg;
+    uint32_t       offset;
+} xcb_shm_get_image_request_t;
+
+/**
+ * @brief xcb_shm_get_image_reply_t
+ **/
+typedef struct xcb_shm_get_image_reply_t {
+    uint8_t        response_type;
+    uint8_t        depth;
+    uint16_t       sequence;
+    uint32_t       length;
+    xcb_visualid_t visual;
+    uint32_t       size;
+} xcb_shm_get_image_reply_t;
+
+/** Opcode for xcb_shm_create_pixmap. */
+#define XCB_SHM_CREATE_PIXMAP 5
+
+/**
+ * @brief xcb_shm_create_pixmap_request_t
+ **/
+typedef struct xcb_shm_create_pixmap_request_t {
+    uint8_t        major_opcode;
+    uint8_t        minor_opcode;
+    uint16_t       length;
+    xcb_pixmap_t   pid;
+    xcb_drawable_t drawable;
+    uint16_t       width;
+    uint16_t       height;
+    uint8_t        depth;
+    uint8_t        pad0[3];
+    xcb_shm_seg_t  shmseg;
+    uint32_t       offset;
+} xcb_shm_create_pixmap_request_t;
+
+/** Opcode for xcb_shm_attach_fd. */
+#define XCB_SHM_ATTACH_FD 6
+
+/**
+ * @brief xcb_shm_attach_fd_request_t
+ **/
+typedef struct xcb_shm_attach_fd_request_t {
+    uint8_t       major_opcode;
+    uint8_t       minor_opcode;
+    uint16_t      length;
+    xcb_shm_seg_t shmseg;
+    uint8_t       read_only;
+    uint8_t       pad0[3];
+} xcb_shm_attach_fd_request_t;
+
+/**
+ * @brief xcb_shm_create_segment_cookie_t
+ **/
+typedef struct xcb_shm_create_segment_cookie_t {
+    unsigned int sequence;
+} xcb_shm_create_segment_cookie_t;
+
+/** Opcode for xcb_shm_create_segment. */
+#define XCB_SHM_CREATE_SEGMENT 7
+
+/**
+ * @brief xcb_shm_create_segment_request_t
+ **/
+typedef struct xcb_shm_create_segment_request_t {
+    uint8_t       major_opcode;
+    uint8_t       minor_opcode;
+    uint16_t      length;
+    xcb_shm_seg_t shmseg;
+    uint32_t      size;
+    uint8_t       read_only;
+    uint8_t       pad0[3];
+} xcb_shm_create_segment_request_t;
+
+/**
+ * @brief xcb_shm_create_segment_reply_t
+ **/
+typedef struct xcb_shm_create_segment_reply_t {
+    uint8_t  response_type;
+    uint8_t  nfd;
+    uint16_t sequence;
+    uint32_t length;
+    uint8_t  pad0[24];
+} xcb_shm_create_segment_reply_t;
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_shm_seg_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_shm_seg_t)
+ */
+void
+xcb_shm_seg_next (xcb_shm_seg_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_shm_seg_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_shm_seg_end (xcb_shm_seg_iterator_t i);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_shm_query_version_cookie_t
+xcb_shm_query_version (xcb_connection_t *c);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_shm_query_version_cookie_t
+xcb_shm_query_version_unchecked (xcb_connection_t *c);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_shm_query_version_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_shm_query_version_reply_t *
+xcb_shm_query_version_reply (xcb_connection_t                *c,
+                             xcb_shm_query_version_cookie_t   cookie  /**< */,
+                             xcb_generic_error_t            **e);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_shm_attach_checked (xcb_connection_t *c,
+                        xcb_shm_seg_t     shmseg,
+                        uint32_t          shmid,
+                        uint8_t           read_only);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_shm_attach (xcb_connection_t *c,
+                xcb_shm_seg_t     shmseg,
+                uint32_t          shmid,
+                uint8_t           read_only);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_shm_detach_checked (xcb_connection_t *c,
+                        xcb_shm_seg_t     shmseg);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_shm_detach (xcb_connection_t *c,
+                xcb_shm_seg_t     shmseg);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_shm_put_image_checked (xcb_connection_t *c,
+                           xcb_drawable_t    drawable,
+                           xcb_gcontext_t    gc,
+                           uint16_t          total_width,
+                           uint16_t          total_height,
+                           uint16_t          src_x,
+                           uint16_t          src_y,
+                           uint16_t          src_width,
+                           uint16_t          src_height,
+                           int16_t           dst_x,
+                           int16_t           dst_y,
+                           uint8_t           depth,
+                           uint8_t           format,
+                           uint8_t           send_event,
+                           xcb_shm_seg_t     shmseg,
+                           uint32_t          offset);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_shm_put_image (xcb_connection_t *c,
+                   xcb_drawable_t    drawable,
+                   xcb_gcontext_t    gc,
+                   uint16_t          total_width,
+                   uint16_t          total_height,
+                   uint16_t          src_x,
+                   uint16_t          src_y,
+                   uint16_t          src_width,
+                   uint16_t          src_height,
+                   int16_t           dst_x,
+                   int16_t           dst_y,
+                   uint8_t           depth,
+                   uint8_t           format,
+                   uint8_t           send_event,
+                   xcb_shm_seg_t     shmseg,
+                   uint32_t          offset);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_shm_get_image_cookie_t
+xcb_shm_get_image (xcb_connection_t *c,
+                   xcb_drawable_t    drawable,
+                   int16_t           x,
+                   int16_t           y,
+                   uint16_t          width,
+                   uint16_t          height,
+                   uint32_t          plane_mask,
+                   uint8_t           format,
+                   xcb_shm_seg_t     shmseg,
+                   uint32_t          offset);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_shm_get_image_cookie_t
+xcb_shm_get_image_unchecked (xcb_connection_t *c,
+                             xcb_drawable_t    drawable,
+                             int16_t           x,
+                             int16_t           y,
+                             uint16_t          width,
+                             uint16_t          height,
+                             uint32_t          plane_mask,
+                             uint8_t           format,
+                             xcb_shm_seg_t     shmseg,
+                             uint32_t          offset);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_shm_get_image_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_shm_get_image_reply_t *
+xcb_shm_get_image_reply (xcb_connection_t            *c,
+                         xcb_shm_get_image_cookie_t   cookie  /**< */,
+                         xcb_generic_error_t        **e);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_shm_create_pixmap_checked (xcb_connection_t *c,
+                               xcb_pixmap_t      pid,
+                               xcb_drawable_t    drawable,
+                               uint16_t          width,
+                               uint16_t          height,
+                               uint8_t           depth,
+                               xcb_shm_seg_t     shmseg,
+                               uint32_t          offset);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_shm_create_pixmap (xcb_connection_t *c,
+                       xcb_pixmap_t      pid,
+                       xcb_drawable_t    drawable,
+                       uint16_t          width,
+                       uint16_t          height,
+                       uint8_t           depth,
+                       xcb_shm_seg_t     shmseg,
+                       uint32_t          offset);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_shm_attach_fd_checked (xcb_connection_t *c,
+                           xcb_shm_seg_t     shmseg,
+                           int32_t           shm_fd,
+                           uint8_t           read_only);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_shm_attach_fd (xcb_connection_t *c,
+                   xcb_shm_seg_t     shmseg,
+                   int32_t           shm_fd,
+                   uint8_t           read_only);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_shm_create_segment_cookie_t
+xcb_shm_create_segment (xcb_connection_t *c,
+                        xcb_shm_seg_t     shmseg,
+                        uint32_t          size,
+                        uint8_t           read_only);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_shm_create_segment_cookie_t
+xcb_shm_create_segment_unchecked (xcb_connection_t *c,
+                                  xcb_shm_seg_t     shmseg,
+                                  uint32_t          size,
+                                  uint8_t           read_only);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_shm_create_segment_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_shm_create_segment_reply_t *
+xcb_shm_create_segment_reply (xcb_connection_t                 *c,
+                              xcb_shm_create_segment_cookie_t   cookie  /**< */,
+                              xcb_generic_error_t             **e);
+
+/**
+ * Return the reply fds
+ * @param c      The connection
+ * @param reply  The reply
+ *
+ * Returns a pointer to the array of reply fds of the reply.
+ *
+ * The returned value points into the reply and must not be free().
+ * The fds are not managed by xcb. You must close() them before freeing the reply.
+ */
+int *
+xcb_shm_create_segment_reply_fds (xcb_connection_t                *c  /**< */,
+                                  xcb_shm_create_segment_reply_t  *reply);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/**
+ * @}
+ */
diff --git a/include/xcb/xcb.h b/include/xcb/xcb.h
new file mode 100644
index 0000000..3f39bb4
--- /dev/null
+++ b/include/xcb/xcb.h
@@ -0,0 +1,644 @@
+/*
+ * Copyright (C) 2001-2006 Bart Massey, Jamey Sharp, and Josh Triplett.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the names of the authors or their
+ * institutions shall not be used in advertising or otherwise to promote the
+ * sale, use or other dealings in this Software without prior written
+ * authorization from the authors.
+ */
+
+#ifndef __XCB_H__
+#define __XCB_H__
+#include <sys/types.h>
+
+#if defined(__solaris__)
+#include <inttypes.h>
+#else
+#include <stdint.h>
+#endif
+
+#ifndef _WIN32
+#include <sys/uio.h>
+#else
+#include "xcb_windefs.h"
+#endif
+#include <pthread.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @file xcb.h
+ */
+
+#ifdef __GNUC__
+#define XCB_PACKED __attribute__((__packed__))
+#else
+#define XCB_PACKED
+#endif
+
+/**
+ * @defgroup XCB_Core_API XCB Core API
+ * @brief Core API of the XCB library.
+ *
+ * @{
+ */
+
+/* Pre-defined constants */
+
+/** Current protocol version */
+#define X_PROTOCOL 11
+
+/** Current minor version */
+#define X_PROTOCOL_REVISION 0
+
+/** X_TCP_PORT + display number = server port for TCP transport */
+#define X_TCP_PORT 6000
+
+/** xcb connection errors because of socket, pipe and other stream errors. */
+#define XCB_CONN_ERROR 1
+
+/** xcb connection shutdown because of extension not supported */
+#define XCB_CONN_CLOSED_EXT_NOTSUPPORTED 2
+
+/** malloc(), calloc() and realloc() error upon failure, for eg ENOMEM */
+#define XCB_CONN_CLOSED_MEM_INSUFFICIENT 3
+
+/** Connection closed, exceeding request length that server accepts. */
+#define XCB_CONN_CLOSED_REQ_LEN_EXCEED 4
+
+/** Connection closed, error during parsing display string. */
+#define XCB_CONN_CLOSED_PARSE_ERR 5
+
+/** Connection closed because the server does not have a screen matching the display. */
+#define XCB_CONN_CLOSED_INVALID_SCREEN 6
+
+/** Connection closed because some FD passing operation failed */
+#define XCB_CONN_CLOSED_FDPASSING_FAILED 7
+
+#define XCB_TYPE_PAD(T,I) (-(I) & (sizeof(T) > 4 ? 3 : sizeof(T) - 1))
+
+/* Opaque structures */
+
+/**
+ * @brief XCB Connection structure.
+ *
+ * A structure that contain all data that  XCB needs to communicate with an X server.
+ */
+typedef struct xcb_connection_t xcb_connection_t;  /**< Opaque structure containing all data that  XCB needs to communicate with an X server. */
+
+
+/* Other types */
+
+/**
+ * @brief Generic iterator.
+ *
+ * A generic iterator structure.
+ */
+typedef struct {
+    void *data;   /**< Data of the current iterator */
+    int rem;    /**< remaining elements */
+    int index;  /**< index of the current iterator */
+} xcb_generic_iterator_t;
+
+/**
+ * @brief Generic reply.
+ *
+ * A generic reply structure.
+ */
+typedef struct {
+    uint8_t   response_type;  /**< Type of the response */
+    uint8_t  pad0;           /**< Padding */
+    uint16_t sequence;       /**< Sequence number */
+    uint32_t length;         /**< Length of the response */
+} xcb_generic_reply_t;
+
+/**
+ * @brief Generic event.
+ *
+ * A generic event structure.
+ */
+typedef struct {
+    uint8_t   response_type;  /**< Type of the response */
+    uint8_t  pad0;           /**< Padding */
+    uint16_t sequence;       /**< Sequence number */
+    uint32_t pad[7];         /**< Padding */
+    uint32_t full_sequence;  /**< full sequence */
+} xcb_generic_event_t;
+
+/**
+ * @brief Raw Generic event.
+ *
+ * A generic event structure as used on the wire, i.e., without the full_sequence field
+ */
+typedef struct {
+    uint8_t   response_type;  /**< Type of the response */
+    uint8_t  pad0;           /**< Padding */
+    uint16_t sequence;       /**< Sequence number */
+    uint32_t pad[7];         /**< Padding */
+} xcb_raw_generic_event_t;
+
+/**
+ * @brief GE event
+ *
+ * An event as sent by the XGE extension. The length field specifies the
+ * number of 4-byte blocks trailing the struct.
+ *
+ * @deprecated Since some fields in this struct have unfortunate names, it is
+ * recommended to use xcb_ge_generic_event_t instead.
+ */
+typedef struct {
+    uint8_t  response_type;  /**< Type of the response */
+    uint8_t  pad0;           /**< Padding */
+    uint16_t sequence;       /**< Sequence number */
+    uint32_t length;
+    uint16_t event_type;
+    uint16_t pad1;
+    uint32_t pad[5];         /**< Padding */
+    uint32_t full_sequence;  /**< full sequence */
+} xcb_ge_event_t;
+
+/**
+ * @brief Generic error.
+ *
+ * A generic error structure.
+ */
+typedef struct {
+    uint8_t   response_type;  /**< Type of the response */
+    uint8_t   error_code;     /**< Error code */
+    uint16_t sequence;       /**< Sequence number */
+    uint32_t resource_id;     /** < Resource ID for requests with side effects only */
+    uint16_t minor_code;      /** < Minor opcode of the failed request */
+    uint8_t major_code;       /** < Major opcode of the failed request */
+    uint8_t pad0;
+    uint32_t pad[5];         /**< Padding */
+    uint32_t full_sequence;  /**< full sequence */
+} xcb_generic_error_t;
+
+/**
+ * @brief Generic cookie.
+ *
+ * A generic cookie structure.
+ */
+typedef struct {
+    unsigned int sequence;  /**< Sequence number */
+} xcb_void_cookie_t;
+
+
+/* Include the generated xproto header. */
+#include "xproto.h"
+
+
+/** XCB_NONE is the universal null resource or null atom parameter value for many core X requests */
+#define XCB_NONE 0L
+
+/** XCB_COPY_FROM_PARENT can be used for many xcb_create_window parameters */
+#define XCB_COPY_FROM_PARENT 0L
+
+/** XCB_CURRENT_TIME can be used in most requests that take an xcb_timestamp_t */
+#define XCB_CURRENT_TIME 0L
+
+/** XCB_NO_SYMBOL fills in unused entries in xcb_keysym_t tables */
+#define XCB_NO_SYMBOL 0L
+
+
+/* xcb_auth.c */
+
+/**
+ * @brief Container for authorization information.
+ *
+ * A container for authorization information to be sent to the X server.
+ */
+typedef struct xcb_auth_info_t {
+    int   namelen;  /**< Length of the string name (as returned by strlen). */
+    char *name;     /**< String containing the authentication protocol name, such as "MIT-MAGIC-COOKIE-1" or "XDM-AUTHORIZATION-1". */
+    int   datalen;  /**< Length of the data member. */
+    char *data;   /**< Data interpreted in a protocol-specific manner. */
+} xcb_auth_info_t;
+
+
+/* xcb_out.c */
+
+/**
+ * @brief Forces any buffered output to be written to the server.
+ * @param c The connection to the X server.
+ * @return > @c 0 on success, <= @c 0 otherwise.
+ *
+ * Forces any buffered output to be written to the server. Blocks
+ * until the write is complete.
+ */
+int xcb_flush(xcb_connection_t *c);
+
+/**
+ * @brief Returns the maximum request length that this server accepts.
+ * @param c The connection to the X server.
+ * @return The maximum request length field.
+ *
+ * In the absence of the BIG-REQUESTS extension, returns the
+ * maximum request length field from the connection setup data, which
+ * may be as much as 65535. If the server supports BIG-REQUESTS, then
+ * the maximum request length field from the reply to the
+ * BigRequestsEnable request will be returned instead.
+ *
+ * Note that this length is measured in four-byte units, making the
+ * theoretical maximum lengths roughly 256kB without BIG-REQUESTS and
+ * 16GB with.
+ */
+uint32_t xcb_get_maximum_request_length(xcb_connection_t *c);
+
+/**
+ * @brief Prefetch the maximum request length without blocking.
+ * @param c The connection to the X server.
+ *
+ * Without blocking, does as much work as possible toward computing
+ * the maximum request length accepted by the X server.
+ *
+ * Invoking this function may cause a call to xcb_big_requests_enable,
+ * but will not block waiting for the reply.
+ * xcb_get_maximum_request_length will return the prefetched data
+ * after possibly blocking while the reply is retrieved.
+ *
+ * Note that in order for this function to be fully non-blocking, the
+ * application must previously have called
+ * xcb_prefetch_extension_data(c, &xcb_big_requests_id) and the reply
+ * must have already arrived.
+ */
+void xcb_prefetch_maximum_request_length(xcb_connection_t *c);
+
+
+/* xcb_in.c */
+
+/**
+ * @brief Returns the next event or error from the server.
+ * @param c The connection to the X server.
+ * @return The next event from the server.
+ *
+ * Returns the next event or error from the server, or returns null in
+ * the event of an I/O error. Blocks until either an event or error
+ * arrive, or an I/O error occurs.
+ */
+xcb_generic_event_t *xcb_wait_for_event(xcb_connection_t *c);
+
+/**
+ * @brief Returns the next event or error from the server.
+ * @param c The connection to the X server.
+ * @return The next event from the server.
+ *
+ * Returns the next event or error from the server, if one is
+ * available, or returns @c NULL otherwise. If no event is available, that
+ * might be because an I/O error like connection close occurred while
+ * attempting to read the next event, in which case the connection is
+ * shut down when this function returns.
+ */
+xcb_generic_event_t *xcb_poll_for_event(xcb_connection_t *c);
+
+/**
+ * @brief Returns the next event without reading from the connection.
+ * @param c The connection to the X server.
+ * @return The next already queued event from the server.
+ *
+ * This is a version of xcb_poll_for_event that only examines the
+ * event queue for new events. The function doesn't try to read new
+ * events from the connection if no queued events are found.
+ *
+ * This function is useful for callers that know in advance that all
+ * interesting events have already been read from the connection. For
+ * example, callers might use xcb_wait_for_reply and be interested
+ * only of events that preceded a specific reply.
+ */
+xcb_generic_event_t *xcb_poll_for_queued_event(xcb_connection_t *c);
+
+typedef struct xcb_special_event xcb_special_event_t;
+
+/**
+ * @brief Returns the next event from a special queue
+ */
+xcb_generic_event_t *xcb_poll_for_special_event(xcb_connection_t *c,
+                                                xcb_special_event_t *se);
+
+/**
+ * @brief Returns the next event from a special queue, blocking until one arrives
+ */
+xcb_generic_event_t *xcb_wait_for_special_event(xcb_connection_t *c,
+                                                xcb_special_event_t *se);
+/**
+ * @typedef typedef struct xcb_extension_t xcb_extension_t
+ */
+typedef struct xcb_extension_t xcb_extension_t;  /**< Opaque structure used as key for xcb_get_extension_data_t. */
+
+/**
+ * @brief Listen for a special event
+ */
+xcb_special_event_t *xcb_register_for_special_xge(xcb_connection_t *c,
+                                                  xcb_extension_t *ext,
+                                                  uint32_t eid,
+                                                  uint32_t *stamp);
+
+/**
+ * @brief Stop listening for a special event
+ */
+void xcb_unregister_for_special_event(xcb_connection_t *c,
+                                      xcb_special_event_t *se);
+
+/**
+ * @brief Return the error for a request, or NULL if none can ever arrive.
+ * @param c The connection to the X server.
+ * @param cookie The request cookie.
+ * @return The error for the request, or NULL if none can ever arrive.
+ *
+ * The xcb_void_cookie_t cookie supplied to this function must have resulted
+ * from a call to xcb_[request_name]_checked().  This function will block
+ * until one of two conditions happens.  If an error is received, it will be
+ * returned.  If a reply to a subsequent request has already arrived, no error
+ * can arrive for this request, so this function will return NULL.
+ *
+ * Note that this function will perform a sync if needed to ensure that the
+ * sequence number will advance beyond that provided in cookie; this is a
+ * convenience to avoid races in determining whether the sync is needed.
+ */
+xcb_generic_error_t *xcb_request_check(xcb_connection_t *c, xcb_void_cookie_t cookie);
+
+/**
+ * @brief Discards the reply for a request.
+ * @param c The connection to the X server.
+ * @param sequence The request sequence number from a cookie.
+ *
+ * Discards the reply for a request. Additionally, any error generated
+ * by the request is also discarded (unless it was an _unchecked request
+ * and the error has already arrived).
+ *
+ * This function will not block even if the reply is not yet available.
+ *
+ * Note that the sequence really does have to come from an xcb cookie;
+ * this function is not designed to operate on socket-handoff replies.
+ */
+void xcb_discard_reply(xcb_connection_t *c, unsigned int sequence);
+
+/**
+ * @brief Discards the reply for a request, given by a 64bit sequence number
+ * @param c The connection to the X server.
+ * @param sequence 64-bit sequence number as returned by xcb_send_request64().
+ *
+ * Discards the reply for a request. Additionally, any error generated
+ * by the request is also discarded (unless it was an _unchecked request
+ * and the error has already arrived).
+ *
+ * This function will not block even if the reply is not yet available.
+ *
+ * Note that the sequence really does have to come from xcb_send_request64();
+ * the cookie sequence number is defined as "unsigned" int and therefore
+ * not 64-bit on all platforms.
+ * This function is not designed to operate on socket-handoff replies.
+ *
+ * Unlike its xcb_discard_reply() counterpart, the given sequence number is not
+ * automatically "widened" to 64-bit.
+ */
+void xcb_discard_reply64(xcb_connection_t *c, uint64_t sequence);
+
+/* xcb_ext.c */
+
+/**
+ * @brief Caches reply information from QueryExtension requests.
+ * @param c The connection.
+ * @param ext The extension data.
+ * @return A pointer to the xcb_query_extension_reply_t for the extension.
+ *
+ * This function is the primary interface to the "extension cache",
+ * which caches reply information from QueryExtension
+ * requests. Invoking this function may cause a call to
+ * xcb_query_extension to retrieve extension information from the
+ * server, and may block until extension data is received from the
+ * server.
+ *
+ * The result must not be freed. This storage is managed by the cache
+ * itself.
+ */
+const struct xcb_query_extension_reply_t *xcb_get_extension_data(xcb_connection_t *c, xcb_extension_t *ext);
+
+/**
+ * @brief Prefetch of extension data into the extension cache
+ * @param c The connection.
+ * @param ext The extension data.
+ *
+ * This function allows a "prefetch" of extension data into the
+ * extension cache. Invoking the function may cause a call to
+ * xcb_query_extension, but will not block waiting for the
+ * reply. xcb_get_extension_data will return the prefetched data after
+ * possibly blocking while it is retrieved.
+ */
+void xcb_prefetch_extension_data(xcb_connection_t *c, xcb_extension_t *ext);
+
+
+/* xcb_conn.c */
+
+/**
+ * @brief Access the data returned by the server.
+ * @param c The connection.
+ * @return A pointer to an xcb_setup_t structure.
+ *
+ * Accessor for the data returned by the server when the xcb_connection_t
+ * was initialized. This data includes
+ * - the server's required format for images,
+ * - a list of available visuals,
+ * - a list of available screens,
+ * - the server's maximum request length (in the absence of the
+ * BIG-REQUESTS extension),
+ * - and other assorted information.
+ *
+ * See the X protocol specification for more details.
+ *
+ * The result must not be freed.
+ */
+const struct xcb_setup_t *xcb_get_setup(xcb_connection_t *c);
+
+/**
+ * @brief Access the file descriptor of the connection.
+ * @param c The connection.
+ * @return The file descriptor.
+ *
+ * Accessor for the file descriptor that was passed to the
+ * xcb_connect_to_fd call that returned @p c.
+ */
+int xcb_get_file_descriptor(xcb_connection_t *c);
+
+/**
+ * @brief Test whether the connection has shut down due to a fatal error.
+ * @param c The connection.
+ * @return > 0 if the connection is in an error state; 0 otherwise.
+ *
+ * Some errors that occur in the context of an xcb_connection_t
+ * are unrecoverable. When such an error occurs, the
+ * connection is shut down and further operations on the
+ * xcb_connection_t have no effect, but memory will not be freed until
+ * xcb_disconnect() is called on the xcb_connection_t.
+ *
+ * @return XCB_CONN_ERROR, because of socket errors, pipe errors or other stream errors.
+ * @return XCB_CONN_CLOSED_EXT_NOTSUPPORTED, when extension not supported.
+ * @return XCB_CONN_CLOSED_MEM_INSUFFICIENT, when memory not available.
+ * @return XCB_CONN_CLOSED_REQ_LEN_EXCEED, exceeding request length that server accepts.
+ * @return XCB_CONN_CLOSED_PARSE_ERR, error during parsing display string.
+ * @return XCB_CONN_CLOSED_INVALID_SCREEN, because the server does not have a screen matching the display.
+ */
+int xcb_connection_has_error(xcb_connection_t *c);
+
+/**
+ * @brief Connects to the X server.
+ * @param fd The file descriptor.
+ * @param auth_info Authentication data.
+ * @return A newly allocated xcb_connection_t structure.
+ *
+ * Connects to an X server, given the open socket @p fd and the
+ * xcb_auth_info_t @p auth_info. The file descriptor @p fd is
+ * bidirectionally connected to an X server. If the connection
+ * should be unauthenticated, @p auth_info must be @c
+ * NULL.
+ *
+ * Always returns a non-NULL pointer to a xcb_connection_t, even on failure.
+ * Callers need to use xcb_connection_has_error() to check for failure.
+ * When finished, use xcb_disconnect() to close the connection and free
+ * the structure.
+ */
+xcb_connection_t *xcb_connect_to_fd(int fd, xcb_auth_info_t *auth_info);
+
+/**
+ * @brief Closes the connection.
+ * @param c The connection.
+ *
+ * Closes the file descriptor and frees all memory associated with the
+ * connection @c c. If @p c is @c NULL, nothing is done.
+ */
+void xcb_disconnect(xcb_connection_t *c);
+
+
+/* xcb_util.c */
+
+/**
+ * @brief Parses a display string name in the form documented by X(7x).
+ * @param name The name of the display.
+ * @param host A pointer to a malloc'd copy of the hostname.
+ * @param display A pointer to the display number.
+ * @param screen A pointer to the screen number.
+ * @return 0 on failure, non 0 otherwise.
+ *
+ * Parses the display string name @p display_name in the form
+ * documented by X(7x). Has no side effects on failure. If
+ * @p displayname is @c NULL or empty, it uses the environment
+ * variable DISPLAY. @p hostp is a pointer to a newly allocated string
+ * that contain the host name. @p displayp is set to the display
+ * number and @p screenp to the preferred screen number. @p screenp
+ * can be @c NULL. If @p displayname does not contain a screen number,
+ * it is set to @c 0.
+ */
+int xcb_parse_display(const char *name, char **host, int *display, int *screen);
+
+/**
+ * @brief Connects to the X server.
+ * @param displayname The name of the display.
+ * @param screenp A pointer to a preferred screen number.
+ * @return A newly allocated xcb_connection_t structure.
+ *
+ * Connects to the X server specified by @p displayname. If @p
+ * displayname is @c NULL, uses the value of the DISPLAY environment
+ * variable. If a particular screen on that server is preferred, the
+ * int pointed to by @p screenp (if not @c NULL) will be set to that
+ * screen; otherwise the screen will be set to 0.
+ *
+ * Always returns a non-NULL pointer to a xcb_connection_t, even on failure.
+ * Callers need to use xcb_connection_has_error() to check for failure.
+ * When finished, use xcb_disconnect() to close the connection and free
+ * the structure.
+ */
+xcb_connection_t *xcb_connect(const char *displayname, int *screenp);
+
+/**
+ * @brief Connects to the X server, using an authorization information.
+ * @param display The name of the display.
+ * @param auth The authorization information.
+ * @param screen A pointer to a preferred screen number.
+ * @return A newly allocated xcb_connection_t structure.
+ *
+ * Connects to the X server specified by @p displayname, using the
+ * authorization @p auth. If a particular screen on that server is
+ * preferred, the int pointed to by @p screenp (if not @c NULL) will
+ * be set to that screen; otherwise @p screenp will be set to 0.
+ *
+ * Always returns a non-NULL pointer to a xcb_connection_t, even on failure.
+ * Callers need to use xcb_connection_has_error() to check for failure.
+ * When finished, use xcb_disconnect() to close the connection and free
+ * the structure.
+ */
+xcb_connection_t *xcb_connect_to_display_with_auth_info(const char *display, xcb_auth_info_t *auth, int *screen);
+
+
+/* xcb_xid.c */
+
+/**
+ * @brief Allocates an XID for a new object.
+ * @param c The connection.
+ * @return A newly allocated XID, or -1 on failure.
+ *
+ * Allocates an XID for a new object. Typically used just prior to
+ * various object creation functions, such as xcb_create_window.
+ */
+uint32_t xcb_generate_id(xcb_connection_t *c);
+
+
+/**
+ * @brief Obtain number of bytes read from the connection.
+ * @param c The connection
+ * @return Number of bytes read from the server.
+ *
+ * Returns cumulative number of bytes received from the connection.
+ *
+ * This retrieves the total number of bytes read from this connection,
+ * to be used for diagnostic/monitoring/informative purposes.
+ */
+
+uint64_t
+xcb_total_read(xcb_connection_t *c);
+
+/**
+ *
+ * @brief Obtain number of bytes written to the connection.
+ * @param c The connection
+ * @return Number of bytes written to the server.
+ *
+ * Returns cumulative number of bytes sent to the connection.
+ *
+ * This retrieves the total number of bytes written to this connection,
+ * to be used for diagnostic/monitoring/informative purposes.
+ */
+
+uint64_t
+xcb_total_written(xcb_connection_t *c);
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __XCB_H__ */
diff --git a/include/xcb/xproto.h b/include/xcb/xproto.h
new file mode 100644
index 0000000..4d87b72
--- /dev/null
+++ b/include/xcb/xproto.h
@@ -0,0 +1,12696 @@
+/*
+ * This file generated automatically from xproto.xml by c_client.py.
+ * Edit at your peril.
+ */
+
+/**
+ * @defgroup XCB__API XCB  API
+ * @brief  XCB Protocol Implementation.
+ * @{
+ **/
+
+#ifndef __XPROTO_H
+#define __XPROTO_H
+
+#include "xcb.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @brief xcb_char2b_t
+ **/
+typedef struct xcb_char2b_t {
+    uint8_t byte1;
+    uint8_t byte2;
+} xcb_char2b_t;
+
+/**
+ * @brief xcb_char2b_iterator_t
+ **/
+typedef struct xcb_char2b_iterator_t {
+    xcb_char2b_t *data;
+    int           rem;
+    int           index;
+} xcb_char2b_iterator_t;
+
+typedef uint32_t xcb_window_t;
+
+/**
+ * @brief xcb_window_iterator_t
+ **/
+typedef struct xcb_window_iterator_t {
+    xcb_window_t *data;
+    int           rem;
+    int           index;
+} xcb_window_iterator_t;
+
+typedef uint32_t xcb_pixmap_t;
+
+/**
+ * @brief xcb_pixmap_iterator_t
+ **/
+typedef struct xcb_pixmap_iterator_t {
+    xcb_pixmap_t *data;
+    int           rem;
+    int           index;
+} xcb_pixmap_iterator_t;
+
+typedef uint32_t xcb_cursor_t;
+
+/**
+ * @brief xcb_cursor_iterator_t
+ **/
+typedef struct xcb_cursor_iterator_t {
+    xcb_cursor_t *data;
+    int           rem;
+    int           index;
+} xcb_cursor_iterator_t;
+
+typedef uint32_t xcb_font_t;
+
+/**
+ * @brief xcb_font_iterator_t
+ **/
+typedef struct xcb_font_iterator_t {
+    xcb_font_t *data;
+    int         rem;
+    int         index;
+} xcb_font_iterator_t;
+
+typedef uint32_t xcb_gcontext_t;
+
+/**
+ * @brief xcb_gcontext_iterator_t
+ **/
+typedef struct xcb_gcontext_iterator_t {
+    xcb_gcontext_t *data;
+    int             rem;
+    int             index;
+} xcb_gcontext_iterator_t;
+
+typedef uint32_t xcb_colormap_t;
+
+/**
+ * @brief xcb_colormap_iterator_t
+ **/
+typedef struct xcb_colormap_iterator_t {
+    xcb_colormap_t *data;
+    int             rem;
+    int             index;
+} xcb_colormap_iterator_t;
+
+typedef uint32_t xcb_atom_t;
+
+/**
+ * @brief xcb_atom_iterator_t
+ **/
+typedef struct xcb_atom_iterator_t {
+    xcb_atom_t *data;
+    int         rem;
+    int         index;
+} xcb_atom_iterator_t;
+
+typedef uint32_t xcb_drawable_t;
+
+/**
+ * @brief xcb_drawable_iterator_t
+ **/
+typedef struct xcb_drawable_iterator_t {
+    xcb_drawable_t *data;
+    int             rem;
+    int             index;
+} xcb_drawable_iterator_t;
+
+typedef uint32_t xcb_fontable_t;
+
+/**
+ * @brief xcb_fontable_iterator_t
+ **/
+typedef struct xcb_fontable_iterator_t {
+    xcb_fontable_t *data;
+    int             rem;
+    int             index;
+} xcb_fontable_iterator_t;
+
+typedef uint32_t xcb_bool32_t;
+
+/**
+ * @brief xcb_bool32_iterator_t
+ **/
+typedef struct xcb_bool32_iterator_t {
+    xcb_bool32_t *data;
+    int           rem;
+    int           index;
+} xcb_bool32_iterator_t;
+
+typedef uint32_t xcb_visualid_t;
+
+/**
+ * @brief xcb_visualid_iterator_t
+ **/
+typedef struct xcb_visualid_iterator_t {
+    xcb_visualid_t *data;
+    int             rem;
+    int             index;
+} xcb_visualid_iterator_t;
+
+typedef uint32_t xcb_timestamp_t;
+
+/**
+ * @brief xcb_timestamp_iterator_t
+ **/
+typedef struct xcb_timestamp_iterator_t {
+    xcb_timestamp_t *data;
+    int              rem;
+    int              index;
+} xcb_timestamp_iterator_t;
+
+typedef uint32_t xcb_keysym_t;
+
+/**
+ * @brief xcb_keysym_iterator_t
+ **/
+typedef struct xcb_keysym_iterator_t {
+    xcb_keysym_t *data;
+    int           rem;
+    int           index;
+} xcb_keysym_iterator_t;
+
+typedef uint8_t xcb_keycode_t;
+
+/**
+ * @brief xcb_keycode_iterator_t
+ **/
+typedef struct xcb_keycode_iterator_t {
+    xcb_keycode_t *data;
+    int            rem;
+    int            index;
+} xcb_keycode_iterator_t;
+
+typedef uint32_t xcb_keycode32_t;
+
+/**
+ * @brief xcb_keycode32_iterator_t
+ **/
+typedef struct xcb_keycode32_iterator_t {
+    xcb_keycode32_t *data;
+    int              rem;
+    int              index;
+} xcb_keycode32_iterator_t;
+
+typedef uint8_t xcb_button_t;
+
+/**
+ * @brief xcb_button_iterator_t
+ **/
+typedef struct xcb_button_iterator_t {
+    xcb_button_t *data;
+    int           rem;
+    int           index;
+} xcb_button_iterator_t;
+
+/**
+ * @brief xcb_point_t
+ **/
+typedef struct xcb_point_t {
+    int16_t x;
+    int16_t y;
+} xcb_point_t;
+
+/**
+ * @brief xcb_point_iterator_t
+ **/
+typedef struct xcb_point_iterator_t {
+    xcb_point_t *data;
+    int          rem;
+    int          index;
+} xcb_point_iterator_t;
+
+/**
+ * @brief xcb_rectangle_t
+ **/
+typedef struct xcb_rectangle_t {
+    int16_t  x;
+    int16_t  y;
+    uint16_t width;
+    uint16_t height;
+} xcb_rectangle_t;
+
+/**
+ * @brief xcb_rectangle_iterator_t
+ **/
+typedef struct xcb_rectangle_iterator_t {
+    xcb_rectangle_t *data;
+    int              rem;
+    int              index;
+} xcb_rectangle_iterator_t;
+
+/**
+ * @brief xcb_arc_t
+ **/
+typedef struct xcb_arc_t {
+    int16_t  x;
+    int16_t  y;
+    uint16_t width;
+    uint16_t height;
+    int16_t  angle1;
+    int16_t  angle2;
+} xcb_arc_t;
+
+/**
+ * @brief xcb_arc_iterator_t
+ **/
+typedef struct xcb_arc_iterator_t {
+    xcb_arc_t *data;
+    int        rem;
+    int        index;
+} xcb_arc_iterator_t;
+
+/**
+ * @brief xcb_format_t
+ **/
+typedef struct xcb_format_t {
+    uint8_t depth;
+    uint8_t bits_per_pixel;
+    uint8_t scanline_pad;
+    uint8_t pad0[5];
+} xcb_format_t;
+
+/**
+ * @brief xcb_format_iterator_t
+ **/
+typedef struct xcb_format_iterator_t {
+    xcb_format_t *data;
+    int           rem;
+    int           index;
+} xcb_format_iterator_t;
+
+typedef enum xcb_visual_class_t {
+    XCB_VISUAL_CLASS_STATIC_GRAY = 0,
+    XCB_VISUAL_CLASS_GRAY_SCALE = 1,
+    XCB_VISUAL_CLASS_STATIC_COLOR = 2,
+    XCB_VISUAL_CLASS_PSEUDO_COLOR = 3,
+    XCB_VISUAL_CLASS_TRUE_COLOR = 4,
+    XCB_VISUAL_CLASS_DIRECT_COLOR = 5
+} xcb_visual_class_t;
+
+/**
+ * @brief xcb_visualtype_t
+ **/
+typedef struct xcb_visualtype_t {
+    xcb_visualid_t visual_id;
+    uint8_t        _class;
+    uint8_t        bits_per_rgb_value;
+    uint16_t       colormap_entries;
+    uint32_t       red_mask;
+    uint32_t       green_mask;
+    uint32_t       blue_mask;
+    uint8_t        pad0[4];
+} xcb_visualtype_t;
+
+/**
+ * @brief xcb_visualtype_iterator_t
+ **/
+typedef struct xcb_visualtype_iterator_t {
+    xcb_visualtype_t *data;
+    int               rem;
+    int               index;
+} xcb_visualtype_iterator_t;
+
+/**
+ * @brief xcb_depth_t
+ **/
+typedef struct xcb_depth_t {
+    uint8_t  depth;
+    uint8_t  pad0;
+    uint16_t visuals_len;
+    uint8_t  pad1[4];
+} xcb_depth_t;
+
+/**
+ * @brief xcb_depth_iterator_t
+ **/
+typedef struct xcb_depth_iterator_t {
+    xcb_depth_t *data;
+    int          rem;
+    int          index;
+} xcb_depth_iterator_t;
+
+typedef enum xcb_event_mask_t {
+    XCB_EVENT_MASK_NO_EVENT = 0,
+    XCB_EVENT_MASK_KEY_PRESS = 1,
+    XCB_EVENT_MASK_KEY_RELEASE = 2,
+    XCB_EVENT_MASK_BUTTON_PRESS = 4,
+    XCB_EVENT_MASK_BUTTON_RELEASE = 8,
+    XCB_EVENT_MASK_ENTER_WINDOW = 16,
+    XCB_EVENT_MASK_LEAVE_WINDOW = 32,
+    XCB_EVENT_MASK_POINTER_MOTION = 64,
+    XCB_EVENT_MASK_POINTER_MOTION_HINT = 128,
+    XCB_EVENT_MASK_BUTTON_1_MOTION = 256,
+    XCB_EVENT_MASK_BUTTON_2_MOTION = 512,
+    XCB_EVENT_MASK_BUTTON_3_MOTION = 1024,
+    XCB_EVENT_MASK_BUTTON_4_MOTION = 2048,
+    XCB_EVENT_MASK_BUTTON_5_MOTION = 4096,
+    XCB_EVENT_MASK_BUTTON_MOTION = 8192,
+    XCB_EVENT_MASK_KEYMAP_STATE = 16384,
+    XCB_EVENT_MASK_EXPOSURE = 32768,
+    XCB_EVENT_MASK_VISIBILITY_CHANGE = 65536,
+    XCB_EVENT_MASK_STRUCTURE_NOTIFY = 131072,
+    XCB_EVENT_MASK_RESIZE_REDIRECT = 262144,
+    XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY = 524288,
+    XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT = 1048576,
+    XCB_EVENT_MASK_FOCUS_CHANGE = 2097152,
+    XCB_EVENT_MASK_PROPERTY_CHANGE = 4194304,
+    XCB_EVENT_MASK_COLOR_MAP_CHANGE = 8388608,
+    XCB_EVENT_MASK_OWNER_GRAB_BUTTON = 16777216
+} xcb_event_mask_t;
+
+typedef enum xcb_backing_store_t {
+    XCB_BACKING_STORE_NOT_USEFUL = 0,
+    XCB_BACKING_STORE_WHEN_MAPPED = 1,
+    XCB_BACKING_STORE_ALWAYS = 2
+} xcb_backing_store_t;
+
+/**
+ * @brief xcb_screen_t
+ **/
+typedef struct xcb_screen_t {
+    xcb_window_t   root;
+    xcb_colormap_t default_colormap;
+    uint32_t       white_pixel;
+    uint32_t       black_pixel;
+    uint32_t       current_input_masks;
+    uint16_t       width_in_pixels;
+    uint16_t       height_in_pixels;
+    uint16_t       width_in_millimeters;
+    uint16_t       height_in_millimeters;
+    uint16_t       min_installed_maps;
+    uint16_t       max_installed_maps;
+    xcb_visualid_t root_visual;
+    uint8_t        backing_stores;
+    uint8_t        save_unders;
+    uint8_t        root_depth;
+    uint8_t        allowed_depths_len;
+} xcb_screen_t;
+
+/**
+ * @brief xcb_screen_iterator_t
+ **/
+typedef struct xcb_screen_iterator_t {
+    xcb_screen_t *data;
+    int           rem;
+    int           index;
+} xcb_screen_iterator_t;
+
+/**
+ * @brief xcb_setup_request_t
+ **/
+typedef struct xcb_setup_request_t {
+    uint8_t  byte_order;
+    uint8_t  pad0;
+    uint16_t protocol_major_version;
+    uint16_t protocol_minor_version;
+    uint16_t authorization_protocol_name_len;
+    uint16_t authorization_protocol_data_len;
+    uint8_t  pad1[2];
+} xcb_setup_request_t;
+
+/**
+ * @brief xcb_setup_request_iterator_t
+ **/
+typedef struct xcb_setup_request_iterator_t {
+    xcb_setup_request_t *data;
+    int                  rem;
+    int                  index;
+} xcb_setup_request_iterator_t;
+
+/**
+ * @brief xcb_setup_failed_t
+ **/
+typedef struct xcb_setup_failed_t {
+    uint8_t  status;
+    uint8_t  reason_len;
+    uint16_t protocol_major_version;
+    uint16_t protocol_minor_version;
+    uint16_t length;
+} xcb_setup_failed_t;
+
+/**
+ * @brief xcb_setup_failed_iterator_t
+ **/
+typedef struct xcb_setup_failed_iterator_t {
+    xcb_setup_failed_t *data;
+    int                 rem;
+    int                 index;
+} xcb_setup_failed_iterator_t;
+
+/**
+ * @brief xcb_setup_authenticate_t
+ **/
+typedef struct xcb_setup_authenticate_t {
+    uint8_t  status;
+    uint8_t  pad0[5];
+    uint16_t length;
+} xcb_setup_authenticate_t;
+
+/**
+ * @brief xcb_setup_authenticate_iterator_t
+ **/
+typedef struct xcb_setup_authenticate_iterator_t {
+    xcb_setup_authenticate_t *data;
+    int                       rem;
+    int                       index;
+} xcb_setup_authenticate_iterator_t;
+
+typedef enum xcb_image_order_t {
+    XCB_IMAGE_ORDER_LSB_FIRST = 0,
+    XCB_IMAGE_ORDER_MSB_FIRST = 1
+} xcb_image_order_t;
+
+/**
+ * @brief xcb_setup_t
+ **/
+typedef struct xcb_setup_t {
+    uint8_t       status;
+    uint8_t       pad0;
+    uint16_t      protocol_major_version;
+    uint16_t      protocol_minor_version;
+    uint16_t      length;
+    uint32_t      release_number;
+    uint32_t      resource_id_base;
+    uint32_t      resource_id_mask;
+    uint32_t      motion_buffer_size;
+    uint16_t      vendor_len;
+    uint16_t      maximum_request_length;
+    uint8_t       roots_len;
+    uint8_t       pixmap_formats_len;
+    uint8_t       image_byte_order;
+    uint8_t       bitmap_format_bit_order;
+    uint8_t       bitmap_format_scanline_unit;
+    uint8_t       bitmap_format_scanline_pad;
+    xcb_keycode_t min_keycode;
+    xcb_keycode_t max_keycode;
+    uint8_t       pad1[4];
+} xcb_setup_t;
+
+/**
+ * @brief xcb_setup_iterator_t
+ **/
+typedef struct xcb_setup_iterator_t {
+    xcb_setup_t *data;
+    int          rem;
+    int          index;
+} xcb_setup_iterator_t;
+
+typedef enum xcb_mod_mask_t {
+    XCB_MOD_MASK_SHIFT = 1,
+    XCB_MOD_MASK_LOCK = 2,
+    XCB_MOD_MASK_CONTROL = 4,
+    XCB_MOD_MASK_1 = 8,
+    XCB_MOD_MASK_2 = 16,
+    XCB_MOD_MASK_3 = 32,
+    XCB_MOD_MASK_4 = 64,
+    XCB_MOD_MASK_5 = 128,
+    XCB_MOD_MASK_ANY = 32768
+} xcb_mod_mask_t;
+
+typedef enum xcb_key_but_mask_t {
+    XCB_KEY_BUT_MASK_SHIFT = 1,
+    XCB_KEY_BUT_MASK_LOCK = 2,
+    XCB_KEY_BUT_MASK_CONTROL = 4,
+    XCB_KEY_BUT_MASK_MOD_1 = 8,
+    XCB_KEY_BUT_MASK_MOD_2 = 16,
+    XCB_KEY_BUT_MASK_MOD_3 = 32,
+    XCB_KEY_BUT_MASK_MOD_4 = 64,
+    XCB_KEY_BUT_MASK_MOD_5 = 128,
+    XCB_KEY_BUT_MASK_BUTTON_1 = 256,
+    XCB_KEY_BUT_MASK_BUTTON_2 = 512,
+    XCB_KEY_BUT_MASK_BUTTON_3 = 1024,
+    XCB_KEY_BUT_MASK_BUTTON_4 = 2048,
+    XCB_KEY_BUT_MASK_BUTTON_5 = 4096
+} xcb_key_but_mask_t;
+
+typedef enum xcb_window_enum_t {
+    XCB_WINDOW_NONE = 0
+} xcb_window_enum_t;
+
+/** Opcode for xcb_key_press. */
+#define XCB_KEY_PRESS 2
+
+/**
+ * @brief xcb_key_press_event_t
+ **/
+typedef struct xcb_key_press_event_t {
+    uint8_t         response_type;
+    xcb_keycode_t   detail;
+    uint16_t        sequence;
+    xcb_timestamp_t time;
+    xcb_window_t    root;
+    xcb_window_t    event;
+    xcb_window_t    child;
+    int16_t         root_x;
+    int16_t         root_y;
+    int16_t         event_x;
+    int16_t         event_y;
+    uint16_t        state;
+    uint8_t         same_screen;
+    uint8_t         pad0;
+} xcb_key_press_event_t;
+
+/** Opcode for xcb_key_release. */
+#define XCB_KEY_RELEASE 3
+
+typedef xcb_key_press_event_t xcb_key_release_event_t;
+
+typedef enum xcb_button_mask_t {
+    XCB_BUTTON_MASK_1 = 256,
+    XCB_BUTTON_MASK_2 = 512,
+    XCB_BUTTON_MASK_3 = 1024,
+    XCB_BUTTON_MASK_4 = 2048,
+    XCB_BUTTON_MASK_5 = 4096,
+    XCB_BUTTON_MASK_ANY = 32768
+} xcb_button_mask_t;
+
+/** Opcode for xcb_button_press. */
+#define XCB_BUTTON_PRESS 4
+
+/**
+ * @brief xcb_button_press_event_t
+ **/
+typedef struct xcb_button_press_event_t {
+    uint8_t         response_type;
+    xcb_button_t    detail;
+    uint16_t        sequence;
+    xcb_timestamp_t time;
+    xcb_window_t    root;
+    xcb_window_t    event;
+    xcb_window_t    child;
+    int16_t         root_x;
+    int16_t         root_y;
+    int16_t         event_x;
+    int16_t         event_y;
+    uint16_t        state;
+    uint8_t         same_screen;
+    uint8_t         pad0;
+} xcb_button_press_event_t;
+
+/** Opcode for xcb_button_release. */
+#define XCB_BUTTON_RELEASE 5
+
+typedef xcb_button_press_event_t xcb_button_release_event_t;
+
+typedef enum xcb_motion_t {
+    XCB_MOTION_NORMAL = 0,
+    XCB_MOTION_HINT = 1
+} xcb_motion_t;
+
+/** Opcode for xcb_motion_notify. */
+#define XCB_MOTION_NOTIFY 6
+
+/**
+ * @brief xcb_motion_notify_event_t
+ **/
+typedef struct xcb_motion_notify_event_t {
+    uint8_t         response_type;
+    uint8_t         detail;
+    uint16_t        sequence;
+    xcb_timestamp_t time;
+    xcb_window_t    root;
+    xcb_window_t    event;
+    xcb_window_t    child;
+    int16_t         root_x;
+    int16_t         root_y;
+    int16_t         event_x;
+    int16_t         event_y;
+    uint16_t        state;
+    uint8_t         same_screen;
+    uint8_t         pad0;
+} xcb_motion_notify_event_t;
+
+typedef enum xcb_notify_detail_t {
+    XCB_NOTIFY_DETAIL_ANCESTOR = 0,
+    XCB_NOTIFY_DETAIL_VIRTUAL = 1,
+    XCB_NOTIFY_DETAIL_INFERIOR = 2,
+    XCB_NOTIFY_DETAIL_NONLINEAR = 3,
+    XCB_NOTIFY_DETAIL_NONLINEAR_VIRTUAL = 4,
+    XCB_NOTIFY_DETAIL_POINTER = 5,
+    XCB_NOTIFY_DETAIL_POINTER_ROOT = 6,
+    XCB_NOTIFY_DETAIL_NONE = 7
+} xcb_notify_detail_t;
+
+typedef enum xcb_notify_mode_t {
+    XCB_NOTIFY_MODE_NORMAL = 0,
+    XCB_NOTIFY_MODE_GRAB = 1,
+    XCB_NOTIFY_MODE_UNGRAB = 2,
+    XCB_NOTIFY_MODE_WHILE_GRABBED = 3
+} xcb_notify_mode_t;
+
+/** Opcode for xcb_enter_notify. */
+#define XCB_ENTER_NOTIFY 7
+
+/**
+ * @brief xcb_enter_notify_event_t
+ **/
+typedef struct xcb_enter_notify_event_t {
+    uint8_t         response_type;
+    uint8_t         detail;
+    uint16_t        sequence;
+    xcb_timestamp_t time;
+    xcb_window_t    root;
+    xcb_window_t    event;
+    xcb_window_t    child;
+    int16_t         root_x;
+    int16_t         root_y;
+    int16_t         event_x;
+    int16_t         event_y;
+    uint16_t        state;
+    uint8_t         mode;
+    uint8_t         same_screen_focus;
+} xcb_enter_notify_event_t;
+
+/** Opcode for xcb_leave_notify. */
+#define XCB_LEAVE_NOTIFY 8
+
+typedef xcb_enter_notify_event_t xcb_leave_notify_event_t;
+
+/** Opcode for xcb_focus_in. */
+#define XCB_FOCUS_IN 9
+
+/**
+ * @brief xcb_focus_in_event_t
+ **/
+typedef struct xcb_focus_in_event_t {
+    uint8_t      response_type;
+    uint8_t      detail;
+    uint16_t     sequence;
+    xcb_window_t event;
+    uint8_t      mode;
+    uint8_t      pad0[3];
+} xcb_focus_in_event_t;
+
+/** Opcode for xcb_focus_out. */
+#define XCB_FOCUS_OUT 10
+
+typedef xcb_focus_in_event_t xcb_focus_out_event_t;
+
+/** Opcode for xcb_keymap_notify. */
+#define XCB_KEYMAP_NOTIFY 11
+
+/**
+ * @brief xcb_keymap_notify_event_t
+ **/
+typedef struct xcb_keymap_notify_event_t {
+    uint8_t response_type;
+    uint8_t keys[31];
+} xcb_keymap_notify_event_t;
+
+/** Opcode for xcb_expose. */
+#define XCB_EXPOSE 12
+
+/**
+ * @brief xcb_expose_event_t
+ **/
+typedef struct xcb_expose_event_t {
+    uint8_t      response_type;
+    uint8_t      pad0;
+    uint16_t     sequence;
+    xcb_window_t window;
+    uint16_t     x;
+    uint16_t     y;
+    uint16_t     width;
+    uint16_t     height;
+    uint16_t     count;
+    uint8_t      pad1[2];
+} xcb_expose_event_t;
+
+/** Opcode for xcb_graphics_exposure. */
+#define XCB_GRAPHICS_EXPOSURE 13
+
+/**
+ * @brief xcb_graphics_exposure_event_t
+ **/
+typedef struct xcb_graphics_exposure_event_t {
+    uint8_t        response_type;
+    uint8_t        pad0;
+    uint16_t       sequence;
+    xcb_drawable_t drawable;
+    uint16_t       x;
+    uint16_t       y;
+    uint16_t       width;
+    uint16_t       height;
+    uint16_t       minor_opcode;
+    uint16_t       count;
+    uint8_t        major_opcode;
+    uint8_t        pad1[3];
+} xcb_graphics_exposure_event_t;
+
+/** Opcode for xcb_no_exposure. */
+#define XCB_NO_EXPOSURE 14
+
+/**
+ * @brief xcb_no_exposure_event_t
+ **/
+typedef struct xcb_no_exposure_event_t {
+    uint8_t        response_type;
+    uint8_t        pad0;
+    uint16_t       sequence;
+    xcb_drawable_t drawable;
+    uint16_t       minor_opcode;
+    uint8_t        major_opcode;
+    uint8_t        pad1;
+} xcb_no_exposure_event_t;
+
+typedef enum xcb_visibility_t {
+    XCB_VISIBILITY_UNOBSCURED = 0,
+    XCB_VISIBILITY_PARTIALLY_OBSCURED = 1,
+    XCB_VISIBILITY_FULLY_OBSCURED = 2
+} xcb_visibility_t;
+
+/** Opcode for xcb_visibility_notify. */
+#define XCB_VISIBILITY_NOTIFY 15
+
+/**
+ * @brief xcb_visibility_notify_event_t
+ **/
+typedef struct xcb_visibility_notify_event_t {
+    uint8_t      response_type;
+    uint8_t      pad0;
+    uint16_t     sequence;
+    xcb_window_t window;
+    uint8_t      state;
+    uint8_t      pad1[3];
+} xcb_visibility_notify_event_t;
+
+/** Opcode for xcb_create_notify. */
+#define XCB_CREATE_NOTIFY 16
+
+/**
+ * @brief xcb_create_notify_event_t
+ **/
+typedef struct xcb_create_notify_event_t {
+    uint8_t      response_type;
+    uint8_t      pad0;
+    uint16_t     sequence;
+    xcb_window_t parent;
+    xcb_window_t window;
+    int16_t      x;
+    int16_t      y;
+    uint16_t     width;
+    uint16_t     height;
+    uint16_t     border_width;
+    uint8_t      override_redirect;
+    uint8_t      pad1;
+} xcb_create_notify_event_t;
+
+/** Opcode for xcb_destroy_notify. */
+#define XCB_DESTROY_NOTIFY 17
+
+/**
+ * @brief xcb_destroy_notify_event_t
+ **/
+typedef struct xcb_destroy_notify_event_t {
+    uint8_t      response_type;
+    uint8_t      pad0;
+    uint16_t     sequence;
+    xcb_window_t event;
+    xcb_window_t window;
+} xcb_destroy_notify_event_t;
+
+/** Opcode for xcb_unmap_notify. */
+#define XCB_UNMAP_NOTIFY 18
+
+/**
+ * @brief xcb_unmap_notify_event_t
+ **/
+typedef struct xcb_unmap_notify_event_t {
+    uint8_t      response_type;
+    uint8_t      pad0;
+    uint16_t     sequence;
+    xcb_window_t event;
+    xcb_window_t window;
+    uint8_t      from_configure;
+    uint8_t      pad1[3];
+} xcb_unmap_notify_event_t;
+
+/** Opcode for xcb_map_notify. */
+#define XCB_MAP_NOTIFY 19
+
+/**
+ * @brief xcb_map_notify_event_t
+ **/
+typedef struct xcb_map_notify_event_t {
+    uint8_t      response_type;
+    uint8_t      pad0;
+    uint16_t     sequence;
+    xcb_window_t event;
+    xcb_window_t window;
+    uint8_t      override_redirect;
+    uint8_t      pad1[3];
+} xcb_map_notify_event_t;
+
+/** Opcode for xcb_map_request. */
+#define XCB_MAP_REQUEST 20
+
+/**
+ * @brief xcb_map_request_event_t
+ **/
+typedef struct xcb_map_request_event_t {
+    uint8_t      response_type;
+    uint8_t      pad0;
+    uint16_t     sequence;
+    xcb_window_t parent;
+    xcb_window_t window;
+} xcb_map_request_event_t;
+
+/** Opcode for xcb_reparent_notify. */
+#define XCB_REPARENT_NOTIFY 21
+
+/**
+ * @brief xcb_reparent_notify_event_t
+ **/
+typedef struct xcb_reparent_notify_event_t {
+    uint8_t      response_type;
+    uint8_t      pad0;
+    uint16_t     sequence;
+    xcb_window_t event;
+    xcb_window_t window;
+    xcb_window_t parent;
+    int16_t      x;
+    int16_t      y;
+    uint8_t      override_redirect;
+    uint8_t      pad1[3];
+} xcb_reparent_notify_event_t;
+
+/** Opcode for xcb_configure_notify. */
+#define XCB_CONFIGURE_NOTIFY 22
+
+/**
+ * @brief xcb_configure_notify_event_t
+ **/
+typedef struct xcb_configure_notify_event_t {
+    uint8_t      response_type;
+    uint8_t      pad0;
+    uint16_t     sequence;
+    xcb_window_t event;
+    xcb_window_t window;
+    xcb_window_t above_sibling;
+    int16_t      x;
+    int16_t      y;
+    uint16_t     width;
+    uint16_t     height;
+    uint16_t     border_width;
+    uint8_t      override_redirect;
+    uint8_t      pad1;
+} xcb_configure_notify_event_t;
+
+/** Opcode for xcb_configure_request. */
+#define XCB_CONFIGURE_REQUEST 23
+
+/**
+ * @brief xcb_configure_request_event_t
+ **/
+typedef struct xcb_configure_request_event_t {
+    uint8_t      response_type;
+    uint8_t      stack_mode;
+    uint16_t     sequence;
+    xcb_window_t parent;
+    xcb_window_t window;
+    xcb_window_t sibling;
+    int16_t      x;
+    int16_t      y;
+    uint16_t     width;
+    uint16_t     height;
+    uint16_t     border_width;
+    uint16_t     value_mask;
+} xcb_configure_request_event_t;
+
+/** Opcode for xcb_gravity_notify. */
+#define XCB_GRAVITY_NOTIFY 24
+
+/**
+ * @brief xcb_gravity_notify_event_t
+ **/
+typedef struct xcb_gravity_notify_event_t {
+    uint8_t      response_type;
+    uint8_t      pad0;
+    uint16_t     sequence;
+    xcb_window_t event;
+    xcb_window_t window;
+    int16_t      x;
+    int16_t      y;
+} xcb_gravity_notify_event_t;
+
+/** Opcode for xcb_resize_request. */
+#define XCB_RESIZE_REQUEST 25
+
+/**
+ * @brief xcb_resize_request_event_t
+ **/
+typedef struct xcb_resize_request_event_t {
+    uint8_t      response_type;
+    uint8_t      pad0;
+    uint16_t     sequence;
+    xcb_window_t window;
+    uint16_t     width;
+    uint16_t     height;
+} xcb_resize_request_event_t;
+
+typedef enum xcb_place_t {
+    XCB_PLACE_ON_TOP = 0,
+/**< The window is now on top of all siblings. */
+
+    XCB_PLACE_ON_BOTTOM = 1
+/**< The window is now below all siblings. */
+
+} xcb_place_t;
+
+/** Opcode for xcb_circulate_notify. */
+#define XCB_CIRCULATE_NOTIFY 26
+
+/**
+ * @brief xcb_circulate_notify_event_t
+ **/
+typedef struct xcb_circulate_notify_event_t {
+    uint8_t      response_type;
+    uint8_t      pad0;
+    uint16_t     sequence;
+    xcb_window_t event;
+    xcb_window_t window;
+    uint8_t      pad1[4];
+    uint8_t      place;
+    uint8_t      pad2[3];
+} xcb_circulate_notify_event_t;
+
+/** Opcode for xcb_circulate_request. */
+#define XCB_CIRCULATE_REQUEST 27
+
+typedef xcb_circulate_notify_event_t xcb_circulate_request_event_t;
+
+typedef enum xcb_property_t {
+    XCB_PROPERTY_NEW_VALUE = 0,
+    XCB_PROPERTY_DELETE = 1
+} xcb_property_t;
+
+/** Opcode for xcb_property_notify. */
+#define XCB_PROPERTY_NOTIFY 28
+
+/**
+ * @brief xcb_property_notify_event_t
+ **/
+typedef struct xcb_property_notify_event_t {
+    uint8_t         response_type;
+    uint8_t         pad0;
+    uint16_t        sequence;
+    xcb_window_t    window;
+    xcb_atom_t      atom;
+    xcb_timestamp_t time;
+    uint8_t         state;
+    uint8_t         pad1[3];
+} xcb_property_notify_event_t;
+
+/** Opcode for xcb_selection_clear. */
+#define XCB_SELECTION_CLEAR 29
+
+/**
+ * @brief xcb_selection_clear_event_t
+ **/
+typedef struct xcb_selection_clear_event_t {
+    uint8_t         response_type;
+    uint8_t         pad0;
+    uint16_t        sequence;
+    xcb_timestamp_t time;
+    xcb_window_t    owner;
+    xcb_atom_t      selection;
+} xcb_selection_clear_event_t;
+
+typedef enum xcb_time_t {
+    XCB_TIME_CURRENT_TIME = 0
+} xcb_time_t;
+
+typedef enum xcb_atom_enum_t {
+    XCB_ATOM_NONE = 0,
+    XCB_ATOM_ANY = 0,
+    XCB_ATOM_PRIMARY = 1,
+    XCB_ATOM_SECONDARY = 2,
+    XCB_ATOM_ARC = 3,
+    XCB_ATOM_ATOM = 4,
+    XCB_ATOM_BITMAP = 5,
+    XCB_ATOM_CARDINAL = 6,
+    XCB_ATOM_COLORMAP = 7,
+    XCB_ATOM_CURSOR = 8,
+    XCB_ATOM_CUT_BUFFER0 = 9,
+    XCB_ATOM_CUT_BUFFER1 = 10,
+    XCB_ATOM_CUT_BUFFER2 = 11,
+    XCB_ATOM_CUT_BUFFER3 = 12,
+    XCB_ATOM_CUT_BUFFER4 = 13,
+    XCB_ATOM_CUT_BUFFER5 = 14,
+    XCB_ATOM_CUT_BUFFER6 = 15,
+    XCB_ATOM_CUT_BUFFER7 = 16,
+    XCB_ATOM_DRAWABLE = 17,
+    XCB_ATOM_FONT = 18,
+    XCB_ATOM_INTEGER = 19,
+    XCB_ATOM_PIXMAP = 20,
+    XCB_ATOM_POINT = 21,
+    XCB_ATOM_RECTANGLE = 22,
+    XCB_ATOM_RESOURCE_MANAGER = 23,
+    XCB_ATOM_RGB_COLOR_MAP = 24,
+    XCB_ATOM_RGB_BEST_MAP = 25,
+    XCB_ATOM_RGB_BLUE_MAP = 26,
+    XCB_ATOM_RGB_DEFAULT_MAP = 27,
+    XCB_ATOM_RGB_GRAY_MAP = 28,
+    XCB_ATOM_RGB_GREEN_MAP = 29,
+    XCB_ATOM_RGB_RED_MAP = 30,
+    XCB_ATOM_STRING = 31,
+    XCB_ATOM_VISUALID = 32,
+    XCB_ATOM_WINDOW = 33,
+    XCB_ATOM_WM_COMMAND = 34,
+    XCB_ATOM_WM_HINTS = 35,
+    XCB_ATOM_WM_CLIENT_MACHINE = 36,
+    XCB_ATOM_WM_ICON_NAME = 37,
+    XCB_ATOM_WM_ICON_SIZE = 38,
+    XCB_ATOM_WM_NAME = 39,
+    XCB_ATOM_WM_NORMAL_HINTS = 40,
+    XCB_ATOM_WM_SIZE_HINTS = 41,
+    XCB_ATOM_WM_ZOOM_HINTS = 42,
+    XCB_ATOM_MIN_SPACE = 43,
+    XCB_ATOM_NORM_SPACE = 44,
+    XCB_ATOM_MAX_SPACE = 45,
+    XCB_ATOM_END_SPACE = 46,
+    XCB_ATOM_SUPERSCRIPT_X = 47,
+    XCB_ATOM_SUPERSCRIPT_Y = 48,
+    XCB_ATOM_SUBSCRIPT_X = 49,
+    XCB_ATOM_SUBSCRIPT_Y = 50,
+    XCB_ATOM_UNDERLINE_POSITION = 51,
+    XCB_ATOM_UNDERLINE_THICKNESS = 52,
+    XCB_ATOM_STRIKEOUT_ASCENT = 53,
+    XCB_ATOM_STRIKEOUT_DESCENT = 54,
+    XCB_ATOM_ITALIC_ANGLE = 55,
+    XCB_ATOM_X_HEIGHT = 56,
+    XCB_ATOM_QUAD_WIDTH = 57,
+    XCB_ATOM_WEIGHT = 58,
+    XCB_ATOM_POINT_SIZE = 59,
+    XCB_ATOM_RESOLUTION = 60,
+    XCB_ATOM_COPYRIGHT = 61,
+    XCB_ATOM_NOTICE = 62,
+    XCB_ATOM_FONT_NAME = 63,
+    XCB_ATOM_FAMILY_NAME = 64,
+    XCB_ATOM_FULL_NAME = 65,
+    XCB_ATOM_CAP_HEIGHT = 66,
+    XCB_ATOM_WM_CLASS = 67,
+    XCB_ATOM_WM_TRANSIENT_FOR = 68
+} xcb_atom_enum_t;
+
+/** Opcode for xcb_selection_request. */
+#define XCB_SELECTION_REQUEST 30
+
+/**
+ * @brief xcb_selection_request_event_t
+ **/
+typedef struct xcb_selection_request_event_t {
+    uint8_t         response_type;
+    uint8_t         pad0;
+    uint16_t        sequence;
+    xcb_timestamp_t time;
+    xcb_window_t    owner;
+    xcb_window_t    requestor;
+    xcb_atom_t      selection;
+    xcb_atom_t      target;
+    xcb_atom_t      property;
+} xcb_selection_request_event_t;
+
+/** Opcode for xcb_selection_notify. */
+#define XCB_SELECTION_NOTIFY 31
+
+/**
+ * @brief xcb_selection_notify_event_t
+ **/
+typedef struct xcb_selection_notify_event_t {
+    uint8_t         response_type;
+    uint8_t         pad0;
+    uint16_t        sequence;
+    xcb_timestamp_t time;
+    xcb_window_t    requestor;
+    xcb_atom_t      selection;
+    xcb_atom_t      target;
+    xcb_atom_t      property;
+} xcb_selection_notify_event_t;
+
+typedef enum xcb_colormap_state_t {
+    XCB_COLORMAP_STATE_UNINSTALLED = 0,
+/**< The colormap was uninstalled. */
+
+    XCB_COLORMAP_STATE_INSTALLED = 1
+/**< The colormap was installed. */
+
+} xcb_colormap_state_t;
+
+typedef enum xcb_colormap_enum_t {
+    XCB_COLORMAP_NONE = 0
+} xcb_colormap_enum_t;
+
+/** Opcode for xcb_colormap_notify. */
+#define XCB_COLORMAP_NOTIFY 32
+
+/**
+ * @brief xcb_colormap_notify_event_t
+ **/
+typedef struct xcb_colormap_notify_event_t {
+    uint8_t        response_type;
+    uint8_t        pad0;
+    uint16_t       sequence;
+    xcb_window_t   window;
+    xcb_colormap_t colormap;
+    uint8_t        _new;
+    uint8_t        state;
+    uint8_t        pad1[2];
+} xcb_colormap_notify_event_t;
+
+/**
+ * @brief xcb_client_message_data_t
+ **/
+typedef union xcb_client_message_data_t {
+    uint8_t  data8[20];
+    uint16_t data16[10];
+    uint32_t data32[5];
+} xcb_client_message_data_t;
+
+/**
+ * @brief xcb_client_message_data_iterator_t
+ **/
+typedef struct xcb_client_message_data_iterator_t {
+    xcb_client_message_data_t *data;
+    int                        rem;
+    int                        index;
+} xcb_client_message_data_iterator_t;
+
+/** Opcode for xcb_client_message. */
+#define XCB_CLIENT_MESSAGE 33
+
+/**
+ * @brief xcb_client_message_event_t
+ **/
+typedef struct xcb_client_message_event_t {
+    uint8_t                   response_type;
+    uint8_t                   format;
+    uint16_t                  sequence;
+    xcb_window_t              window;
+    xcb_atom_t                type;
+    xcb_client_message_data_t data;
+} xcb_client_message_event_t;
+
+typedef enum xcb_mapping_t {
+    XCB_MAPPING_MODIFIER = 0,
+    XCB_MAPPING_KEYBOARD = 1,
+    XCB_MAPPING_POINTER = 2
+} xcb_mapping_t;
+
+/** Opcode for xcb_mapping_notify. */
+#define XCB_MAPPING_NOTIFY 34
+
+/**
+ * @brief xcb_mapping_notify_event_t
+ **/
+typedef struct xcb_mapping_notify_event_t {
+    uint8_t       response_type;
+    uint8_t       pad0;
+    uint16_t      sequence;
+    uint8_t       request;
+    xcb_keycode_t first_keycode;
+    uint8_t       count;
+    uint8_t       pad1;
+} xcb_mapping_notify_event_t;
+
+/** Opcode for xcb_ge_generic. */
+#define XCB_GE_GENERIC 35
+
+/**
+ * @brief xcb_ge_generic_event_t
+ **/
+typedef struct xcb_ge_generic_event_t {
+    uint8_t  response_type;
+    uint8_t  extension;
+    uint16_t sequence;
+    uint32_t length;
+    uint16_t event_type;
+    uint8_t  pad0[22];
+    uint32_t full_sequence;
+} xcb_ge_generic_event_t;
+
+/** Opcode for xcb_request. */
+#define XCB_REQUEST 1
+
+/**
+ * @brief xcb_request_error_t
+ **/
+typedef struct xcb_request_error_t {
+    uint8_t  response_type;
+    uint8_t  error_code;
+    uint16_t sequence;
+    uint32_t bad_value;
+    uint16_t minor_opcode;
+    uint8_t  major_opcode;
+    uint8_t  pad0;
+} xcb_request_error_t;
+
+/** Opcode for xcb_value. */
+#define XCB_VALUE 2
+
+/**
+ * @brief xcb_value_error_t
+ **/
+typedef struct xcb_value_error_t {
+    uint8_t  response_type;
+    uint8_t  error_code;
+    uint16_t sequence;
+    uint32_t bad_value;
+    uint16_t minor_opcode;
+    uint8_t  major_opcode;
+    uint8_t  pad0;
+} xcb_value_error_t;
+
+/** Opcode for xcb_window. */
+#define XCB_WINDOW 3
+
+typedef xcb_value_error_t xcb_window_error_t;
+
+/** Opcode for xcb_pixmap. */
+#define XCB_PIXMAP 4
+
+typedef xcb_value_error_t xcb_pixmap_error_t;
+
+/** Opcode for xcb_atom. */
+#define XCB_ATOM 5
+
+typedef xcb_value_error_t xcb_atom_error_t;
+
+/** Opcode for xcb_cursor. */
+#define XCB_CURSOR 6
+
+typedef xcb_value_error_t xcb_cursor_error_t;
+
+/** Opcode for xcb_font. */
+#define XCB_FONT 7
+
+typedef xcb_value_error_t xcb_font_error_t;
+
+/** Opcode for xcb_match. */
+#define XCB_MATCH 8
+
+typedef xcb_request_error_t xcb_match_error_t;
+
+/** Opcode for xcb_drawable. */
+#define XCB_DRAWABLE 9
+
+typedef xcb_value_error_t xcb_drawable_error_t;
+
+/** Opcode for xcb_access. */
+#define XCB_ACCESS 10
+
+typedef xcb_request_error_t xcb_access_error_t;
+
+/** Opcode for xcb_alloc. */
+#define XCB_ALLOC 11
+
+typedef xcb_request_error_t xcb_alloc_error_t;
+
+/** Opcode for xcb_colormap. */
+#define XCB_COLORMAP 12
+
+typedef xcb_value_error_t xcb_colormap_error_t;
+
+/** Opcode for xcb_g_context. */
+#define XCB_G_CONTEXT 13
+
+typedef xcb_value_error_t xcb_g_context_error_t;
+
+/** Opcode for xcb_id_choice. */
+#define XCB_ID_CHOICE 14
+
+typedef xcb_value_error_t xcb_id_choice_error_t;
+
+/** Opcode for xcb_name. */
+#define XCB_NAME 15
+
+typedef xcb_request_error_t xcb_name_error_t;
+
+/** Opcode for xcb_length. */
+#define XCB_LENGTH 16
+
+typedef xcb_request_error_t xcb_length_error_t;
+
+/** Opcode for xcb_implementation. */
+#define XCB_IMPLEMENTATION 17
+
+typedef xcb_request_error_t xcb_implementation_error_t;
+
+typedef enum xcb_window_class_t {
+    XCB_WINDOW_CLASS_COPY_FROM_PARENT = 0,
+    XCB_WINDOW_CLASS_INPUT_OUTPUT = 1,
+    XCB_WINDOW_CLASS_INPUT_ONLY = 2
+} xcb_window_class_t;
+
+typedef enum xcb_cw_t {
+    XCB_CW_BACK_PIXMAP = 1,
+/**< Overrides the default background-pixmap. The background pixmap and window must
+have the same root and same depth. Any size pixmap can be used, although some
+sizes may be faster than others.
+
+If `XCB_BACK_PIXMAP_NONE` is specified, the window has no defined background.
+The server may fill the contents with the previous screen contents or with
+contents of its own choosing.
+
+If `XCB_BACK_PIXMAP_PARENT_RELATIVE` is specified, the parent's background is
+used, but the window must have the same depth as the parent (or a Match error
+results).   The parent's background is tracked, and the current version is
+used each time the window background is required. */
+
+    XCB_CW_BACK_PIXEL = 2,
+/**< Overrides `BackPixmap`. A pixmap of undefined size filled with the specified
+background pixel is used for the background. Range-checking is not performed,
+the background pixel is truncated to the appropriate number of bits. */
+
+    XCB_CW_BORDER_PIXMAP = 4,
+/**< Overrides the default border-pixmap. The border pixmap and window must have the
+same root and the same depth. Any size pixmap can be used, although some sizes
+may be faster than others.
+
+The special value `XCB_COPY_FROM_PARENT` means the parent's border pixmap is
+copied (subsequent changes to the parent's border attribute do not affect the
+child), but the window must have the same depth as the parent. */
+
+    XCB_CW_BORDER_PIXEL = 8,
+/**< Overrides `BorderPixmap`. A pixmap of undefined size filled with the specified
+border pixel is used for the border. Range checking is not performed on the
+border-pixel value, it is truncated to the appropriate number of bits. */
+
+    XCB_CW_BIT_GRAVITY = 16,
+/**< Defines which region of the window should be retained if the window is resized. */
+
+    XCB_CW_WIN_GRAVITY = 32,
+/**< Defines how the window should be repositioned if the parent is resized (see
+`ConfigureWindow`). */
+
+    XCB_CW_BACKING_STORE = 64,
+/**< A backing-store of `WhenMapped` advises the server that maintaining contents of
+obscured regions when the window is mapped would be beneficial. A backing-store
+of `Always` advises the server that maintaining contents even when the window
+is unmapped would be beneficial. In this case, the server may generate an
+exposure event when the window is created. A value of `NotUseful` advises the
+server that maintaining contents is unnecessary, although a server may still
+choose to maintain contents while the window is mapped. Note that if the server
+maintains contents, then the server should maintain complete contents not just
+the region within the parent boundaries, even if the window is larger than its
+parent. While the server maintains contents, exposure events will not normally
+be generated, but the server may stop maintaining contents at any time. */
+
+    XCB_CW_BACKING_PLANES = 128,
+/**< The backing-planes indicates (with bits set to 1) which bit planes of the
+window hold dynamic data that must be preserved in backing-stores and during
+save-unders. */
+
+    XCB_CW_BACKING_PIXEL = 256,
+/**< The backing-pixel specifies what value to use in planes not covered by
+backing-planes. The server is free to save only the specified bit planes in the
+backing-store or save-under and regenerate the remaining planes with the
+specified pixel value. Any bits beyond the specified depth of the window in
+these values are simply ignored. */
+
+    XCB_CW_OVERRIDE_REDIRECT = 512,
+/**< The override-redirect specifies whether map and configure requests on this
+window should override a SubstructureRedirect on the parent, typically to
+inform a window manager not to tamper with the window. */
+
+    XCB_CW_SAVE_UNDER = 1024,
+/**< If 1, the server is advised that when this window is mapped, saving the
+contents of windows it obscures would be beneficial. */
+
+    XCB_CW_EVENT_MASK = 2048,
+/**< The event-mask defines which events the client is interested in for this window
+(or for some event types, inferiors of the window). */
+
+    XCB_CW_DONT_PROPAGATE = 4096,
+/**< The do-not-propagate-mask defines which events should not be propagated to
+ancestor windows when no client has the event type selected in this window. */
+
+    XCB_CW_COLORMAP = 8192,
+/**< The colormap specifies the colormap that best reflects the true colors of the window. Servers
+capable of supporting multiple hardware colormaps may use this information, and window man-
+agers may use it for InstallColormap requests. The colormap must have the same visual type
+and root as the window (or a Match error results). If CopyFromParent is specified, the parent's
+colormap is copied (subsequent changes to the parent's colormap attribute do not affect the child).
+However, the window must have the same visual type as the parent (or a Match error results),
+and the parent must not have a colormap of None (or a Match error results). For an explanation
+of None, see FreeColormap request. The colormap is copied by sharing the colormap object
+between the child and the parent, not by making a complete copy of the colormap contents. */
+
+    XCB_CW_CURSOR = 16384
+/**< If a cursor is specified, it will be used whenever the pointer is in the window. If None is speci-
+fied, the parent's cursor will be used when the pointer is in the window, and any change in the
+parent's cursor will cause an immediate change in the displayed cursor. */
+
+} xcb_cw_t;
+
+typedef enum xcb_back_pixmap_t {
+    XCB_BACK_PIXMAP_NONE = 0,
+    XCB_BACK_PIXMAP_PARENT_RELATIVE = 1
+} xcb_back_pixmap_t;
+
+typedef enum xcb_gravity_t {
+    XCB_GRAVITY_BIT_FORGET = 0,
+    XCB_GRAVITY_WIN_UNMAP = 0,
+    XCB_GRAVITY_NORTH_WEST = 1,
+    XCB_GRAVITY_NORTH = 2,
+    XCB_GRAVITY_NORTH_EAST = 3,
+    XCB_GRAVITY_WEST = 4,
+    XCB_GRAVITY_CENTER = 5,
+    XCB_GRAVITY_EAST = 6,
+    XCB_GRAVITY_SOUTH_WEST = 7,
+    XCB_GRAVITY_SOUTH = 8,
+    XCB_GRAVITY_SOUTH_EAST = 9,
+    XCB_GRAVITY_STATIC = 10
+} xcb_gravity_t;
+
+/**
+ * @brief xcb_create_window_value_list_t
+ **/
+typedef struct xcb_create_window_value_list_t {
+    xcb_pixmap_t   background_pixmap;
+    uint32_t       background_pixel;
+    xcb_pixmap_t   border_pixmap;
+    uint32_t       border_pixel;
+    uint32_t       bit_gravity;
+    uint32_t       win_gravity;
+    uint32_t       backing_store;
+    uint32_t       backing_planes;
+    uint32_t       backing_pixel;
+    xcb_bool32_t   override_redirect;
+    xcb_bool32_t   save_under;
+    uint32_t       event_mask;
+    uint32_t       do_not_propogate_mask;
+    xcb_colormap_t colormap;
+    xcb_cursor_t   cursor;
+} xcb_create_window_value_list_t;
+
+/** Opcode for xcb_create_window. */
+#define XCB_CREATE_WINDOW 1
+
+/**
+ * @brief xcb_create_window_request_t
+ **/
+typedef struct xcb_create_window_request_t {
+    uint8_t        major_opcode;
+    uint8_t        depth;
+    uint16_t       length;
+    xcb_window_t   wid;
+    xcb_window_t   parent;
+    int16_t        x;
+    int16_t        y;
+    uint16_t       width;
+    uint16_t       height;
+    uint16_t       border_width;
+    uint16_t       _class;
+    xcb_visualid_t visual;
+    uint32_t       value_mask;
+} xcb_create_window_request_t;
+
+/**
+ * @brief xcb_change_window_attributes_value_list_t
+ **/
+typedef struct xcb_change_window_attributes_value_list_t {
+    xcb_pixmap_t   background_pixmap;
+    uint32_t       background_pixel;
+    xcb_pixmap_t   border_pixmap;
+    uint32_t       border_pixel;
+    uint32_t       bit_gravity;
+    uint32_t       win_gravity;
+    uint32_t       backing_store;
+    uint32_t       backing_planes;
+    uint32_t       backing_pixel;
+    xcb_bool32_t   override_redirect;
+    xcb_bool32_t   save_under;
+    uint32_t       event_mask;
+    uint32_t       do_not_propogate_mask;
+    xcb_colormap_t colormap;
+    xcb_cursor_t   cursor;
+} xcb_change_window_attributes_value_list_t;
+
+/** Opcode for xcb_change_window_attributes. */
+#define XCB_CHANGE_WINDOW_ATTRIBUTES 2
+
+/**
+ * @brief xcb_change_window_attributes_request_t
+ **/
+typedef struct xcb_change_window_attributes_request_t {
+    uint8_t      major_opcode;
+    uint8_t      pad0;
+    uint16_t     length;
+    xcb_window_t window;
+    uint32_t     value_mask;
+} xcb_change_window_attributes_request_t;
+
+typedef enum xcb_map_state_t {
+    XCB_MAP_STATE_UNMAPPED = 0,
+    XCB_MAP_STATE_UNVIEWABLE = 1,
+    XCB_MAP_STATE_VIEWABLE = 2
+} xcb_map_state_t;
+
+/**
+ * @brief xcb_get_window_attributes_cookie_t
+ **/
+typedef struct xcb_get_window_attributes_cookie_t {
+    unsigned int sequence;
+} xcb_get_window_attributes_cookie_t;
+
+/** Opcode for xcb_get_window_attributes. */
+#define XCB_GET_WINDOW_ATTRIBUTES 3
+
+/**
+ * @brief xcb_get_window_attributes_request_t
+ **/
+typedef struct xcb_get_window_attributes_request_t {
+    uint8_t      major_opcode;
+    uint8_t      pad0;
+    uint16_t     length;
+    xcb_window_t window;
+} xcb_get_window_attributes_request_t;
+
+/**
+ * @brief xcb_get_window_attributes_reply_t
+ **/
+typedef struct xcb_get_window_attributes_reply_t {
+    uint8_t        response_type;
+    uint8_t        backing_store;
+    uint16_t       sequence;
+    uint32_t       length;
+    xcb_visualid_t visual;
+    uint16_t       _class;
+    uint8_t        bit_gravity;
+    uint8_t        win_gravity;
+    uint32_t       backing_planes;
+    uint32_t       backing_pixel;
+    uint8_t        save_under;
+    uint8_t        map_is_installed;
+    uint8_t        map_state;
+    uint8_t        override_redirect;
+    xcb_colormap_t colormap;
+    uint32_t       all_event_masks;
+    uint32_t       your_event_mask;
+    uint16_t       do_not_propagate_mask;
+    uint8_t        pad0[2];
+} xcb_get_window_attributes_reply_t;
+
+/** Opcode for xcb_destroy_window. */
+#define XCB_DESTROY_WINDOW 4
+
+/**
+ * @brief xcb_destroy_window_request_t
+ **/
+typedef struct xcb_destroy_window_request_t {
+    uint8_t      major_opcode;
+    uint8_t      pad0;
+    uint16_t     length;
+    xcb_window_t window;
+} xcb_destroy_window_request_t;
+
+/** Opcode for xcb_destroy_subwindows. */
+#define XCB_DESTROY_SUBWINDOWS 5
+
+/**
+ * @brief xcb_destroy_subwindows_request_t
+ **/
+typedef struct xcb_destroy_subwindows_request_t {
+    uint8_t      major_opcode;
+    uint8_t      pad0;
+    uint16_t     length;
+    xcb_window_t window;
+} xcb_destroy_subwindows_request_t;
+
+typedef enum xcb_set_mode_t {
+    XCB_SET_MODE_INSERT = 0,
+    XCB_SET_MODE_DELETE = 1
+} xcb_set_mode_t;
+
+/** Opcode for xcb_change_save_set. */
+#define XCB_CHANGE_SAVE_SET 6
+
+/**
+ * @brief xcb_change_save_set_request_t
+ **/
+typedef struct xcb_change_save_set_request_t {
+    uint8_t      major_opcode;
+    uint8_t      mode;
+    uint16_t     length;
+    xcb_window_t window;
+} xcb_change_save_set_request_t;
+
+/** Opcode for xcb_reparent_window. */
+#define XCB_REPARENT_WINDOW 7
+
+/**
+ * @brief xcb_reparent_window_request_t
+ **/
+typedef struct xcb_reparent_window_request_t {
+    uint8_t      major_opcode;
+    uint8_t      pad0;
+    uint16_t     length;
+    xcb_window_t window;
+    xcb_window_t parent;
+    int16_t      x;
+    int16_t      y;
+} xcb_reparent_window_request_t;
+
+/** Opcode for xcb_map_window. */
+#define XCB_MAP_WINDOW 8
+
+/**
+ * @brief xcb_map_window_request_t
+ **/
+typedef struct xcb_map_window_request_t {
+    uint8_t      major_opcode;
+    uint8_t      pad0;
+    uint16_t     length;
+    xcb_window_t window;
+} xcb_map_window_request_t;
+
+/** Opcode for xcb_map_subwindows. */
+#define XCB_MAP_SUBWINDOWS 9
+
+/**
+ * @brief xcb_map_subwindows_request_t
+ **/
+typedef struct xcb_map_subwindows_request_t {
+    uint8_t      major_opcode;
+    uint8_t      pad0;
+    uint16_t     length;
+    xcb_window_t window;
+} xcb_map_subwindows_request_t;
+
+/** Opcode for xcb_unmap_window. */
+#define XCB_UNMAP_WINDOW 10
+
+/**
+ * @brief xcb_unmap_window_request_t
+ **/
+typedef struct xcb_unmap_window_request_t {
+    uint8_t      major_opcode;
+    uint8_t      pad0;
+    uint16_t     length;
+    xcb_window_t window;
+} xcb_unmap_window_request_t;
+
+/** Opcode for xcb_unmap_subwindows. */
+#define XCB_UNMAP_SUBWINDOWS 11
+
+/**
+ * @brief xcb_unmap_subwindows_request_t
+ **/
+typedef struct xcb_unmap_subwindows_request_t {
+    uint8_t      major_opcode;
+    uint8_t      pad0;
+    uint16_t     length;
+    xcb_window_t window;
+} xcb_unmap_subwindows_request_t;
+
+typedef enum xcb_config_window_t {
+    XCB_CONFIG_WINDOW_X = 1,
+    XCB_CONFIG_WINDOW_Y = 2,
+    XCB_CONFIG_WINDOW_WIDTH = 4,
+    XCB_CONFIG_WINDOW_HEIGHT = 8,
+    XCB_CONFIG_WINDOW_BORDER_WIDTH = 16,
+    XCB_CONFIG_WINDOW_SIBLING = 32,
+    XCB_CONFIG_WINDOW_STACK_MODE = 64
+} xcb_config_window_t;
+
+typedef enum xcb_stack_mode_t {
+    XCB_STACK_MODE_ABOVE = 0,
+    XCB_STACK_MODE_BELOW = 1,
+    XCB_STACK_MODE_TOP_IF = 2,
+    XCB_STACK_MODE_BOTTOM_IF = 3,
+    XCB_STACK_MODE_OPPOSITE = 4
+} xcb_stack_mode_t;
+
+/**
+ * @brief xcb_configure_window_value_list_t
+ **/
+typedef struct xcb_configure_window_value_list_t {
+    int32_t      x;
+    int32_t      y;
+    uint32_t     width;
+    uint32_t     height;
+    uint32_t     border_width;
+    xcb_window_t sibling;
+    uint32_t     stack_mode;
+} xcb_configure_window_value_list_t;
+
+/** Opcode for xcb_configure_window. */
+#define XCB_CONFIGURE_WINDOW 12
+
+/**
+ * @brief xcb_configure_window_request_t
+ **/
+typedef struct xcb_configure_window_request_t {
+    uint8_t      major_opcode;
+    uint8_t      pad0;
+    uint16_t     length;
+    xcb_window_t window;
+    uint16_t     value_mask;
+    uint8_t      pad1[2];
+} xcb_configure_window_request_t;
+
+typedef enum xcb_circulate_t {
+    XCB_CIRCULATE_RAISE_LOWEST = 0,
+    XCB_CIRCULATE_LOWER_HIGHEST = 1
+} xcb_circulate_t;
+
+/** Opcode for xcb_circulate_window. */
+#define XCB_CIRCULATE_WINDOW 13
+
+/**
+ * @brief xcb_circulate_window_request_t
+ **/
+typedef struct xcb_circulate_window_request_t {
+    uint8_t      major_opcode;
+    uint8_t      direction;
+    uint16_t     length;
+    xcb_window_t window;
+} xcb_circulate_window_request_t;
+
+/**
+ * @brief xcb_get_geometry_cookie_t
+ **/
+typedef struct xcb_get_geometry_cookie_t {
+    unsigned int sequence;
+} xcb_get_geometry_cookie_t;
+
+/** Opcode for xcb_get_geometry. */
+#define XCB_GET_GEOMETRY 14
+
+/**
+ * @brief xcb_get_geometry_request_t
+ **/
+typedef struct xcb_get_geometry_request_t {
+    uint8_t        major_opcode;
+    uint8_t        pad0;
+    uint16_t       length;
+    xcb_drawable_t drawable;
+} xcb_get_geometry_request_t;
+
+/**
+ * @brief xcb_get_geometry_reply_t
+ **/
+typedef struct xcb_get_geometry_reply_t {
+    uint8_t      response_type;
+    uint8_t      depth;
+    uint16_t     sequence;
+    uint32_t     length;
+    xcb_window_t root;
+    int16_t      x;
+    int16_t      y;
+    uint16_t     width;
+    uint16_t     height;
+    uint16_t     border_width;
+    uint8_t      pad0[2];
+} xcb_get_geometry_reply_t;
+
+/**
+ * @brief xcb_query_tree_cookie_t
+ **/
+typedef struct xcb_query_tree_cookie_t {
+    unsigned int sequence;
+} xcb_query_tree_cookie_t;
+
+/** Opcode for xcb_query_tree. */
+#define XCB_QUERY_TREE 15
+
+/**
+ * @brief xcb_query_tree_request_t
+ **/
+typedef struct xcb_query_tree_request_t {
+    uint8_t      major_opcode;
+    uint8_t      pad0;
+    uint16_t     length;
+    xcb_window_t window;
+} xcb_query_tree_request_t;
+
+/**
+ * @brief xcb_query_tree_reply_t
+ **/
+typedef struct xcb_query_tree_reply_t {
+    uint8_t      response_type;
+    uint8_t      pad0;
+    uint16_t     sequence;
+    uint32_t     length;
+    xcb_window_t root;
+    xcb_window_t parent;
+    uint16_t     children_len;
+    uint8_t      pad1[14];
+} xcb_query_tree_reply_t;
+
+/**
+ * @brief xcb_intern_atom_cookie_t
+ **/
+typedef struct xcb_intern_atom_cookie_t {
+    unsigned int sequence;
+} xcb_intern_atom_cookie_t;
+
+/** Opcode for xcb_intern_atom. */
+#define XCB_INTERN_ATOM 16
+
+/**
+ * @brief xcb_intern_atom_request_t
+ **/
+typedef struct xcb_intern_atom_request_t {
+    uint8_t  major_opcode;
+    uint8_t  only_if_exists;
+    uint16_t length;
+    uint16_t name_len;
+    uint8_t  pad0[2];
+} xcb_intern_atom_request_t;
+
+/**
+ * @brief xcb_intern_atom_reply_t
+ **/
+typedef struct xcb_intern_atom_reply_t {
+    uint8_t    response_type;
+    uint8_t    pad0;
+    uint16_t   sequence;
+    uint32_t   length;
+    xcb_atom_t atom;
+} xcb_intern_atom_reply_t;
+
+/**
+ * @brief xcb_get_atom_name_cookie_t
+ **/
+typedef struct xcb_get_atom_name_cookie_t {
+    unsigned int sequence;
+} xcb_get_atom_name_cookie_t;
+
+/** Opcode for xcb_get_atom_name. */
+#define XCB_GET_ATOM_NAME 17
+
+/**
+ * @brief xcb_get_atom_name_request_t
+ **/
+typedef struct xcb_get_atom_name_request_t {
+    uint8_t    major_opcode;
+    uint8_t    pad0;
+    uint16_t   length;
+    xcb_atom_t atom;
+} xcb_get_atom_name_request_t;
+
+/**
+ * @brief xcb_get_atom_name_reply_t
+ **/
+typedef struct xcb_get_atom_name_reply_t {
+    uint8_t  response_type;
+    uint8_t  pad0;
+    uint16_t sequence;
+    uint32_t length;
+    uint16_t name_len;
+    uint8_t  pad1[22];
+} xcb_get_atom_name_reply_t;
+
+typedef enum xcb_prop_mode_t {
+    XCB_PROP_MODE_REPLACE = 0,
+/**< Discard the previous property value and store the new data. */
+
+    XCB_PROP_MODE_PREPEND = 1,
+/**< Insert the new data before the beginning of existing data. The `format` must
+match existing property value. If the property is undefined, it is treated as
+defined with the correct type and format with zero-length data. */
+
+    XCB_PROP_MODE_APPEND = 2
+/**< Insert the new data after the beginning of existing data. The `format` must
+match existing property value. If the property is undefined, it is treated as
+defined with the correct type and format with zero-length data. */
+
+} xcb_prop_mode_t;
+
+/** Opcode for xcb_change_property. */
+#define XCB_CHANGE_PROPERTY 18
+
+/**
+ * @brief xcb_change_property_request_t
+ **/
+typedef struct xcb_change_property_request_t {
+    uint8_t      major_opcode;
+    uint8_t      mode;
+    uint16_t     length;
+    xcb_window_t window;
+    xcb_atom_t   property;
+    xcb_atom_t   type;
+    uint8_t      format;
+    uint8_t      pad0[3];
+    uint32_t     data_len;
+} xcb_change_property_request_t;
+
+/** Opcode for xcb_delete_property. */
+#define XCB_DELETE_PROPERTY 19
+
+/**
+ * @brief xcb_delete_property_request_t
+ **/
+typedef struct xcb_delete_property_request_t {
+    uint8_t      major_opcode;
+    uint8_t      pad0;
+    uint16_t     length;
+    xcb_window_t window;
+    xcb_atom_t   property;
+} xcb_delete_property_request_t;
+
+typedef enum xcb_get_property_type_t {
+    XCB_GET_PROPERTY_TYPE_ANY = 0
+} xcb_get_property_type_t;
+
+/**
+ * @brief xcb_get_property_cookie_t
+ **/
+typedef struct xcb_get_property_cookie_t {
+    unsigned int sequence;
+} xcb_get_property_cookie_t;
+
+/** Opcode for xcb_get_property. */
+#define XCB_GET_PROPERTY 20
+
+/**
+ * @brief xcb_get_property_request_t
+ **/
+typedef struct xcb_get_property_request_t {
+    uint8_t      major_opcode;
+    uint8_t      _delete;
+    uint16_t     length;
+    xcb_window_t window;
+    xcb_atom_t   property;
+    xcb_atom_t   type;
+    uint32_t     long_offset;
+    uint32_t     long_length;
+} xcb_get_property_request_t;
+
+/**
+ * @brief xcb_get_property_reply_t
+ **/
+typedef struct xcb_get_property_reply_t {
+    uint8_t    response_type;
+    uint8_t    format;
+    uint16_t   sequence;
+    uint32_t   length;
+    xcb_atom_t type;
+    uint32_t   bytes_after;
+    uint32_t   value_len;
+    uint8_t    pad0[12];
+} xcb_get_property_reply_t;
+
+/**
+ * @brief xcb_list_properties_cookie_t
+ **/
+typedef struct xcb_list_properties_cookie_t {
+    unsigned int sequence;
+} xcb_list_properties_cookie_t;
+
+/** Opcode for xcb_list_properties. */
+#define XCB_LIST_PROPERTIES 21
+
+/**
+ * @brief xcb_list_properties_request_t
+ **/
+typedef struct xcb_list_properties_request_t {
+    uint8_t      major_opcode;
+    uint8_t      pad0;
+    uint16_t     length;
+    xcb_window_t window;
+} xcb_list_properties_request_t;
+
+/**
+ * @brief xcb_list_properties_reply_t
+ **/
+typedef struct xcb_list_properties_reply_t {
+    uint8_t  response_type;
+    uint8_t  pad0;
+    uint16_t sequence;
+    uint32_t length;
+    uint16_t atoms_len;
+    uint8_t  pad1[22];
+} xcb_list_properties_reply_t;
+
+/** Opcode for xcb_set_selection_owner. */
+#define XCB_SET_SELECTION_OWNER 22
+
+/**
+ * @brief xcb_set_selection_owner_request_t
+ **/
+typedef struct xcb_set_selection_owner_request_t {
+    uint8_t         major_opcode;
+    uint8_t         pad0;
+    uint16_t        length;
+    xcb_window_t    owner;
+    xcb_atom_t      selection;
+    xcb_timestamp_t time;
+} xcb_set_selection_owner_request_t;
+
+/**
+ * @brief xcb_get_selection_owner_cookie_t
+ **/
+typedef struct xcb_get_selection_owner_cookie_t {
+    unsigned int sequence;
+} xcb_get_selection_owner_cookie_t;
+
+/** Opcode for xcb_get_selection_owner. */
+#define XCB_GET_SELECTION_OWNER 23
+
+/**
+ * @brief xcb_get_selection_owner_request_t
+ **/
+typedef struct xcb_get_selection_owner_request_t {
+    uint8_t    major_opcode;
+    uint8_t    pad0;
+    uint16_t   length;
+    xcb_atom_t selection;
+} xcb_get_selection_owner_request_t;
+
+/**
+ * @brief xcb_get_selection_owner_reply_t
+ **/
+typedef struct xcb_get_selection_owner_reply_t {
+    uint8_t      response_type;
+    uint8_t      pad0;
+    uint16_t     sequence;
+    uint32_t     length;
+    xcb_window_t owner;
+} xcb_get_selection_owner_reply_t;
+
+/** Opcode for xcb_convert_selection. */
+#define XCB_CONVERT_SELECTION 24
+
+/**
+ * @brief xcb_convert_selection_request_t
+ **/
+typedef struct xcb_convert_selection_request_t {
+    uint8_t         major_opcode;
+    uint8_t         pad0;
+    uint16_t        length;
+    xcb_window_t    requestor;
+    xcb_atom_t      selection;
+    xcb_atom_t      target;
+    xcb_atom_t      property;
+    xcb_timestamp_t time;
+} xcb_convert_selection_request_t;
+
+typedef enum xcb_send_event_dest_t {
+    XCB_SEND_EVENT_DEST_POINTER_WINDOW = 0,
+    XCB_SEND_EVENT_DEST_ITEM_FOCUS = 1
+} xcb_send_event_dest_t;
+
+/** Opcode for xcb_send_event. */
+#define XCB_SEND_EVENT 25
+
+/**
+ * @brief xcb_send_event_request_t
+ **/
+typedef struct xcb_send_event_request_t {
+    uint8_t      major_opcode;
+    uint8_t      propagate;
+    uint16_t     length;
+    xcb_window_t destination;
+    uint32_t     event_mask;
+    char         event[32];
+} xcb_send_event_request_t;
+
+typedef enum xcb_grab_mode_t {
+    XCB_GRAB_MODE_SYNC = 0,
+/**< The state of the keyboard appears to freeze: No further keyboard events are
+generated by the server until the grabbing client issues a releasing
+`AllowEvents` request or until the keyboard grab is released. */
+
+    XCB_GRAB_MODE_ASYNC = 1
+/**< Keyboard event processing continues normally. */
+
+} xcb_grab_mode_t;
+
+typedef enum xcb_grab_status_t {
+    XCB_GRAB_STATUS_SUCCESS = 0,
+    XCB_GRAB_STATUS_ALREADY_GRABBED = 1,
+    XCB_GRAB_STATUS_INVALID_TIME = 2,
+    XCB_GRAB_STATUS_NOT_VIEWABLE = 3,
+    XCB_GRAB_STATUS_FROZEN = 4
+} xcb_grab_status_t;
+
+typedef enum xcb_cursor_enum_t {
+    XCB_CURSOR_NONE = 0
+} xcb_cursor_enum_t;
+
+/**
+ * @brief xcb_grab_pointer_cookie_t
+ **/
+typedef struct xcb_grab_pointer_cookie_t {
+    unsigned int sequence;
+} xcb_grab_pointer_cookie_t;
+
+/** Opcode for xcb_grab_pointer. */
+#define XCB_GRAB_POINTER 26
+
+/**
+ * @brief xcb_grab_pointer_request_t
+ **/
+typedef struct xcb_grab_pointer_request_t {
+    uint8_t         major_opcode;
+    uint8_t         owner_events;
+    uint16_t        length;
+    xcb_window_t    grab_window;
+    uint16_t        event_mask;
+    uint8_t         pointer_mode;
+    uint8_t         keyboard_mode;
+    xcb_window_t    confine_to;
+    xcb_cursor_t    cursor;
+    xcb_timestamp_t time;
+} xcb_grab_pointer_request_t;
+
+/**
+ * @brief xcb_grab_pointer_reply_t
+ **/
+typedef struct xcb_grab_pointer_reply_t {
+    uint8_t  response_type;
+    uint8_t  status;
+    uint16_t sequence;
+    uint32_t length;
+} xcb_grab_pointer_reply_t;
+
+/** Opcode for xcb_ungrab_pointer. */
+#define XCB_UNGRAB_POINTER 27
+
+/**
+ * @brief xcb_ungrab_pointer_request_t
+ **/
+typedef struct xcb_ungrab_pointer_request_t {
+    uint8_t         major_opcode;
+    uint8_t         pad0;
+    uint16_t        length;
+    xcb_timestamp_t time;
+} xcb_ungrab_pointer_request_t;
+
+typedef enum xcb_button_index_t {
+    XCB_BUTTON_INDEX_ANY = 0,
+/**< Any of the following (or none): */
+
+    XCB_BUTTON_INDEX_1 = 1,
+/**< The left mouse button. */
+
+    XCB_BUTTON_INDEX_2 = 2,
+/**< The right mouse button. */
+
+    XCB_BUTTON_INDEX_3 = 3,
+/**< The middle mouse button. */
+
+    XCB_BUTTON_INDEX_4 = 4,
+/**< Scroll wheel. TODO: direction? */
+
+    XCB_BUTTON_INDEX_5 = 5
+/**< Scroll wheel. TODO: direction? */
+
+} xcb_button_index_t;
+
+/** Opcode for xcb_grab_button. */
+#define XCB_GRAB_BUTTON 28
+
+/**
+ * @brief xcb_grab_button_request_t
+ **/
+typedef struct xcb_grab_button_request_t {
+    uint8_t      major_opcode;
+    uint8_t      owner_events;
+    uint16_t     length;
+    xcb_window_t grab_window;
+    uint16_t     event_mask;
+    uint8_t      pointer_mode;
+    uint8_t      keyboard_mode;
+    xcb_window_t confine_to;
+    xcb_cursor_t cursor;
+    uint8_t      button;
+    uint8_t      pad0;
+    uint16_t     modifiers;
+} xcb_grab_button_request_t;
+
+/** Opcode for xcb_ungrab_button. */
+#define XCB_UNGRAB_BUTTON 29
+
+/**
+ * @brief xcb_ungrab_button_request_t
+ **/
+typedef struct xcb_ungrab_button_request_t {
+    uint8_t      major_opcode;
+    uint8_t      button;
+    uint16_t     length;
+    xcb_window_t grab_window;
+    uint16_t     modifiers;
+    uint8_t      pad0[2];
+} xcb_ungrab_button_request_t;
+
+/** Opcode for xcb_change_active_pointer_grab. */
+#define XCB_CHANGE_ACTIVE_POINTER_GRAB 30
+
+/**
+ * @brief xcb_change_active_pointer_grab_request_t
+ **/
+typedef struct xcb_change_active_pointer_grab_request_t {
+    uint8_t         major_opcode;
+    uint8_t         pad0;
+    uint16_t        length;
+    xcb_cursor_t    cursor;
+    xcb_timestamp_t time;
+    uint16_t        event_mask;
+    uint8_t         pad1[2];
+} xcb_change_active_pointer_grab_request_t;
+
+/**
+ * @brief xcb_grab_keyboard_cookie_t
+ **/
+typedef struct xcb_grab_keyboard_cookie_t {
+    unsigned int sequence;
+} xcb_grab_keyboard_cookie_t;
+
+/** Opcode for xcb_grab_keyboard. */
+#define XCB_GRAB_KEYBOARD 31
+
+/**
+ * @brief xcb_grab_keyboard_request_t
+ **/
+typedef struct xcb_grab_keyboard_request_t {
+    uint8_t         major_opcode;
+    uint8_t         owner_events;
+    uint16_t        length;
+    xcb_window_t    grab_window;
+    xcb_timestamp_t time;
+    uint8_t         pointer_mode;
+    uint8_t         keyboard_mode;
+    uint8_t         pad0[2];
+} xcb_grab_keyboard_request_t;
+
+/**
+ * @brief xcb_grab_keyboard_reply_t
+ **/
+typedef struct xcb_grab_keyboard_reply_t {
+    uint8_t  response_type;
+    uint8_t  status;
+    uint16_t sequence;
+    uint32_t length;
+} xcb_grab_keyboard_reply_t;
+
+/** Opcode for xcb_ungrab_keyboard. */
+#define XCB_UNGRAB_KEYBOARD 32
+
+/**
+ * @brief xcb_ungrab_keyboard_request_t
+ **/
+typedef struct xcb_ungrab_keyboard_request_t {
+    uint8_t         major_opcode;
+    uint8_t         pad0;
+    uint16_t        length;
+    xcb_timestamp_t time;
+} xcb_ungrab_keyboard_request_t;
+
+typedef enum xcb_grab_t {
+    XCB_GRAB_ANY = 0
+} xcb_grab_t;
+
+/** Opcode for xcb_grab_key. */
+#define XCB_GRAB_KEY 33
+
+/**
+ * @brief xcb_grab_key_request_t
+ **/
+typedef struct xcb_grab_key_request_t {
+    uint8_t       major_opcode;
+    uint8_t       owner_events;
+    uint16_t      length;
+    xcb_window_t  grab_window;
+    uint16_t      modifiers;
+    xcb_keycode_t key;
+    uint8_t       pointer_mode;
+    uint8_t       keyboard_mode;
+    uint8_t       pad0[3];
+} xcb_grab_key_request_t;
+
+/** Opcode for xcb_ungrab_key. */
+#define XCB_UNGRAB_KEY 34
+
+/**
+ * @brief xcb_ungrab_key_request_t
+ **/
+typedef struct xcb_ungrab_key_request_t {
+    uint8_t       major_opcode;
+    xcb_keycode_t key;
+    uint16_t      length;
+    xcb_window_t  grab_window;
+    uint16_t      modifiers;
+    uint8_t       pad0[2];
+} xcb_ungrab_key_request_t;
+
+typedef enum xcb_allow_t {
+    XCB_ALLOW_ASYNC_POINTER = 0,
+/**< For AsyncPointer, if the pointer is frozen by the client, pointer event
+processing continues normally. If the pointer is frozen twice by the client on
+behalf of two separate grabs, AsyncPointer thaws for both. AsyncPointer has no
+effect if the pointer is not frozen by the client, but the pointer need not be
+grabbed by the client.
+
+TODO: rewrite this in more understandable terms. */
+
+    XCB_ALLOW_SYNC_POINTER = 1,
+/**< For SyncPointer, if the pointer is frozen and actively grabbed by the client,
+pointer event processing continues normally until the next ButtonPress or
+ButtonRelease event is reported to the client, at which time the pointer again
+appears to freeze. However, if the reported event causes the pointer grab to be
+released, then the pointer does not freeze. SyncPointer has no effect if the
+pointer is not frozen by the client or if the pointer is not grabbed by the
+client. */
+
+    XCB_ALLOW_REPLAY_POINTER = 2,
+/**< For ReplayPointer, if the pointer is actively grabbed by the client and is
+frozen as the result of an event having been sent to the client (either from
+the activation of a GrabButton or from a previous AllowEvents with mode
+SyncPointer but not from a GrabPointer), then the pointer grab is released and
+that event is completely reprocessed, this time ignoring any passive grabs at
+or above (towards the root) the grab-window of the grab just released. The
+request has no effect if the pointer is not grabbed by the client or if the
+pointer is not frozen as the result of an event. */
+
+    XCB_ALLOW_ASYNC_KEYBOARD = 3,
+/**< For AsyncKeyboard, if the keyboard is frozen by the client, keyboard event
+processing continues normally. If the keyboard is frozen twice by the client on
+behalf of two separate grabs, AsyncKeyboard thaws for both. AsyncKeyboard has
+no effect if the keyboard is not frozen by the client, but the keyboard need
+not be grabbed by the client. */
+
+    XCB_ALLOW_SYNC_KEYBOARD = 4,
+/**< For SyncKeyboard, if the keyboard is frozen and actively grabbed by the client,
+keyboard event processing continues normally until the next KeyPress or
+KeyRelease event is reported to the client, at which time the keyboard again
+appears to freeze. However, if the reported event causes the keyboard grab to
+be released, then the keyboard does not freeze. SyncKeyboard has no effect if
+the keyboard is not frozen by the client or if the keyboard is not grabbed by
+the client. */
+
+    XCB_ALLOW_REPLAY_KEYBOARD = 5,
+/**< For ReplayKeyboard, if the keyboard is actively grabbed by the client and is
+frozen as the result of an event having been sent to the client (either from
+the activation of a GrabKey or from a previous AllowEvents with mode
+SyncKeyboard but not from a GrabKeyboard), then the keyboard grab is released
+and that event is completely reprocessed, this time ignoring any passive grabs
+at or above (towards the root) the grab-window of the grab just released. The
+request has no effect if the keyboard is not grabbed by the client or if the
+keyboard is not frozen as the result of an event. */
+
+    XCB_ALLOW_ASYNC_BOTH = 6,
+/**< For AsyncBoth, if the pointer and the keyboard are frozen by the client, event
+processing for both devices continues normally. If a device is frozen twice by
+the client on behalf of two separate grabs, AsyncBoth thaws for both. AsyncBoth
+has no effect unless both pointer and keyboard are frozen by the client. */
+
+    XCB_ALLOW_SYNC_BOTH = 7
+/**< For SyncBoth, if both pointer and keyboard are frozen by the client, event
+processing (for both devices) continues normally until the next ButtonPress,
+ButtonRelease, KeyPress, or KeyRelease event is reported to the client for a
+grabbed device (button event for the pointer, key event for the keyboard), at
+which time the devices again appear to freeze. However, if the reported event
+causes the grab to be released, then the devices do not freeze (but if the
+other device is still grabbed, then a subsequent event for it will still cause
+both devices to freeze). SyncBoth has no effect unless both pointer and
+keyboard are frozen by the client. If the pointer or keyboard is frozen twice
+by the client on behalf of two separate grabs, SyncBoth thaws for both (but a
+subsequent freeze for SyncBoth will only freeze each device once). */
+
+} xcb_allow_t;
+
+/** Opcode for xcb_allow_events. */
+#define XCB_ALLOW_EVENTS 35
+
+/**
+ * @brief xcb_allow_events_request_t
+ **/
+typedef struct xcb_allow_events_request_t {
+    uint8_t         major_opcode;
+    uint8_t         mode;
+    uint16_t        length;
+    xcb_timestamp_t time;
+} xcb_allow_events_request_t;
+
+/** Opcode for xcb_grab_server. */
+#define XCB_GRAB_SERVER 36
+
+/**
+ * @brief xcb_grab_server_request_t
+ **/
+typedef struct xcb_grab_server_request_t {
+    uint8_t  major_opcode;
+    uint8_t  pad0;
+    uint16_t length;
+} xcb_grab_server_request_t;
+
+/** Opcode for xcb_ungrab_server. */
+#define XCB_UNGRAB_SERVER 37
+
+/**
+ * @brief xcb_ungrab_server_request_t
+ **/
+typedef struct xcb_ungrab_server_request_t {
+    uint8_t  major_opcode;
+    uint8_t  pad0;
+    uint16_t length;
+} xcb_ungrab_server_request_t;
+
+/**
+ * @brief xcb_query_pointer_cookie_t
+ **/
+typedef struct xcb_query_pointer_cookie_t {
+    unsigned int sequence;
+} xcb_query_pointer_cookie_t;
+
+/** Opcode for xcb_query_pointer. */
+#define XCB_QUERY_POINTER 38
+
+/**
+ * @brief xcb_query_pointer_request_t
+ **/
+typedef struct xcb_query_pointer_request_t {
+    uint8_t      major_opcode;
+    uint8_t      pad0;
+    uint16_t     length;
+    xcb_window_t window;
+} xcb_query_pointer_request_t;
+
+/**
+ * @brief xcb_query_pointer_reply_t
+ **/
+typedef struct xcb_query_pointer_reply_t {
+    uint8_t      response_type;
+    uint8_t      same_screen;
+    uint16_t     sequence;
+    uint32_t     length;
+    xcb_window_t root;
+    xcb_window_t child;
+    int16_t      root_x;
+    int16_t      root_y;
+    int16_t      win_x;
+    int16_t      win_y;
+    uint16_t     mask;
+    uint8_t      pad0[2];
+} xcb_query_pointer_reply_t;
+
+/**
+ * @brief xcb_timecoord_t
+ **/
+typedef struct xcb_timecoord_t {
+    xcb_timestamp_t time;
+    int16_t         x;
+    int16_t         y;
+} xcb_timecoord_t;
+
+/**
+ * @brief xcb_timecoord_iterator_t
+ **/
+typedef struct xcb_timecoord_iterator_t {
+    xcb_timecoord_t *data;
+    int              rem;
+    int              index;
+} xcb_timecoord_iterator_t;
+
+/**
+ * @brief xcb_get_motion_events_cookie_t
+ **/
+typedef struct xcb_get_motion_events_cookie_t {
+    unsigned int sequence;
+} xcb_get_motion_events_cookie_t;
+
+/** Opcode for xcb_get_motion_events. */
+#define XCB_GET_MOTION_EVENTS 39
+
+/**
+ * @brief xcb_get_motion_events_request_t
+ **/
+typedef struct xcb_get_motion_events_request_t {
+    uint8_t         major_opcode;
+    uint8_t         pad0;
+    uint16_t        length;
+    xcb_window_t    window;
+    xcb_timestamp_t start;
+    xcb_timestamp_t stop;
+} xcb_get_motion_events_request_t;
+
+/**
+ * @brief xcb_get_motion_events_reply_t
+ **/
+typedef struct xcb_get_motion_events_reply_t {
+    uint8_t  response_type;
+    uint8_t  pad0;
+    uint16_t sequence;
+    uint32_t length;
+    uint32_t events_len;
+    uint8_t  pad1[20];
+} xcb_get_motion_events_reply_t;
+
+/**
+ * @brief xcb_translate_coordinates_cookie_t
+ **/
+typedef struct xcb_translate_coordinates_cookie_t {
+    unsigned int sequence;
+} xcb_translate_coordinates_cookie_t;
+
+/** Opcode for xcb_translate_coordinates. */
+#define XCB_TRANSLATE_COORDINATES 40
+
+/**
+ * @brief xcb_translate_coordinates_request_t
+ **/
+typedef struct xcb_translate_coordinates_request_t {
+    uint8_t      major_opcode;
+    uint8_t      pad0;
+    uint16_t     length;
+    xcb_window_t src_window;
+    xcb_window_t dst_window;
+    int16_t      src_x;
+    int16_t      src_y;
+} xcb_translate_coordinates_request_t;
+
+/**
+ * @brief xcb_translate_coordinates_reply_t
+ **/
+typedef struct xcb_translate_coordinates_reply_t {
+    uint8_t      response_type;
+    uint8_t      same_screen;
+    uint16_t     sequence;
+    uint32_t     length;
+    xcb_window_t child;
+    int16_t      dst_x;
+    int16_t      dst_y;
+} xcb_translate_coordinates_reply_t;
+
+/** Opcode for xcb_warp_pointer. */
+#define XCB_WARP_POINTER 41
+
+/**
+ * @brief xcb_warp_pointer_request_t
+ **/
+typedef struct xcb_warp_pointer_request_t {
+    uint8_t      major_opcode;
+    uint8_t      pad0;
+    uint16_t     length;
+    xcb_window_t src_window;
+    xcb_window_t dst_window;
+    int16_t      src_x;
+    int16_t      src_y;
+    uint16_t     src_width;
+    uint16_t     src_height;
+    int16_t      dst_x;
+    int16_t      dst_y;
+} xcb_warp_pointer_request_t;
+
+typedef enum xcb_input_focus_t {
+    XCB_INPUT_FOCUS_NONE = 0,
+/**< The focus reverts to `XCB_NONE`, so no window will have the input focus. */
+
+    XCB_INPUT_FOCUS_POINTER_ROOT = 1,
+/**< The focus reverts to `XCB_POINTER_ROOT` respectively. When the focus reverts,
+FocusIn and FocusOut events are generated, but the last-focus-change time is
+not changed. */
+
+    XCB_INPUT_FOCUS_PARENT = 2,
+/**< The focus reverts to the parent (or closest viewable ancestor) and the new
+revert_to value is `XCB_INPUT_FOCUS_NONE`. */
+
+    XCB_INPUT_FOCUS_FOLLOW_KEYBOARD = 3
+/**< NOT YET DOCUMENTED. Only relevant for the xinput extension. */
+
+} xcb_input_focus_t;
+
+/** Opcode for xcb_set_input_focus. */
+#define XCB_SET_INPUT_FOCUS 42
+
+/**
+ * @brief xcb_set_input_focus_request_t
+ **/
+typedef struct xcb_set_input_focus_request_t {
+    uint8_t         major_opcode;
+    uint8_t         revert_to;
+    uint16_t        length;
+    xcb_window_t    focus;
+    xcb_timestamp_t time;
+} xcb_set_input_focus_request_t;
+
+/**
+ * @brief xcb_get_input_focus_cookie_t
+ **/
+typedef struct xcb_get_input_focus_cookie_t {
+    unsigned int sequence;
+} xcb_get_input_focus_cookie_t;
+
+/** Opcode for xcb_get_input_focus. */
+#define XCB_GET_INPUT_FOCUS 43
+
+/**
+ * @brief xcb_get_input_focus_request_t
+ **/
+typedef struct xcb_get_input_focus_request_t {
+    uint8_t  major_opcode;
+    uint8_t  pad0;
+    uint16_t length;
+} xcb_get_input_focus_request_t;
+
+/**
+ * @brief xcb_get_input_focus_reply_t
+ **/
+typedef struct xcb_get_input_focus_reply_t {
+    uint8_t      response_type;
+    uint8_t      revert_to;
+    uint16_t     sequence;
+    uint32_t     length;
+    xcb_window_t focus;
+} xcb_get_input_focus_reply_t;
+
+/**
+ * @brief xcb_query_keymap_cookie_t
+ **/
+typedef struct xcb_query_keymap_cookie_t {
+    unsigned int sequence;
+} xcb_query_keymap_cookie_t;
+
+/** Opcode for xcb_query_keymap. */
+#define XCB_QUERY_KEYMAP 44
+
+/**
+ * @brief xcb_query_keymap_request_t
+ **/
+typedef struct xcb_query_keymap_request_t {
+    uint8_t  major_opcode;
+    uint8_t  pad0;
+    uint16_t length;
+} xcb_query_keymap_request_t;
+
+/**
+ * @brief xcb_query_keymap_reply_t
+ **/
+typedef struct xcb_query_keymap_reply_t {
+    uint8_t  response_type;
+    uint8_t  pad0;
+    uint16_t sequence;
+    uint32_t length;
+    uint8_t  keys[32];
+} xcb_query_keymap_reply_t;
+
+/** Opcode for xcb_open_font. */
+#define XCB_OPEN_FONT 45
+
+/**
+ * @brief xcb_open_font_request_t
+ **/
+typedef struct xcb_open_font_request_t {
+    uint8_t    major_opcode;
+    uint8_t    pad0;
+    uint16_t   length;
+    xcb_font_t fid;
+    uint16_t   name_len;
+    uint8_t    pad1[2];
+} xcb_open_font_request_t;
+
+/** Opcode for xcb_close_font. */
+#define XCB_CLOSE_FONT 46
+
+/**
+ * @brief xcb_close_font_request_t
+ **/
+typedef struct xcb_close_font_request_t {
+    uint8_t    major_opcode;
+    uint8_t    pad0;
+    uint16_t   length;
+    xcb_font_t font;
+} xcb_close_font_request_t;
+
+typedef enum xcb_font_draw_t {
+    XCB_FONT_DRAW_LEFT_TO_RIGHT = 0,
+    XCB_FONT_DRAW_RIGHT_TO_LEFT = 1
+} xcb_font_draw_t;
+
+/**
+ * @brief xcb_fontprop_t
+ **/
+typedef struct xcb_fontprop_t {
+    xcb_atom_t name;
+    uint32_t   value;
+} xcb_fontprop_t;
+
+/**
+ * @brief xcb_fontprop_iterator_t
+ **/
+typedef struct xcb_fontprop_iterator_t {
+    xcb_fontprop_t *data;
+    int             rem;
+    int             index;
+} xcb_fontprop_iterator_t;
+
+/**
+ * @brief xcb_charinfo_t
+ **/
+typedef struct xcb_charinfo_t {
+    int16_t  left_side_bearing;
+    int16_t  right_side_bearing;
+    int16_t  character_width;
+    int16_t  ascent;
+    int16_t  descent;
+    uint16_t attributes;
+} xcb_charinfo_t;
+
+/**
+ * @brief xcb_charinfo_iterator_t
+ **/
+typedef struct xcb_charinfo_iterator_t {
+    xcb_charinfo_t *data;
+    int             rem;
+    int             index;
+} xcb_charinfo_iterator_t;
+
+/**
+ * @brief xcb_query_font_cookie_t
+ **/
+typedef struct xcb_query_font_cookie_t {
+    unsigned int sequence;
+} xcb_query_font_cookie_t;
+
+/** Opcode for xcb_query_font. */
+#define XCB_QUERY_FONT 47
+
+/**
+ * @brief xcb_query_font_request_t
+ **/
+typedef struct xcb_query_font_request_t {
+    uint8_t        major_opcode;
+    uint8_t        pad0;
+    uint16_t       length;
+    xcb_fontable_t font;
+} xcb_query_font_request_t;
+
+/**
+ * @brief xcb_query_font_reply_t
+ **/
+typedef struct xcb_query_font_reply_t {
+    uint8_t        response_type;
+    uint8_t        pad0;
+    uint16_t       sequence;
+    uint32_t       length;
+    xcb_charinfo_t min_bounds;
+    uint8_t        pad1[4];
+    xcb_charinfo_t max_bounds;
+    uint8_t        pad2[4];
+    uint16_t       min_char_or_byte2;
+    uint16_t       max_char_or_byte2;
+    uint16_t       default_char;
+    uint16_t       properties_len;
+    uint8_t        draw_direction;
+    uint8_t        min_byte1;
+    uint8_t        max_byte1;
+    uint8_t        all_chars_exist;
+    int16_t        font_ascent;
+    int16_t        font_descent;
+    uint32_t       char_infos_len;
+} xcb_query_font_reply_t;
+
+/**
+ * @brief xcb_query_text_extents_cookie_t
+ **/
+typedef struct xcb_query_text_extents_cookie_t {
+    unsigned int sequence;
+} xcb_query_text_extents_cookie_t;
+
+/** Opcode for xcb_query_text_extents. */
+#define XCB_QUERY_TEXT_EXTENTS 48
+
+/**
+ * @brief xcb_query_text_extents_request_t
+ **/
+typedef struct xcb_query_text_extents_request_t {
+    uint8_t        major_opcode;
+    uint8_t        odd_length;
+    uint16_t       length;
+    xcb_fontable_t font;
+} xcb_query_text_extents_request_t;
+
+/**
+ * @brief xcb_query_text_extents_reply_t
+ **/
+typedef struct xcb_query_text_extents_reply_t {
+    uint8_t  response_type;
+    uint8_t  draw_direction;
+    uint16_t sequence;
+    uint32_t length;
+    int16_t  font_ascent;
+    int16_t  font_descent;
+    int16_t  overall_ascent;
+    int16_t  overall_descent;
+    int32_t  overall_width;
+    int32_t  overall_left;
+    int32_t  overall_right;
+} xcb_query_text_extents_reply_t;
+
+/**
+ * @brief xcb_str_t
+ **/
+typedef struct xcb_str_t {
+    uint8_t name_len;
+} xcb_str_t;
+
+/**
+ * @brief xcb_str_iterator_t
+ **/
+typedef struct xcb_str_iterator_t {
+    xcb_str_t *data;
+    int        rem;
+    int        index;
+} xcb_str_iterator_t;
+
+/**
+ * @brief xcb_list_fonts_cookie_t
+ **/
+typedef struct xcb_list_fonts_cookie_t {
+    unsigned int sequence;
+} xcb_list_fonts_cookie_t;
+
+/** Opcode for xcb_list_fonts. */
+#define XCB_LIST_FONTS 49
+
+/**
+ * @brief xcb_list_fonts_request_t
+ **/
+typedef struct xcb_list_fonts_request_t {
+    uint8_t  major_opcode;
+    uint8_t  pad0;
+    uint16_t length;
+    uint16_t max_names;
+    uint16_t pattern_len;
+} xcb_list_fonts_request_t;
+
+/**
+ * @brief xcb_list_fonts_reply_t
+ **/
+typedef struct xcb_list_fonts_reply_t {
+    uint8_t  response_type;
+    uint8_t  pad0;
+    uint16_t sequence;
+    uint32_t length;
+    uint16_t names_len;
+    uint8_t  pad1[22];
+} xcb_list_fonts_reply_t;
+
+/**
+ * @brief xcb_list_fonts_with_info_cookie_t
+ **/
+typedef struct xcb_list_fonts_with_info_cookie_t {
+    unsigned int sequence;
+} xcb_list_fonts_with_info_cookie_t;
+
+/** Opcode for xcb_list_fonts_with_info. */
+#define XCB_LIST_FONTS_WITH_INFO 50
+
+/**
+ * @brief xcb_list_fonts_with_info_request_t
+ **/
+typedef struct xcb_list_fonts_with_info_request_t {
+    uint8_t  major_opcode;
+    uint8_t  pad0;
+    uint16_t length;
+    uint16_t max_names;
+    uint16_t pattern_len;
+} xcb_list_fonts_with_info_request_t;
+
+/**
+ * @brief xcb_list_fonts_with_info_reply_t
+ **/
+typedef struct xcb_list_fonts_with_info_reply_t {
+    uint8_t        response_type;
+    uint8_t        name_len;
+    uint16_t       sequence;
+    uint32_t       length;
+    xcb_charinfo_t min_bounds;
+    uint8_t        pad0[4];
+    xcb_charinfo_t max_bounds;
+    uint8_t        pad1[4];
+    uint16_t       min_char_or_byte2;
+    uint16_t       max_char_or_byte2;
+    uint16_t       default_char;
+    uint16_t       properties_len;
+    uint8_t        draw_direction;
+    uint8_t        min_byte1;
+    uint8_t        max_byte1;
+    uint8_t        all_chars_exist;
+    int16_t        font_ascent;
+    int16_t        font_descent;
+    uint32_t       replies_hint;
+} xcb_list_fonts_with_info_reply_t;
+
+/** Opcode for xcb_set_font_path. */
+#define XCB_SET_FONT_PATH 51
+
+/**
+ * @brief xcb_set_font_path_request_t
+ **/
+typedef struct xcb_set_font_path_request_t {
+    uint8_t  major_opcode;
+    uint8_t  pad0;
+    uint16_t length;
+    uint16_t font_qty;
+    uint8_t  pad1[2];
+} xcb_set_font_path_request_t;
+
+/**
+ * @brief xcb_get_font_path_cookie_t
+ **/
+typedef struct xcb_get_font_path_cookie_t {
+    unsigned int sequence;
+} xcb_get_font_path_cookie_t;
+
+/** Opcode for xcb_get_font_path. */
+#define XCB_GET_FONT_PATH 52
+
+/**
+ * @brief xcb_get_font_path_request_t
+ **/
+typedef struct xcb_get_font_path_request_t {
+    uint8_t  major_opcode;
+    uint8_t  pad0;
+    uint16_t length;
+} xcb_get_font_path_request_t;
+
+/**
+ * @brief xcb_get_font_path_reply_t
+ **/
+typedef struct xcb_get_font_path_reply_t {
+    uint8_t  response_type;
+    uint8_t  pad0;
+    uint16_t sequence;
+    uint32_t length;
+    uint16_t path_len;
+    uint8_t  pad1[22];
+} xcb_get_font_path_reply_t;
+
+/** Opcode for xcb_create_pixmap. */
+#define XCB_CREATE_PIXMAP 53
+
+/**
+ * @brief xcb_create_pixmap_request_t
+ **/
+typedef struct xcb_create_pixmap_request_t {
+    uint8_t        major_opcode;
+    uint8_t        depth;
+    uint16_t       length;
+    xcb_pixmap_t   pid;
+    xcb_drawable_t drawable;
+    uint16_t       width;
+    uint16_t       height;
+} xcb_create_pixmap_request_t;
+
+/** Opcode for xcb_free_pixmap. */
+#define XCB_FREE_PIXMAP 54
+
+/**
+ * @brief xcb_free_pixmap_request_t
+ **/
+typedef struct xcb_free_pixmap_request_t {
+    uint8_t      major_opcode;
+    uint8_t      pad0;
+    uint16_t     length;
+    xcb_pixmap_t pixmap;
+} xcb_free_pixmap_request_t;
+
+typedef enum xcb_gc_t {
+    XCB_GC_FUNCTION = 1,
+/**< TODO: Refer to GX */
+
+    XCB_GC_PLANE_MASK = 2,
+/**< In graphics operations, given a source and destination pixel, the result is
+computed bitwise on corresponding bits of the pixels; that is, a Boolean
+operation is performed in each bit plane. The plane-mask restricts the
+operation to a subset of planes, so the result is:
+
+        ((src FUNC dst) AND plane-mask) OR (dst AND (NOT plane-mask)) */
+
+    XCB_GC_FOREGROUND = 4,
+/**< Foreground colorpixel. */
+
+    XCB_GC_BACKGROUND = 8,
+/**< Background colorpixel. */
+
+    XCB_GC_LINE_WIDTH = 16,
+/**< The line-width is measured in pixels and can be greater than or equal to one, a wide line, or the
+special value zero, a thin line. */
+
+    XCB_GC_LINE_STYLE = 32,
+/**< The line-style defines which sections of a line are drawn:
+Solid                The full path of the line is drawn.
+DoubleDash           The full path of the line is drawn, but the even dashes are filled differently
+                     than the odd dashes (see fill-style), with Butt cap-style used where even and
+                     odd dashes meet.
+OnOffDash            Only the even dashes are drawn, and cap-style applies to all internal ends of
+                     the individual dashes (except NotLast is treated as Butt). */
+
+    XCB_GC_CAP_STYLE = 64,
+/**< The cap-style defines how the endpoints of a path are drawn:
+NotLast    The result is equivalent to Butt, except that for a line-width of zero the final
+           endpoint is not drawn.
+Butt       The result is square at the endpoint (perpendicular to the slope of the line)
+           with no projection beyond.
+Round      The result is a circular arc with its diameter equal to the line-width, centered
+           on the endpoint; it is equivalent to Butt for line-width zero.
+Projecting The result is square at the end, but the path continues beyond the endpoint for
+           a distance equal to half the line-width; it is equivalent to Butt for line-width
+           zero. */
+
+    XCB_GC_JOIN_STYLE = 128,
+/**< The join-style defines how corners are drawn for wide lines:
+Miter               The outer edges of the two lines extend to meet at an angle. However, if the
+                    angle is less than 11 degrees, a Bevel join-style is used instead.
+Round               The result is a circular arc with a diameter equal to the line-width, centered
+                    on the joinpoint.
+Bevel               The result is Butt endpoint styles, and then the triangular notch is filled. */
+
+    XCB_GC_FILL_STYLE = 256,
+/**< The fill-style defines the contents of the source for line, text, and fill requests. For all text and fill
+requests (for example, PolyText8, PolyText16, PolyFillRectangle, FillPoly, and PolyFillArc)
+as well as for line requests with line-style Solid, (for example, PolyLine, PolySegment,
+PolyRectangle, PolyArc) and for the even dashes for line requests with line-style OnOffDash
+or DoubleDash:
+Solid                     Foreground
+Tiled                     Tile
+OpaqueStippled            A tile with the same width and height as stipple but with background
+                          everywhere stipple has a zero and with foreground everywhere stipple
+                          has a one
+Stippled                  Foreground masked by stipple
+For the odd dashes for line requests with line-style DoubleDash:
+Solid                     Background
+Tiled                     Same as for even dashes
+OpaqueStippled            Same as for even dashes
+Stippled                  Background masked by stipple */
+
+    XCB_GC_FILL_RULE = 512,
+/**<  */
+
+    XCB_GC_TILE = 1024,
+/**< The tile/stipple represents an infinite two-dimensional plane with the tile/stipple replicated in all
+dimensions. When that plane is superimposed on the drawable for use in a graphics operation,
+the upper-left corner of some instance of the tile/stipple is at the coordinates within the drawable
+specified by the tile/stipple origin. The tile/stipple and clip origins are interpreted relative to the
+origin of whatever destination drawable is specified in a graphics request.
+The tile pixmap must have the same root and depth as the gcontext (or a Match error results).
+The stipple pixmap must have depth one and must have the same root as the gcontext (or a
+Match error results). For fill-style Stippled (but not fill-style
+OpaqueStippled), the stipple pattern is tiled in a single plane and acts as an
+additional clip mask to be ANDed with the clip-mask.
+Any size pixmap can be used for tiling or stippling, although some sizes may be faster to use than
+others. */
+
+    XCB_GC_STIPPLE = 2048,
+/**< The tile/stipple represents an infinite two-dimensional plane with the tile/stipple replicated in all
+dimensions. When that plane is superimposed on the drawable for use in a graphics operation,
+the upper-left corner of some instance of the tile/stipple is at the coordinates within the drawable
+specified by the tile/stipple origin. The tile/stipple and clip origins are interpreted relative to the
+origin of whatever destination drawable is specified in a graphics request.
+The tile pixmap must have the same root and depth as the gcontext (or a Match error results).
+The stipple pixmap must have depth one and must have the same root as the gcontext (or a
+Match error results). For fill-style Stippled (but not fill-style
+OpaqueStippled), the stipple pattern is tiled in a single plane and acts as an
+additional clip mask to be ANDed with the clip-mask.
+Any size pixmap can be used for tiling or stippling, although some sizes may be faster to use than
+others. */
+
+    XCB_GC_TILE_STIPPLE_ORIGIN_X = 4096,
+/**< TODO */
+
+    XCB_GC_TILE_STIPPLE_ORIGIN_Y = 8192,
+/**< TODO */
+
+    XCB_GC_FONT = 16384,
+/**< Which font to use for the `ImageText8` and `ImageText16` requests. */
+
+    XCB_GC_SUBWINDOW_MODE = 32768,
+/**< For ClipByChildren, both source and destination windows are additionally
+clipped by all viewable InputOutput children. For IncludeInferiors, neither
+source nor destination window is
+clipped by inferiors. This will result in including subwindow contents in the source and drawing
+through subwindow boundaries of the destination. The use of IncludeInferiors with a source or
+destination window of one depth with mapped inferiors of differing depth is not illegal, but the
+semantics is undefined by the core protocol. */
+
+    XCB_GC_GRAPHICS_EXPOSURES = 65536,
+/**< Whether ExposureEvents should be generated (1) or not (0).
+
+The default is 1. */
+
+    XCB_GC_CLIP_ORIGIN_X = 131072,
+/**< TODO */
+
+    XCB_GC_CLIP_ORIGIN_Y = 262144,
+/**< TODO */
+
+    XCB_GC_CLIP_MASK = 524288,
+/**< The clip-mask restricts writes to the destination drawable. Only pixels where the clip-mask has
+bits set to 1 are drawn. Pixels are not drawn outside the area covered by the clip-mask or where
+the clip-mask has bits set to 0. The clip-mask affects all graphics requests, but it does not clip
+sources. The clip-mask origin is interpreted relative to the origin of whatever destination drawable is specified in a graphics request. If a pixmap is specified as the clip-mask, it must have
+depth 1 and have the same root as the gcontext (or a Match error results). If clip-mask is None,
+then pixels are always drawn, regardless of the clip origin. The clip-mask can also be set with the
+SetClipRectangles request. */
+
+    XCB_GC_DASH_OFFSET = 1048576,
+/**< TODO */
+
+    XCB_GC_DASH_LIST = 2097152,
+/**< TODO */
+
+    XCB_GC_ARC_MODE = 4194304
+/**< TODO */
+
+} xcb_gc_t;
+
+typedef enum xcb_gx_t {
+    XCB_GX_CLEAR = 0,
+    XCB_GX_AND = 1,
+    XCB_GX_AND_REVERSE = 2,
+    XCB_GX_COPY = 3,
+    XCB_GX_AND_INVERTED = 4,
+    XCB_GX_NOOP = 5,
+    XCB_GX_XOR = 6,
+    XCB_GX_OR = 7,
+    XCB_GX_NOR = 8,
+    XCB_GX_EQUIV = 9,
+    XCB_GX_INVERT = 10,
+    XCB_GX_OR_REVERSE = 11,
+    XCB_GX_COPY_INVERTED = 12,
+    XCB_GX_OR_INVERTED = 13,
+    XCB_GX_NAND = 14,
+    XCB_GX_SET = 15
+} xcb_gx_t;
+
+typedef enum xcb_line_style_t {
+    XCB_LINE_STYLE_SOLID = 0,
+    XCB_LINE_STYLE_ON_OFF_DASH = 1,
+    XCB_LINE_STYLE_DOUBLE_DASH = 2
+} xcb_line_style_t;
+
+typedef enum xcb_cap_style_t {
+    XCB_CAP_STYLE_NOT_LAST = 0,
+    XCB_CAP_STYLE_BUTT = 1,
+    XCB_CAP_STYLE_ROUND = 2,
+    XCB_CAP_STYLE_PROJECTING = 3
+} xcb_cap_style_t;
+
+typedef enum xcb_join_style_t {
+    XCB_JOIN_STYLE_MITER = 0,
+    XCB_JOIN_STYLE_ROUND = 1,
+    XCB_JOIN_STYLE_BEVEL = 2
+} xcb_join_style_t;
+
+typedef enum xcb_fill_style_t {
+    XCB_FILL_STYLE_SOLID = 0,
+    XCB_FILL_STYLE_TILED = 1,
+    XCB_FILL_STYLE_STIPPLED = 2,
+    XCB_FILL_STYLE_OPAQUE_STIPPLED = 3
+} xcb_fill_style_t;
+
+typedef enum xcb_fill_rule_t {
+    XCB_FILL_RULE_EVEN_ODD = 0,
+    XCB_FILL_RULE_WINDING = 1
+} xcb_fill_rule_t;
+
+typedef enum xcb_subwindow_mode_t {
+    XCB_SUBWINDOW_MODE_CLIP_BY_CHILDREN = 0,
+    XCB_SUBWINDOW_MODE_INCLUDE_INFERIORS = 1
+} xcb_subwindow_mode_t;
+
+typedef enum xcb_arc_mode_t {
+    XCB_ARC_MODE_CHORD = 0,
+    XCB_ARC_MODE_PIE_SLICE = 1
+} xcb_arc_mode_t;
+
+/**
+ * @brief xcb_create_gc_value_list_t
+ **/
+typedef struct xcb_create_gc_value_list_t {
+    uint32_t     function;
+    uint32_t     plane_mask;
+    uint32_t     foreground;
+    uint32_t     background;
+    uint32_t     line_width;
+    uint32_t     line_style;
+    uint32_t     cap_style;
+    uint32_t     join_style;
+    uint32_t     fill_style;
+    uint32_t     fill_rule;
+    xcb_pixmap_t tile;
+    xcb_pixmap_t stipple;
+    int32_t      tile_stipple_x_origin;
+    int32_t      tile_stipple_y_origin;
+    xcb_font_t   font;
+    uint32_t     subwindow_mode;
+    xcb_bool32_t graphics_exposures;
+    int32_t      clip_x_origin;
+    int32_t      clip_y_origin;
+    xcb_pixmap_t clip_mask;
+    uint32_t     dash_offset;
+    uint32_t     dashes;
+    uint32_t     arc_mode;
+} xcb_create_gc_value_list_t;
+
+/** Opcode for xcb_create_gc. */
+#define XCB_CREATE_GC 55
+
+/**
+ * @brief xcb_create_gc_request_t
+ **/
+typedef struct xcb_create_gc_request_t {
+    uint8_t        major_opcode;
+    uint8_t        pad0;
+    uint16_t       length;
+    xcb_gcontext_t cid;
+    xcb_drawable_t drawable;
+    uint32_t       value_mask;
+} xcb_create_gc_request_t;
+
+/**
+ * @brief xcb_change_gc_value_list_t
+ **/
+typedef struct xcb_change_gc_value_list_t {
+    uint32_t     function;
+    uint32_t     plane_mask;
+    uint32_t     foreground;
+    uint32_t     background;
+    uint32_t     line_width;
+    uint32_t     line_style;
+    uint32_t     cap_style;
+    uint32_t     join_style;
+    uint32_t     fill_style;
+    uint32_t     fill_rule;
+    xcb_pixmap_t tile;
+    xcb_pixmap_t stipple;
+    int32_t      tile_stipple_x_origin;
+    int32_t      tile_stipple_y_origin;
+    xcb_font_t   font;
+    uint32_t     subwindow_mode;
+    xcb_bool32_t graphics_exposures;
+    int32_t      clip_x_origin;
+    int32_t      clip_y_origin;
+    xcb_pixmap_t clip_mask;
+    uint32_t     dash_offset;
+    uint32_t     dashes;
+    uint32_t     arc_mode;
+} xcb_change_gc_value_list_t;
+
+/** Opcode for xcb_change_gc. */
+#define XCB_CHANGE_GC 56
+
+/**
+ * @brief xcb_change_gc_request_t
+ **/
+typedef struct xcb_change_gc_request_t {
+    uint8_t        major_opcode;
+    uint8_t        pad0;
+    uint16_t       length;
+    xcb_gcontext_t gc;
+    uint32_t       value_mask;
+} xcb_change_gc_request_t;
+
+/** Opcode for xcb_copy_gc. */
+#define XCB_COPY_GC 57
+
+/**
+ * @brief xcb_copy_gc_request_t
+ **/
+typedef struct xcb_copy_gc_request_t {
+    uint8_t        major_opcode;
+    uint8_t        pad0;
+    uint16_t       length;
+    xcb_gcontext_t src_gc;
+    xcb_gcontext_t dst_gc;
+    uint32_t       value_mask;
+} xcb_copy_gc_request_t;
+
+/** Opcode for xcb_set_dashes. */
+#define XCB_SET_DASHES 58
+
+/**
+ * @brief xcb_set_dashes_request_t
+ **/
+typedef struct xcb_set_dashes_request_t {
+    uint8_t        major_opcode;
+    uint8_t        pad0;
+    uint16_t       length;
+    xcb_gcontext_t gc;
+    uint16_t       dash_offset;
+    uint16_t       dashes_len;
+} xcb_set_dashes_request_t;
+
+typedef enum xcb_clip_ordering_t {
+    XCB_CLIP_ORDERING_UNSORTED = 0,
+    XCB_CLIP_ORDERING_Y_SORTED = 1,
+    XCB_CLIP_ORDERING_YX_SORTED = 2,
+    XCB_CLIP_ORDERING_YX_BANDED = 3
+} xcb_clip_ordering_t;
+
+/** Opcode for xcb_set_clip_rectangles. */
+#define XCB_SET_CLIP_RECTANGLES 59
+
+/**
+ * @brief xcb_set_clip_rectangles_request_t
+ **/
+typedef struct xcb_set_clip_rectangles_request_t {
+    uint8_t        major_opcode;
+    uint8_t        ordering;
+    uint16_t       length;
+    xcb_gcontext_t gc;
+    int16_t        clip_x_origin;
+    int16_t        clip_y_origin;
+} xcb_set_clip_rectangles_request_t;
+
+/** Opcode for xcb_free_gc. */
+#define XCB_FREE_GC 60
+
+/**
+ * @brief xcb_free_gc_request_t
+ **/
+typedef struct xcb_free_gc_request_t {
+    uint8_t        major_opcode;
+    uint8_t        pad0;
+    uint16_t       length;
+    xcb_gcontext_t gc;
+} xcb_free_gc_request_t;
+
+/** Opcode for xcb_clear_area. */
+#define XCB_CLEAR_AREA 61
+
+/**
+ * @brief xcb_clear_area_request_t
+ **/
+typedef struct xcb_clear_area_request_t {
+    uint8_t      major_opcode;
+    uint8_t      exposures;
+    uint16_t     length;
+    xcb_window_t window;
+    int16_t      x;
+    int16_t      y;
+    uint16_t     width;
+    uint16_t     height;
+} xcb_clear_area_request_t;
+
+/** Opcode for xcb_copy_area. */
+#define XCB_COPY_AREA 62
+
+/**
+ * @brief xcb_copy_area_request_t
+ **/
+typedef struct xcb_copy_area_request_t {
+    uint8_t        major_opcode;
+    uint8_t        pad0;
+    uint16_t       length;
+    xcb_drawable_t src_drawable;
+    xcb_drawable_t dst_drawable;
+    xcb_gcontext_t gc;
+    int16_t        src_x;
+    int16_t        src_y;
+    int16_t        dst_x;
+    int16_t        dst_y;
+    uint16_t       width;
+    uint16_t       height;
+} xcb_copy_area_request_t;
+
+/** Opcode for xcb_copy_plane. */
+#define XCB_COPY_PLANE 63
+
+/**
+ * @brief xcb_copy_plane_request_t
+ **/
+typedef struct xcb_copy_plane_request_t {
+    uint8_t        major_opcode;
+    uint8_t        pad0;
+    uint16_t       length;
+    xcb_drawable_t src_drawable;
+    xcb_drawable_t dst_drawable;
+    xcb_gcontext_t gc;
+    int16_t        src_x;
+    int16_t        src_y;
+    int16_t        dst_x;
+    int16_t        dst_y;
+    uint16_t       width;
+    uint16_t       height;
+    uint32_t       bit_plane;
+} xcb_copy_plane_request_t;
+
+typedef enum xcb_coord_mode_t {
+    XCB_COORD_MODE_ORIGIN = 0,
+/**< Treats all coordinates as relative to the origin. */
+
+    XCB_COORD_MODE_PREVIOUS = 1
+/**< Treats all coordinates after the first as relative to the previous coordinate. */
+
+} xcb_coord_mode_t;
+
+/** Opcode for xcb_poly_point. */
+#define XCB_POLY_POINT 64
+
+/**
+ * @brief xcb_poly_point_request_t
+ **/
+typedef struct xcb_poly_point_request_t {
+    uint8_t        major_opcode;
+    uint8_t        coordinate_mode;
+    uint16_t       length;
+    xcb_drawable_t drawable;
+    xcb_gcontext_t gc;
+} xcb_poly_point_request_t;
+
+/** Opcode for xcb_poly_line. */
+#define XCB_POLY_LINE 65
+
+/**
+ * @brief xcb_poly_line_request_t
+ **/
+typedef struct xcb_poly_line_request_t {
+    uint8_t        major_opcode;
+    uint8_t        coordinate_mode;
+    uint16_t       length;
+    xcb_drawable_t drawable;
+    xcb_gcontext_t gc;
+} xcb_poly_line_request_t;
+
+/**
+ * @brief xcb_segment_t
+ **/
+typedef struct xcb_segment_t {
+    int16_t x1;
+    int16_t y1;
+    int16_t x2;
+    int16_t y2;
+} xcb_segment_t;
+
+/**
+ * @brief xcb_segment_iterator_t
+ **/
+typedef struct xcb_segment_iterator_t {
+    xcb_segment_t *data;
+    int            rem;
+    int            index;
+} xcb_segment_iterator_t;
+
+/** Opcode for xcb_poly_segment. */
+#define XCB_POLY_SEGMENT 66
+
+/**
+ * @brief xcb_poly_segment_request_t
+ **/
+typedef struct xcb_poly_segment_request_t {
+    uint8_t        major_opcode;
+    uint8_t        pad0;
+    uint16_t       length;
+    xcb_drawable_t drawable;
+    xcb_gcontext_t gc;
+} xcb_poly_segment_request_t;
+
+/** Opcode for xcb_poly_rectangle. */
+#define XCB_POLY_RECTANGLE 67
+
+/**
+ * @brief xcb_poly_rectangle_request_t
+ **/
+typedef struct xcb_poly_rectangle_request_t {
+    uint8_t        major_opcode;
+    uint8_t        pad0;
+    uint16_t       length;
+    xcb_drawable_t drawable;
+    xcb_gcontext_t gc;
+} xcb_poly_rectangle_request_t;
+
+/** Opcode for xcb_poly_arc. */
+#define XCB_POLY_ARC 68
+
+/**
+ * @brief xcb_poly_arc_request_t
+ **/
+typedef struct xcb_poly_arc_request_t {
+    uint8_t        major_opcode;
+    uint8_t        pad0;
+    uint16_t       length;
+    xcb_drawable_t drawable;
+    xcb_gcontext_t gc;
+} xcb_poly_arc_request_t;
+
+typedef enum xcb_poly_shape_t {
+    XCB_POLY_SHAPE_COMPLEX = 0,
+    XCB_POLY_SHAPE_NONCONVEX = 1,
+    XCB_POLY_SHAPE_CONVEX = 2
+} xcb_poly_shape_t;
+
+/** Opcode for xcb_fill_poly. */
+#define XCB_FILL_POLY 69
+
+/**
+ * @brief xcb_fill_poly_request_t
+ **/
+typedef struct xcb_fill_poly_request_t {
+    uint8_t        major_opcode;
+    uint8_t        pad0;
+    uint16_t       length;
+    xcb_drawable_t drawable;
+    xcb_gcontext_t gc;
+    uint8_t        shape;
+    uint8_t        coordinate_mode;
+    uint8_t        pad1[2];
+} xcb_fill_poly_request_t;
+
+/** Opcode for xcb_poly_fill_rectangle. */
+#define XCB_POLY_FILL_RECTANGLE 70
+
+/**
+ * @brief xcb_poly_fill_rectangle_request_t
+ **/
+typedef struct xcb_poly_fill_rectangle_request_t {
+    uint8_t        major_opcode;
+    uint8_t        pad0;
+    uint16_t       length;
+    xcb_drawable_t drawable;
+    xcb_gcontext_t gc;
+} xcb_poly_fill_rectangle_request_t;
+
+/** Opcode for xcb_poly_fill_arc. */
+#define XCB_POLY_FILL_ARC 71
+
+/**
+ * @brief xcb_poly_fill_arc_request_t
+ **/
+typedef struct xcb_poly_fill_arc_request_t {
+    uint8_t        major_opcode;
+    uint8_t        pad0;
+    uint16_t       length;
+    xcb_drawable_t drawable;
+    xcb_gcontext_t gc;
+} xcb_poly_fill_arc_request_t;
+
+typedef enum xcb_image_format_t {
+    XCB_IMAGE_FORMAT_XY_BITMAP = 0,
+    XCB_IMAGE_FORMAT_XY_PIXMAP = 1,
+    XCB_IMAGE_FORMAT_Z_PIXMAP = 2
+} xcb_image_format_t;
+
+/** Opcode for xcb_put_image. */
+#define XCB_PUT_IMAGE 72
+
+/**
+ * @brief xcb_put_image_request_t
+ **/
+typedef struct xcb_put_image_request_t {
+    uint8_t        major_opcode;
+    uint8_t        format;
+    uint16_t       length;
+    xcb_drawable_t drawable;
+    xcb_gcontext_t gc;
+    uint16_t       width;
+    uint16_t       height;
+    int16_t        dst_x;
+    int16_t        dst_y;
+    uint8_t        left_pad;
+    uint8_t        depth;
+    uint8_t        pad0[2];
+} xcb_put_image_request_t;
+
+/**
+ * @brief xcb_get_image_cookie_t
+ **/
+typedef struct xcb_get_image_cookie_t {
+    unsigned int sequence;
+} xcb_get_image_cookie_t;
+
+/** Opcode for xcb_get_image. */
+#define XCB_GET_IMAGE 73
+
+/**
+ * @brief xcb_get_image_request_t
+ **/
+typedef struct xcb_get_image_request_t {
+    uint8_t        major_opcode;
+    uint8_t        format;
+    uint16_t       length;
+    xcb_drawable_t drawable;
+    int16_t        x;
+    int16_t        y;
+    uint16_t       width;
+    uint16_t       height;
+    uint32_t       plane_mask;
+} xcb_get_image_request_t;
+
+/**
+ * @brief xcb_get_image_reply_t
+ **/
+typedef struct xcb_get_image_reply_t {
+    uint8_t        response_type;
+    uint8_t        depth;
+    uint16_t       sequence;
+    uint32_t       length;
+    xcb_visualid_t visual;
+    uint8_t        pad0[20];
+} xcb_get_image_reply_t;
+
+/** Opcode for xcb_poly_text_8. */
+#define XCB_POLY_TEXT_8 74
+
+/**
+ * @brief xcb_poly_text_8_request_t
+ **/
+typedef struct xcb_poly_text_8_request_t {
+    uint8_t        major_opcode;
+    uint8_t        pad0;
+    uint16_t       length;
+    xcb_drawable_t drawable;
+    xcb_gcontext_t gc;
+    int16_t        x;
+    int16_t        y;
+} xcb_poly_text_8_request_t;
+
+/** Opcode for xcb_poly_text_16. */
+#define XCB_POLY_TEXT_16 75
+
+/**
+ * @brief xcb_poly_text_16_request_t
+ **/
+typedef struct xcb_poly_text_16_request_t {
+    uint8_t        major_opcode;
+    uint8_t        pad0;
+    uint16_t       length;
+    xcb_drawable_t drawable;
+    xcb_gcontext_t gc;
+    int16_t        x;
+    int16_t        y;
+} xcb_poly_text_16_request_t;
+
+/** Opcode for xcb_image_text_8. */
+#define XCB_IMAGE_TEXT_8 76
+
+/**
+ * @brief xcb_image_text_8_request_t
+ **/
+typedef struct xcb_image_text_8_request_t {
+    uint8_t        major_opcode;
+    uint8_t        string_len;
+    uint16_t       length;
+    xcb_drawable_t drawable;
+    xcb_gcontext_t gc;
+    int16_t        x;
+    int16_t        y;
+} xcb_image_text_8_request_t;
+
+/** Opcode for xcb_image_text_16. */
+#define XCB_IMAGE_TEXT_16 77
+
+/**
+ * @brief xcb_image_text_16_request_t
+ **/
+typedef struct xcb_image_text_16_request_t {
+    uint8_t        major_opcode;
+    uint8_t        string_len;
+    uint16_t       length;
+    xcb_drawable_t drawable;
+    xcb_gcontext_t gc;
+    int16_t        x;
+    int16_t        y;
+} xcb_image_text_16_request_t;
+
+typedef enum xcb_colormap_alloc_t {
+    XCB_COLORMAP_ALLOC_NONE = 0,
+    XCB_COLORMAP_ALLOC_ALL = 1
+} xcb_colormap_alloc_t;
+
+/** Opcode for xcb_create_colormap. */
+#define XCB_CREATE_COLORMAP 78
+
+/**
+ * @brief xcb_create_colormap_request_t
+ **/
+typedef struct xcb_create_colormap_request_t {
+    uint8_t        major_opcode;
+    uint8_t        alloc;
+    uint16_t       length;
+    xcb_colormap_t mid;
+    xcb_window_t   window;
+    xcb_visualid_t visual;
+} xcb_create_colormap_request_t;
+
+/** Opcode for xcb_free_colormap. */
+#define XCB_FREE_COLORMAP 79
+
+/**
+ * @brief xcb_free_colormap_request_t
+ **/
+typedef struct xcb_free_colormap_request_t {
+    uint8_t        major_opcode;
+    uint8_t        pad0;
+    uint16_t       length;
+    xcb_colormap_t cmap;
+} xcb_free_colormap_request_t;
+
+/** Opcode for xcb_copy_colormap_and_free. */
+#define XCB_COPY_COLORMAP_AND_FREE 80
+
+/**
+ * @brief xcb_copy_colormap_and_free_request_t
+ **/
+typedef struct xcb_copy_colormap_and_free_request_t {
+    uint8_t        major_opcode;
+    uint8_t        pad0;
+    uint16_t       length;
+    xcb_colormap_t mid;
+    xcb_colormap_t src_cmap;
+} xcb_copy_colormap_and_free_request_t;
+
+/** Opcode for xcb_install_colormap. */
+#define XCB_INSTALL_COLORMAP 81
+
+/**
+ * @brief xcb_install_colormap_request_t
+ **/
+typedef struct xcb_install_colormap_request_t {
+    uint8_t        major_opcode;
+    uint8_t        pad0;
+    uint16_t       length;
+    xcb_colormap_t cmap;
+} xcb_install_colormap_request_t;
+
+/** Opcode for xcb_uninstall_colormap. */
+#define XCB_UNINSTALL_COLORMAP 82
+
+/**
+ * @brief xcb_uninstall_colormap_request_t
+ **/
+typedef struct xcb_uninstall_colormap_request_t {
+    uint8_t        major_opcode;
+    uint8_t        pad0;
+    uint16_t       length;
+    xcb_colormap_t cmap;
+} xcb_uninstall_colormap_request_t;
+
+/**
+ * @brief xcb_list_installed_colormaps_cookie_t
+ **/
+typedef struct xcb_list_installed_colormaps_cookie_t {
+    unsigned int sequence;
+} xcb_list_installed_colormaps_cookie_t;
+
+/** Opcode for xcb_list_installed_colormaps. */
+#define XCB_LIST_INSTALLED_COLORMAPS 83
+
+/**
+ * @brief xcb_list_installed_colormaps_request_t
+ **/
+typedef struct xcb_list_installed_colormaps_request_t {
+    uint8_t      major_opcode;
+    uint8_t      pad0;
+    uint16_t     length;
+    xcb_window_t window;
+} xcb_list_installed_colormaps_request_t;
+
+/**
+ * @brief xcb_list_installed_colormaps_reply_t
+ **/
+typedef struct xcb_list_installed_colormaps_reply_t {
+    uint8_t  response_type;
+    uint8_t  pad0;
+    uint16_t sequence;
+    uint32_t length;
+    uint16_t cmaps_len;
+    uint8_t  pad1[22];
+} xcb_list_installed_colormaps_reply_t;
+
+/**
+ * @brief xcb_alloc_color_cookie_t
+ **/
+typedef struct xcb_alloc_color_cookie_t {
+    unsigned int sequence;
+} xcb_alloc_color_cookie_t;
+
+/** Opcode for xcb_alloc_color. */
+#define XCB_ALLOC_COLOR 84
+
+/**
+ * @brief xcb_alloc_color_request_t
+ **/
+typedef struct xcb_alloc_color_request_t {
+    uint8_t        major_opcode;
+    uint8_t        pad0;
+    uint16_t       length;
+    xcb_colormap_t cmap;
+    uint16_t       red;
+    uint16_t       green;
+    uint16_t       blue;
+    uint8_t        pad1[2];
+} xcb_alloc_color_request_t;
+
+/**
+ * @brief xcb_alloc_color_reply_t
+ **/
+typedef struct xcb_alloc_color_reply_t {
+    uint8_t  response_type;
+    uint8_t  pad0;
+    uint16_t sequence;
+    uint32_t length;
+    uint16_t red;
+    uint16_t green;
+    uint16_t blue;
+    uint8_t  pad1[2];
+    uint32_t pixel;
+} xcb_alloc_color_reply_t;
+
+/**
+ * @brief xcb_alloc_named_color_cookie_t
+ **/
+typedef struct xcb_alloc_named_color_cookie_t {
+    unsigned int sequence;
+} xcb_alloc_named_color_cookie_t;
+
+/** Opcode for xcb_alloc_named_color. */
+#define XCB_ALLOC_NAMED_COLOR 85
+
+/**
+ * @brief xcb_alloc_named_color_request_t
+ **/
+typedef struct xcb_alloc_named_color_request_t {
+    uint8_t        major_opcode;
+    uint8_t        pad0;
+    uint16_t       length;
+    xcb_colormap_t cmap;
+    uint16_t       name_len;
+    uint8_t        pad1[2];
+} xcb_alloc_named_color_request_t;
+
+/**
+ * @brief xcb_alloc_named_color_reply_t
+ **/
+typedef struct xcb_alloc_named_color_reply_t {
+    uint8_t  response_type;
+    uint8_t  pad0;
+    uint16_t sequence;
+    uint32_t length;
+    uint32_t pixel;
+    uint16_t exact_red;
+    uint16_t exact_green;
+    uint16_t exact_blue;
+    uint16_t visual_red;
+    uint16_t visual_green;
+    uint16_t visual_blue;
+} xcb_alloc_named_color_reply_t;
+
+/**
+ * @brief xcb_alloc_color_cells_cookie_t
+ **/
+typedef struct xcb_alloc_color_cells_cookie_t {
+    unsigned int sequence;
+} xcb_alloc_color_cells_cookie_t;
+
+/** Opcode for xcb_alloc_color_cells. */
+#define XCB_ALLOC_COLOR_CELLS 86
+
+/**
+ * @brief xcb_alloc_color_cells_request_t
+ **/
+typedef struct xcb_alloc_color_cells_request_t {
+    uint8_t        major_opcode;
+    uint8_t        contiguous;
+    uint16_t       length;
+    xcb_colormap_t cmap;
+    uint16_t       colors;
+    uint16_t       planes;
+} xcb_alloc_color_cells_request_t;
+
+/**
+ * @brief xcb_alloc_color_cells_reply_t
+ **/
+typedef struct xcb_alloc_color_cells_reply_t {
+    uint8_t  response_type;
+    uint8_t  pad0;
+    uint16_t sequence;
+    uint32_t length;
+    uint16_t pixels_len;
+    uint16_t masks_len;
+    uint8_t  pad1[20];
+} xcb_alloc_color_cells_reply_t;
+
+/**
+ * @brief xcb_alloc_color_planes_cookie_t
+ **/
+typedef struct xcb_alloc_color_planes_cookie_t {
+    unsigned int sequence;
+} xcb_alloc_color_planes_cookie_t;
+
+/** Opcode for xcb_alloc_color_planes. */
+#define XCB_ALLOC_COLOR_PLANES 87
+
+/**
+ * @brief xcb_alloc_color_planes_request_t
+ **/
+typedef struct xcb_alloc_color_planes_request_t {
+    uint8_t        major_opcode;
+    uint8_t        contiguous;
+    uint16_t       length;
+    xcb_colormap_t cmap;
+    uint16_t       colors;
+    uint16_t       reds;
+    uint16_t       greens;
+    uint16_t       blues;
+} xcb_alloc_color_planes_request_t;
+
+/**
+ * @brief xcb_alloc_color_planes_reply_t
+ **/
+typedef struct xcb_alloc_color_planes_reply_t {
+    uint8_t  response_type;
+    uint8_t  pad0;
+    uint16_t sequence;
+    uint32_t length;
+    uint16_t pixels_len;
+    uint8_t  pad1[2];
+    uint32_t red_mask;
+    uint32_t green_mask;
+    uint32_t blue_mask;
+    uint8_t  pad2[8];
+} xcb_alloc_color_planes_reply_t;
+
+/** Opcode for xcb_free_colors. */
+#define XCB_FREE_COLORS 88
+
+/**
+ * @brief xcb_free_colors_request_t
+ **/
+typedef struct xcb_free_colors_request_t {
+    uint8_t        major_opcode;
+    uint8_t        pad0;
+    uint16_t       length;
+    xcb_colormap_t cmap;
+    uint32_t       plane_mask;
+} xcb_free_colors_request_t;
+
+typedef enum xcb_color_flag_t {
+    XCB_COLOR_FLAG_RED = 1,
+    XCB_COLOR_FLAG_GREEN = 2,
+    XCB_COLOR_FLAG_BLUE = 4
+} xcb_color_flag_t;
+
+/**
+ * @brief xcb_coloritem_t
+ **/
+typedef struct xcb_coloritem_t {
+    uint32_t pixel;
+    uint16_t red;
+    uint16_t green;
+    uint16_t blue;
+    uint8_t  flags;
+    uint8_t  pad0;
+} xcb_coloritem_t;
+
+/**
+ * @brief xcb_coloritem_iterator_t
+ **/
+typedef struct xcb_coloritem_iterator_t {
+    xcb_coloritem_t *data;
+    int              rem;
+    int              index;
+} xcb_coloritem_iterator_t;
+
+/** Opcode for xcb_store_colors. */
+#define XCB_STORE_COLORS 89
+
+/**
+ * @brief xcb_store_colors_request_t
+ **/
+typedef struct xcb_store_colors_request_t {
+    uint8_t        major_opcode;
+    uint8_t        pad0;
+    uint16_t       length;
+    xcb_colormap_t cmap;
+} xcb_store_colors_request_t;
+
+/** Opcode for xcb_store_named_color. */
+#define XCB_STORE_NAMED_COLOR 90
+
+/**
+ * @brief xcb_store_named_color_request_t
+ **/
+typedef struct xcb_store_named_color_request_t {
+    uint8_t        major_opcode;
+    uint8_t        flags;
+    uint16_t       length;
+    xcb_colormap_t cmap;
+    uint32_t       pixel;
+    uint16_t       name_len;
+    uint8_t        pad0[2];
+} xcb_store_named_color_request_t;
+
+/**
+ * @brief xcb_rgb_t
+ **/
+typedef struct xcb_rgb_t {
+    uint16_t red;
+    uint16_t green;
+    uint16_t blue;
+    uint8_t  pad0[2];
+} xcb_rgb_t;
+
+/**
+ * @brief xcb_rgb_iterator_t
+ **/
+typedef struct xcb_rgb_iterator_t {
+    xcb_rgb_t *data;
+    int        rem;
+    int        index;
+} xcb_rgb_iterator_t;
+
+/**
+ * @brief xcb_query_colors_cookie_t
+ **/
+typedef struct xcb_query_colors_cookie_t {
+    unsigned int sequence;
+} xcb_query_colors_cookie_t;
+
+/** Opcode for xcb_query_colors. */
+#define XCB_QUERY_COLORS 91
+
+/**
+ * @brief xcb_query_colors_request_t
+ **/
+typedef struct xcb_query_colors_request_t {
+    uint8_t        major_opcode;
+    uint8_t        pad0;
+    uint16_t       length;
+    xcb_colormap_t cmap;
+} xcb_query_colors_request_t;
+
+/**
+ * @brief xcb_query_colors_reply_t
+ **/
+typedef struct xcb_query_colors_reply_t {
+    uint8_t  response_type;
+    uint8_t  pad0;
+    uint16_t sequence;
+    uint32_t length;
+    uint16_t colors_len;
+    uint8_t  pad1[22];
+} xcb_query_colors_reply_t;
+
+/**
+ * @brief xcb_lookup_color_cookie_t
+ **/
+typedef struct xcb_lookup_color_cookie_t {
+    unsigned int sequence;
+} xcb_lookup_color_cookie_t;
+
+/** Opcode for xcb_lookup_color. */
+#define XCB_LOOKUP_COLOR 92
+
+/**
+ * @brief xcb_lookup_color_request_t
+ **/
+typedef struct xcb_lookup_color_request_t {
+    uint8_t        major_opcode;
+    uint8_t        pad0;
+    uint16_t       length;
+    xcb_colormap_t cmap;
+    uint16_t       name_len;
+    uint8_t        pad1[2];
+} xcb_lookup_color_request_t;
+
+/**
+ * @brief xcb_lookup_color_reply_t
+ **/
+typedef struct xcb_lookup_color_reply_t {
+    uint8_t  response_type;
+    uint8_t  pad0;
+    uint16_t sequence;
+    uint32_t length;
+    uint16_t exact_red;
+    uint16_t exact_green;
+    uint16_t exact_blue;
+    uint16_t visual_red;
+    uint16_t visual_green;
+    uint16_t visual_blue;
+} xcb_lookup_color_reply_t;
+
+typedef enum xcb_pixmap_enum_t {
+    XCB_PIXMAP_NONE = 0
+} xcb_pixmap_enum_t;
+
+/** Opcode for xcb_create_cursor. */
+#define XCB_CREATE_CURSOR 93
+
+/**
+ * @brief xcb_create_cursor_request_t
+ **/
+typedef struct xcb_create_cursor_request_t {
+    uint8_t      major_opcode;
+    uint8_t      pad0;
+    uint16_t     length;
+    xcb_cursor_t cid;
+    xcb_pixmap_t source;
+    xcb_pixmap_t mask;
+    uint16_t     fore_red;
+    uint16_t     fore_green;
+    uint16_t     fore_blue;
+    uint16_t     back_red;
+    uint16_t     back_green;
+    uint16_t     back_blue;
+    uint16_t     x;
+    uint16_t     y;
+} xcb_create_cursor_request_t;
+
+typedef enum xcb_font_enum_t {
+    XCB_FONT_NONE = 0
+} xcb_font_enum_t;
+
+/** Opcode for xcb_create_glyph_cursor. */
+#define XCB_CREATE_GLYPH_CURSOR 94
+
+/**
+ * @brief xcb_create_glyph_cursor_request_t
+ **/
+typedef struct xcb_create_glyph_cursor_request_t {
+    uint8_t      major_opcode;
+    uint8_t      pad0;
+    uint16_t     length;
+    xcb_cursor_t cid;
+    xcb_font_t   source_font;
+    xcb_font_t   mask_font;
+    uint16_t     source_char;
+    uint16_t     mask_char;
+    uint16_t     fore_red;
+    uint16_t     fore_green;
+    uint16_t     fore_blue;
+    uint16_t     back_red;
+    uint16_t     back_green;
+    uint16_t     back_blue;
+} xcb_create_glyph_cursor_request_t;
+
+/** Opcode for xcb_free_cursor. */
+#define XCB_FREE_CURSOR 95
+
+/**
+ * @brief xcb_free_cursor_request_t
+ **/
+typedef struct xcb_free_cursor_request_t {
+    uint8_t      major_opcode;
+    uint8_t      pad0;
+    uint16_t     length;
+    xcb_cursor_t cursor;
+} xcb_free_cursor_request_t;
+
+/** Opcode for xcb_recolor_cursor. */
+#define XCB_RECOLOR_CURSOR 96
+
+/**
+ * @brief xcb_recolor_cursor_request_t
+ **/
+typedef struct xcb_recolor_cursor_request_t {
+    uint8_t      major_opcode;
+    uint8_t      pad0;
+    uint16_t     length;
+    xcb_cursor_t cursor;
+    uint16_t     fore_red;
+    uint16_t     fore_green;
+    uint16_t     fore_blue;
+    uint16_t     back_red;
+    uint16_t     back_green;
+    uint16_t     back_blue;
+} xcb_recolor_cursor_request_t;
+
+typedef enum xcb_query_shape_of_t {
+    XCB_QUERY_SHAPE_OF_LARGEST_CURSOR = 0,
+    XCB_QUERY_SHAPE_OF_FASTEST_TILE = 1,
+    XCB_QUERY_SHAPE_OF_FASTEST_STIPPLE = 2
+} xcb_query_shape_of_t;
+
+/**
+ * @brief xcb_query_best_size_cookie_t
+ **/
+typedef struct xcb_query_best_size_cookie_t {
+    unsigned int sequence;
+} xcb_query_best_size_cookie_t;
+
+/** Opcode for xcb_query_best_size. */
+#define XCB_QUERY_BEST_SIZE 97
+
+/**
+ * @brief xcb_query_best_size_request_t
+ **/
+typedef struct xcb_query_best_size_request_t {
+    uint8_t        major_opcode;
+    uint8_t        _class;
+    uint16_t       length;
+    xcb_drawable_t drawable;
+    uint16_t       width;
+    uint16_t       height;
+} xcb_query_best_size_request_t;
+
+/**
+ * @brief xcb_query_best_size_reply_t
+ **/
+typedef struct xcb_query_best_size_reply_t {
+    uint8_t  response_type;
+    uint8_t  pad0;
+    uint16_t sequence;
+    uint32_t length;
+    uint16_t width;
+    uint16_t height;
+} xcb_query_best_size_reply_t;
+
+/**
+ * @brief xcb_query_extension_cookie_t
+ **/
+typedef struct xcb_query_extension_cookie_t {
+    unsigned int sequence;
+} xcb_query_extension_cookie_t;
+
+/** Opcode for xcb_query_extension. */
+#define XCB_QUERY_EXTENSION 98
+
+/**
+ * @brief xcb_query_extension_request_t
+ **/
+typedef struct xcb_query_extension_request_t {
+    uint8_t  major_opcode;
+    uint8_t  pad0;
+    uint16_t length;
+    uint16_t name_len;
+    uint8_t  pad1[2];
+} xcb_query_extension_request_t;
+
+/**
+ * @brief xcb_query_extension_reply_t
+ **/
+typedef struct xcb_query_extension_reply_t {
+    uint8_t  response_type;
+    uint8_t  pad0;
+    uint16_t sequence;
+    uint32_t length;
+    uint8_t  present;
+    uint8_t  major_opcode;
+    uint8_t  first_event;
+    uint8_t  first_error;
+} xcb_query_extension_reply_t;
+
+/**
+ * @brief xcb_list_extensions_cookie_t
+ **/
+typedef struct xcb_list_extensions_cookie_t {
+    unsigned int sequence;
+} xcb_list_extensions_cookie_t;
+
+/** Opcode for xcb_list_extensions. */
+#define XCB_LIST_EXTENSIONS 99
+
+/**
+ * @brief xcb_list_extensions_request_t
+ **/
+typedef struct xcb_list_extensions_request_t {
+    uint8_t  major_opcode;
+    uint8_t  pad0;
+    uint16_t length;
+} xcb_list_extensions_request_t;
+
+/**
+ * @brief xcb_list_extensions_reply_t
+ **/
+typedef struct xcb_list_extensions_reply_t {
+    uint8_t  response_type;
+    uint8_t  names_len;
+    uint16_t sequence;
+    uint32_t length;
+    uint8_t  pad0[24];
+} xcb_list_extensions_reply_t;
+
+/** Opcode for xcb_change_keyboard_mapping. */
+#define XCB_CHANGE_KEYBOARD_MAPPING 100
+
+/**
+ * @brief xcb_change_keyboard_mapping_request_t
+ **/
+typedef struct xcb_change_keyboard_mapping_request_t {
+    uint8_t       major_opcode;
+    uint8_t       keycode_count;
+    uint16_t      length;
+    xcb_keycode_t first_keycode;
+    uint8_t       keysyms_per_keycode;
+    uint8_t       pad0[2];
+} xcb_change_keyboard_mapping_request_t;
+
+/**
+ * @brief xcb_get_keyboard_mapping_cookie_t
+ **/
+typedef struct xcb_get_keyboard_mapping_cookie_t {
+    unsigned int sequence;
+} xcb_get_keyboard_mapping_cookie_t;
+
+/** Opcode for xcb_get_keyboard_mapping. */
+#define XCB_GET_KEYBOARD_MAPPING 101
+
+/**
+ * @brief xcb_get_keyboard_mapping_request_t
+ **/
+typedef struct xcb_get_keyboard_mapping_request_t {
+    uint8_t       major_opcode;
+    uint8_t       pad0;
+    uint16_t      length;
+    xcb_keycode_t first_keycode;
+    uint8_t       count;
+} xcb_get_keyboard_mapping_request_t;
+
+/**
+ * @brief xcb_get_keyboard_mapping_reply_t
+ **/
+typedef struct xcb_get_keyboard_mapping_reply_t {
+    uint8_t  response_type;
+    uint8_t  keysyms_per_keycode;
+    uint16_t sequence;
+    uint32_t length;
+    uint8_t  pad0[24];
+} xcb_get_keyboard_mapping_reply_t;
+
+typedef enum xcb_kb_t {
+    XCB_KB_KEY_CLICK_PERCENT = 1,
+    XCB_KB_BELL_PERCENT = 2,
+    XCB_KB_BELL_PITCH = 4,
+    XCB_KB_BELL_DURATION = 8,
+    XCB_KB_LED = 16,
+    XCB_KB_LED_MODE = 32,
+    XCB_KB_KEY = 64,
+    XCB_KB_AUTO_REPEAT_MODE = 128
+} xcb_kb_t;
+
+typedef enum xcb_led_mode_t {
+    XCB_LED_MODE_OFF = 0,
+    XCB_LED_MODE_ON = 1
+} xcb_led_mode_t;
+
+typedef enum xcb_auto_repeat_mode_t {
+    XCB_AUTO_REPEAT_MODE_OFF = 0,
+    XCB_AUTO_REPEAT_MODE_ON = 1,
+    XCB_AUTO_REPEAT_MODE_DEFAULT = 2
+} xcb_auto_repeat_mode_t;
+
+/**
+ * @brief xcb_change_keyboard_control_value_list_t
+ **/
+typedef struct xcb_change_keyboard_control_value_list_t {
+    int32_t         key_click_percent;
+    int32_t         bell_percent;
+    int32_t         bell_pitch;
+    int32_t         bell_duration;
+    uint32_t        led;
+    uint32_t        led_mode;
+    xcb_keycode32_t key;
+    uint32_t        auto_repeat_mode;
+} xcb_change_keyboard_control_value_list_t;
+
+/** Opcode for xcb_change_keyboard_control. */
+#define XCB_CHANGE_KEYBOARD_CONTROL 102
+
+/**
+ * @brief xcb_change_keyboard_control_request_t
+ **/
+typedef struct xcb_change_keyboard_control_request_t {
+    uint8_t  major_opcode;
+    uint8_t  pad0;
+    uint16_t length;
+    uint32_t value_mask;
+} xcb_change_keyboard_control_request_t;
+
+/**
+ * @brief xcb_get_keyboard_control_cookie_t
+ **/
+typedef struct xcb_get_keyboard_control_cookie_t {
+    unsigned int sequence;
+} xcb_get_keyboard_control_cookie_t;
+
+/** Opcode for xcb_get_keyboard_control. */
+#define XCB_GET_KEYBOARD_CONTROL 103
+
+/**
+ * @brief xcb_get_keyboard_control_request_t
+ **/
+typedef struct xcb_get_keyboard_control_request_t {
+    uint8_t  major_opcode;
+    uint8_t  pad0;
+    uint16_t length;
+} xcb_get_keyboard_control_request_t;
+
+/**
+ * @brief xcb_get_keyboard_control_reply_t
+ **/
+typedef struct xcb_get_keyboard_control_reply_t {
+    uint8_t  response_type;
+    uint8_t  global_auto_repeat;
+    uint16_t sequence;
+    uint32_t length;
+    uint32_t led_mask;
+    uint8_t  key_click_percent;
+    uint8_t  bell_percent;
+    uint16_t bell_pitch;
+    uint16_t bell_duration;
+    uint8_t  pad0[2];
+    uint8_t  auto_repeats[32];
+} xcb_get_keyboard_control_reply_t;
+
+/** Opcode for xcb_bell. */
+#define XCB_BELL 104
+
+/**
+ * @brief xcb_bell_request_t
+ **/
+typedef struct xcb_bell_request_t {
+    uint8_t  major_opcode;
+    int8_t   percent;
+    uint16_t length;
+} xcb_bell_request_t;
+
+/** Opcode for xcb_change_pointer_control. */
+#define XCB_CHANGE_POINTER_CONTROL 105
+
+/**
+ * @brief xcb_change_pointer_control_request_t
+ **/
+typedef struct xcb_change_pointer_control_request_t {
+    uint8_t  major_opcode;
+    uint8_t  pad0;
+    uint16_t length;
+    int16_t  acceleration_numerator;
+    int16_t  acceleration_denominator;
+    int16_t  threshold;
+    uint8_t  do_acceleration;
+    uint8_t  do_threshold;
+} xcb_change_pointer_control_request_t;
+
+/**
+ * @brief xcb_get_pointer_control_cookie_t
+ **/
+typedef struct xcb_get_pointer_control_cookie_t {
+    unsigned int sequence;
+} xcb_get_pointer_control_cookie_t;
+
+/** Opcode for xcb_get_pointer_control. */
+#define XCB_GET_POINTER_CONTROL 106
+
+/**
+ * @brief xcb_get_pointer_control_request_t
+ **/
+typedef struct xcb_get_pointer_control_request_t {
+    uint8_t  major_opcode;
+    uint8_t  pad0;
+    uint16_t length;
+} xcb_get_pointer_control_request_t;
+
+/**
+ * @brief xcb_get_pointer_control_reply_t
+ **/
+typedef struct xcb_get_pointer_control_reply_t {
+    uint8_t  response_type;
+    uint8_t  pad0;
+    uint16_t sequence;
+    uint32_t length;
+    uint16_t acceleration_numerator;
+    uint16_t acceleration_denominator;
+    uint16_t threshold;
+    uint8_t  pad1[18];
+} xcb_get_pointer_control_reply_t;
+
+typedef enum xcb_blanking_t {
+    XCB_BLANKING_NOT_PREFERRED = 0,
+    XCB_BLANKING_PREFERRED = 1,
+    XCB_BLANKING_DEFAULT = 2
+} xcb_blanking_t;
+
+typedef enum xcb_exposures_t {
+    XCB_EXPOSURES_NOT_ALLOWED = 0,
+    XCB_EXPOSURES_ALLOWED = 1,
+    XCB_EXPOSURES_DEFAULT = 2
+} xcb_exposures_t;
+
+/** Opcode for xcb_set_screen_saver. */
+#define XCB_SET_SCREEN_SAVER 107
+
+/**
+ * @brief xcb_set_screen_saver_request_t
+ **/
+typedef struct xcb_set_screen_saver_request_t {
+    uint8_t  major_opcode;
+    uint8_t  pad0;
+    uint16_t length;
+    int16_t  timeout;
+    int16_t  interval;
+    uint8_t  prefer_blanking;
+    uint8_t  allow_exposures;
+} xcb_set_screen_saver_request_t;
+
+/**
+ * @brief xcb_get_screen_saver_cookie_t
+ **/
+typedef struct xcb_get_screen_saver_cookie_t {
+    unsigned int sequence;
+} xcb_get_screen_saver_cookie_t;
+
+/** Opcode for xcb_get_screen_saver. */
+#define XCB_GET_SCREEN_SAVER 108
+
+/**
+ * @brief xcb_get_screen_saver_request_t
+ **/
+typedef struct xcb_get_screen_saver_request_t {
+    uint8_t  major_opcode;
+    uint8_t  pad0;
+    uint16_t length;
+} xcb_get_screen_saver_request_t;
+
+/**
+ * @brief xcb_get_screen_saver_reply_t
+ **/
+typedef struct xcb_get_screen_saver_reply_t {
+    uint8_t  response_type;
+    uint8_t  pad0;
+    uint16_t sequence;
+    uint32_t length;
+    uint16_t timeout;
+    uint16_t interval;
+    uint8_t  prefer_blanking;
+    uint8_t  allow_exposures;
+    uint8_t  pad1[18];
+} xcb_get_screen_saver_reply_t;
+
+typedef enum xcb_host_mode_t {
+    XCB_HOST_MODE_INSERT = 0,
+    XCB_HOST_MODE_DELETE = 1
+} xcb_host_mode_t;
+
+typedef enum xcb_family_t {
+    XCB_FAMILY_INTERNET = 0,
+    XCB_FAMILY_DECNET = 1,
+    XCB_FAMILY_CHAOS = 2,
+    XCB_FAMILY_SERVER_INTERPRETED = 5,
+    XCB_FAMILY_INTERNET_6 = 6
+} xcb_family_t;
+
+/** Opcode for xcb_change_hosts. */
+#define XCB_CHANGE_HOSTS 109
+
+/**
+ * @brief xcb_change_hosts_request_t
+ **/
+typedef struct xcb_change_hosts_request_t {
+    uint8_t  major_opcode;
+    uint8_t  mode;
+    uint16_t length;
+    uint8_t  family;
+    uint8_t  pad0;
+    uint16_t address_len;
+} xcb_change_hosts_request_t;
+
+/**
+ * @brief xcb_host_t
+ **/
+typedef struct xcb_host_t {
+    uint8_t  family;
+    uint8_t  pad0;
+    uint16_t address_len;
+} xcb_host_t;
+
+/**
+ * @brief xcb_host_iterator_t
+ **/
+typedef struct xcb_host_iterator_t {
+    xcb_host_t *data;
+    int         rem;
+    int         index;
+} xcb_host_iterator_t;
+
+/**
+ * @brief xcb_list_hosts_cookie_t
+ **/
+typedef struct xcb_list_hosts_cookie_t {
+    unsigned int sequence;
+} xcb_list_hosts_cookie_t;
+
+/** Opcode for xcb_list_hosts. */
+#define XCB_LIST_HOSTS 110
+
+/**
+ * @brief xcb_list_hosts_request_t
+ **/
+typedef struct xcb_list_hosts_request_t {
+    uint8_t  major_opcode;
+    uint8_t  pad0;
+    uint16_t length;
+} xcb_list_hosts_request_t;
+
+/**
+ * @brief xcb_list_hosts_reply_t
+ **/
+typedef struct xcb_list_hosts_reply_t {
+    uint8_t  response_type;
+    uint8_t  mode;
+    uint16_t sequence;
+    uint32_t length;
+    uint16_t hosts_len;
+    uint8_t  pad0[22];
+} xcb_list_hosts_reply_t;
+
+typedef enum xcb_access_control_t {
+    XCB_ACCESS_CONTROL_DISABLE = 0,
+    XCB_ACCESS_CONTROL_ENABLE = 1
+} xcb_access_control_t;
+
+/** Opcode for xcb_set_access_control. */
+#define XCB_SET_ACCESS_CONTROL 111
+
+/**
+ * @brief xcb_set_access_control_request_t
+ **/
+typedef struct xcb_set_access_control_request_t {
+    uint8_t  major_opcode;
+    uint8_t  mode;
+    uint16_t length;
+} xcb_set_access_control_request_t;
+
+typedef enum xcb_close_down_t {
+    XCB_CLOSE_DOWN_DESTROY_ALL = 0,
+    XCB_CLOSE_DOWN_RETAIN_PERMANENT = 1,
+    XCB_CLOSE_DOWN_RETAIN_TEMPORARY = 2
+} xcb_close_down_t;
+
+/** Opcode for xcb_set_close_down_mode. */
+#define XCB_SET_CLOSE_DOWN_MODE 112
+
+/**
+ * @brief xcb_set_close_down_mode_request_t
+ **/
+typedef struct xcb_set_close_down_mode_request_t {
+    uint8_t  major_opcode;
+    uint8_t  mode;
+    uint16_t length;
+} xcb_set_close_down_mode_request_t;
+
+typedef enum xcb_kill_t {
+    XCB_KILL_ALL_TEMPORARY = 0
+} xcb_kill_t;
+
+/** Opcode for xcb_kill_client. */
+#define XCB_KILL_CLIENT 113
+
+/**
+ * @brief xcb_kill_client_request_t
+ **/
+typedef struct xcb_kill_client_request_t {
+    uint8_t  major_opcode;
+    uint8_t  pad0;
+    uint16_t length;
+    uint32_t resource;
+} xcb_kill_client_request_t;
+
+/** Opcode for xcb_rotate_properties. */
+#define XCB_ROTATE_PROPERTIES 114
+
+/**
+ * @brief xcb_rotate_properties_request_t
+ **/
+typedef struct xcb_rotate_properties_request_t {
+    uint8_t      major_opcode;
+    uint8_t      pad0;
+    uint16_t     length;
+    xcb_window_t window;
+    uint16_t     atoms_len;
+    int16_t      delta;
+} xcb_rotate_properties_request_t;
+
+typedef enum xcb_screen_saver_t {
+    XCB_SCREEN_SAVER_RESET = 0,
+    XCB_SCREEN_SAVER_ACTIVE = 1
+} xcb_screen_saver_t;
+
+/** Opcode for xcb_force_screen_saver. */
+#define XCB_FORCE_SCREEN_SAVER 115
+
+/**
+ * @brief xcb_force_screen_saver_request_t
+ **/
+typedef struct xcb_force_screen_saver_request_t {
+    uint8_t  major_opcode;
+    uint8_t  mode;
+    uint16_t length;
+} xcb_force_screen_saver_request_t;
+
+typedef enum xcb_mapping_status_t {
+    XCB_MAPPING_STATUS_SUCCESS = 0,
+    XCB_MAPPING_STATUS_BUSY = 1,
+    XCB_MAPPING_STATUS_FAILURE = 2
+} xcb_mapping_status_t;
+
+/**
+ * @brief xcb_set_pointer_mapping_cookie_t
+ **/
+typedef struct xcb_set_pointer_mapping_cookie_t {
+    unsigned int sequence;
+} xcb_set_pointer_mapping_cookie_t;
+
+/** Opcode for xcb_set_pointer_mapping. */
+#define XCB_SET_POINTER_MAPPING 116
+
+/**
+ * @brief xcb_set_pointer_mapping_request_t
+ **/
+typedef struct xcb_set_pointer_mapping_request_t {
+    uint8_t  major_opcode;
+    uint8_t  map_len;
+    uint16_t length;
+} xcb_set_pointer_mapping_request_t;
+
+/**
+ * @brief xcb_set_pointer_mapping_reply_t
+ **/
+typedef struct xcb_set_pointer_mapping_reply_t {
+    uint8_t  response_type;
+    uint8_t  status;
+    uint16_t sequence;
+    uint32_t length;
+} xcb_set_pointer_mapping_reply_t;
+
+/**
+ * @brief xcb_get_pointer_mapping_cookie_t
+ **/
+typedef struct xcb_get_pointer_mapping_cookie_t {
+    unsigned int sequence;
+} xcb_get_pointer_mapping_cookie_t;
+
+/** Opcode for xcb_get_pointer_mapping. */
+#define XCB_GET_POINTER_MAPPING 117
+
+/**
+ * @brief xcb_get_pointer_mapping_request_t
+ **/
+typedef struct xcb_get_pointer_mapping_request_t {
+    uint8_t  major_opcode;
+    uint8_t  pad0;
+    uint16_t length;
+} xcb_get_pointer_mapping_request_t;
+
+/**
+ * @brief xcb_get_pointer_mapping_reply_t
+ **/
+typedef struct xcb_get_pointer_mapping_reply_t {
+    uint8_t  response_type;
+    uint8_t  map_len;
+    uint16_t sequence;
+    uint32_t length;
+    uint8_t  pad0[24];
+} xcb_get_pointer_mapping_reply_t;
+
+typedef enum xcb_map_index_t {
+    XCB_MAP_INDEX_SHIFT = 0,
+    XCB_MAP_INDEX_LOCK = 1,
+    XCB_MAP_INDEX_CONTROL = 2,
+    XCB_MAP_INDEX_1 = 3,
+    XCB_MAP_INDEX_2 = 4,
+    XCB_MAP_INDEX_3 = 5,
+    XCB_MAP_INDEX_4 = 6,
+    XCB_MAP_INDEX_5 = 7
+} xcb_map_index_t;
+
+/**
+ * @brief xcb_set_modifier_mapping_cookie_t
+ **/
+typedef struct xcb_set_modifier_mapping_cookie_t {
+    unsigned int sequence;
+} xcb_set_modifier_mapping_cookie_t;
+
+/** Opcode for xcb_set_modifier_mapping. */
+#define XCB_SET_MODIFIER_MAPPING 118
+
+/**
+ * @brief xcb_set_modifier_mapping_request_t
+ **/
+typedef struct xcb_set_modifier_mapping_request_t {
+    uint8_t  major_opcode;
+    uint8_t  keycodes_per_modifier;
+    uint16_t length;
+} xcb_set_modifier_mapping_request_t;
+
+/**
+ * @brief xcb_set_modifier_mapping_reply_t
+ **/
+typedef struct xcb_set_modifier_mapping_reply_t {
+    uint8_t  response_type;
+    uint8_t  status;
+    uint16_t sequence;
+    uint32_t length;
+} xcb_set_modifier_mapping_reply_t;
+
+/**
+ * @brief xcb_get_modifier_mapping_cookie_t
+ **/
+typedef struct xcb_get_modifier_mapping_cookie_t {
+    unsigned int sequence;
+} xcb_get_modifier_mapping_cookie_t;
+
+/** Opcode for xcb_get_modifier_mapping. */
+#define XCB_GET_MODIFIER_MAPPING 119
+
+/**
+ * @brief xcb_get_modifier_mapping_request_t
+ **/
+typedef struct xcb_get_modifier_mapping_request_t {
+    uint8_t  major_opcode;
+    uint8_t  pad0;
+    uint16_t length;
+} xcb_get_modifier_mapping_request_t;
+
+/**
+ * @brief xcb_get_modifier_mapping_reply_t
+ **/
+typedef struct xcb_get_modifier_mapping_reply_t {
+    uint8_t  response_type;
+    uint8_t  keycodes_per_modifier;
+    uint16_t sequence;
+    uint32_t length;
+    uint8_t  pad0[24];
+} xcb_get_modifier_mapping_reply_t;
+
+/** Opcode for xcb_no_operation. */
+#define XCB_NO_OPERATION 127
+
+/**
+ * @brief xcb_no_operation_request_t
+ **/
+typedef struct xcb_no_operation_request_t {
+    uint8_t  major_opcode;
+    uint8_t  pad0;
+    uint16_t length;
+} xcb_no_operation_request_t;
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_char2b_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_char2b_t)
+ */
+void
+xcb_char2b_next (xcb_char2b_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_char2b_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_char2b_end (xcb_char2b_iterator_t i);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_window_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_window_t)
+ */
+void
+xcb_window_next (xcb_window_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_window_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_window_end (xcb_window_iterator_t i);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_pixmap_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_pixmap_t)
+ */
+void
+xcb_pixmap_next (xcb_pixmap_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_pixmap_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_pixmap_end (xcb_pixmap_iterator_t i);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_cursor_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_cursor_t)
+ */
+void
+xcb_cursor_next (xcb_cursor_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_cursor_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_cursor_end (xcb_cursor_iterator_t i);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_font_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_font_t)
+ */
+void
+xcb_font_next (xcb_font_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_font_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_font_end (xcb_font_iterator_t i);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_gcontext_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_gcontext_t)
+ */
+void
+xcb_gcontext_next (xcb_gcontext_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_gcontext_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_gcontext_end (xcb_gcontext_iterator_t i);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_colormap_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_colormap_t)
+ */
+void
+xcb_colormap_next (xcb_colormap_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_colormap_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_colormap_end (xcb_colormap_iterator_t i);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_atom_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_atom_t)
+ */
+void
+xcb_atom_next (xcb_atom_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_atom_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_atom_end (xcb_atom_iterator_t i);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_drawable_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_drawable_t)
+ */
+void
+xcb_drawable_next (xcb_drawable_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_drawable_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_drawable_end (xcb_drawable_iterator_t i);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_fontable_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_fontable_t)
+ */
+void
+xcb_fontable_next (xcb_fontable_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_fontable_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_fontable_end (xcb_fontable_iterator_t i);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_bool32_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_bool32_t)
+ */
+void
+xcb_bool32_next (xcb_bool32_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_bool32_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_bool32_end (xcb_bool32_iterator_t i);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_visualid_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_visualid_t)
+ */
+void
+xcb_visualid_next (xcb_visualid_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_visualid_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_visualid_end (xcb_visualid_iterator_t i);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_timestamp_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_timestamp_t)
+ */
+void
+xcb_timestamp_next (xcb_timestamp_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_timestamp_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_timestamp_end (xcb_timestamp_iterator_t i);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_keysym_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_keysym_t)
+ */
+void
+xcb_keysym_next (xcb_keysym_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_keysym_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_keysym_end (xcb_keysym_iterator_t i);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_keycode_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_keycode_t)
+ */
+void
+xcb_keycode_next (xcb_keycode_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_keycode_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_keycode_end (xcb_keycode_iterator_t i);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_keycode32_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_keycode32_t)
+ */
+void
+xcb_keycode32_next (xcb_keycode32_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_keycode32_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_keycode32_end (xcb_keycode32_iterator_t i);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_button_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_button_t)
+ */
+void
+xcb_button_next (xcb_button_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_button_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_button_end (xcb_button_iterator_t i);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_point_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_point_t)
+ */
+void
+xcb_point_next (xcb_point_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_point_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_point_end (xcb_point_iterator_t i);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_rectangle_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_rectangle_t)
+ */
+void
+xcb_rectangle_next (xcb_rectangle_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_rectangle_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_rectangle_end (xcb_rectangle_iterator_t i);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_arc_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_arc_t)
+ */
+void
+xcb_arc_next (xcb_arc_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_arc_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_arc_end (xcb_arc_iterator_t i);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_format_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_format_t)
+ */
+void
+xcb_format_next (xcb_format_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_format_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_format_end (xcb_format_iterator_t i);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_visualtype_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_visualtype_t)
+ */
+void
+xcb_visualtype_next (xcb_visualtype_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_visualtype_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_visualtype_end (xcb_visualtype_iterator_t i);
+
+int
+xcb_depth_sizeof (const void  *_buffer);
+
+xcb_visualtype_t *
+xcb_depth_visuals (const xcb_depth_t *R);
+
+int
+xcb_depth_visuals_length (const xcb_depth_t *R);
+
+xcb_visualtype_iterator_t
+xcb_depth_visuals_iterator (const xcb_depth_t *R);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_depth_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_depth_t)
+ */
+void
+xcb_depth_next (xcb_depth_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_depth_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_depth_end (xcb_depth_iterator_t i);
+
+int
+xcb_screen_sizeof (const void  *_buffer);
+
+int
+xcb_screen_allowed_depths_length (const xcb_screen_t *R);
+
+xcb_depth_iterator_t
+xcb_screen_allowed_depths_iterator (const xcb_screen_t *R);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_screen_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_screen_t)
+ */
+void
+xcb_screen_next (xcb_screen_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_screen_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_screen_end (xcb_screen_iterator_t i);
+
+int
+xcb_setup_request_sizeof (const void  *_buffer);
+
+char *
+xcb_setup_request_authorization_protocol_name (const xcb_setup_request_t *R);
+
+int
+xcb_setup_request_authorization_protocol_name_length (const xcb_setup_request_t *R);
+
+xcb_generic_iterator_t
+xcb_setup_request_authorization_protocol_name_end (const xcb_setup_request_t *R);
+
+char *
+xcb_setup_request_authorization_protocol_data (const xcb_setup_request_t *R);
+
+int
+xcb_setup_request_authorization_protocol_data_length (const xcb_setup_request_t *R);
+
+xcb_generic_iterator_t
+xcb_setup_request_authorization_protocol_data_end (const xcb_setup_request_t *R);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_setup_request_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_setup_request_t)
+ */
+void
+xcb_setup_request_next (xcb_setup_request_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_setup_request_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_setup_request_end (xcb_setup_request_iterator_t i);
+
+int
+xcb_setup_failed_sizeof (const void  *_buffer);
+
+char *
+xcb_setup_failed_reason (const xcb_setup_failed_t *R);
+
+int
+xcb_setup_failed_reason_length (const xcb_setup_failed_t *R);
+
+xcb_generic_iterator_t
+xcb_setup_failed_reason_end (const xcb_setup_failed_t *R);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_setup_failed_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_setup_failed_t)
+ */
+void
+xcb_setup_failed_next (xcb_setup_failed_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_setup_failed_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_setup_failed_end (xcb_setup_failed_iterator_t i);
+
+int
+xcb_setup_authenticate_sizeof (const void  *_buffer);
+
+char *
+xcb_setup_authenticate_reason (const xcb_setup_authenticate_t *R);
+
+int
+xcb_setup_authenticate_reason_length (const xcb_setup_authenticate_t *R);
+
+xcb_generic_iterator_t
+xcb_setup_authenticate_reason_end (const xcb_setup_authenticate_t *R);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_setup_authenticate_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_setup_authenticate_t)
+ */
+void
+xcb_setup_authenticate_next (xcb_setup_authenticate_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_setup_authenticate_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_setup_authenticate_end (xcb_setup_authenticate_iterator_t i);
+
+int
+xcb_setup_sizeof (const void  *_buffer);
+
+char *
+xcb_setup_vendor (const xcb_setup_t *R);
+
+int
+xcb_setup_vendor_length (const xcb_setup_t *R);
+
+xcb_generic_iterator_t
+xcb_setup_vendor_end (const xcb_setup_t *R);
+
+xcb_format_t *
+xcb_setup_pixmap_formats (const xcb_setup_t *R);
+
+int
+xcb_setup_pixmap_formats_length (const xcb_setup_t *R);
+
+xcb_format_iterator_t
+xcb_setup_pixmap_formats_iterator (const xcb_setup_t *R);
+
+int
+xcb_setup_roots_length (const xcb_setup_t *R);
+
+xcb_screen_iterator_t
+xcb_setup_roots_iterator (const xcb_setup_t *R);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_setup_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_setup_t)
+ */
+void
+xcb_setup_next (xcb_setup_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_setup_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_setup_end (xcb_setup_iterator_t i);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_client_message_data_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_client_message_data_t)
+ */
+void
+xcb_client_message_data_next (xcb_client_message_data_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_client_message_data_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_client_message_data_end (xcb_client_message_data_iterator_t i);
+
+int
+xcb_create_window_value_list_serialize (void                                 **_buffer,
+                                        uint32_t                               value_mask,
+                                        const xcb_create_window_value_list_t  *_aux);
+
+int
+xcb_create_window_value_list_unpack (const void                      *_buffer,
+                                     uint32_t                         value_mask,
+                                     xcb_create_window_value_list_t  *_aux);
+
+int
+xcb_create_window_value_list_sizeof (const void  *_buffer,
+                                     uint32_t     value_mask);
+
+int
+xcb_create_window_sizeof (const void  *_buffer);
+
+/**
+ * @brief Creates a window
+ *
+ * @param c The connection
+ * @param depth Specifies the new window's depth (TODO: what unit?).
+ * \n
+ * The special value `XCB_COPY_FROM_PARENT` means the depth is taken from the
+ * \a parent window.
+ * @param wid The ID with which you will refer to the new window, created by
+ * `xcb_generate_id`.
+ * @param parent The parent window of the new window.
+ * @param x The X coordinate of the new window.
+ * @param y The Y coordinate of the new window.
+ * @param width The width of the new window.
+ * @param height The height of the new window.
+ * @param border_width TODO:
+ * \n
+ * Must be zero if the `class` is `InputOnly` or a `xcb_match_error_t` occurs.
+ * @param _class A bitmask of #xcb_window_class_t values.
+ * @param _class \n
+ * @param visual Specifies the id for the new window's visual.
+ * \n
+ * The special value `XCB_COPY_FROM_PARENT` means the visual is taken from the
+ * \a parent window.
+ * @param value_mask A bitmask of #xcb_cw_t values.
+ * @return A cookie
+ *
+ * Creates an unmapped window as child of the specified \a parent window. A
+ * CreateNotify event will be generated. The new window is placed on top in the
+ * stacking order with respect to siblings.
+ * 
+ * The coordinate system has the X axis horizontal and the Y axis vertical with
+ * the origin [0, 0] at the upper-left corner. Coordinates are integral, in terms
+ * of pixels, and coincide with pixel centers. Each window and pixmap has its own
+ * coordinate system. For a window, the origin is inside the border at the inside,
+ * upper-left corner.
+ * 
+ * The created window is not yet displayed (mapped), call `xcb_map_window` to
+ * display it.
+ * 
+ * The created window will initially use the same cursor as its parent.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_create_window_checked (xcb_connection_t *c,
+                           uint8_t           depth,
+                           xcb_window_t      wid,
+                           xcb_window_t      parent,
+                           int16_t           x,
+                           int16_t           y,
+                           uint16_t          width,
+                           uint16_t          height,
+                           uint16_t          border_width,
+                           uint16_t          _class,
+                           xcb_visualid_t    visual,
+                           uint32_t          value_mask,
+                           const void       *value_list);
+
+/**
+ * @brief Creates a window
+ *
+ * @param c The connection
+ * @param depth Specifies the new window's depth (TODO: what unit?).
+ * \n
+ * The special value `XCB_COPY_FROM_PARENT` means the depth is taken from the
+ * \a parent window.
+ * @param wid The ID with which you will refer to the new window, created by
+ * `xcb_generate_id`.
+ * @param parent The parent window of the new window.
+ * @param x The X coordinate of the new window.
+ * @param y The Y coordinate of the new window.
+ * @param width The width of the new window.
+ * @param height The height of the new window.
+ * @param border_width TODO:
+ * \n
+ * Must be zero if the `class` is `InputOnly` or a `xcb_match_error_t` occurs.
+ * @param _class A bitmask of #xcb_window_class_t values.
+ * @param _class \n
+ * @param visual Specifies the id for the new window's visual.
+ * \n
+ * The special value `XCB_COPY_FROM_PARENT` means the visual is taken from the
+ * \a parent window.
+ * @param value_mask A bitmask of #xcb_cw_t values.
+ * @return A cookie
+ *
+ * Creates an unmapped window as child of the specified \a parent window. A
+ * CreateNotify event will be generated. The new window is placed on top in the
+ * stacking order with respect to siblings.
+ * 
+ * The coordinate system has the X axis horizontal and the Y axis vertical with
+ * the origin [0, 0] at the upper-left corner. Coordinates are integral, in terms
+ * of pixels, and coincide with pixel centers. Each window and pixmap has its own
+ * coordinate system. For a window, the origin is inside the border at the inside,
+ * upper-left corner.
+ * 
+ * The created window is not yet displayed (mapped), call `xcb_map_window` to
+ * display it.
+ * 
+ * The created window will initially use the same cursor as its parent.
+ *
+ */
+xcb_void_cookie_t
+xcb_create_window (xcb_connection_t *c,
+                   uint8_t           depth,
+                   xcb_window_t      wid,
+                   xcb_window_t      parent,
+                   int16_t           x,
+                   int16_t           y,
+                   uint16_t          width,
+                   uint16_t          height,
+                   uint16_t          border_width,
+                   uint16_t          _class,
+                   xcb_visualid_t    visual,
+                   uint32_t          value_mask,
+                   const void       *value_list);
+
+/**
+ * @brief Creates a window
+ *
+ * @param c The connection
+ * @param depth Specifies the new window's depth (TODO: what unit?).
+ * \n
+ * The special value `XCB_COPY_FROM_PARENT` means the depth is taken from the
+ * \a parent window.
+ * @param wid The ID with which you will refer to the new window, created by
+ * `xcb_generate_id`.
+ * @param parent The parent window of the new window.
+ * @param x The X coordinate of the new window.
+ * @param y The Y coordinate of the new window.
+ * @param width The width of the new window.
+ * @param height The height of the new window.
+ * @param border_width TODO:
+ * \n
+ * Must be zero if the `class` is `InputOnly` or a `xcb_match_error_t` occurs.
+ * @param _class A bitmask of #xcb_window_class_t values.
+ * @param _class \n
+ * @param visual Specifies the id for the new window's visual.
+ * \n
+ * The special value `XCB_COPY_FROM_PARENT` means the visual is taken from the
+ * \a parent window.
+ * @param value_mask A bitmask of #xcb_cw_t values.
+ * @return A cookie
+ *
+ * Creates an unmapped window as child of the specified \a parent window. A
+ * CreateNotify event will be generated. The new window is placed on top in the
+ * stacking order with respect to siblings.
+ * 
+ * The coordinate system has the X axis horizontal and the Y axis vertical with
+ * the origin [0, 0] at the upper-left corner. Coordinates are integral, in terms
+ * of pixels, and coincide with pixel centers. Each window and pixmap has its own
+ * coordinate system. For a window, the origin is inside the border at the inside,
+ * upper-left corner.
+ * 
+ * The created window is not yet displayed (mapped), call `xcb_map_window` to
+ * display it.
+ * 
+ * The created window will initially use the same cursor as its parent.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_create_window_aux_checked (xcb_connection_t                     *c,
+                               uint8_t                               depth,
+                               xcb_window_t                          wid,
+                               xcb_window_t                          parent,
+                               int16_t                               x,
+                               int16_t                               y,
+                               uint16_t                              width,
+                               uint16_t                              height,
+                               uint16_t                              border_width,
+                               uint16_t                              _class,
+                               xcb_visualid_t                        visual,
+                               uint32_t                              value_mask,
+                               const xcb_create_window_value_list_t *value_list);
+
+/**
+ * @brief Creates a window
+ *
+ * @param c The connection
+ * @param depth Specifies the new window's depth (TODO: what unit?).
+ * \n
+ * The special value `XCB_COPY_FROM_PARENT` means the depth is taken from the
+ * \a parent window.
+ * @param wid The ID with which you will refer to the new window, created by
+ * `xcb_generate_id`.
+ * @param parent The parent window of the new window.
+ * @param x The X coordinate of the new window.
+ * @param y The Y coordinate of the new window.
+ * @param width The width of the new window.
+ * @param height The height of the new window.
+ * @param border_width TODO:
+ * \n
+ * Must be zero if the `class` is `InputOnly` or a `xcb_match_error_t` occurs.
+ * @param _class A bitmask of #xcb_window_class_t values.
+ * @param _class \n
+ * @param visual Specifies the id for the new window's visual.
+ * \n
+ * The special value `XCB_COPY_FROM_PARENT` means the visual is taken from the
+ * \a parent window.
+ * @param value_mask A bitmask of #xcb_cw_t values.
+ * @return A cookie
+ *
+ * Creates an unmapped window as child of the specified \a parent window. A
+ * CreateNotify event will be generated. The new window is placed on top in the
+ * stacking order with respect to siblings.
+ * 
+ * The coordinate system has the X axis horizontal and the Y axis vertical with
+ * the origin [0, 0] at the upper-left corner. Coordinates are integral, in terms
+ * of pixels, and coincide with pixel centers. Each window and pixmap has its own
+ * coordinate system. For a window, the origin is inside the border at the inside,
+ * upper-left corner.
+ * 
+ * The created window is not yet displayed (mapped), call `xcb_map_window` to
+ * display it.
+ * 
+ * The created window will initially use the same cursor as its parent.
+ *
+ */
+xcb_void_cookie_t
+xcb_create_window_aux (xcb_connection_t                     *c,
+                       uint8_t                               depth,
+                       xcb_window_t                          wid,
+                       xcb_window_t                          parent,
+                       int16_t                               x,
+                       int16_t                               y,
+                       uint16_t                              width,
+                       uint16_t                              height,
+                       uint16_t                              border_width,
+                       uint16_t                              _class,
+                       xcb_visualid_t                        visual,
+                       uint32_t                              value_mask,
+                       const xcb_create_window_value_list_t *value_list);
+
+void *
+xcb_create_window_value_list (const xcb_create_window_request_t *R);
+
+int
+xcb_change_window_attributes_value_list_serialize (void                                            **_buffer,
+                                                   uint32_t                                          value_mask,
+                                                   const xcb_change_window_attributes_value_list_t  *_aux);
+
+int
+xcb_change_window_attributes_value_list_unpack (const void                                 *_buffer,
+                                                uint32_t                                    value_mask,
+                                                xcb_change_window_attributes_value_list_t  *_aux);
+
+int
+xcb_change_window_attributes_value_list_sizeof (const void  *_buffer,
+                                                uint32_t     value_mask);
+
+int
+xcb_change_window_attributes_sizeof (const void  *_buffer);
+
+/**
+ * @brief change window attributes
+ *
+ * @param c The connection
+ * @param window The window to change.
+ * @param value_mask A bitmask of #xcb_cw_t values.
+ * @param value_mask \n
+ * @param value_list Values for each of the attributes specified in the bitmask \a value_mask. The
+ * order has to correspond to the order of possible \a value_mask bits. See the
+ * example.
+ * @return A cookie
+ *
+ * Changes the attributes specified by \a value_mask for the specified \a window.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_change_window_attributes_checked (xcb_connection_t *c,
+                                      xcb_window_t      window,
+                                      uint32_t          value_mask,
+                                      const void       *value_list);
+
+/**
+ * @brief change window attributes
+ *
+ * @param c The connection
+ * @param window The window to change.
+ * @param value_mask A bitmask of #xcb_cw_t values.
+ * @param value_mask \n
+ * @param value_list Values for each of the attributes specified in the bitmask \a value_mask. The
+ * order has to correspond to the order of possible \a value_mask bits. See the
+ * example.
+ * @return A cookie
+ *
+ * Changes the attributes specified by \a value_mask for the specified \a window.
+ *
+ */
+xcb_void_cookie_t
+xcb_change_window_attributes (xcb_connection_t *c,
+                              xcb_window_t      window,
+                              uint32_t          value_mask,
+                              const void       *value_list);
+
+/**
+ * @brief change window attributes
+ *
+ * @param c The connection
+ * @param window The window to change.
+ * @param value_mask A bitmask of #xcb_cw_t values.
+ * @param value_mask \n
+ * @param value_list Values for each of the attributes specified in the bitmask \a value_mask. The
+ * order has to correspond to the order of possible \a value_mask bits. See the
+ * example.
+ * @return A cookie
+ *
+ * Changes the attributes specified by \a value_mask for the specified \a window.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_change_window_attributes_aux_checked (xcb_connection_t                                *c,
+                                          xcb_window_t                                     window,
+                                          uint32_t                                         value_mask,
+                                          const xcb_change_window_attributes_value_list_t *value_list);
+
+/**
+ * @brief change window attributes
+ *
+ * @param c The connection
+ * @param window The window to change.
+ * @param value_mask A bitmask of #xcb_cw_t values.
+ * @param value_mask \n
+ * @param value_list Values for each of the attributes specified in the bitmask \a value_mask. The
+ * order has to correspond to the order of possible \a value_mask bits. See the
+ * example.
+ * @return A cookie
+ *
+ * Changes the attributes specified by \a value_mask for the specified \a window.
+ *
+ */
+xcb_void_cookie_t
+xcb_change_window_attributes_aux (xcb_connection_t                                *c,
+                                  xcb_window_t                                     window,
+                                  uint32_t                                         value_mask,
+                                  const xcb_change_window_attributes_value_list_t *value_list);
+
+void *
+xcb_change_window_attributes_value_list (const xcb_change_window_attributes_request_t *R);
+
+/**
+ * @brief Gets window attributes
+ *
+ * @param c The connection
+ * @param window The window to get the attributes from.
+ * @return A cookie
+ *
+ * Gets the current attributes for the specified \a window.
+ *
+ */
+xcb_get_window_attributes_cookie_t
+xcb_get_window_attributes (xcb_connection_t *c,
+                           xcb_window_t      window);
+
+/**
+ * @brief Gets window attributes
+ *
+ * @param c The connection
+ * @param window The window to get the attributes from.
+ * @return A cookie
+ *
+ * Gets the current attributes for the specified \a window.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_get_window_attributes_cookie_t
+xcb_get_window_attributes_unchecked (xcb_connection_t *c,
+                                     xcb_window_t      window);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_get_window_attributes_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_get_window_attributes_reply_t *
+xcb_get_window_attributes_reply (xcb_connection_t                    *c,
+                                 xcb_get_window_attributes_cookie_t   cookie  /**< */,
+                                 xcb_generic_error_t                **e);
+
+/**
+ * @brief Destroys a window
+ *
+ * @param c The connection
+ * @param window The window to destroy.
+ * @return A cookie
+ *
+ * Destroys the specified window and all of its subwindows. A DestroyNotify event
+ * is generated for each destroyed window (a DestroyNotify event is first generated
+ * for any given window's inferiors). If the window was mapped, it will be
+ * automatically unmapped before destroying.
+ * 
+ * Calling DestroyWindow on the root window will do nothing.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_destroy_window_checked (xcb_connection_t *c,
+                            xcb_window_t      window);
+
+/**
+ * @brief Destroys a window
+ *
+ * @param c The connection
+ * @param window The window to destroy.
+ * @return A cookie
+ *
+ * Destroys the specified window and all of its subwindows. A DestroyNotify event
+ * is generated for each destroyed window (a DestroyNotify event is first generated
+ * for any given window's inferiors). If the window was mapped, it will be
+ * automatically unmapped before destroying.
+ * 
+ * Calling DestroyWindow on the root window will do nothing.
+ *
+ */
+xcb_void_cookie_t
+xcb_destroy_window (xcb_connection_t *c,
+                    xcb_window_t      window);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_destroy_subwindows_checked (xcb_connection_t *c,
+                                xcb_window_t      window);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_destroy_subwindows (xcb_connection_t *c,
+                        xcb_window_t      window);
+
+/**
+ * @brief Changes a client's save set
+ *
+ * @param c The connection
+ * @param mode A bitmask of #xcb_set_mode_t values.
+ * @param mode Insert to add the specified window to the save set or Delete to delete it from the save set.
+ * @param window The window to add or delete to/from your save set.
+ * @return A cookie
+ *
+ * TODO: explain what the save set is for.
+ * 
+ * This function either adds or removes the specified window to the client's (your
+ * application's) save set.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_change_save_set_checked (xcb_connection_t *c,
+                             uint8_t           mode,
+                             xcb_window_t      window);
+
+/**
+ * @brief Changes a client's save set
+ *
+ * @param c The connection
+ * @param mode A bitmask of #xcb_set_mode_t values.
+ * @param mode Insert to add the specified window to the save set or Delete to delete it from the save set.
+ * @param window The window to add or delete to/from your save set.
+ * @return A cookie
+ *
+ * TODO: explain what the save set is for.
+ * 
+ * This function either adds or removes the specified window to the client's (your
+ * application's) save set.
+ *
+ */
+xcb_void_cookie_t
+xcb_change_save_set (xcb_connection_t *c,
+                     uint8_t           mode,
+                     xcb_window_t      window);
+
+/**
+ * @brief Reparents a window
+ *
+ * @param c The connection
+ * @param window The window to reparent.
+ * @param parent The new parent of the window.
+ * @param x The X position of the window within its new parent.
+ * @param y The Y position of the window within its new parent.
+ * @return A cookie
+ *
+ * Makes the specified window a child of the specified parent window. If the
+ * window is mapped, it will automatically be unmapped before reparenting and
+ * re-mapped after reparenting. The window is placed in the stacking order on top
+ * with respect to sibling windows.
+ * 
+ * After reparenting, a ReparentNotify event is generated.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_reparent_window_checked (xcb_connection_t *c,
+                             xcb_window_t      window,
+                             xcb_window_t      parent,
+                             int16_t           x,
+                             int16_t           y);
+
+/**
+ * @brief Reparents a window
+ *
+ * @param c The connection
+ * @param window The window to reparent.
+ * @param parent The new parent of the window.
+ * @param x The X position of the window within its new parent.
+ * @param y The Y position of the window within its new parent.
+ * @return A cookie
+ *
+ * Makes the specified window a child of the specified parent window. If the
+ * window is mapped, it will automatically be unmapped before reparenting and
+ * re-mapped after reparenting. The window is placed in the stacking order on top
+ * with respect to sibling windows.
+ * 
+ * After reparenting, a ReparentNotify event is generated.
+ *
+ */
+xcb_void_cookie_t
+xcb_reparent_window (xcb_connection_t *c,
+                     xcb_window_t      window,
+                     xcb_window_t      parent,
+                     int16_t           x,
+                     int16_t           y);
+
+/**
+ * @brief Makes a window visible
+ *
+ * @param c The connection
+ * @param window The window to make visible.
+ * @return A cookie
+ *
+ * Maps the specified window. This means making the window visible (as long as its
+ * parent is visible).
+ * 
+ * This MapWindow request will be translated to a MapRequest request if a window
+ * manager is running. The window manager then decides to either map the window or
+ * not. Set the override-redirect window attribute to true if you want to bypass
+ * this mechanism.
+ * 
+ * If the window manager decides to map the window (or if no window manager is
+ * running), a MapNotify event is generated.
+ * 
+ * If the window becomes viewable and no earlier contents for it are remembered,
+ * the X server tiles the window with its background. If the window's background
+ * is undefined, the existing screen contents are not altered, and the X server
+ * generates zero or more Expose events.
+ * 
+ * If the window type is InputOutput, an Expose event will be generated when the
+ * window becomes visible. The normal response to an Expose event should be to
+ * repaint the window.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_map_window_checked (xcb_connection_t *c,
+                        xcb_window_t      window);
+
+/**
+ * @brief Makes a window visible
+ *
+ * @param c The connection
+ * @param window The window to make visible.
+ * @return A cookie
+ *
+ * Maps the specified window. This means making the window visible (as long as its
+ * parent is visible).
+ * 
+ * This MapWindow request will be translated to a MapRequest request if a window
+ * manager is running. The window manager then decides to either map the window or
+ * not. Set the override-redirect window attribute to true if you want to bypass
+ * this mechanism.
+ * 
+ * If the window manager decides to map the window (or if no window manager is
+ * running), a MapNotify event is generated.
+ * 
+ * If the window becomes viewable and no earlier contents for it are remembered,
+ * the X server tiles the window with its background. If the window's background
+ * is undefined, the existing screen contents are not altered, and the X server
+ * generates zero or more Expose events.
+ * 
+ * If the window type is InputOutput, an Expose event will be generated when the
+ * window becomes visible. The normal response to an Expose event should be to
+ * repaint the window.
+ *
+ */
+xcb_void_cookie_t
+xcb_map_window (xcb_connection_t *c,
+                xcb_window_t      window);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_map_subwindows_checked (xcb_connection_t *c,
+                            xcb_window_t      window);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_map_subwindows (xcb_connection_t *c,
+                    xcb_window_t      window);
+
+/**
+ * @brief Makes a window invisible
+ *
+ * @param c The connection
+ * @param window The window to make invisible.
+ * @return A cookie
+ *
+ * Unmaps the specified window. This means making the window invisible (and all
+ * its child windows).
+ * 
+ * Unmapping a window leads to the `UnmapNotify` event being generated. Also,
+ * `Expose` events are generated for formerly obscured windows.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_unmap_window_checked (xcb_connection_t *c,
+                          xcb_window_t      window);
+
+/**
+ * @brief Makes a window invisible
+ *
+ * @param c The connection
+ * @param window The window to make invisible.
+ * @return A cookie
+ *
+ * Unmaps the specified window. This means making the window invisible (and all
+ * its child windows).
+ * 
+ * Unmapping a window leads to the `UnmapNotify` event being generated. Also,
+ * `Expose` events are generated for formerly obscured windows.
+ *
+ */
+xcb_void_cookie_t
+xcb_unmap_window (xcb_connection_t *c,
+                  xcb_window_t      window);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_unmap_subwindows_checked (xcb_connection_t *c,
+                              xcb_window_t      window);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_unmap_subwindows (xcb_connection_t *c,
+                      xcb_window_t      window);
+
+int
+xcb_configure_window_value_list_serialize (void                                    **_buffer,
+                                           uint16_t                                  value_mask,
+                                           const xcb_configure_window_value_list_t  *_aux);
+
+int
+xcb_configure_window_value_list_unpack (const void                         *_buffer,
+                                        uint16_t                            value_mask,
+                                        xcb_configure_window_value_list_t  *_aux);
+
+int
+xcb_configure_window_value_list_sizeof (const void  *_buffer,
+                                        uint16_t     value_mask);
+
+int
+xcb_configure_window_sizeof (const void  *_buffer);
+
+/**
+ * @brief Configures window attributes
+ *
+ * @param c The connection
+ * @param window The window to configure.
+ * @param value_mask Bitmask of attributes to change.
+ * @param value_list New values, corresponding to the attributes in value_mask. The order has to
+ * correspond to the order of possible \a value_mask bits. See the example.
+ * @return A cookie
+ *
+ * Configures a window's size, position, border width and stacking order.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_configure_window_checked (xcb_connection_t *c,
+                              xcb_window_t      window,
+                              uint16_t          value_mask,
+                              const void       *value_list);
+
+/**
+ * @brief Configures window attributes
+ *
+ * @param c The connection
+ * @param window The window to configure.
+ * @param value_mask Bitmask of attributes to change.
+ * @param value_list New values, corresponding to the attributes in value_mask. The order has to
+ * correspond to the order of possible \a value_mask bits. See the example.
+ * @return A cookie
+ *
+ * Configures a window's size, position, border width and stacking order.
+ *
+ */
+xcb_void_cookie_t
+xcb_configure_window (xcb_connection_t *c,
+                      xcb_window_t      window,
+                      uint16_t          value_mask,
+                      const void       *value_list);
+
+/**
+ * @brief Configures window attributes
+ *
+ * @param c The connection
+ * @param window The window to configure.
+ * @param value_mask Bitmask of attributes to change.
+ * @param value_list New values, corresponding to the attributes in value_mask. The order has to
+ * correspond to the order of possible \a value_mask bits. See the example.
+ * @return A cookie
+ *
+ * Configures a window's size, position, border width and stacking order.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_configure_window_aux_checked (xcb_connection_t                        *c,
+                                  xcb_window_t                             window,
+                                  uint16_t                                 value_mask,
+                                  const xcb_configure_window_value_list_t *value_list);
+
+/**
+ * @brief Configures window attributes
+ *
+ * @param c The connection
+ * @param window The window to configure.
+ * @param value_mask Bitmask of attributes to change.
+ * @param value_list New values, corresponding to the attributes in value_mask. The order has to
+ * correspond to the order of possible \a value_mask bits. See the example.
+ * @return A cookie
+ *
+ * Configures a window's size, position, border width and stacking order.
+ *
+ */
+xcb_void_cookie_t
+xcb_configure_window_aux (xcb_connection_t                        *c,
+                          xcb_window_t                             window,
+                          uint16_t                                 value_mask,
+                          const xcb_configure_window_value_list_t *value_list);
+
+void *
+xcb_configure_window_value_list (const xcb_configure_window_request_t *R);
+
+/**
+ * @brief Change window stacking order
+ *
+ * @param c The connection
+ * @param direction A bitmask of #xcb_circulate_t values.
+ * @param direction \n
+ * @param window The window to raise/lower (depending on \a direction).
+ * @return A cookie
+ *
+ * If \a direction is `XCB_CIRCULATE_RAISE_LOWEST`, the lowest mapped child (if
+ * any) will be raised to the top of the stack.
+ * 
+ * If \a direction is `XCB_CIRCULATE_LOWER_HIGHEST`, the highest mapped child will
+ * be lowered to the bottom of the stack.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_circulate_window_checked (xcb_connection_t *c,
+                              uint8_t           direction,
+                              xcb_window_t      window);
+
+/**
+ * @brief Change window stacking order
+ *
+ * @param c The connection
+ * @param direction A bitmask of #xcb_circulate_t values.
+ * @param direction \n
+ * @param window The window to raise/lower (depending on \a direction).
+ * @return A cookie
+ *
+ * If \a direction is `XCB_CIRCULATE_RAISE_LOWEST`, the lowest mapped child (if
+ * any) will be raised to the top of the stack.
+ * 
+ * If \a direction is `XCB_CIRCULATE_LOWER_HIGHEST`, the highest mapped child will
+ * be lowered to the bottom of the stack.
+ *
+ */
+xcb_void_cookie_t
+xcb_circulate_window (xcb_connection_t *c,
+                      uint8_t           direction,
+                      xcb_window_t      window);
+
+/**
+ * @brief Get current window geometry
+ *
+ * @param c The connection
+ * @param drawable The drawable (`Window` or `Pixmap`) of which the geometry will be received.
+ * @return A cookie
+ *
+ * Gets the current geometry of the specified drawable (either `Window` or `Pixmap`).
+ *
+ */
+xcb_get_geometry_cookie_t
+xcb_get_geometry (xcb_connection_t *c,
+                  xcb_drawable_t    drawable);
+
+/**
+ * @brief Get current window geometry
+ *
+ * @param c The connection
+ * @param drawable The drawable (`Window` or `Pixmap`) of which the geometry will be received.
+ * @return A cookie
+ *
+ * Gets the current geometry of the specified drawable (either `Window` or `Pixmap`).
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_get_geometry_cookie_t
+xcb_get_geometry_unchecked (xcb_connection_t *c,
+                            xcb_drawable_t    drawable);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_get_geometry_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_get_geometry_reply_t *
+xcb_get_geometry_reply (xcb_connection_t           *c,
+                        xcb_get_geometry_cookie_t   cookie  /**< */,
+                        xcb_generic_error_t       **e);
+
+int
+xcb_query_tree_sizeof (const void  *_buffer);
+
+/**
+ * @brief query the window tree
+ *
+ * @param c The connection
+ * @param window The \a window to query.
+ * @return A cookie
+ *
+ * Gets the root window ID, parent window ID and list of children windows for the
+ * specified \a window. The children are listed in bottom-to-top stacking order.
+ *
+ */
+xcb_query_tree_cookie_t
+xcb_query_tree (xcb_connection_t *c,
+                xcb_window_t      window);
+
+/**
+ * @brief query the window tree
+ *
+ * @param c The connection
+ * @param window The \a window to query.
+ * @return A cookie
+ *
+ * Gets the root window ID, parent window ID and list of children windows for the
+ * specified \a window. The children are listed in bottom-to-top stacking order.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_query_tree_cookie_t
+xcb_query_tree_unchecked (xcb_connection_t *c,
+                          xcb_window_t      window);
+
+xcb_window_t *
+xcb_query_tree_children (const xcb_query_tree_reply_t *R);
+
+int
+xcb_query_tree_children_length (const xcb_query_tree_reply_t *R);
+
+xcb_generic_iterator_t
+xcb_query_tree_children_end (const xcb_query_tree_reply_t *R);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_query_tree_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_query_tree_reply_t *
+xcb_query_tree_reply (xcb_connection_t         *c,
+                      xcb_query_tree_cookie_t   cookie  /**< */,
+                      xcb_generic_error_t     **e);
+
+int
+xcb_intern_atom_sizeof (const void  *_buffer);
+
+/**
+ * @brief Get atom identifier by name
+ *
+ * @param c The connection
+ * @param only_if_exists Return a valid atom id only if the atom already exists.
+ * @param name_len The length of the following \a name.
+ * @param name The name of the atom.
+ * @return A cookie
+ *
+ * Retrieves the identifier (xcb_atom_t TODO) for the atom with the specified
+ * name. Atoms are used in protocols like EWMH, for example to store window titles
+ * (`_NET_WM_NAME` atom) as property of a window.
+ * 
+ * If \a only_if_exists is 0, the atom will be created if it does not already exist.
+ * If \a only_if_exists is 1, `XCB_ATOM_NONE` will be returned if the atom does
+ * not yet exist.
+ *
+ */
+xcb_intern_atom_cookie_t
+xcb_intern_atom (xcb_connection_t *c,
+                 uint8_t           only_if_exists,
+                 uint16_t          name_len,
+                 const char       *name);
+
+/**
+ * @brief Get atom identifier by name
+ *
+ * @param c The connection
+ * @param only_if_exists Return a valid atom id only if the atom already exists.
+ * @param name_len The length of the following \a name.
+ * @param name The name of the atom.
+ * @return A cookie
+ *
+ * Retrieves the identifier (xcb_atom_t TODO) for the atom with the specified
+ * name. Atoms are used in protocols like EWMH, for example to store window titles
+ * (`_NET_WM_NAME` atom) as property of a window.
+ * 
+ * If \a only_if_exists is 0, the atom will be created if it does not already exist.
+ * If \a only_if_exists is 1, `XCB_ATOM_NONE` will be returned if the atom does
+ * not yet exist.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_intern_atom_cookie_t
+xcb_intern_atom_unchecked (xcb_connection_t *c,
+                           uint8_t           only_if_exists,
+                           uint16_t          name_len,
+                           const char       *name);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_intern_atom_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_intern_atom_reply_t *
+xcb_intern_atom_reply (xcb_connection_t          *c,
+                       xcb_intern_atom_cookie_t   cookie  /**< */,
+                       xcb_generic_error_t      **e);
+
+int
+xcb_get_atom_name_sizeof (const void  *_buffer);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_get_atom_name_cookie_t
+xcb_get_atom_name (xcb_connection_t *c,
+                   xcb_atom_t        atom);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_get_atom_name_cookie_t
+xcb_get_atom_name_unchecked (xcb_connection_t *c,
+                             xcb_atom_t        atom);
+
+char *
+xcb_get_atom_name_name (const xcb_get_atom_name_reply_t *R);
+
+int
+xcb_get_atom_name_name_length (const xcb_get_atom_name_reply_t *R);
+
+xcb_generic_iterator_t
+xcb_get_atom_name_name_end (const xcb_get_atom_name_reply_t *R);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_get_atom_name_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_get_atom_name_reply_t *
+xcb_get_atom_name_reply (xcb_connection_t            *c,
+                         xcb_get_atom_name_cookie_t   cookie  /**< */,
+                         xcb_generic_error_t        **e);
+
+int
+xcb_change_property_sizeof (const void  *_buffer);
+
+/**
+ * @brief Changes a window property
+ *
+ * @param c The connection
+ * @param mode A bitmask of #xcb_prop_mode_t values.
+ * @param mode \n
+ * @param window The window whose property you want to change.
+ * @param property The property you want to change (an atom).
+ * @param type The type of the property you want to change (an atom).
+ * @param format Specifies whether the data should be viewed as a list of 8-bit, 16-bit or
+ * 32-bit quantities. Possible values are 8, 16 and 32. This information allows
+ * the X server to correctly perform byte-swap operations as necessary.
+ * @param data_len Specifies the number of elements (see \a format).
+ * @param data The property data.
+ * @return A cookie
+ *
+ * Sets or updates a property on the specified \a window. Properties are for
+ * example the window title (`WM_NAME`) or its minimum size (`WM_NORMAL_HINTS`).
+ * Protocols such as EWMH also use properties - for example EWMH defines the
+ * window title, encoded as UTF-8 string, in the `_NET_WM_NAME` property.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_change_property_checked (xcb_connection_t *c,
+                             uint8_t           mode,
+                             xcb_window_t      window,
+                             xcb_atom_t        property,
+                             xcb_atom_t        type,
+                             uint8_t           format,
+                             uint32_t          data_len,
+                             const void       *data);
+
+/**
+ * @brief Changes a window property
+ *
+ * @param c The connection
+ * @param mode A bitmask of #xcb_prop_mode_t values.
+ * @param mode \n
+ * @param window The window whose property you want to change.
+ * @param property The property you want to change (an atom).
+ * @param type The type of the property you want to change (an atom).
+ * @param format Specifies whether the data should be viewed as a list of 8-bit, 16-bit or
+ * 32-bit quantities. Possible values are 8, 16 and 32. This information allows
+ * the X server to correctly perform byte-swap operations as necessary.
+ * @param data_len Specifies the number of elements (see \a format).
+ * @param data The property data.
+ * @return A cookie
+ *
+ * Sets or updates a property on the specified \a window. Properties are for
+ * example the window title (`WM_NAME`) or its minimum size (`WM_NORMAL_HINTS`).
+ * Protocols such as EWMH also use properties - for example EWMH defines the
+ * window title, encoded as UTF-8 string, in the `_NET_WM_NAME` property.
+ *
+ */
+xcb_void_cookie_t
+xcb_change_property (xcb_connection_t *c,
+                     uint8_t           mode,
+                     xcb_window_t      window,
+                     xcb_atom_t        property,
+                     xcb_atom_t        type,
+                     uint8_t           format,
+                     uint32_t          data_len,
+                     const void       *data);
+
+void *
+xcb_change_property_data (const xcb_change_property_request_t *R);
+
+int
+xcb_change_property_data_length (const xcb_change_property_request_t *R);
+
+xcb_generic_iterator_t
+xcb_change_property_data_end (const xcb_change_property_request_t *R);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_delete_property_checked (xcb_connection_t *c,
+                             xcb_window_t      window,
+                             xcb_atom_t        property);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_delete_property (xcb_connection_t *c,
+                     xcb_window_t      window,
+                     xcb_atom_t        property);
+
+int
+xcb_get_property_sizeof (const void  *_buffer);
+
+/**
+ * @brief Gets a window property
+ *
+ * @param c The connection
+ * @param _delete Whether the property should actually be deleted. For deleting a property, the
+ * specified \a type has to match the actual property type.
+ * @param window The window whose property you want to get.
+ * @param property The property you want to get (an atom).
+ * @param type The type of the property you want to get (an atom).
+ * @param long_offset Specifies the offset (in 32-bit multiples) in the specified property where the
+ * data is to be retrieved.
+ * @param long_length Specifies how many 32-bit multiples of data should be retrieved (e.g. if you
+ * set \a long_length to 4, you will receive 16 bytes of data).
+ * @return A cookie
+ *
+ * Gets the specified \a property from the specified \a window. Properties are for
+ * example the window title (`WM_NAME`) or its minimum size (`WM_NORMAL_HINTS`).
+ * Protocols such as EWMH also use properties - for example EWMH defines the
+ * window title, encoded as UTF-8 string, in the `_NET_WM_NAME` property.
+ * 
+ * TODO: talk about \a type
+ * 
+ * TODO: talk about `delete`
+ * 
+ * TODO: talk about the offset/length thing. what's a valid use case?
+ *
+ */
+xcb_get_property_cookie_t
+xcb_get_property (xcb_connection_t *c,
+                  uint8_t           _delete,
+                  xcb_window_t      window,
+                  xcb_atom_t        property,
+                  xcb_atom_t        type,
+                  uint32_t          long_offset,
+                  uint32_t          long_length);
+
+/**
+ * @brief Gets a window property
+ *
+ * @param c The connection
+ * @param _delete Whether the property should actually be deleted. For deleting a property, the
+ * specified \a type has to match the actual property type.
+ * @param window The window whose property you want to get.
+ * @param property The property you want to get (an atom).
+ * @param type The type of the property you want to get (an atom).
+ * @param long_offset Specifies the offset (in 32-bit multiples) in the specified property where the
+ * data is to be retrieved.
+ * @param long_length Specifies how many 32-bit multiples of data should be retrieved (e.g. if you
+ * set \a long_length to 4, you will receive 16 bytes of data).
+ * @return A cookie
+ *
+ * Gets the specified \a property from the specified \a window. Properties are for
+ * example the window title (`WM_NAME`) or its minimum size (`WM_NORMAL_HINTS`).
+ * Protocols such as EWMH also use properties - for example EWMH defines the
+ * window title, encoded as UTF-8 string, in the `_NET_WM_NAME` property.
+ * 
+ * TODO: talk about \a type
+ * 
+ * TODO: talk about `delete`
+ * 
+ * TODO: talk about the offset/length thing. what's a valid use case?
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_get_property_cookie_t
+xcb_get_property_unchecked (xcb_connection_t *c,
+                            uint8_t           _delete,
+                            xcb_window_t      window,
+                            xcb_atom_t        property,
+                            xcb_atom_t        type,
+                            uint32_t          long_offset,
+                            uint32_t          long_length);
+
+void *
+xcb_get_property_value (const xcb_get_property_reply_t *R);
+
+int
+xcb_get_property_value_length (const xcb_get_property_reply_t *R);
+
+xcb_generic_iterator_t
+xcb_get_property_value_end (const xcb_get_property_reply_t *R);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_get_property_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_get_property_reply_t *
+xcb_get_property_reply (xcb_connection_t           *c,
+                        xcb_get_property_cookie_t   cookie  /**< */,
+                        xcb_generic_error_t       **e);
+
+int
+xcb_list_properties_sizeof (const void  *_buffer);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_list_properties_cookie_t
+xcb_list_properties (xcb_connection_t *c,
+                     xcb_window_t      window);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_list_properties_cookie_t
+xcb_list_properties_unchecked (xcb_connection_t *c,
+                               xcb_window_t      window);
+
+xcb_atom_t *
+xcb_list_properties_atoms (const xcb_list_properties_reply_t *R);
+
+int
+xcb_list_properties_atoms_length (const xcb_list_properties_reply_t *R);
+
+xcb_generic_iterator_t
+xcb_list_properties_atoms_end (const xcb_list_properties_reply_t *R);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_list_properties_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_list_properties_reply_t *
+xcb_list_properties_reply (xcb_connection_t              *c,
+                           xcb_list_properties_cookie_t   cookie  /**< */,
+                           xcb_generic_error_t          **e);
+
+/**
+ * @brief Sets the owner of a selection
+ *
+ * @param c The connection
+ * @param owner The new owner of the selection.
+ * \n
+ * The special value `XCB_NONE` means that the selection will have no owner.
+ * @param selection The selection.
+ * @param time Timestamp to avoid race conditions when running X over the network.
+ * \n
+ * The selection will not be changed if \a time is earlier than the current
+ * last-change time of the \a selection or is later than the current X server time.
+ * Otherwise, the last-change time is set to the specified time.
+ * \n
+ * The special value `XCB_CURRENT_TIME` will be replaced with the current server
+ * time.
+ * @return A cookie
+ *
+ * Makes `window` the owner of the selection \a selection and updates the
+ * last-change time of the specified selection.
+ * 
+ * TODO: briefly explain what a selection is.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_set_selection_owner_checked (xcb_connection_t *c,
+                                 xcb_window_t      owner,
+                                 xcb_atom_t        selection,
+                                 xcb_timestamp_t   time);
+
+/**
+ * @brief Sets the owner of a selection
+ *
+ * @param c The connection
+ * @param owner The new owner of the selection.
+ * \n
+ * The special value `XCB_NONE` means that the selection will have no owner.
+ * @param selection The selection.
+ * @param time Timestamp to avoid race conditions when running X over the network.
+ * \n
+ * The selection will not be changed if \a time is earlier than the current
+ * last-change time of the \a selection or is later than the current X server time.
+ * Otherwise, the last-change time is set to the specified time.
+ * \n
+ * The special value `XCB_CURRENT_TIME` will be replaced with the current server
+ * time.
+ * @return A cookie
+ *
+ * Makes `window` the owner of the selection \a selection and updates the
+ * last-change time of the specified selection.
+ * 
+ * TODO: briefly explain what a selection is.
+ *
+ */
+xcb_void_cookie_t
+xcb_set_selection_owner (xcb_connection_t *c,
+                         xcb_window_t      owner,
+                         xcb_atom_t        selection,
+                         xcb_timestamp_t   time);
+
+/**
+ * @brief Gets the owner of a selection
+ *
+ * @param c The connection
+ * @param selection The selection.
+ * @return A cookie
+ *
+ * Gets the owner of the specified selection.
+ * 
+ * TODO: briefly explain what a selection is.
+ *
+ */
+xcb_get_selection_owner_cookie_t
+xcb_get_selection_owner (xcb_connection_t *c,
+                         xcb_atom_t        selection);
+
+/**
+ * @brief Gets the owner of a selection
+ *
+ * @param c The connection
+ * @param selection The selection.
+ * @return A cookie
+ *
+ * Gets the owner of the specified selection.
+ * 
+ * TODO: briefly explain what a selection is.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_get_selection_owner_cookie_t
+xcb_get_selection_owner_unchecked (xcb_connection_t *c,
+                                   xcb_atom_t        selection);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_get_selection_owner_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_get_selection_owner_reply_t *
+xcb_get_selection_owner_reply (xcb_connection_t                  *c,
+                               xcb_get_selection_owner_cookie_t   cookie  /**< */,
+                               xcb_generic_error_t              **e);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_convert_selection_checked (xcb_connection_t *c,
+                               xcb_window_t      requestor,
+                               xcb_atom_t        selection,
+                               xcb_atom_t        target,
+                               xcb_atom_t        property,
+                               xcb_timestamp_t   time);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_convert_selection (xcb_connection_t *c,
+                       xcb_window_t      requestor,
+                       xcb_atom_t        selection,
+                       xcb_atom_t        target,
+                       xcb_atom_t        property,
+                       xcb_timestamp_t   time);
+
+/**
+ * @brief send an event
+ *
+ * @param c The connection
+ * @param propagate If \a propagate is true and no clients have selected any event on \a destination,
+ * the destination is replaced with the closest ancestor of \a destination for
+ * which some client has selected a type in \a event_mask and for which no
+ * intervening window has that type in its do-not-propagate-mask. If no such
+ * window exists or if the window is an ancestor of the focus window and
+ * `InputFocus` was originally specified as the destination, the event is not sent
+ * to any clients. Otherwise, the event is reported to every client selecting on
+ * the final destination any of the types specified in \a event_mask.
+ * @param destination The window to send this event to. Every client which selects any event within
+ * \a event_mask on \a destination will get the event.
+ * \n
+ * The special value `XCB_SEND_EVENT_DEST_POINTER_WINDOW` refers to the window
+ * that contains the mouse pointer.
+ * \n
+ * The special value `XCB_SEND_EVENT_DEST_ITEM_FOCUS` refers to the window which
+ * has the keyboard focus.
+ * @param event_mask Event_mask for determining which clients should receive the specified event.
+ * See \a destination and \a propagate.
+ * @param event The event to send to the specified \a destination.
+ * @return A cookie
+ *
+ * Identifies the \a destination window, determines which clients should receive
+ * the specified event and ignores any active grabs.
+ * 
+ * The \a event must be one of the core events or an event defined by an extension,
+ * so that the X server can correctly byte-swap the contents as necessary. The
+ * contents of \a event are otherwise unaltered and unchecked except for the
+ * `send_event` field which is forced to 'true'.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_send_event_checked (xcb_connection_t *c,
+                        uint8_t           propagate,
+                        xcb_window_t      destination,
+                        uint32_t          event_mask,
+                        const char       *event);
+
+/**
+ * @brief send an event
+ *
+ * @param c The connection
+ * @param propagate If \a propagate is true and no clients have selected any event on \a destination,
+ * the destination is replaced with the closest ancestor of \a destination for
+ * which some client has selected a type in \a event_mask and for which no
+ * intervening window has that type in its do-not-propagate-mask. If no such
+ * window exists or if the window is an ancestor of the focus window and
+ * `InputFocus` was originally specified as the destination, the event is not sent
+ * to any clients. Otherwise, the event is reported to every client selecting on
+ * the final destination any of the types specified in \a event_mask.
+ * @param destination The window to send this event to. Every client which selects any event within
+ * \a event_mask on \a destination will get the event.
+ * \n
+ * The special value `XCB_SEND_EVENT_DEST_POINTER_WINDOW` refers to the window
+ * that contains the mouse pointer.
+ * \n
+ * The special value `XCB_SEND_EVENT_DEST_ITEM_FOCUS` refers to the window which
+ * has the keyboard focus.
+ * @param event_mask Event_mask for determining which clients should receive the specified event.
+ * See \a destination and \a propagate.
+ * @param event The event to send to the specified \a destination.
+ * @return A cookie
+ *
+ * Identifies the \a destination window, determines which clients should receive
+ * the specified event and ignores any active grabs.
+ * 
+ * The \a event must be one of the core events or an event defined by an extension,
+ * so that the X server can correctly byte-swap the contents as necessary. The
+ * contents of \a event are otherwise unaltered and unchecked except for the
+ * `send_event` field which is forced to 'true'.
+ *
+ */
+xcb_void_cookie_t
+xcb_send_event (xcb_connection_t *c,
+                uint8_t           propagate,
+                xcb_window_t      destination,
+                uint32_t          event_mask,
+                const char       *event);
+
+/**
+ * @brief Grab the pointer
+ *
+ * @param c The connection
+ * @param owner_events If 1, the \a grab_window will still get the pointer events. If 0, events are not
+ * reported to the \a grab_window.
+ * @param grab_window Specifies the window on which the pointer should be grabbed.
+ * @param event_mask Specifies which pointer events are reported to the client.
+ * \n
+ * TODO: which values?
+ * @param pointer_mode A bitmask of #xcb_grab_mode_t values.
+ * @param pointer_mode \n
+ * @param keyboard_mode A bitmask of #xcb_grab_mode_t values.
+ * @param keyboard_mode \n
+ * @param confine_to Specifies the window to confine the pointer in (the user will not be able to
+ * move the pointer out of that window).
+ * \n
+ * The special value `XCB_NONE` means don't confine the pointer.
+ * @param cursor Specifies the cursor that should be displayed or `XCB_NONE` to not change the
+ * cursor.
+ * @param time The time argument allows you to avoid certain circumstances that come up if
+ * applications take a long time to respond or if there are long network delays.
+ * Consider a situation where you have two applications, both of which normally
+ * grab the pointer when clicked on. If both applications specify the timestamp
+ * from the event, the second application may wake up faster and successfully grab
+ * the pointer before the first application. The first application then will get
+ * an indication that the other application grabbed the pointer before its request
+ * was processed.
+ * \n
+ * The special value `XCB_CURRENT_TIME` will be replaced with the current server
+ * time.
+ * @return A cookie
+ *
+ * Actively grabs control of the pointer. Further pointer events are reported only to the grabbing client. Overrides any active pointer grab by this client.
+ *
+ */
+xcb_grab_pointer_cookie_t
+xcb_grab_pointer (xcb_connection_t *c,
+                  uint8_t           owner_events,
+                  xcb_window_t      grab_window,
+                  uint16_t          event_mask,
+                  uint8_t           pointer_mode,
+                  uint8_t           keyboard_mode,
+                  xcb_window_t      confine_to,
+                  xcb_cursor_t      cursor,
+                  xcb_timestamp_t   time);
+
+/**
+ * @brief Grab the pointer
+ *
+ * @param c The connection
+ * @param owner_events If 1, the \a grab_window will still get the pointer events. If 0, events are not
+ * reported to the \a grab_window.
+ * @param grab_window Specifies the window on which the pointer should be grabbed.
+ * @param event_mask Specifies which pointer events are reported to the client.
+ * \n
+ * TODO: which values?
+ * @param pointer_mode A bitmask of #xcb_grab_mode_t values.
+ * @param pointer_mode \n
+ * @param keyboard_mode A bitmask of #xcb_grab_mode_t values.
+ * @param keyboard_mode \n
+ * @param confine_to Specifies the window to confine the pointer in (the user will not be able to
+ * move the pointer out of that window).
+ * \n
+ * The special value `XCB_NONE` means don't confine the pointer.
+ * @param cursor Specifies the cursor that should be displayed or `XCB_NONE` to not change the
+ * cursor.
+ * @param time The time argument allows you to avoid certain circumstances that come up if
+ * applications take a long time to respond or if there are long network delays.
+ * Consider a situation where you have two applications, both of which normally
+ * grab the pointer when clicked on. If both applications specify the timestamp
+ * from the event, the second application may wake up faster and successfully grab
+ * the pointer before the first application. The first application then will get
+ * an indication that the other application grabbed the pointer before its request
+ * was processed.
+ * \n
+ * The special value `XCB_CURRENT_TIME` will be replaced with the current server
+ * time.
+ * @return A cookie
+ *
+ * Actively grabs control of the pointer. Further pointer events are reported only to the grabbing client. Overrides any active pointer grab by this client.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_grab_pointer_cookie_t
+xcb_grab_pointer_unchecked (xcb_connection_t *c,
+                            uint8_t           owner_events,
+                            xcb_window_t      grab_window,
+                            uint16_t          event_mask,
+                            uint8_t           pointer_mode,
+                            uint8_t           keyboard_mode,
+                            xcb_window_t      confine_to,
+                            xcb_cursor_t      cursor,
+                            xcb_timestamp_t   time);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_grab_pointer_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_grab_pointer_reply_t *
+xcb_grab_pointer_reply (xcb_connection_t           *c,
+                        xcb_grab_pointer_cookie_t   cookie  /**< */,
+                        xcb_generic_error_t       **e);
+
+/**
+ * @brief release the pointer
+ *
+ * @param c The connection
+ * @param time Timestamp to avoid race conditions when running X over the network.
+ * \n
+ * The pointer will not be released if \a time is earlier than the
+ * last-pointer-grab time or later than the current X server time.
+ * @return A cookie
+ *
+ * Releases the pointer and any queued events if you actively grabbed the pointer
+ * before using `xcb_grab_pointer`, `xcb_grab_button` or within a normal button
+ * press.
+ * 
+ * EnterNotify and LeaveNotify events are generated.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_ungrab_pointer_checked (xcb_connection_t *c,
+                            xcb_timestamp_t   time);
+
+/**
+ * @brief release the pointer
+ *
+ * @param c The connection
+ * @param time Timestamp to avoid race conditions when running X over the network.
+ * \n
+ * The pointer will not be released if \a time is earlier than the
+ * last-pointer-grab time or later than the current X server time.
+ * @return A cookie
+ *
+ * Releases the pointer and any queued events if you actively grabbed the pointer
+ * before using `xcb_grab_pointer`, `xcb_grab_button` or within a normal button
+ * press.
+ * 
+ * EnterNotify and LeaveNotify events are generated.
+ *
+ */
+xcb_void_cookie_t
+xcb_ungrab_pointer (xcb_connection_t *c,
+                    xcb_timestamp_t   time);
+
+/**
+ * @brief Grab pointer button(s)
+ *
+ * @param c The connection
+ * @param owner_events If 1, the \a grab_window will still get the pointer events. If 0, events are not
+ * reported to the \a grab_window.
+ * @param grab_window Specifies the window on which the pointer should be grabbed.
+ * @param event_mask Specifies which pointer events are reported to the client.
+ * \n
+ * TODO: which values?
+ * @param pointer_mode A bitmask of #xcb_grab_mode_t values.
+ * @param pointer_mode \n
+ * @param keyboard_mode A bitmask of #xcb_grab_mode_t values.
+ * @param keyboard_mode \n
+ * @param confine_to Specifies the window to confine the pointer in (the user will not be able to
+ * move the pointer out of that window).
+ * \n
+ * The special value `XCB_NONE` means don't confine the pointer.
+ * @param cursor Specifies the cursor that should be displayed or `XCB_NONE` to not change the
+ * cursor.
+ * @param button A bitmask of #xcb_button_index_t values.
+ * @param button \n
+ * @param modifiers The modifiers to grab.
+ * \n
+ * Using the special value `XCB_MOD_MASK_ANY` means grab the pointer with all
+ * possible modifier combinations.
+ * @return A cookie
+ *
+ * This request establishes a passive grab. The pointer is actively grabbed as
+ * described in GrabPointer, the last-pointer-grab time is set to the time at
+ * which the button was pressed (as transmitted in the ButtonPress event), and the
+ * ButtonPress event is reported if all of the following conditions are true:
+ * 
+ * The pointer is not grabbed and the specified button is logically pressed when
+ * the specified modifier keys are logically down, and no other buttons or
+ * modifier keys are logically down.
+ * 
+ * The grab-window contains the pointer.
+ * 
+ * The confine-to window (if any) is viewable.
+ * 
+ * A passive grab on the same button/key combination does not exist on any
+ * ancestor of grab-window.
+ * 
+ * The interpretation of the remaining arguments is the same as for GrabPointer.
+ * The active grab is terminated automatically when the logical state of the
+ * pointer has all buttons released, independent of the logical state of modifier
+ * keys. Note that the logical state of a device (as seen by means of the
+ * protocol) may lag the physical state if device event processing is frozen. This
+ * request overrides all previous passive grabs by the same client on the same
+ * button/key combinations on the same window. A modifier of AnyModifier is
+ * equivalent to issuing the request for all possible modifier combinations
+ * (including the combination of no modifiers). It is not required that all
+ * specified modifiers have currently assigned keycodes. A button of AnyButton is
+ * equivalent to issuing the request for all possible buttons. Otherwise, it is
+ * not required that the button specified currently be assigned to a physical
+ * button.
+ * 
+ * An Access error is generated if some other client has already issued a
+ * GrabButton request with the same button/key combination on the same window.
+ * When using AnyModifier or AnyButton, the request fails completely (no grabs are
+ * established), and an Access error is generated if there is a conflicting grab
+ * for any combination. The request has no effect on an active grab.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_grab_button_checked (xcb_connection_t *c,
+                         uint8_t           owner_events,
+                         xcb_window_t      grab_window,
+                         uint16_t          event_mask,
+                         uint8_t           pointer_mode,
+                         uint8_t           keyboard_mode,
+                         xcb_window_t      confine_to,
+                         xcb_cursor_t      cursor,
+                         uint8_t           button,
+                         uint16_t          modifiers);
+
+/**
+ * @brief Grab pointer button(s)
+ *
+ * @param c The connection
+ * @param owner_events If 1, the \a grab_window will still get the pointer events. If 0, events are not
+ * reported to the \a grab_window.
+ * @param grab_window Specifies the window on which the pointer should be grabbed.
+ * @param event_mask Specifies which pointer events are reported to the client.
+ * \n
+ * TODO: which values?
+ * @param pointer_mode A bitmask of #xcb_grab_mode_t values.
+ * @param pointer_mode \n
+ * @param keyboard_mode A bitmask of #xcb_grab_mode_t values.
+ * @param keyboard_mode \n
+ * @param confine_to Specifies the window to confine the pointer in (the user will not be able to
+ * move the pointer out of that window).
+ * \n
+ * The special value `XCB_NONE` means don't confine the pointer.
+ * @param cursor Specifies the cursor that should be displayed or `XCB_NONE` to not change the
+ * cursor.
+ * @param button A bitmask of #xcb_button_index_t values.
+ * @param button \n
+ * @param modifiers The modifiers to grab.
+ * \n
+ * Using the special value `XCB_MOD_MASK_ANY` means grab the pointer with all
+ * possible modifier combinations.
+ * @return A cookie
+ *
+ * This request establishes a passive grab. The pointer is actively grabbed as
+ * described in GrabPointer, the last-pointer-grab time is set to the time at
+ * which the button was pressed (as transmitted in the ButtonPress event), and the
+ * ButtonPress event is reported if all of the following conditions are true:
+ * 
+ * The pointer is not grabbed and the specified button is logically pressed when
+ * the specified modifier keys are logically down, and no other buttons or
+ * modifier keys are logically down.
+ * 
+ * The grab-window contains the pointer.
+ * 
+ * The confine-to window (if any) is viewable.
+ * 
+ * A passive grab on the same button/key combination does not exist on any
+ * ancestor of grab-window.
+ * 
+ * The interpretation of the remaining arguments is the same as for GrabPointer.
+ * The active grab is terminated automatically when the logical state of the
+ * pointer has all buttons released, independent of the logical state of modifier
+ * keys. Note that the logical state of a device (as seen by means of the
+ * protocol) may lag the physical state if device event processing is frozen. This
+ * request overrides all previous passive grabs by the same client on the same
+ * button/key combinations on the same window. A modifier of AnyModifier is
+ * equivalent to issuing the request for all possible modifier combinations
+ * (including the combination of no modifiers). It is not required that all
+ * specified modifiers have currently assigned keycodes. A button of AnyButton is
+ * equivalent to issuing the request for all possible buttons. Otherwise, it is
+ * not required that the button specified currently be assigned to a physical
+ * button.
+ * 
+ * An Access error is generated if some other client has already issued a
+ * GrabButton request with the same button/key combination on the same window.
+ * When using AnyModifier or AnyButton, the request fails completely (no grabs are
+ * established), and an Access error is generated if there is a conflicting grab
+ * for any combination. The request has no effect on an active grab.
+ *
+ */
+xcb_void_cookie_t
+xcb_grab_button (xcb_connection_t *c,
+                 uint8_t           owner_events,
+                 xcb_window_t      grab_window,
+                 uint16_t          event_mask,
+                 uint8_t           pointer_mode,
+                 uint8_t           keyboard_mode,
+                 xcb_window_t      confine_to,
+                 xcb_cursor_t      cursor,
+                 uint8_t           button,
+                 uint16_t          modifiers);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_ungrab_button_checked (xcb_connection_t *c,
+                           uint8_t           button,
+                           xcb_window_t      grab_window,
+                           uint16_t          modifiers);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_ungrab_button (xcb_connection_t *c,
+                   uint8_t           button,
+                   xcb_window_t      grab_window,
+                   uint16_t          modifiers);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_change_active_pointer_grab_checked (xcb_connection_t *c,
+                                        xcb_cursor_t      cursor,
+                                        xcb_timestamp_t   time,
+                                        uint16_t          event_mask);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_change_active_pointer_grab (xcb_connection_t *c,
+                                xcb_cursor_t      cursor,
+                                xcb_timestamp_t   time,
+                                uint16_t          event_mask);
+
+/**
+ * @brief Grab the keyboard
+ *
+ * @param c The connection
+ * @param owner_events If 1, the \a grab_window will still get the pointer events. If 0, events are not
+ * reported to the \a grab_window.
+ * @param grab_window Specifies the window on which the pointer should be grabbed.
+ * @param time Timestamp to avoid race conditions when running X over the network.
+ * \n
+ * The special value `XCB_CURRENT_TIME` will be replaced with the current server
+ * time.
+ * @param pointer_mode A bitmask of #xcb_grab_mode_t values.
+ * @param pointer_mode \n
+ * @param keyboard_mode A bitmask of #xcb_grab_mode_t values.
+ * @param keyboard_mode \n
+ * @return A cookie
+ *
+ * Actively grabs control of the keyboard and generates FocusIn and FocusOut
+ * events. Further key events are reported only to the grabbing client.
+ * 
+ * Any active keyboard grab by this client is overridden. If the keyboard is
+ * actively grabbed by some other client, `AlreadyGrabbed` is returned. If
+ * \a grab_window is not viewable, `GrabNotViewable` is returned. If the keyboard
+ * is frozen by an active grab of another client, `GrabFrozen` is returned. If the
+ * specified \a time is earlier than the last-keyboard-grab time or later than the
+ * current X server time, `GrabInvalidTime` is returned. Otherwise, the
+ * last-keyboard-grab time is set to the specified time.
+ *
+ */
+xcb_grab_keyboard_cookie_t
+xcb_grab_keyboard (xcb_connection_t *c,
+                   uint8_t           owner_events,
+                   xcb_window_t      grab_window,
+                   xcb_timestamp_t   time,
+                   uint8_t           pointer_mode,
+                   uint8_t           keyboard_mode);
+
+/**
+ * @brief Grab the keyboard
+ *
+ * @param c The connection
+ * @param owner_events If 1, the \a grab_window will still get the pointer events. If 0, events are not
+ * reported to the \a grab_window.
+ * @param grab_window Specifies the window on which the pointer should be grabbed.
+ * @param time Timestamp to avoid race conditions when running X over the network.
+ * \n
+ * The special value `XCB_CURRENT_TIME` will be replaced with the current server
+ * time.
+ * @param pointer_mode A bitmask of #xcb_grab_mode_t values.
+ * @param pointer_mode \n
+ * @param keyboard_mode A bitmask of #xcb_grab_mode_t values.
+ * @param keyboard_mode \n
+ * @return A cookie
+ *
+ * Actively grabs control of the keyboard and generates FocusIn and FocusOut
+ * events. Further key events are reported only to the grabbing client.
+ * 
+ * Any active keyboard grab by this client is overridden. If the keyboard is
+ * actively grabbed by some other client, `AlreadyGrabbed` is returned. If
+ * \a grab_window is not viewable, `GrabNotViewable` is returned. If the keyboard
+ * is frozen by an active grab of another client, `GrabFrozen` is returned. If the
+ * specified \a time is earlier than the last-keyboard-grab time or later than the
+ * current X server time, `GrabInvalidTime` is returned. Otherwise, the
+ * last-keyboard-grab time is set to the specified time.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_grab_keyboard_cookie_t
+xcb_grab_keyboard_unchecked (xcb_connection_t *c,
+                             uint8_t           owner_events,
+                             xcb_window_t      grab_window,
+                             xcb_timestamp_t   time,
+                             uint8_t           pointer_mode,
+                             uint8_t           keyboard_mode);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_grab_keyboard_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_grab_keyboard_reply_t *
+xcb_grab_keyboard_reply (xcb_connection_t            *c,
+                         xcb_grab_keyboard_cookie_t   cookie  /**< */,
+                         xcb_generic_error_t        **e);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_ungrab_keyboard_checked (xcb_connection_t *c,
+                             xcb_timestamp_t   time);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_ungrab_keyboard (xcb_connection_t *c,
+                     xcb_timestamp_t   time);
+
+/**
+ * @brief Grab keyboard key(s)
+ *
+ * @param c The connection
+ * @param owner_events If 1, the \a grab_window will still get the key events. If 0, events are not
+ * reported to the \a grab_window.
+ * @param grab_window Specifies the window on which the key should be grabbed.
+ * @param modifiers The modifiers to grab.
+ * \n
+ * Using the special value `XCB_MOD_MASK_ANY` means grab the key with all
+ * possible modifier combinations.
+ * @param key The keycode of the key to grab.
+ * \n
+ * The special value `XCB_GRAB_ANY` means grab any key.
+ * @param pointer_mode A bitmask of #xcb_grab_mode_t values.
+ * @param pointer_mode \n
+ * @param keyboard_mode A bitmask of #xcb_grab_mode_t values.
+ * @param keyboard_mode \n
+ * @return A cookie
+ *
+ * Establishes a passive grab on the keyboard. In the future, the keyboard is
+ * actively grabbed (as for `GrabKeyboard`), the last-keyboard-grab time is set to
+ * the time at which the key was pressed (as transmitted in the KeyPress event),
+ * and the KeyPress event is reported if all of the following conditions are true:
+ * 
+ * The keyboard is not grabbed and the specified key (which can itself be a
+ * modifier key) is logically pressed when the specified modifier keys are
+ * logically down, and no other modifier keys are logically down.
+ * 
+ * Either the grab_window is an ancestor of (or is) the focus window, or the
+ * grab_window is a descendant of the focus window and contains the pointer.
+ * 
+ * A passive grab on the same key combination does not exist on any ancestor of
+ * grab_window.
+ * 
+ * The interpretation of the remaining arguments is as for XGrabKeyboard.  The active grab is terminated
+ * automatically when the logical state of the keyboard has the specified key released (independent of the
+ * logical state of the modifier keys), at which point a KeyRelease event is reported to the grabbing window.
+ * 
+ * Note that the logical state of a device (as seen by client applications) may lag the physical state if
+ * device event processing is frozen.
+ * 
+ * A modifiers argument of AnyModifier is equivalent to issuing the request for all possible modifier combinations (including the combination of no modifiers).  It is not required that all modifiers specified
+ * have currently assigned KeyCodes.  A keycode argument of AnyKey is equivalent to issuing the request for
+ * all possible KeyCodes.  Otherwise, the specified keycode must be in the range specified by min_keycode
+ * and max_keycode in the connection setup, or a BadValue error results.
+ * 
+ * If some other client has issued a XGrabKey with the same key combination on the same window, a BadAccess
+ * error results.  When using AnyModifier or AnyKey, the request fails completely, and a BadAccess error
+ * results (no grabs are established) if there is a conflicting grab for any combination.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_grab_key_checked (xcb_connection_t *c,
+                      uint8_t           owner_events,
+                      xcb_window_t      grab_window,
+                      uint16_t          modifiers,
+                      xcb_keycode_t     key,
+                      uint8_t           pointer_mode,
+                      uint8_t           keyboard_mode);
+
+/**
+ * @brief Grab keyboard key(s)
+ *
+ * @param c The connection
+ * @param owner_events If 1, the \a grab_window will still get the key events. If 0, events are not
+ * reported to the \a grab_window.
+ * @param grab_window Specifies the window on which the key should be grabbed.
+ * @param modifiers The modifiers to grab.
+ * \n
+ * Using the special value `XCB_MOD_MASK_ANY` means grab the key with all
+ * possible modifier combinations.
+ * @param key The keycode of the key to grab.
+ * \n
+ * The special value `XCB_GRAB_ANY` means grab any key.
+ * @param pointer_mode A bitmask of #xcb_grab_mode_t values.
+ * @param pointer_mode \n
+ * @param keyboard_mode A bitmask of #xcb_grab_mode_t values.
+ * @param keyboard_mode \n
+ * @return A cookie
+ *
+ * Establishes a passive grab on the keyboard. In the future, the keyboard is
+ * actively grabbed (as for `GrabKeyboard`), the last-keyboard-grab time is set to
+ * the time at which the key was pressed (as transmitted in the KeyPress event),
+ * and the KeyPress event is reported if all of the following conditions are true:
+ * 
+ * The keyboard is not grabbed and the specified key (which can itself be a
+ * modifier key) is logically pressed when the specified modifier keys are
+ * logically down, and no other modifier keys are logically down.
+ * 
+ * Either the grab_window is an ancestor of (or is) the focus window, or the
+ * grab_window is a descendant of the focus window and contains the pointer.
+ * 
+ * A passive grab on the same key combination does not exist on any ancestor of
+ * grab_window.
+ * 
+ * The interpretation of the remaining arguments is as for XGrabKeyboard.  The active grab is terminated
+ * automatically when the logical state of the keyboard has the specified key released (independent of the
+ * logical state of the modifier keys), at which point a KeyRelease event is reported to the grabbing window.
+ * 
+ * Note that the logical state of a device (as seen by client applications) may lag the physical state if
+ * device event processing is frozen.
+ * 
+ * A modifiers argument of AnyModifier is equivalent to issuing the request for all possible modifier combinations (including the combination of no modifiers).  It is not required that all modifiers specified
+ * have currently assigned KeyCodes.  A keycode argument of AnyKey is equivalent to issuing the request for
+ * all possible KeyCodes.  Otherwise, the specified keycode must be in the range specified by min_keycode
+ * and max_keycode in the connection setup, or a BadValue error results.
+ * 
+ * If some other client has issued a XGrabKey with the same key combination on the same window, a BadAccess
+ * error results.  When using AnyModifier or AnyKey, the request fails completely, and a BadAccess error
+ * results (no grabs are established) if there is a conflicting grab for any combination.
+ *
+ */
+xcb_void_cookie_t
+xcb_grab_key (xcb_connection_t *c,
+              uint8_t           owner_events,
+              xcb_window_t      grab_window,
+              uint16_t          modifiers,
+              xcb_keycode_t     key,
+              uint8_t           pointer_mode,
+              uint8_t           keyboard_mode);
+
+/**
+ * @brief release a key combination
+ *
+ * @param c The connection
+ * @param key The keycode of the specified key combination.
+ * \n
+ * Using the special value `XCB_GRAB_ANY` means releasing all possible key codes.
+ * @param grab_window The window on which the grabbed key combination will be released.
+ * @param modifiers The modifiers of the specified key combination.
+ * \n
+ * Using the special value `XCB_MOD_MASK_ANY` means releasing the key combination
+ * with every possible modifier combination.
+ * @return A cookie
+ *
+ * Releases the key combination on \a grab_window if you grabbed it using
+ * `xcb_grab_key` before.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_ungrab_key_checked (xcb_connection_t *c,
+                        xcb_keycode_t     key,
+                        xcb_window_t      grab_window,
+                        uint16_t          modifiers);
+
+/**
+ * @brief release a key combination
+ *
+ * @param c The connection
+ * @param key The keycode of the specified key combination.
+ * \n
+ * Using the special value `XCB_GRAB_ANY` means releasing all possible key codes.
+ * @param grab_window The window on which the grabbed key combination will be released.
+ * @param modifiers The modifiers of the specified key combination.
+ * \n
+ * Using the special value `XCB_MOD_MASK_ANY` means releasing the key combination
+ * with every possible modifier combination.
+ * @return A cookie
+ *
+ * Releases the key combination on \a grab_window if you grabbed it using
+ * `xcb_grab_key` before.
+ *
+ */
+xcb_void_cookie_t
+xcb_ungrab_key (xcb_connection_t *c,
+                xcb_keycode_t     key,
+                xcb_window_t      grab_window,
+                uint16_t          modifiers);
+
+/**
+ * @brief release queued events
+ *
+ * @param c The connection
+ * @param mode A bitmask of #xcb_allow_t values.
+ * @param mode \n
+ * @param time Timestamp to avoid race conditions when running X over the network.
+ * \n
+ * The special value `XCB_CURRENT_TIME` will be replaced with the current server
+ * time.
+ * @return A cookie
+ *
+ * Releases queued events if the client has caused a device (pointer/keyboard) to
+ * freeze due to grabbing it actively. This request has no effect if \a time is
+ * earlier than the last-grab time of the most recent active grab for this client
+ * or if \a time is later than the current X server time.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_allow_events_checked (xcb_connection_t *c,
+                          uint8_t           mode,
+                          xcb_timestamp_t   time);
+
+/**
+ * @brief release queued events
+ *
+ * @param c The connection
+ * @param mode A bitmask of #xcb_allow_t values.
+ * @param mode \n
+ * @param time Timestamp to avoid race conditions when running X over the network.
+ * \n
+ * The special value `XCB_CURRENT_TIME` will be replaced with the current server
+ * time.
+ * @return A cookie
+ *
+ * Releases queued events if the client has caused a device (pointer/keyboard) to
+ * freeze due to grabbing it actively. This request has no effect if \a time is
+ * earlier than the last-grab time of the most recent active grab for this client
+ * or if \a time is later than the current X server time.
+ *
+ */
+xcb_void_cookie_t
+xcb_allow_events (xcb_connection_t *c,
+                  uint8_t           mode,
+                  xcb_timestamp_t   time);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_grab_server_checked (xcb_connection_t *c);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_grab_server (xcb_connection_t *c);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_ungrab_server_checked (xcb_connection_t *c);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_ungrab_server (xcb_connection_t *c);
+
+/**
+ * @brief get pointer coordinates
+ *
+ * @param c The connection
+ * @param window A window to check if the pointer is on the same screen as \a window (see the
+ * `same_screen` field in the reply).
+ * @return A cookie
+ *
+ * Gets the root window the pointer is logically on and the pointer coordinates
+ * relative to the root window's origin.
+ *
+ */
+xcb_query_pointer_cookie_t
+xcb_query_pointer (xcb_connection_t *c,
+                   xcb_window_t      window);
+
+/**
+ * @brief get pointer coordinates
+ *
+ * @param c The connection
+ * @param window A window to check if the pointer is on the same screen as \a window (see the
+ * `same_screen` field in the reply).
+ * @return A cookie
+ *
+ * Gets the root window the pointer is logically on and the pointer coordinates
+ * relative to the root window's origin.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_query_pointer_cookie_t
+xcb_query_pointer_unchecked (xcb_connection_t *c,
+                             xcb_window_t      window);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_query_pointer_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_query_pointer_reply_t *
+xcb_query_pointer_reply (xcb_connection_t            *c,
+                         xcb_query_pointer_cookie_t   cookie  /**< */,
+                         xcb_generic_error_t        **e);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_timecoord_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_timecoord_t)
+ */
+void
+xcb_timecoord_next (xcb_timecoord_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_timecoord_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_timecoord_end (xcb_timecoord_iterator_t i);
+
+int
+xcb_get_motion_events_sizeof (const void  *_buffer);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_get_motion_events_cookie_t
+xcb_get_motion_events (xcb_connection_t *c,
+                       xcb_window_t      window,
+                       xcb_timestamp_t   start,
+                       xcb_timestamp_t   stop);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_get_motion_events_cookie_t
+xcb_get_motion_events_unchecked (xcb_connection_t *c,
+                                 xcb_window_t      window,
+                                 xcb_timestamp_t   start,
+                                 xcb_timestamp_t   stop);
+
+xcb_timecoord_t *
+xcb_get_motion_events_events (const xcb_get_motion_events_reply_t *R);
+
+int
+xcb_get_motion_events_events_length (const xcb_get_motion_events_reply_t *R);
+
+xcb_timecoord_iterator_t
+xcb_get_motion_events_events_iterator (const xcb_get_motion_events_reply_t *R);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_get_motion_events_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_get_motion_events_reply_t *
+xcb_get_motion_events_reply (xcb_connection_t                *c,
+                             xcb_get_motion_events_cookie_t   cookie  /**< */,
+                             xcb_generic_error_t            **e);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_translate_coordinates_cookie_t
+xcb_translate_coordinates (xcb_connection_t *c,
+                           xcb_window_t      src_window,
+                           xcb_window_t      dst_window,
+                           int16_t           src_x,
+                           int16_t           src_y);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_translate_coordinates_cookie_t
+xcb_translate_coordinates_unchecked (xcb_connection_t *c,
+                                     xcb_window_t      src_window,
+                                     xcb_window_t      dst_window,
+                                     int16_t           src_x,
+                                     int16_t           src_y);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_translate_coordinates_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_translate_coordinates_reply_t *
+xcb_translate_coordinates_reply (xcb_connection_t                    *c,
+                                 xcb_translate_coordinates_cookie_t   cookie  /**< */,
+                                 xcb_generic_error_t                **e);
+
+/**
+ * @brief move mouse pointer
+ *
+ * @param c The connection
+ * @param src_window If \a src_window is not `XCB_NONE` (TODO), the move will only take place if the
+ * pointer is inside \a src_window and within the rectangle specified by (\a src_x,
+ * \a src_y, \a src_width, \a src_height). The rectangle coordinates are relative to
+ * \a src_window.
+ * @param dst_window If \a dst_window is not `XCB_NONE` (TODO), the pointer will be moved to the
+ * offsets (\a dst_x, \a dst_y) relative to \a dst_window. If \a dst_window is
+ * `XCB_NONE` (TODO), the pointer will be moved by the offsets (\a dst_x, \a dst_y)
+ * relative to the current position of the pointer.
+ * @return A cookie
+ *
+ * Moves the mouse pointer to the specified position.
+ * 
+ * If \a src_window is not `XCB_NONE` (TODO), the move will only take place if the
+ * pointer is inside \a src_window and within the rectangle specified by (\a src_x,
+ * \a src_y, \a src_width, \a src_height). The rectangle coordinates are relative to
+ * \a src_window.
+ * 
+ * If \a dst_window is not `XCB_NONE` (TODO), the pointer will be moved to the
+ * offsets (\a dst_x, \a dst_y) relative to \a dst_window. If \a dst_window is
+ * `XCB_NONE` (TODO), the pointer will be moved by the offsets (\a dst_x, \a dst_y)
+ * relative to the current position of the pointer.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_warp_pointer_checked (xcb_connection_t *c,
+                          xcb_window_t      src_window,
+                          xcb_window_t      dst_window,
+                          int16_t           src_x,
+                          int16_t           src_y,
+                          uint16_t          src_width,
+                          uint16_t          src_height,
+                          int16_t           dst_x,
+                          int16_t           dst_y);
+
+/**
+ * @brief move mouse pointer
+ *
+ * @param c The connection
+ * @param src_window If \a src_window is not `XCB_NONE` (TODO), the move will only take place if the
+ * pointer is inside \a src_window and within the rectangle specified by (\a src_x,
+ * \a src_y, \a src_width, \a src_height). The rectangle coordinates are relative to
+ * \a src_window.
+ * @param dst_window If \a dst_window is not `XCB_NONE` (TODO), the pointer will be moved to the
+ * offsets (\a dst_x, \a dst_y) relative to \a dst_window. If \a dst_window is
+ * `XCB_NONE` (TODO), the pointer will be moved by the offsets (\a dst_x, \a dst_y)
+ * relative to the current position of the pointer.
+ * @return A cookie
+ *
+ * Moves the mouse pointer to the specified position.
+ * 
+ * If \a src_window is not `XCB_NONE` (TODO), the move will only take place if the
+ * pointer is inside \a src_window and within the rectangle specified by (\a src_x,
+ * \a src_y, \a src_width, \a src_height). The rectangle coordinates are relative to
+ * \a src_window.
+ * 
+ * If \a dst_window is not `XCB_NONE` (TODO), the pointer will be moved to the
+ * offsets (\a dst_x, \a dst_y) relative to \a dst_window. If \a dst_window is
+ * `XCB_NONE` (TODO), the pointer will be moved by the offsets (\a dst_x, \a dst_y)
+ * relative to the current position of the pointer.
+ *
+ */
+xcb_void_cookie_t
+xcb_warp_pointer (xcb_connection_t *c,
+                  xcb_window_t      src_window,
+                  xcb_window_t      dst_window,
+                  int16_t           src_x,
+                  int16_t           src_y,
+                  uint16_t          src_width,
+                  uint16_t          src_height,
+                  int16_t           dst_x,
+                  int16_t           dst_y);
+
+/**
+ * @brief Sets input focus
+ *
+ * @param c The connection
+ * @param revert_to A bitmask of #xcb_input_focus_t values.
+ * @param revert_to Specifies what happens when the \a focus window becomes unviewable (if \a focus
+ * is neither `XCB_NONE` nor `XCB_POINTER_ROOT`).
+ * @param focus The window to focus. All keyboard events will be reported to this window. The
+ * window must be viewable (TODO), or a `xcb_match_error_t` occurs (TODO).
+ * \n
+ * If \a focus is `XCB_NONE` (TODO), all keyboard events are
+ * discarded until a new focus window is set.
+ * \n
+ * If \a focus is `XCB_POINTER_ROOT` (TODO), focus is on the root window of the
+ * screen on which the pointer is on currently.
+ * @param time Timestamp to avoid race conditions when running X over the network.
+ * \n
+ * The special value `XCB_CURRENT_TIME` will be replaced with the current server
+ * time.
+ * @return A cookie
+ *
+ * Changes the input focus and the last-focus-change time. If the specified \a time
+ * is earlier than the current last-focus-change time, the request is ignored (to
+ * avoid race conditions when running X over the network).
+ * 
+ * A FocusIn and FocusOut event is generated when focus is changed.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_set_input_focus_checked (xcb_connection_t *c,
+                             uint8_t           revert_to,
+                             xcb_window_t      focus,
+                             xcb_timestamp_t   time);
+
+/**
+ * @brief Sets input focus
+ *
+ * @param c The connection
+ * @param revert_to A bitmask of #xcb_input_focus_t values.
+ * @param revert_to Specifies what happens when the \a focus window becomes unviewable (if \a focus
+ * is neither `XCB_NONE` nor `XCB_POINTER_ROOT`).
+ * @param focus The window to focus. All keyboard events will be reported to this window. The
+ * window must be viewable (TODO), or a `xcb_match_error_t` occurs (TODO).
+ * \n
+ * If \a focus is `XCB_NONE` (TODO), all keyboard events are
+ * discarded until a new focus window is set.
+ * \n
+ * If \a focus is `XCB_POINTER_ROOT` (TODO), focus is on the root window of the
+ * screen on which the pointer is on currently.
+ * @param time Timestamp to avoid race conditions when running X over the network.
+ * \n
+ * The special value `XCB_CURRENT_TIME` will be replaced with the current server
+ * time.
+ * @return A cookie
+ *
+ * Changes the input focus and the last-focus-change time. If the specified \a time
+ * is earlier than the current last-focus-change time, the request is ignored (to
+ * avoid race conditions when running X over the network).
+ * 
+ * A FocusIn and FocusOut event is generated when focus is changed.
+ *
+ */
+xcb_void_cookie_t
+xcb_set_input_focus (xcb_connection_t *c,
+                     uint8_t           revert_to,
+                     xcb_window_t      focus,
+                     xcb_timestamp_t   time);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_get_input_focus_cookie_t
+xcb_get_input_focus (xcb_connection_t *c);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_get_input_focus_cookie_t
+xcb_get_input_focus_unchecked (xcb_connection_t *c);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_get_input_focus_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_get_input_focus_reply_t *
+xcb_get_input_focus_reply (xcb_connection_t              *c,
+                           xcb_get_input_focus_cookie_t   cookie  /**< */,
+                           xcb_generic_error_t          **e);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_query_keymap_cookie_t
+xcb_query_keymap (xcb_connection_t *c);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_query_keymap_cookie_t
+xcb_query_keymap_unchecked (xcb_connection_t *c);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_query_keymap_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_query_keymap_reply_t *
+xcb_query_keymap_reply (xcb_connection_t           *c,
+                        xcb_query_keymap_cookie_t   cookie  /**< */,
+                        xcb_generic_error_t       **e);
+
+int
+xcb_open_font_sizeof (const void  *_buffer);
+
+/**
+ * @brief opens a font
+ *
+ * @param c The connection
+ * @param fid The ID with which you will refer to the font, created by `xcb_generate_id`.
+ * @param name_len Length (in bytes) of \a name.
+ * @param name A pattern describing an X core font.
+ * @return A cookie
+ *
+ * Opens any X core font matching the given \a name (for example "-misc-fixed-*").
+ * 
+ * Note that X core fonts are deprecated (but still supported) in favor of
+ * client-side rendering using Xft.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_open_font_checked (xcb_connection_t *c,
+                       xcb_font_t        fid,
+                       uint16_t          name_len,
+                       const char       *name);
+
+/**
+ * @brief opens a font
+ *
+ * @param c The connection
+ * @param fid The ID with which you will refer to the font, created by `xcb_generate_id`.
+ * @param name_len Length (in bytes) of \a name.
+ * @param name A pattern describing an X core font.
+ * @return A cookie
+ *
+ * Opens any X core font matching the given \a name (for example "-misc-fixed-*").
+ * 
+ * Note that X core fonts are deprecated (but still supported) in favor of
+ * client-side rendering using Xft.
+ *
+ */
+xcb_void_cookie_t
+xcb_open_font (xcb_connection_t *c,
+               xcb_font_t        fid,
+               uint16_t          name_len,
+               const char       *name);
+
+char *
+xcb_open_font_name (const xcb_open_font_request_t *R);
+
+int
+xcb_open_font_name_length (const xcb_open_font_request_t *R);
+
+xcb_generic_iterator_t
+xcb_open_font_name_end (const xcb_open_font_request_t *R);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_close_font_checked (xcb_connection_t *c,
+                        xcb_font_t        font);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_close_font (xcb_connection_t *c,
+                xcb_font_t        font);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_fontprop_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_fontprop_t)
+ */
+void
+xcb_fontprop_next (xcb_fontprop_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_fontprop_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_fontprop_end (xcb_fontprop_iterator_t i);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_charinfo_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_charinfo_t)
+ */
+void
+xcb_charinfo_next (xcb_charinfo_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_charinfo_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_charinfo_end (xcb_charinfo_iterator_t i);
+
+int
+xcb_query_font_sizeof (const void  *_buffer);
+
+/**
+ * @brief query font metrics
+ *
+ * @param c The connection
+ * @param font The fontable (Font or Graphics Context) to query.
+ * @return A cookie
+ *
+ * Queries information associated with the font.
+ *
+ */
+xcb_query_font_cookie_t
+xcb_query_font (xcb_connection_t *c,
+                xcb_fontable_t    font);
+
+/**
+ * @brief query font metrics
+ *
+ * @param c The connection
+ * @param font The fontable (Font or Graphics Context) to query.
+ * @return A cookie
+ *
+ * Queries information associated with the font.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_query_font_cookie_t
+xcb_query_font_unchecked (xcb_connection_t *c,
+                          xcb_fontable_t    font);
+
+xcb_fontprop_t *
+xcb_query_font_properties (const xcb_query_font_reply_t *R);
+
+int
+xcb_query_font_properties_length (const xcb_query_font_reply_t *R);
+
+xcb_fontprop_iterator_t
+xcb_query_font_properties_iterator (const xcb_query_font_reply_t *R);
+
+xcb_charinfo_t *
+xcb_query_font_char_infos (const xcb_query_font_reply_t *R);
+
+int
+xcb_query_font_char_infos_length (const xcb_query_font_reply_t *R);
+
+xcb_charinfo_iterator_t
+xcb_query_font_char_infos_iterator (const xcb_query_font_reply_t *R);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_query_font_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_query_font_reply_t *
+xcb_query_font_reply (xcb_connection_t         *c,
+                      xcb_query_font_cookie_t   cookie  /**< */,
+                      xcb_generic_error_t     **e);
+
+int
+xcb_query_text_extents_sizeof (const void  *_buffer,
+                               uint32_t     string_len);
+
+/**
+ * @brief get text extents
+ *
+ * @param c The connection
+ * @param font The \a font to calculate text extents in. You can also pass a graphics context.
+ * @param string_len The number of characters in \a string.
+ * @param string The text to get text extents for.
+ * @return A cookie
+ *
+ * Query text extents from the X11 server. This request returns the bounding box
+ * of the specified 16-bit character string in the specified \a font or the font
+ * contained in the specified graphics context.
+ * 
+ * `font_ascent` is set to the maximum of the ascent metrics of all characters in
+ * the string. `font_descent` is set to the maximum of the descent metrics.
+ * `overall_width` is set to the sum of the character-width metrics of all
+ * characters in the string. For each character in the string, let W be the sum of
+ * the character-width metrics of all characters preceding it in the string. Let L
+ * be the left-side-bearing metric of the character plus W. Let R be the
+ * right-side-bearing metric of the character plus W. The lbearing member is set
+ * to the minimum L of all characters in the string. The rbearing member is set to
+ * the maximum R.
+ * 
+ * For fonts defined with linear indexing rather than 2-byte matrix indexing, each
+ * `xcb_char2b_t` structure is interpreted as a 16-bit number with byte1 as the
+ * most significant byte. If the font has no defined default character, undefined
+ * characters in the string are taken to have all zero metrics.
+ * 
+ * Characters with all zero metrics are ignored. If the font has no defined
+ * default_char, the undefined characters in the string are also ignored.
+ *
+ */
+xcb_query_text_extents_cookie_t
+xcb_query_text_extents (xcb_connection_t   *c,
+                        xcb_fontable_t      font,
+                        uint32_t            string_len,
+                        const xcb_char2b_t *string);
+
+/**
+ * @brief get text extents
+ *
+ * @param c The connection
+ * @param font The \a font to calculate text extents in. You can also pass a graphics context.
+ * @param string_len The number of characters in \a string.
+ * @param string The text to get text extents for.
+ * @return A cookie
+ *
+ * Query text extents from the X11 server. This request returns the bounding box
+ * of the specified 16-bit character string in the specified \a font or the font
+ * contained in the specified graphics context.
+ * 
+ * `font_ascent` is set to the maximum of the ascent metrics of all characters in
+ * the string. `font_descent` is set to the maximum of the descent metrics.
+ * `overall_width` is set to the sum of the character-width metrics of all
+ * characters in the string. For each character in the string, let W be the sum of
+ * the character-width metrics of all characters preceding it in the string. Let L
+ * be the left-side-bearing metric of the character plus W. Let R be the
+ * right-side-bearing metric of the character plus W. The lbearing member is set
+ * to the minimum L of all characters in the string. The rbearing member is set to
+ * the maximum R.
+ * 
+ * For fonts defined with linear indexing rather than 2-byte matrix indexing, each
+ * `xcb_char2b_t` structure is interpreted as a 16-bit number with byte1 as the
+ * most significant byte. If the font has no defined default character, undefined
+ * characters in the string are taken to have all zero metrics.
+ * 
+ * Characters with all zero metrics are ignored. If the font has no defined
+ * default_char, the undefined characters in the string are also ignored.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_query_text_extents_cookie_t
+xcb_query_text_extents_unchecked (xcb_connection_t   *c,
+                                  xcb_fontable_t      font,
+                                  uint32_t            string_len,
+                                  const xcb_char2b_t *string);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_query_text_extents_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_query_text_extents_reply_t *
+xcb_query_text_extents_reply (xcb_connection_t                 *c,
+                              xcb_query_text_extents_cookie_t   cookie  /**< */,
+                              xcb_generic_error_t             **e);
+
+int
+xcb_str_sizeof (const void  *_buffer);
+
+char *
+xcb_str_name (const xcb_str_t *R);
+
+int
+xcb_str_name_length (const xcb_str_t *R);
+
+xcb_generic_iterator_t
+xcb_str_name_end (const xcb_str_t *R);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_str_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_str_t)
+ */
+void
+xcb_str_next (xcb_str_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_str_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_str_end (xcb_str_iterator_t i);
+
+int
+xcb_list_fonts_sizeof (const void  *_buffer);
+
+/**
+ * @brief get matching font names
+ *
+ * @param c The connection
+ * @param max_names The maximum number of fonts to be returned.
+ * @param pattern_len The length (in bytes) of \a pattern.
+ * @param pattern A font pattern, for example "-misc-fixed-*".
+ * \n
+ * The asterisk (*) is a wildcard for any number of characters. The question mark
+ * (?) is a wildcard for a single character. Use of uppercase or lowercase does
+ * not matter.
+ * @return A cookie
+ *
+ * Gets a list of available font names which match the given \a pattern.
+ *
+ */
+xcb_list_fonts_cookie_t
+xcb_list_fonts (xcb_connection_t *c,
+                uint16_t          max_names,
+                uint16_t          pattern_len,
+                const char       *pattern);
+
+/**
+ * @brief get matching font names
+ *
+ * @param c The connection
+ * @param max_names The maximum number of fonts to be returned.
+ * @param pattern_len The length (in bytes) of \a pattern.
+ * @param pattern A font pattern, for example "-misc-fixed-*".
+ * \n
+ * The asterisk (*) is a wildcard for any number of characters. The question mark
+ * (?) is a wildcard for a single character. Use of uppercase or lowercase does
+ * not matter.
+ * @return A cookie
+ *
+ * Gets a list of available font names which match the given \a pattern.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_list_fonts_cookie_t
+xcb_list_fonts_unchecked (xcb_connection_t *c,
+                          uint16_t          max_names,
+                          uint16_t          pattern_len,
+                          const char       *pattern);
+
+int
+xcb_list_fonts_names_length (const xcb_list_fonts_reply_t *R);
+
+xcb_str_iterator_t
+xcb_list_fonts_names_iterator (const xcb_list_fonts_reply_t *R);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_list_fonts_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_list_fonts_reply_t *
+xcb_list_fonts_reply (xcb_connection_t         *c,
+                      xcb_list_fonts_cookie_t   cookie  /**< */,
+                      xcb_generic_error_t     **e);
+
+int
+xcb_list_fonts_with_info_sizeof (const void  *_buffer);
+
+/**
+ * @brief get matching font names and information
+ *
+ * @param c The connection
+ * @param max_names The maximum number of fonts to be returned.
+ * @param pattern_len The length (in bytes) of \a pattern.
+ * @param pattern A font pattern, for example "-misc-fixed-*".
+ * \n
+ * The asterisk (*) is a wildcard for any number of characters. The question mark
+ * (?) is a wildcard for a single character. Use of uppercase or lowercase does
+ * not matter.
+ * @return A cookie
+ *
+ * Gets a list of available font names which match the given \a pattern.
+ *
+ */
+xcb_list_fonts_with_info_cookie_t
+xcb_list_fonts_with_info (xcb_connection_t *c,
+                          uint16_t          max_names,
+                          uint16_t          pattern_len,
+                          const char       *pattern);
+
+/**
+ * @brief get matching font names and information
+ *
+ * @param c The connection
+ * @param max_names The maximum number of fonts to be returned.
+ * @param pattern_len The length (in bytes) of \a pattern.
+ * @param pattern A font pattern, for example "-misc-fixed-*".
+ * \n
+ * The asterisk (*) is a wildcard for any number of characters. The question mark
+ * (?) is a wildcard for a single character. Use of uppercase or lowercase does
+ * not matter.
+ * @return A cookie
+ *
+ * Gets a list of available font names which match the given \a pattern.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_list_fonts_with_info_cookie_t
+xcb_list_fonts_with_info_unchecked (xcb_connection_t *c,
+                                    uint16_t          max_names,
+                                    uint16_t          pattern_len,
+                                    const char       *pattern);
+
+xcb_fontprop_t *
+xcb_list_fonts_with_info_properties (const xcb_list_fonts_with_info_reply_t *R);
+
+int
+xcb_list_fonts_with_info_properties_length (const xcb_list_fonts_with_info_reply_t *R);
+
+xcb_fontprop_iterator_t
+xcb_list_fonts_with_info_properties_iterator (const xcb_list_fonts_with_info_reply_t *R);
+
+char *
+xcb_list_fonts_with_info_name (const xcb_list_fonts_with_info_reply_t *R);
+
+int
+xcb_list_fonts_with_info_name_length (const xcb_list_fonts_with_info_reply_t *R);
+
+xcb_generic_iterator_t
+xcb_list_fonts_with_info_name_end (const xcb_list_fonts_with_info_reply_t *R);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_list_fonts_with_info_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_list_fonts_with_info_reply_t *
+xcb_list_fonts_with_info_reply (xcb_connection_t                   *c,
+                                xcb_list_fonts_with_info_cookie_t   cookie  /**< */,
+                                xcb_generic_error_t               **e);
+
+int
+xcb_set_font_path_sizeof (const void  *_buffer);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_set_font_path_checked (xcb_connection_t *c,
+                           uint16_t          font_qty,
+                           const xcb_str_t  *font);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_set_font_path (xcb_connection_t *c,
+                   uint16_t          font_qty,
+                   const xcb_str_t  *font);
+
+int
+xcb_set_font_path_font_length (const xcb_set_font_path_request_t *R);
+
+xcb_str_iterator_t
+xcb_set_font_path_font_iterator (const xcb_set_font_path_request_t *R);
+
+int
+xcb_get_font_path_sizeof (const void  *_buffer);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_get_font_path_cookie_t
+xcb_get_font_path (xcb_connection_t *c);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_get_font_path_cookie_t
+xcb_get_font_path_unchecked (xcb_connection_t *c);
+
+int
+xcb_get_font_path_path_length (const xcb_get_font_path_reply_t *R);
+
+xcb_str_iterator_t
+xcb_get_font_path_path_iterator (const xcb_get_font_path_reply_t *R);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_get_font_path_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_get_font_path_reply_t *
+xcb_get_font_path_reply (xcb_connection_t            *c,
+                         xcb_get_font_path_cookie_t   cookie  /**< */,
+                         xcb_generic_error_t        **e);
+
+/**
+ * @brief Creates a pixmap
+ *
+ * @param c The connection
+ * @param depth TODO
+ * @param pid The ID with which you will refer to the new pixmap, created by
+ * `xcb_generate_id`.
+ * @param drawable Drawable to get the screen from.
+ * @param width The width of the new pixmap.
+ * @param height The height of the new pixmap.
+ * @return A cookie
+ *
+ * Creates a pixmap. The pixmap can only be used on the same screen as \a drawable
+ * is on and only with drawables of the same \a depth.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_create_pixmap_checked (xcb_connection_t *c,
+                           uint8_t           depth,
+                           xcb_pixmap_t      pid,
+                           xcb_drawable_t    drawable,
+                           uint16_t          width,
+                           uint16_t          height);
+
+/**
+ * @brief Creates a pixmap
+ *
+ * @param c The connection
+ * @param depth TODO
+ * @param pid The ID with which you will refer to the new pixmap, created by
+ * `xcb_generate_id`.
+ * @param drawable Drawable to get the screen from.
+ * @param width The width of the new pixmap.
+ * @param height The height of the new pixmap.
+ * @return A cookie
+ *
+ * Creates a pixmap. The pixmap can only be used on the same screen as \a drawable
+ * is on and only with drawables of the same \a depth.
+ *
+ */
+xcb_void_cookie_t
+xcb_create_pixmap (xcb_connection_t *c,
+                   uint8_t           depth,
+                   xcb_pixmap_t      pid,
+                   xcb_drawable_t    drawable,
+                   uint16_t          width,
+                   uint16_t          height);
+
+/**
+ * @brief Destroys a pixmap
+ *
+ * @param c The connection
+ * @param pixmap The pixmap to destroy.
+ * @return A cookie
+ *
+ * Deletes the association between the pixmap ID and the pixmap. The pixmap
+ * storage will be freed when there are no more references to it.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_free_pixmap_checked (xcb_connection_t *c,
+                         xcb_pixmap_t      pixmap);
+
+/**
+ * @brief Destroys a pixmap
+ *
+ * @param c The connection
+ * @param pixmap The pixmap to destroy.
+ * @return A cookie
+ *
+ * Deletes the association between the pixmap ID and the pixmap. The pixmap
+ * storage will be freed when there are no more references to it.
+ *
+ */
+xcb_void_cookie_t
+xcb_free_pixmap (xcb_connection_t *c,
+                 xcb_pixmap_t      pixmap);
+
+int
+xcb_create_gc_value_list_serialize (void                             **_buffer,
+                                    uint32_t                           value_mask,
+                                    const xcb_create_gc_value_list_t  *_aux);
+
+int
+xcb_create_gc_value_list_unpack (const void                  *_buffer,
+                                 uint32_t                     value_mask,
+                                 xcb_create_gc_value_list_t  *_aux);
+
+int
+xcb_create_gc_value_list_sizeof (const void  *_buffer,
+                                 uint32_t     value_mask);
+
+int
+xcb_create_gc_sizeof (const void  *_buffer);
+
+/**
+ * @brief Creates a graphics context
+ *
+ * @param c The connection
+ * @param cid The ID with which you will refer to the graphics context, created by
+ * `xcb_generate_id`.
+ * @param drawable Drawable to get the root/depth from.
+ * @return A cookie
+ *
+ * Creates a graphics context. The graphics context can be used with any drawable
+ * that has the same root and depth as the specified drawable.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_create_gc_checked (xcb_connection_t *c,
+                       xcb_gcontext_t    cid,
+                       xcb_drawable_t    drawable,
+                       uint32_t          value_mask,
+                       const void       *value_list);
+
+/**
+ * @brief Creates a graphics context
+ *
+ * @param c The connection
+ * @param cid The ID with which you will refer to the graphics context, created by
+ * `xcb_generate_id`.
+ * @param drawable Drawable to get the root/depth from.
+ * @return A cookie
+ *
+ * Creates a graphics context. The graphics context can be used with any drawable
+ * that has the same root and depth as the specified drawable.
+ *
+ */
+xcb_void_cookie_t
+xcb_create_gc (xcb_connection_t *c,
+               xcb_gcontext_t    cid,
+               xcb_drawable_t    drawable,
+               uint32_t          value_mask,
+               const void       *value_list);
+
+/**
+ * @brief Creates a graphics context
+ *
+ * @param c The connection
+ * @param cid The ID with which you will refer to the graphics context, created by
+ * `xcb_generate_id`.
+ * @param drawable Drawable to get the root/depth from.
+ * @return A cookie
+ *
+ * Creates a graphics context. The graphics context can be used with any drawable
+ * that has the same root and depth as the specified drawable.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_create_gc_aux_checked (xcb_connection_t                 *c,
+                           xcb_gcontext_t                    cid,
+                           xcb_drawable_t                    drawable,
+                           uint32_t                          value_mask,
+                           const xcb_create_gc_value_list_t *value_list);
+
+/**
+ * @brief Creates a graphics context
+ *
+ * @param c The connection
+ * @param cid The ID with which you will refer to the graphics context, created by
+ * `xcb_generate_id`.
+ * @param drawable Drawable to get the root/depth from.
+ * @return A cookie
+ *
+ * Creates a graphics context. The graphics context can be used with any drawable
+ * that has the same root and depth as the specified drawable.
+ *
+ */
+xcb_void_cookie_t
+xcb_create_gc_aux (xcb_connection_t                 *c,
+                   xcb_gcontext_t                    cid,
+                   xcb_drawable_t                    drawable,
+                   uint32_t                          value_mask,
+                   const xcb_create_gc_value_list_t *value_list);
+
+void *
+xcb_create_gc_value_list (const xcb_create_gc_request_t *R);
+
+int
+xcb_change_gc_value_list_serialize (void                             **_buffer,
+                                    uint32_t                           value_mask,
+                                    const xcb_change_gc_value_list_t  *_aux);
+
+int
+xcb_change_gc_value_list_unpack (const void                  *_buffer,
+                                 uint32_t                     value_mask,
+                                 xcb_change_gc_value_list_t  *_aux);
+
+int
+xcb_change_gc_value_list_sizeof (const void  *_buffer,
+                                 uint32_t     value_mask);
+
+int
+xcb_change_gc_sizeof (const void  *_buffer);
+
+/**
+ * @brief change graphics context components
+ *
+ * @param c The connection
+ * @param gc The graphics context to change.
+ * @param value_mask A bitmask of #xcb_gc_t values.
+ * @param value_mask \n
+ * @param value_list Values for each of the components specified in the bitmask \a value_mask. The
+ * order has to correspond to the order of possible \a value_mask bits. See the
+ * example.
+ * @return A cookie
+ *
+ * Changes the components specified by \a value_mask for the specified graphics context.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_change_gc_checked (xcb_connection_t *c,
+                       xcb_gcontext_t    gc,
+                       uint32_t          value_mask,
+                       const void       *value_list);
+
+/**
+ * @brief change graphics context components
+ *
+ * @param c The connection
+ * @param gc The graphics context to change.
+ * @param value_mask A bitmask of #xcb_gc_t values.
+ * @param value_mask \n
+ * @param value_list Values for each of the components specified in the bitmask \a value_mask. The
+ * order has to correspond to the order of possible \a value_mask bits. See the
+ * example.
+ * @return A cookie
+ *
+ * Changes the components specified by \a value_mask for the specified graphics context.
+ *
+ */
+xcb_void_cookie_t
+xcb_change_gc (xcb_connection_t *c,
+               xcb_gcontext_t    gc,
+               uint32_t          value_mask,
+               const void       *value_list);
+
+/**
+ * @brief change graphics context components
+ *
+ * @param c The connection
+ * @param gc The graphics context to change.
+ * @param value_mask A bitmask of #xcb_gc_t values.
+ * @param value_mask \n
+ * @param value_list Values for each of the components specified in the bitmask \a value_mask. The
+ * order has to correspond to the order of possible \a value_mask bits. See the
+ * example.
+ * @return A cookie
+ *
+ * Changes the components specified by \a value_mask for the specified graphics context.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_change_gc_aux_checked (xcb_connection_t                 *c,
+                           xcb_gcontext_t                    gc,
+                           uint32_t                          value_mask,
+                           const xcb_change_gc_value_list_t *value_list);
+
+/**
+ * @brief change graphics context components
+ *
+ * @param c The connection
+ * @param gc The graphics context to change.
+ * @param value_mask A bitmask of #xcb_gc_t values.
+ * @param value_mask \n
+ * @param value_list Values for each of the components specified in the bitmask \a value_mask. The
+ * order has to correspond to the order of possible \a value_mask bits. See the
+ * example.
+ * @return A cookie
+ *
+ * Changes the components specified by \a value_mask for the specified graphics context.
+ *
+ */
+xcb_void_cookie_t
+xcb_change_gc_aux (xcb_connection_t                 *c,
+                   xcb_gcontext_t                    gc,
+                   uint32_t                          value_mask,
+                   const xcb_change_gc_value_list_t *value_list);
+
+void *
+xcb_change_gc_value_list (const xcb_change_gc_request_t *R);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_copy_gc_checked (xcb_connection_t *c,
+                     xcb_gcontext_t    src_gc,
+                     xcb_gcontext_t    dst_gc,
+                     uint32_t          value_mask);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_copy_gc (xcb_connection_t *c,
+             xcb_gcontext_t    src_gc,
+             xcb_gcontext_t    dst_gc,
+             uint32_t          value_mask);
+
+int
+xcb_set_dashes_sizeof (const void  *_buffer);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_set_dashes_checked (xcb_connection_t *c,
+                        xcb_gcontext_t    gc,
+                        uint16_t          dash_offset,
+                        uint16_t          dashes_len,
+                        const uint8_t    *dashes);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_set_dashes (xcb_connection_t *c,
+                xcb_gcontext_t    gc,
+                uint16_t          dash_offset,
+                uint16_t          dashes_len,
+                const uint8_t    *dashes);
+
+uint8_t *
+xcb_set_dashes_dashes (const xcb_set_dashes_request_t *R);
+
+int
+xcb_set_dashes_dashes_length (const xcb_set_dashes_request_t *R);
+
+xcb_generic_iterator_t
+xcb_set_dashes_dashes_end (const xcb_set_dashes_request_t *R);
+
+int
+xcb_set_clip_rectangles_sizeof (const void  *_buffer,
+                                uint32_t     rectangles_len);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_set_clip_rectangles_checked (xcb_connection_t      *c,
+                                 uint8_t                ordering,
+                                 xcb_gcontext_t         gc,
+                                 int16_t                clip_x_origin,
+                                 int16_t                clip_y_origin,
+                                 uint32_t               rectangles_len,
+                                 const xcb_rectangle_t *rectangles);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_set_clip_rectangles (xcb_connection_t      *c,
+                         uint8_t                ordering,
+                         xcb_gcontext_t         gc,
+                         int16_t                clip_x_origin,
+                         int16_t                clip_y_origin,
+                         uint32_t               rectangles_len,
+                         const xcb_rectangle_t *rectangles);
+
+xcb_rectangle_t *
+xcb_set_clip_rectangles_rectangles (const xcb_set_clip_rectangles_request_t *R);
+
+int
+xcb_set_clip_rectangles_rectangles_length (const xcb_set_clip_rectangles_request_t *R);
+
+xcb_rectangle_iterator_t
+xcb_set_clip_rectangles_rectangles_iterator (const xcb_set_clip_rectangles_request_t *R);
+
+/**
+ * @brief Destroys a graphics context
+ *
+ * @param c The connection
+ * @param gc The graphics context to destroy.
+ * @return A cookie
+ *
+ * Destroys the specified \a gc and all associated storage.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_free_gc_checked (xcb_connection_t *c,
+                     xcb_gcontext_t    gc);
+
+/**
+ * @brief Destroys a graphics context
+ *
+ * @param c The connection
+ * @param gc The graphics context to destroy.
+ * @return A cookie
+ *
+ * Destroys the specified \a gc and all associated storage.
+ *
+ */
+xcb_void_cookie_t
+xcb_free_gc (xcb_connection_t *c,
+             xcb_gcontext_t    gc);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_clear_area_checked (xcb_connection_t *c,
+                        uint8_t           exposures,
+                        xcb_window_t      window,
+                        int16_t           x,
+                        int16_t           y,
+                        uint16_t          width,
+                        uint16_t          height);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_clear_area (xcb_connection_t *c,
+                uint8_t           exposures,
+                xcb_window_t      window,
+                int16_t           x,
+                int16_t           y,
+                uint16_t          width,
+                uint16_t          height);
+
+/**
+ * @brief copy areas
+ *
+ * @param c The connection
+ * @param src_drawable The source drawable (Window or Pixmap).
+ * @param dst_drawable The destination drawable (Window or Pixmap).
+ * @param gc The graphics context to use.
+ * @param src_x The source X coordinate.
+ * @param src_y The source Y coordinate.
+ * @param dst_x The destination X coordinate.
+ * @param dst_y The destination Y coordinate.
+ * @param width The width of the area to copy (in pixels).
+ * @param height The height of the area to copy (in pixels).
+ * @return A cookie
+ *
+ * Copies the specified rectangle from \a src_drawable to \a dst_drawable.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_copy_area_checked (xcb_connection_t *c,
+                       xcb_drawable_t    src_drawable,
+                       xcb_drawable_t    dst_drawable,
+                       xcb_gcontext_t    gc,
+                       int16_t           src_x,
+                       int16_t           src_y,
+                       int16_t           dst_x,
+                       int16_t           dst_y,
+                       uint16_t          width,
+                       uint16_t          height);
+
+/**
+ * @brief copy areas
+ *
+ * @param c The connection
+ * @param src_drawable The source drawable (Window or Pixmap).
+ * @param dst_drawable The destination drawable (Window or Pixmap).
+ * @param gc The graphics context to use.
+ * @param src_x The source X coordinate.
+ * @param src_y The source Y coordinate.
+ * @param dst_x The destination X coordinate.
+ * @param dst_y The destination Y coordinate.
+ * @param width The width of the area to copy (in pixels).
+ * @param height The height of the area to copy (in pixels).
+ * @return A cookie
+ *
+ * Copies the specified rectangle from \a src_drawable to \a dst_drawable.
+ *
+ */
+xcb_void_cookie_t
+xcb_copy_area (xcb_connection_t *c,
+               xcb_drawable_t    src_drawable,
+               xcb_drawable_t    dst_drawable,
+               xcb_gcontext_t    gc,
+               int16_t           src_x,
+               int16_t           src_y,
+               int16_t           dst_x,
+               int16_t           dst_y,
+               uint16_t          width,
+               uint16_t          height);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_copy_plane_checked (xcb_connection_t *c,
+                        xcb_drawable_t    src_drawable,
+                        xcb_drawable_t    dst_drawable,
+                        xcb_gcontext_t    gc,
+                        int16_t           src_x,
+                        int16_t           src_y,
+                        int16_t           dst_x,
+                        int16_t           dst_y,
+                        uint16_t          width,
+                        uint16_t          height,
+                        uint32_t          bit_plane);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_copy_plane (xcb_connection_t *c,
+                xcb_drawable_t    src_drawable,
+                xcb_drawable_t    dst_drawable,
+                xcb_gcontext_t    gc,
+                int16_t           src_x,
+                int16_t           src_y,
+                int16_t           dst_x,
+                int16_t           dst_y,
+                uint16_t          width,
+                uint16_t          height,
+                uint32_t          bit_plane);
+
+int
+xcb_poly_point_sizeof (const void  *_buffer,
+                       uint32_t     points_len);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_poly_point_checked (xcb_connection_t  *c,
+                        uint8_t            coordinate_mode,
+                        xcb_drawable_t     drawable,
+                        xcb_gcontext_t     gc,
+                        uint32_t           points_len,
+                        const xcb_point_t *points);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_poly_point (xcb_connection_t  *c,
+                uint8_t            coordinate_mode,
+                xcb_drawable_t     drawable,
+                xcb_gcontext_t     gc,
+                uint32_t           points_len,
+                const xcb_point_t *points);
+
+xcb_point_t *
+xcb_poly_point_points (const xcb_poly_point_request_t *R);
+
+int
+xcb_poly_point_points_length (const xcb_poly_point_request_t *R);
+
+xcb_point_iterator_t
+xcb_poly_point_points_iterator (const xcb_poly_point_request_t *R);
+
+int
+xcb_poly_line_sizeof (const void  *_buffer,
+                      uint32_t     points_len);
+
+/**
+ * @brief draw lines
+ *
+ * @param c The connection
+ * @param coordinate_mode A bitmask of #xcb_coord_mode_t values.
+ * @param coordinate_mode \n
+ * @param drawable The drawable to draw the line(s) on.
+ * @param gc The graphics context to use.
+ * @param points_len The number of `xcb_point_t` structures in \a points.
+ * @param points An array of points.
+ * @return A cookie
+ *
+ * Draws \a points_len-1 lines between each pair of points (point[i], point[i+1])
+ * in the \a points array. The lines are drawn in the order listed in the array.
+ * They join correctly at all intermediate points, and if the first and last
+ * points coincide, the first and last lines also join correctly. For any given
+ * line, a pixel is not drawn more than once. If thin (zero line-width) lines
+ * intersect, the intersecting pixels are drawn multiple times. If wide lines
+ * intersect, the intersecting pixels are drawn only once, as though the entire
+ * request were a single, filled shape.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_poly_line_checked (xcb_connection_t  *c,
+                       uint8_t            coordinate_mode,
+                       xcb_drawable_t     drawable,
+                       xcb_gcontext_t     gc,
+                       uint32_t           points_len,
+                       const xcb_point_t *points);
+
+/**
+ * @brief draw lines
+ *
+ * @param c The connection
+ * @param coordinate_mode A bitmask of #xcb_coord_mode_t values.
+ * @param coordinate_mode \n
+ * @param drawable The drawable to draw the line(s) on.
+ * @param gc The graphics context to use.
+ * @param points_len The number of `xcb_point_t` structures in \a points.
+ * @param points An array of points.
+ * @return A cookie
+ *
+ * Draws \a points_len-1 lines between each pair of points (point[i], point[i+1])
+ * in the \a points array. The lines are drawn in the order listed in the array.
+ * They join correctly at all intermediate points, and if the first and last
+ * points coincide, the first and last lines also join correctly. For any given
+ * line, a pixel is not drawn more than once. If thin (zero line-width) lines
+ * intersect, the intersecting pixels are drawn multiple times. If wide lines
+ * intersect, the intersecting pixels are drawn only once, as though the entire
+ * request were a single, filled shape.
+ *
+ */
+xcb_void_cookie_t
+xcb_poly_line (xcb_connection_t  *c,
+               uint8_t            coordinate_mode,
+               xcb_drawable_t     drawable,
+               xcb_gcontext_t     gc,
+               uint32_t           points_len,
+               const xcb_point_t *points);
+
+xcb_point_t *
+xcb_poly_line_points (const xcb_poly_line_request_t *R);
+
+int
+xcb_poly_line_points_length (const xcb_poly_line_request_t *R);
+
+xcb_point_iterator_t
+xcb_poly_line_points_iterator (const xcb_poly_line_request_t *R);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_segment_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_segment_t)
+ */
+void
+xcb_segment_next (xcb_segment_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_segment_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_segment_end (xcb_segment_iterator_t i);
+
+int
+xcb_poly_segment_sizeof (const void  *_buffer,
+                         uint32_t     segments_len);
+
+/**
+ * @brief draw lines
+ *
+ * @param c The connection
+ * @param drawable A drawable (Window or Pixmap) to draw on.
+ * @param gc The graphics context to use.
+ * \n
+ * TODO: document which attributes of a gc are used
+ * @param segments_len The number of `xcb_segment_t` structures in \a segments.
+ * @param segments An array of `xcb_segment_t` structures.
+ * @return A cookie
+ *
+ * Draws multiple, unconnected lines. For each segment, a line is drawn between
+ * (x1, y1) and (x2, y2). The lines are drawn in the order listed in the array of
+ * `xcb_segment_t` structures and does not perform joining at coincident
+ * endpoints. For any given line, a pixel is not drawn more than once. If lines
+ * intersect, the intersecting pixels are drawn multiple times.
+ * 
+ * TODO: include the xcb_segment_t data structure
+ * 
+ * TODO: an example
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_poly_segment_checked (xcb_connection_t    *c,
+                          xcb_drawable_t       drawable,
+                          xcb_gcontext_t       gc,
+                          uint32_t             segments_len,
+                          const xcb_segment_t *segments);
+
+/**
+ * @brief draw lines
+ *
+ * @param c The connection
+ * @param drawable A drawable (Window or Pixmap) to draw on.
+ * @param gc The graphics context to use.
+ * \n
+ * TODO: document which attributes of a gc are used
+ * @param segments_len The number of `xcb_segment_t` structures in \a segments.
+ * @param segments An array of `xcb_segment_t` structures.
+ * @return A cookie
+ *
+ * Draws multiple, unconnected lines. For each segment, a line is drawn between
+ * (x1, y1) and (x2, y2). The lines are drawn in the order listed in the array of
+ * `xcb_segment_t` structures and does not perform joining at coincident
+ * endpoints. For any given line, a pixel is not drawn more than once. If lines
+ * intersect, the intersecting pixels are drawn multiple times.
+ * 
+ * TODO: include the xcb_segment_t data structure
+ * 
+ * TODO: an example
+ *
+ */
+xcb_void_cookie_t
+xcb_poly_segment (xcb_connection_t    *c,
+                  xcb_drawable_t       drawable,
+                  xcb_gcontext_t       gc,
+                  uint32_t             segments_len,
+                  const xcb_segment_t *segments);
+
+xcb_segment_t *
+xcb_poly_segment_segments (const xcb_poly_segment_request_t *R);
+
+int
+xcb_poly_segment_segments_length (const xcb_poly_segment_request_t *R);
+
+xcb_segment_iterator_t
+xcb_poly_segment_segments_iterator (const xcb_poly_segment_request_t *R);
+
+int
+xcb_poly_rectangle_sizeof (const void  *_buffer,
+                           uint32_t     rectangles_len);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_poly_rectangle_checked (xcb_connection_t      *c,
+                            xcb_drawable_t         drawable,
+                            xcb_gcontext_t         gc,
+                            uint32_t               rectangles_len,
+                            const xcb_rectangle_t *rectangles);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_poly_rectangle (xcb_connection_t      *c,
+                    xcb_drawable_t         drawable,
+                    xcb_gcontext_t         gc,
+                    uint32_t               rectangles_len,
+                    const xcb_rectangle_t *rectangles);
+
+xcb_rectangle_t *
+xcb_poly_rectangle_rectangles (const xcb_poly_rectangle_request_t *R);
+
+int
+xcb_poly_rectangle_rectangles_length (const xcb_poly_rectangle_request_t *R);
+
+xcb_rectangle_iterator_t
+xcb_poly_rectangle_rectangles_iterator (const xcb_poly_rectangle_request_t *R);
+
+int
+xcb_poly_arc_sizeof (const void  *_buffer,
+                     uint32_t     arcs_len);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_poly_arc_checked (xcb_connection_t *c,
+                      xcb_drawable_t    drawable,
+                      xcb_gcontext_t    gc,
+                      uint32_t          arcs_len,
+                      const xcb_arc_t  *arcs);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_poly_arc (xcb_connection_t *c,
+              xcb_drawable_t    drawable,
+              xcb_gcontext_t    gc,
+              uint32_t          arcs_len,
+              const xcb_arc_t  *arcs);
+
+xcb_arc_t *
+xcb_poly_arc_arcs (const xcb_poly_arc_request_t *R);
+
+int
+xcb_poly_arc_arcs_length (const xcb_poly_arc_request_t *R);
+
+xcb_arc_iterator_t
+xcb_poly_arc_arcs_iterator (const xcb_poly_arc_request_t *R);
+
+int
+xcb_fill_poly_sizeof (const void  *_buffer,
+                      uint32_t     points_len);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_fill_poly_checked (xcb_connection_t  *c,
+                       xcb_drawable_t     drawable,
+                       xcb_gcontext_t     gc,
+                       uint8_t            shape,
+                       uint8_t            coordinate_mode,
+                       uint32_t           points_len,
+                       const xcb_point_t *points);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_fill_poly (xcb_connection_t  *c,
+               xcb_drawable_t     drawable,
+               xcb_gcontext_t     gc,
+               uint8_t            shape,
+               uint8_t            coordinate_mode,
+               uint32_t           points_len,
+               const xcb_point_t *points);
+
+xcb_point_t *
+xcb_fill_poly_points (const xcb_fill_poly_request_t *R);
+
+int
+xcb_fill_poly_points_length (const xcb_fill_poly_request_t *R);
+
+xcb_point_iterator_t
+xcb_fill_poly_points_iterator (const xcb_fill_poly_request_t *R);
+
+int
+xcb_poly_fill_rectangle_sizeof (const void  *_buffer,
+                                uint32_t     rectangles_len);
+
+/**
+ * @brief Fills rectangles
+ *
+ * @param c The connection
+ * @param drawable The drawable (Window or Pixmap) to draw on.
+ * @param gc The graphics context to use.
+ * \n
+ * The following graphics context components are used: function, plane-mask,
+ * fill-style, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask.
+ * \n
+ * The following graphics context mode-dependent components are used:
+ * foreground, background, tile, stipple, tile-stipple-x-origin, and
+ * tile-stipple-y-origin.
+ * @param rectangles_len The number of `xcb_rectangle_t` structures in \a rectangles.
+ * @param rectangles The rectangles to fill.
+ * @return A cookie
+ *
+ * Fills the specified rectangle(s) in the order listed in the array. For any
+ * given rectangle, each pixel is not drawn more than once. If rectangles
+ * intersect, the intersecting pixels are drawn multiple times.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_poly_fill_rectangle_checked (xcb_connection_t      *c,
+                                 xcb_drawable_t         drawable,
+                                 xcb_gcontext_t         gc,
+                                 uint32_t               rectangles_len,
+                                 const xcb_rectangle_t *rectangles);
+
+/**
+ * @brief Fills rectangles
+ *
+ * @param c The connection
+ * @param drawable The drawable (Window or Pixmap) to draw on.
+ * @param gc The graphics context to use.
+ * \n
+ * The following graphics context components are used: function, plane-mask,
+ * fill-style, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask.
+ * \n
+ * The following graphics context mode-dependent components are used:
+ * foreground, background, tile, stipple, tile-stipple-x-origin, and
+ * tile-stipple-y-origin.
+ * @param rectangles_len The number of `xcb_rectangle_t` structures in \a rectangles.
+ * @param rectangles The rectangles to fill.
+ * @return A cookie
+ *
+ * Fills the specified rectangle(s) in the order listed in the array. For any
+ * given rectangle, each pixel is not drawn more than once. If rectangles
+ * intersect, the intersecting pixels are drawn multiple times.
+ *
+ */
+xcb_void_cookie_t
+xcb_poly_fill_rectangle (xcb_connection_t      *c,
+                         xcb_drawable_t         drawable,
+                         xcb_gcontext_t         gc,
+                         uint32_t               rectangles_len,
+                         const xcb_rectangle_t *rectangles);
+
+xcb_rectangle_t *
+xcb_poly_fill_rectangle_rectangles (const xcb_poly_fill_rectangle_request_t *R);
+
+int
+xcb_poly_fill_rectangle_rectangles_length (const xcb_poly_fill_rectangle_request_t *R);
+
+xcb_rectangle_iterator_t
+xcb_poly_fill_rectangle_rectangles_iterator (const xcb_poly_fill_rectangle_request_t *R);
+
+int
+xcb_poly_fill_arc_sizeof (const void  *_buffer,
+                          uint32_t     arcs_len);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_poly_fill_arc_checked (xcb_connection_t *c,
+                           xcb_drawable_t    drawable,
+                           xcb_gcontext_t    gc,
+                           uint32_t          arcs_len,
+                           const xcb_arc_t  *arcs);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_poly_fill_arc (xcb_connection_t *c,
+                   xcb_drawable_t    drawable,
+                   xcb_gcontext_t    gc,
+                   uint32_t          arcs_len,
+                   const xcb_arc_t  *arcs);
+
+xcb_arc_t *
+xcb_poly_fill_arc_arcs (const xcb_poly_fill_arc_request_t *R);
+
+int
+xcb_poly_fill_arc_arcs_length (const xcb_poly_fill_arc_request_t *R);
+
+xcb_arc_iterator_t
+xcb_poly_fill_arc_arcs_iterator (const xcb_poly_fill_arc_request_t *R);
+
+int
+xcb_put_image_sizeof (const void  *_buffer,
+                      uint32_t     data_len);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_put_image_checked (xcb_connection_t *c,
+                       uint8_t           format,
+                       xcb_drawable_t    drawable,
+                       xcb_gcontext_t    gc,
+                       uint16_t          width,
+                       uint16_t          height,
+                       int16_t           dst_x,
+                       int16_t           dst_y,
+                       uint8_t           left_pad,
+                       uint8_t           depth,
+                       uint32_t          data_len,
+                       const uint8_t    *data);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_put_image (xcb_connection_t *c,
+               uint8_t           format,
+               xcb_drawable_t    drawable,
+               xcb_gcontext_t    gc,
+               uint16_t          width,
+               uint16_t          height,
+               int16_t           dst_x,
+               int16_t           dst_y,
+               uint8_t           left_pad,
+               uint8_t           depth,
+               uint32_t          data_len,
+               const uint8_t    *data);
+
+uint8_t *
+xcb_put_image_data (const xcb_put_image_request_t *R);
+
+int
+xcb_put_image_data_length (const xcb_put_image_request_t *R);
+
+xcb_generic_iterator_t
+xcb_put_image_data_end (const xcb_put_image_request_t *R);
+
+int
+xcb_get_image_sizeof (const void  *_buffer);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_get_image_cookie_t
+xcb_get_image (xcb_connection_t *c,
+               uint8_t           format,
+               xcb_drawable_t    drawable,
+               int16_t           x,
+               int16_t           y,
+               uint16_t          width,
+               uint16_t          height,
+               uint32_t          plane_mask);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_get_image_cookie_t
+xcb_get_image_unchecked (xcb_connection_t *c,
+                         uint8_t           format,
+                         xcb_drawable_t    drawable,
+                         int16_t           x,
+                         int16_t           y,
+                         uint16_t          width,
+                         uint16_t          height,
+                         uint32_t          plane_mask);
+
+uint8_t *
+xcb_get_image_data (const xcb_get_image_reply_t *R);
+
+int
+xcb_get_image_data_length (const xcb_get_image_reply_t *R);
+
+xcb_generic_iterator_t
+xcb_get_image_data_end (const xcb_get_image_reply_t *R);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_get_image_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_get_image_reply_t *
+xcb_get_image_reply (xcb_connection_t        *c,
+                     xcb_get_image_cookie_t   cookie  /**< */,
+                     xcb_generic_error_t    **e);
+
+int
+xcb_poly_text_8_sizeof (const void  *_buffer,
+                        uint32_t     items_len);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_poly_text_8_checked (xcb_connection_t *c,
+                         xcb_drawable_t    drawable,
+                         xcb_gcontext_t    gc,
+                         int16_t           x,
+                         int16_t           y,
+                         uint32_t          items_len,
+                         const uint8_t    *items);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_poly_text_8 (xcb_connection_t *c,
+                 xcb_drawable_t    drawable,
+                 xcb_gcontext_t    gc,
+                 int16_t           x,
+                 int16_t           y,
+                 uint32_t          items_len,
+                 const uint8_t    *items);
+
+uint8_t *
+xcb_poly_text_8_items (const xcb_poly_text_8_request_t *R);
+
+int
+xcb_poly_text_8_items_length (const xcb_poly_text_8_request_t *R);
+
+xcb_generic_iterator_t
+xcb_poly_text_8_items_end (const xcb_poly_text_8_request_t *R);
+
+int
+xcb_poly_text_16_sizeof (const void  *_buffer,
+                         uint32_t     items_len);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_poly_text_16_checked (xcb_connection_t *c,
+                          xcb_drawable_t    drawable,
+                          xcb_gcontext_t    gc,
+                          int16_t           x,
+                          int16_t           y,
+                          uint32_t          items_len,
+                          const uint8_t    *items);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_poly_text_16 (xcb_connection_t *c,
+                  xcb_drawable_t    drawable,
+                  xcb_gcontext_t    gc,
+                  int16_t           x,
+                  int16_t           y,
+                  uint32_t          items_len,
+                  const uint8_t    *items);
+
+uint8_t *
+xcb_poly_text_16_items (const xcb_poly_text_16_request_t *R);
+
+int
+xcb_poly_text_16_items_length (const xcb_poly_text_16_request_t *R);
+
+xcb_generic_iterator_t
+xcb_poly_text_16_items_end (const xcb_poly_text_16_request_t *R);
+
+int
+xcb_image_text_8_sizeof (const void  *_buffer);
+
+/**
+ * @brief Draws text
+ *
+ * @param c The connection
+ * @param string_len The length of the \a string. Note that this parameter limited by 255 due to
+ * using 8 bits!
+ * @param drawable The drawable (Window or Pixmap) to draw text on.
+ * @param gc The graphics context to use.
+ * \n
+ * The following graphics context components are used: plane-mask, foreground,
+ * background, font, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask.
+ * @param x The x coordinate of the first character, relative to the origin of \a drawable.
+ * @param y The y coordinate of the first character, relative to the origin of \a drawable.
+ * @param string The string to draw. Only the first 255 characters are relevant due to the data
+ * type of \a string_len.
+ * @return A cookie
+ *
+ * Fills the destination rectangle with the background pixel from \a gc, then
+ * paints the text with the foreground pixel from \a gc. The upper-left corner of
+ * the filled rectangle is at [x, y - font-ascent]. The width is overall-width,
+ * the height is font-ascent + font-descent. The overall-width, font-ascent and
+ * font-descent are as returned by `xcb_query_text_extents` (TODO).
+ * 
+ * Note that using X core fonts is deprecated (but still supported) in favor of
+ * client-side rendering using Xft.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_image_text_8_checked (xcb_connection_t *c,
+                          uint8_t           string_len,
+                          xcb_drawable_t    drawable,
+                          xcb_gcontext_t    gc,
+                          int16_t           x,
+                          int16_t           y,
+                          const char       *string);
+
+/**
+ * @brief Draws text
+ *
+ * @param c The connection
+ * @param string_len The length of the \a string. Note that this parameter limited by 255 due to
+ * using 8 bits!
+ * @param drawable The drawable (Window or Pixmap) to draw text on.
+ * @param gc The graphics context to use.
+ * \n
+ * The following graphics context components are used: plane-mask, foreground,
+ * background, font, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask.
+ * @param x The x coordinate of the first character, relative to the origin of \a drawable.
+ * @param y The y coordinate of the first character, relative to the origin of \a drawable.
+ * @param string The string to draw. Only the first 255 characters are relevant due to the data
+ * type of \a string_len.
+ * @return A cookie
+ *
+ * Fills the destination rectangle with the background pixel from \a gc, then
+ * paints the text with the foreground pixel from \a gc. The upper-left corner of
+ * the filled rectangle is at [x, y - font-ascent]. The width is overall-width,
+ * the height is font-ascent + font-descent. The overall-width, font-ascent and
+ * font-descent are as returned by `xcb_query_text_extents` (TODO).
+ * 
+ * Note that using X core fonts is deprecated (but still supported) in favor of
+ * client-side rendering using Xft.
+ *
+ */
+xcb_void_cookie_t
+xcb_image_text_8 (xcb_connection_t *c,
+                  uint8_t           string_len,
+                  xcb_drawable_t    drawable,
+                  xcb_gcontext_t    gc,
+                  int16_t           x,
+                  int16_t           y,
+                  const char       *string);
+
+char *
+xcb_image_text_8_string (const xcb_image_text_8_request_t *R);
+
+int
+xcb_image_text_8_string_length (const xcb_image_text_8_request_t *R);
+
+xcb_generic_iterator_t
+xcb_image_text_8_string_end (const xcb_image_text_8_request_t *R);
+
+int
+xcb_image_text_16_sizeof (const void  *_buffer);
+
+/**
+ * @brief Draws text
+ *
+ * @param c The connection
+ * @param string_len The length of the \a string in characters. Note that this parameter limited by
+ * 255 due to using 8 bits!
+ * @param drawable The drawable (Window or Pixmap) to draw text on.
+ * @param gc The graphics context to use.
+ * \n
+ * The following graphics context components are used: plane-mask, foreground,
+ * background, font, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask.
+ * @param x The x coordinate of the first character, relative to the origin of \a drawable.
+ * @param y The y coordinate of the first character, relative to the origin of \a drawable.
+ * @param string The string to draw. Only the first 255 characters are relevant due to the data
+ * type of \a string_len. Every character uses 2 bytes (hence the 16 in this
+ * request's name).
+ * @return A cookie
+ *
+ * Fills the destination rectangle with the background pixel from \a gc, then
+ * paints the text with the foreground pixel from \a gc. The upper-left corner of
+ * the filled rectangle is at [x, y - font-ascent]. The width is overall-width,
+ * the height is font-ascent + font-descent. The overall-width, font-ascent and
+ * font-descent are as returned by `xcb_query_text_extents` (TODO).
+ * 
+ * Note that using X core fonts is deprecated (but still supported) in favor of
+ * client-side rendering using Xft.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_image_text_16_checked (xcb_connection_t   *c,
+                           uint8_t             string_len,
+                           xcb_drawable_t      drawable,
+                           xcb_gcontext_t      gc,
+                           int16_t             x,
+                           int16_t             y,
+                           const xcb_char2b_t *string);
+
+/**
+ * @brief Draws text
+ *
+ * @param c The connection
+ * @param string_len The length of the \a string in characters. Note that this parameter limited by
+ * 255 due to using 8 bits!
+ * @param drawable The drawable (Window or Pixmap) to draw text on.
+ * @param gc The graphics context to use.
+ * \n
+ * The following graphics context components are used: plane-mask, foreground,
+ * background, font, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask.
+ * @param x The x coordinate of the first character, relative to the origin of \a drawable.
+ * @param y The y coordinate of the first character, relative to the origin of \a drawable.
+ * @param string The string to draw. Only the first 255 characters are relevant due to the data
+ * type of \a string_len. Every character uses 2 bytes (hence the 16 in this
+ * request's name).
+ * @return A cookie
+ *
+ * Fills the destination rectangle with the background pixel from \a gc, then
+ * paints the text with the foreground pixel from \a gc. The upper-left corner of
+ * the filled rectangle is at [x, y - font-ascent]. The width is overall-width,
+ * the height is font-ascent + font-descent. The overall-width, font-ascent and
+ * font-descent are as returned by `xcb_query_text_extents` (TODO).
+ * 
+ * Note that using X core fonts is deprecated (but still supported) in favor of
+ * client-side rendering using Xft.
+ *
+ */
+xcb_void_cookie_t
+xcb_image_text_16 (xcb_connection_t   *c,
+                   uint8_t             string_len,
+                   xcb_drawable_t      drawable,
+                   xcb_gcontext_t      gc,
+                   int16_t             x,
+                   int16_t             y,
+                   const xcb_char2b_t *string);
+
+xcb_char2b_t *
+xcb_image_text_16_string (const xcb_image_text_16_request_t *R);
+
+int
+xcb_image_text_16_string_length (const xcb_image_text_16_request_t *R);
+
+xcb_char2b_iterator_t
+xcb_image_text_16_string_iterator (const xcb_image_text_16_request_t *R);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_create_colormap_checked (xcb_connection_t *c,
+                             uint8_t           alloc,
+                             xcb_colormap_t    mid,
+                             xcb_window_t      window,
+                             xcb_visualid_t    visual);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_create_colormap (xcb_connection_t *c,
+                     uint8_t           alloc,
+                     xcb_colormap_t    mid,
+                     xcb_window_t      window,
+                     xcb_visualid_t    visual);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_free_colormap_checked (xcb_connection_t *c,
+                           xcb_colormap_t    cmap);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_free_colormap (xcb_connection_t *c,
+                   xcb_colormap_t    cmap);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_copy_colormap_and_free_checked (xcb_connection_t *c,
+                                    xcb_colormap_t    mid,
+                                    xcb_colormap_t    src_cmap);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_copy_colormap_and_free (xcb_connection_t *c,
+                            xcb_colormap_t    mid,
+                            xcb_colormap_t    src_cmap);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_install_colormap_checked (xcb_connection_t *c,
+                              xcb_colormap_t    cmap);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_install_colormap (xcb_connection_t *c,
+                      xcb_colormap_t    cmap);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_uninstall_colormap_checked (xcb_connection_t *c,
+                                xcb_colormap_t    cmap);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_uninstall_colormap (xcb_connection_t *c,
+                        xcb_colormap_t    cmap);
+
+int
+xcb_list_installed_colormaps_sizeof (const void  *_buffer);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_list_installed_colormaps_cookie_t
+xcb_list_installed_colormaps (xcb_connection_t *c,
+                              xcb_window_t      window);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_list_installed_colormaps_cookie_t
+xcb_list_installed_colormaps_unchecked (xcb_connection_t *c,
+                                        xcb_window_t      window);
+
+xcb_colormap_t *
+xcb_list_installed_colormaps_cmaps (const xcb_list_installed_colormaps_reply_t *R);
+
+int
+xcb_list_installed_colormaps_cmaps_length (const xcb_list_installed_colormaps_reply_t *R);
+
+xcb_generic_iterator_t
+xcb_list_installed_colormaps_cmaps_end (const xcb_list_installed_colormaps_reply_t *R);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_list_installed_colormaps_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_list_installed_colormaps_reply_t *
+xcb_list_installed_colormaps_reply (xcb_connection_t                       *c,
+                                    xcb_list_installed_colormaps_cookie_t   cookie  /**< */,
+                                    xcb_generic_error_t                   **e);
+
+/**
+ * @brief Allocate a color
+ *
+ * @param c The connection
+ * @param cmap TODO
+ * @param red The red value of your color.
+ * @param green The green value of your color.
+ * @param blue The blue value of your color.
+ * @return A cookie
+ *
+ * Allocates a read-only colormap entry corresponding to the closest RGB value
+ * supported by the hardware. If you are using TrueColor, you can take a shortcut
+ * and directly calculate the color pixel value to avoid the round trip. But, for
+ * example, on 16-bit color setups (VNC), you can easily get the closest supported
+ * RGB value to the RGB value you are specifying.
+ *
+ */
+xcb_alloc_color_cookie_t
+xcb_alloc_color (xcb_connection_t *c,
+                 xcb_colormap_t    cmap,
+                 uint16_t          red,
+                 uint16_t          green,
+                 uint16_t          blue);
+
+/**
+ * @brief Allocate a color
+ *
+ * @param c The connection
+ * @param cmap TODO
+ * @param red The red value of your color.
+ * @param green The green value of your color.
+ * @param blue The blue value of your color.
+ * @return A cookie
+ *
+ * Allocates a read-only colormap entry corresponding to the closest RGB value
+ * supported by the hardware. If you are using TrueColor, you can take a shortcut
+ * and directly calculate the color pixel value to avoid the round trip. But, for
+ * example, on 16-bit color setups (VNC), you can easily get the closest supported
+ * RGB value to the RGB value you are specifying.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_alloc_color_cookie_t
+xcb_alloc_color_unchecked (xcb_connection_t *c,
+                           xcb_colormap_t    cmap,
+                           uint16_t          red,
+                           uint16_t          green,
+                           uint16_t          blue);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_alloc_color_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_alloc_color_reply_t *
+xcb_alloc_color_reply (xcb_connection_t          *c,
+                       xcb_alloc_color_cookie_t   cookie  /**< */,
+                       xcb_generic_error_t      **e);
+
+int
+xcb_alloc_named_color_sizeof (const void  *_buffer);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_alloc_named_color_cookie_t
+xcb_alloc_named_color (xcb_connection_t *c,
+                       xcb_colormap_t    cmap,
+                       uint16_t          name_len,
+                       const char       *name);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_alloc_named_color_cookie_t
+xcb_alloc_named_color_unchecked (xcb_connection_t *c,
+                                 xcb_colormap_t    cmap,
+                                 uint16_t          name_len,
+                                 const char       *name);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_alloc_named_color_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_alloc_named_color_reply_t *
+xcb_alloc_named_color_reply (xcb_connection_t                *c,
+                             xcb_alloc_named_color_cookie_t   cookie  /**< */,
+                             xcb_generic_error_t            **e);
+
+int
+xcb_alloc_color_cells_sizeof (const void  *_buffer);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_alloc_color_cells_cookie_t
+xcb_alloc_color_cells (xcb_connection_t *c,
+                       uint8_t           contiguous,
+                       xcb_colormap_t    cmap,
+                       uint16_t          colors,
+                       uint16_t          planes);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_alloc_color_cells_cookie_t
+xcb_alloc_color_cells_unchecked (xcb_connection_t *c,
+                                 uint8_t           contiguous,
+                                 xcb_colormap_t    cmap,
+                                 uint16_t          colors,
+                                 uint16_t          planes);
+
+uint32_t *
+xcb_alloc_color_cells_pixels (const xcb_alloc_color_cells_reply_t *R);
+
+int
+xcb_alloc_color_cells_pixels_length (const xcb_alloc_color_cells_reply_t *R);
+
+xcb_generic_iterator_t
+xcb_alloc_color_cells_pixels_end (const xcb_alloc_color_cells_reply_t *R);
+
+uint32_t *
+xcb_alloc_color_cells_masks (const xcb_alloc_color_cells_reply_t *R);
+
+int
+xcb_alloc_color_cells_masks_length (const xcb_alloc_color_cells_reply_t *R);
+
+xcb_generic_iterator_t
+xcb_alloc_color_cells_masks_end (const xcb_alloc_color_cells_reply_t *R);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_alloc_color_cells_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_alloc_color_cells_reply_t *
+xcb_alloc_color_cells_reply (xcb_connection_t                *c,
+                             xcb_alloc_color_cells_cookie_t   cookie  /**< */,
+                             xcb_generic_error_t            **e);
+
+int
+xcb_alloc_color_planes_sizeof (const void  *_buffer);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_alloc_color_planes_cookie_t
+xcb_alloc_color_planes (xcb_connection_t *c,
+                        uint8_t           contiguous,
+                        xcb_colormap_t    cmap,
+                        uint16_t          colors,
+                        uint16_t          reds,
+                        uint16_t          greens,
+                        uint16_t          blues);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_alloc_color_planes_cookie_t
+xcb_alloc_color_planes_unchecked (xcb_connection_t *c,
+                                  uint8_t           contiguous,
+                                  xcb_colormap_t    cmap,
+                                  uint16_t          colors,
+                                  uint16_t          reds,
+                                  uint16_t          greens,
+                                  uint16_t          blues);
+
+uint32_t *
+xcb_alloc_color_planes_pixels (const xcb_alloc_color_planes_reply_t *R);
+
+int
+xcb_alloc_color_planes_pixels_length (const xcb_alloc_color_planes_reply_t *R);
+
+xcb_generic_iterator_t
+xcb_alloc_color_planes_pixels_end (const xcb_alloc_color_planes_reply_t *R);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_alloc_color_planes_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_alloc_color_planes_reply_t *
+xcb_alloc_color_planes_reply (xcb_connection_t                 *c,
+                              xcb_alloc_color_planes_cookie_t   cookie  /**< */,
+                              xcb_generic_error_t             **e);
+
+int
+xcb_free_colors_sizeof (const void  *_buffer,
+                        uint32_t     pixels_len);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_free_colors_checked (xcb_connection_t *c,
+                         xcb_colormap_t    cmap,
+                         uint32_t          plane_mask,
+                         uint32_t          pixels_len,
+                         const uint32_t   *pixels);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_free_colors (xcb_connection_t *c,
+                 xcb_colormap_t    cmap,
+                 uint32_t          plane_mask,
+                 uint32_t          pixels_len,
+                 const uint32_t   *pixels);
+
+uint32_t *
+xcb_free_colors_pixels (const xcb_free_colors_request_t *R);
+
+int
+xcb_free_colors_pixels_length (const xcb_free_colors_request_t *R);
+
+xcb_generic_iterator_t
+xcb_free_colors_pixels_end (const xcb_free_colors_request_t *R);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_coloritem_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_coloritem_t)
+ */
+void
+xcb_coloritem_next (xcb_coloritem_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_coloritem_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_coloritem_end (xcb_coloritem_iterator_t i);
+
+int
+xcb_store_colors_sizeof (const void  *_buffer,
+                         uint32_t     items_len);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_store_colors_checked (xcb_connection_t      *c,
+                          xcb_colormap_t         cmap,
+                          uint32_t               items_len,
+                          const xcb_coloritem_t *items);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_store_colors (xcb_connection_t      *c,
+                  xcb_colormap_t         cmap,
+                  uint32_t               items_len,
+                  const xcb_coloritem_t *items);
+
+xcb_coloritem_t *
+xcb_store_colors_items (const xcb_store_colors_request_t *R);
+
+int
+xcb_store_colors_items_length (const xcb_store_colors_request_t *R);
+
+xcb_coloritem_iterator_t
+xcb_store_colors_items_iterator (const xcb_store_colors_request_t *R);
+
+int
+xcb_store_named_color_sizeof (const void  *_buffer);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_store_named_color_checked (xcb_connection_t *c,
+                               uint8_t           flags,
+                               xcb_colormap_t    cmap,
+                               uint32_t          pixel,
+                               uint16_t          name_len,
+                               const char       *name);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_store_named_color (xcb_connection_t *c,
+                       uint8_t           flags,
+                       xcb_colormap_t    cmap,
+                       uint32_t          pixel,
+                       uint16_t          name_len,
+                       const char       *name);
+
+char *
+xcb_store_named_color_name (const xcb_store_named_color_request_t *R);
+
+int
+xcb_store_named_color_name_length (const xcb_store_named_color_request_t *R);
+
+xcb_generic_iterator_t
+xcb_store_named_color_name_end (const xcb_store_named_color_request_t *R);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_rgb_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_rgb_t)
+ */
+void
+xcb_rgb_next (xcb_rgb_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_rgb_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_rgb_end (xcb_rgb_iterator_t i);
+
+int
+xcb_query_colors_sizeof (const void  *_buffer,
+                         uint32_t     pixels_len);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_query_colors_cookie_t
+xcb_query_colors (xcb_connection_t *c,
+                  xcb_colormap_t    cmap,
+                  uint32_t          pixels_len,
+                  const uint32_t   *pixels);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_query_colors_cookie_t
+xcb_query_colors_unchecked (xcb_connection_t *c,
+                            xcb_colormap_t    cmap,
+                            uint32_t          pixels_len,
+                            const uint32_t   *pixels);
+
+xcb_rgb_t *
+xcb_query_colors_colors (const xcb_query_colors_reply_t *R);
+
+int
+xcb_query_colors_colors_length (const xcb_query_colors_reply_t *R);
+
+xcb_rgb_iterator_t
+xcb_query_colors_colors_iterator (const xcb_query_colors_reply_t *R);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_query_colors_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_query_colors_reply_t *
+xcb_query_colors_reply (xcb_connection_t           *c,
+                        xcb_query_colors_cookie_t   cookie  /**< */,
+                        xcb_generic_error_t       **e);
+
+int
+xcb_lookup_color_sizeof (const void  *_buffer);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_lookup_color_cookie_t
+xcb_lookup_color (xcb_connection_t *c,
+                  xcb_colormap_t    cmap,
+                  uint16_t          name_len,
+                  const char       *name);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_lookup_color_cookie_t
+xcb_lookup_color_unchecked (xcb_connection_t *c,
+                            xcb_colormap_t    cmap,
+                            uint16_t          name_len,
+                            const char       *name);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_lookup_color_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_lookup_color_reply_t *
+xcb_lookup_color_reply (xcb_connection_t           *c,
+                        xcb_lookup_color_cookie_t   cookie  /**< */,
+                        xcb_generic_error_t       **e);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_create_cursor_checked (xcb_connection_t *c,
+                           xcb_cursor_t      cid,
+                           xcb_pixmap_t      source,
+                           xcb_pixmap_t      mask,
+                           uint16_t          fore_red,
+                           uint16_t          fore_green,
+                           uint16_t          fore_blue,
+                           uint16_t          back_red,
+                           uint16_t          back_green,
+                           uint16_t          back_blue,
+                           uint16_t          x,
+                           uint16_t          y);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_create_cursor (xcb_connection_t *c,
+                   xcb_cursor_t      cid,
+                   xcb_pixmap_t      source,
+                   xcb_pixmap_t      mask,
+                   uint16_t          fore_red,
+                   uint16_t          fore_green,
+                   uint16_t          fore_blue,
+                   uint16_t          back_red,
+                   uint16_t          back_green,
+                   uint16_t          back_blue,
+                   uint16_t          x,
+                   uint16_t          y);
+
+/**
+ * @brief create cursor
+ *
+ * @param c The connection
+ * @param cid The ID with which you will refer to the cursor, created by `xcb_generate_id`.
+ * @param source_font In which font to look for the cursor glyph.
+ * @param mask_font In which font to look for the mask glyph.
+ * @param source_char The glyph of \a source_font to use.
+ * @param mask_char The glyph of \a mask_font to use as a mask: Pixels which are set to 1 define
+ * which source pixels are displayed. All pixels which are set to 0 are not
+ * displayed.
+ * @param fore_red The red value of the foreground color.
+ * @param fore_green The green value of the foreground color.
+ * @param fore_blue The blue value of the foreground color.
+ * @param back_red The red value of the background color.
+ * @param back_green The green value of the background color.
+ * @param back_blue The blue value of the background color.
+ * @return A cookie
+ *
+ * Creates a cursor from a font glyph. X provides a set of standard cursor shapes
+ * in a special font named cursor. Applications are encouraged to use this
+ * interface for their cursors because the font can be customized for the
+ * individual display type.
+ * 
+ * All pixels which are set to 1 in the source will use the foreground color (as
+ * specified by \a fore_red, \a fore_green and \a fore_blue). All pixels set to 0
+ * will use the background color (as specified by \a back_red, \a back_green and
+ * \a back_blue).
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_create_glyph_cursor_checked (xcb_connection_t *c,
+                                 xcb_cursor_t      cid,
+                                 xcb_font_t        source_font,
+                                 xcb_font_t        mask_font,
+                                 uint16_t          source_char,
+                                 uint16_t          mask_char,
+                                 uint16_t          fore_red,
+                                 uint16_t          fore_green,
+                                 uint16_t          fore_blue,
+                                 uint16_t          back_red,
+                                 uint16_t          back_green,
+                                 uint16_t          back_blue);
+
+/**
+ * @brief create cursor
+ *
+ * @param c The connection
+ * @param cid The ID with which you will refer to the cursor, created by `xcb_generate_id`.
+ * @param source_font In which font to look for the cursor glyph.
+ * @param mask_font In which font to look for the mask glyph.
+ * @param source_char The glyph of \a source_font to use.
+ * @param mask_char The glyph of \a mask_font to use as a mask: Pixels which are set to 1 define
+ * which source pixels are displayed. All pixels which are set to 0 are not
+ * displayed.
+ * @param fore_red The red value of the foreground color.
+ * @param fore_green The green value of the foreground color.
+ * @param fore_blue The blue value of the foreground color.
+ * @param back_red The red value of the background color.
+ * @param back_green The green value of the background color.
+ * @param back_blue The blue value of the background color.
+ * @return A cookie
+ *
+ * Creates a cursor from a font glyph. X provides a set of standard cursor shapes
+ * in a special font named cursor. Applications are encouraged to use this
+ * interface for their cursors because the font can be customized for the
+ * individual display type.
+ * 
+ * All pixels which are set to 1 in the source will use the foreground color (as
+ * specified by \a fore_red, \a fore_green and \a fore_blue). All pixels set to 0
+ * will use the background color (as specified by \a back_red, \a back_green and
+ * \a back_blue).
+ *
+ */
+xcb_void_cookie_t
+xcb_create_glyph_cursor (xcb_connection_t *c,
+                         xcb_cursor_t      cid,
+                         xcb_font_t        source_font,
+                         xcb_font_t        mask_font,
+                         uint16_t          source_char,
+                         uint16_t          mask_char,
+                         uint16_t          fore_red,
+                         uint16_t          fore_green,
+                         uint16_t          fore_blue,
+                         uint16_t          back_red,
+                         uint16_t          back_green,
+                         uint16_t          back_blue);
+
+/**
+ * @brief Deletes a cursor
+ *
+ * @param c The connection
+ * @param cursor The cursor to destroy.
+ * @return A cookie
+ *
+ * Deletes the association between the cursor resource ID and the specified
+ * cursor. The cursor is freed when no other resource references it.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_free_cursor_checked (xcb_connection_t *c,
+                         xcb_cursor_t      cursor);
+
+/**
+ * @brief Deletes a cursor
+ *
+ * @param c The connection
+ * @param cursor The cursor to destroy.
+ * @return A cookie
+ *
+ * Deletes the association between the cursor resource ID and the specified
+ * cursor. The cursor is freed when no other resource references it.
+ *
+ */
+xcb_void_cookie_t
+xcb_free_cursor (xcb_connection_t *c,
+                 xcb_cursor_t      cursor);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_recolor_cursor_checked (xcb_connection_t *c,
+                            xcb_cursor_t      cursor,
+                            uint16_t          fore_red,
+                            uint16_t          fore_green,
+                            uint16_t          fore_blue,
+                            uint16_t          back_red,
+                            uint16_t          back_green,
+                            uint16_t          back_blue);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_recolor_cursor (xcb_connection_t *c,
+                    xcb_cursor_t      cursor,
+                    uint16_t          fore_red,
+                    uint16_t          fore_green,
+                    uint16_t          fore_blue,
+                    uint16_t          back_red,
+                    uint16_t          back_green,
+                    uint16_t          back_blue);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_query_best_size_cookie_t
+xcb_query_best_size (xcb_connection_t *c,
+                     uint8_t           _class,
+                     xcb_drawable_t    drawable,
+                     uint16_t          width,
+                     uint16_t          height);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_query_best_size_cookie_t
+xcb_query_best_size_unchecked (xcb_connection_t *c,
+                               uint8_t           _class,
+                               xcb_drawable_t    drawable,
+                               uint16_t          width,
+                               uint16_t          height);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_query_best_size_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_query_best_size_reply_t *
+xcb_query_best_size_reply (xcb_connection_t              *c,
+                           xcb_query_best_size_cookie_t   cookie  /**< */,
+                           xcb_generic_error_t          **e);
+
+int
+xcb_query_extension_sizeof (const void  *_buffer);
+
+/**
+ * @brief check if extension is present
+ *
+ * @param c The connection
+ * @param name_len The length of \a name in bytes.
+ * @param name The name of the extension to query, for example "RANDR". This is case
+ * sensitive!
+ * @return A cookie
+ *
+ * Determines if the specified extension is present on this X11 server.
+ * 
+ * Every extension has a unique `major_opcode` to identify requests, the minor
+ * opcodes and request formats are extension-specific. If the extension provides
+ * events and errors, the `first_event` and `first_error` fields in the reply are
+ * set accordingly.
+ * 
+ * There should rarely be a need to use this request directly, XCB provides the
+ * `xcb_get_extension_data` function instead.
+ *
+ */
+xcb_query_extension_cookie_t
+xcb_query_extension (xcb_connection_t *c,
+                     uint16_t          name_len,
+                     const char       *name);
+
+/**
+ * @brief check if extension is present
+ *
+ * @param c The connection
+ * @param name_len The length of \a name in bytes.
+ * @param name The name of the extension to query, for example "RANDR". This is case
+ * sensitive!
+ * @return A cookie
+ *
+ * Determines if the specified extension is present on this X11 server.
+ * 
+ * Every extension has a unique `major_opcode` to identify requests, the minor
+ * opcodes and request formats are extension-specific. If the extension provides
+ * events and errors, the `first_event` and `first_error` fields in the reply are
+ * set accordingly.
+ * 
+ * There should rarely be a need to use this request directly, XCB provides the
+ * `xcb_get_extension_data` function instead.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_query_extension_cookie_t
+xcb_query_extension_unchecked (xcb_connection_t *c,
+                               uint16_t          name_len,
+                               const char       *name);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_query_extension_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_query_extension_reply_t *
+xcb_query_extension_reply (xcb_connection_t              *c,
+                           xcb_query_extension_cookie_t   cookie  /**< */,
+                           xcb_generic_error_t          **e);
+
+int
+xcb_list_extensions_sizeof (const void  *_buffer);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_list_extensions_cookie_t
+xcb_list_extensions (xcb_connection_t *c);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_list_extensions_cookie_t
+xcb_list_extensions_unchecked (xcb_connection_t *c);
+
+int
+xcb_list_extensions_names_length (const xcb_list_extensions_reply_t *R);
+
+xcb_str_iterator_t
+xcb_list_extensions_names_iterator (const xcb_list_extensions_reply_t *R);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_list_extensions_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_list_extensions_reply_t *
+xcb_list_extensions_reply (xcb_connection_t              *c,
+                           xcb_list_extensions_cookie_t   cookie  /**< */,
+                           xcb_generic_error_t          **e);
+
+int
+xcb_change_keyboard_mapping_sizeof (const void  *_buffer);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_change_keyboard_mapping_checked (xcb_connection_t   *c,
+                                     uint8_t             keycode_count,
+                                     xcb_keycode_t       first_keycode,
+                                     uint8_t             keysyms_per_keycode,
+                                     const xcb_keysym_t *keysyms);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_change_keyboard_mapping (xcb_connection_t   *c,
+                             uint8_t             keycode_count,
+                             xcb_keycode_t       first_keycode,
+                             uint8_t             keysyms_per_keycode,
+                             const xcb_keysym_t *keysyms);
+
+xcb_keysym_t *
+xcb_change_keyboard_mapping_keysyms (const xcb_change_keyboard_mapping_request_t *R);
+
+int
+xcb_change_keyboard_mapping_keysyms_length (const xcb_change_keyboard_mapping_request_t *R);
+
+xcb_generic_iterator_t
+xcb_change_keyboard_mapping_keysyms_end (const xcb_change_keyboard_mapping_request_t *R);
+
+int
+xcb_get_keyboard_mapping_sizeof (const void  *_buffer);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_get_keyboard_mapping_cookie_t
+xcb_get_keyboard_mapping (xcb_connection_t *c,
+                          xcb_keycode_t     first_keycode,
+                          uint8_t           count);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_get_keyboard_mapping_cookie_t
+xcb_get_keyboard_mapping_unchecked (xcb_connection_t *c,
+                                    xcb_keycode_t     first_keycode,
+                                    uint8_t           count);
+
+xcb_keysym_t *
+xcb_get_keyboard_mapping_keysyms (const xcb_get_keyboard_mapping_reply_t *R);
+
+int
+xcb_get_keyboard_mapping_keysyms_length (const xcb_get_keyboard_mapping_reply_t *R);
+
+xcb_generic_iterator_t
+xcb_get_keyboard_mapping_keysyms_end (const xcb_get_keyboard_mapping_reply_t *R);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_get_keyboard_mapping_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_get_keyboard_mapping_reply_t *
+xcb_get_keyboard_mapping_reply (xcb_connection_t                   *c,
+                                xcb_get_keyboard_mapping_cookie_t   cookie  /**< */,
+                                xcb_generic_error_t               **e);
+
+int
+xcb_change_keyboard_control_value_list_serialize (void                                           **_buffer,
+                                                  uint32_t                                         value_mask,
+                                                  const xcb_change_keyboard_control_value_list_t  *_aux);
+
+int
+xcb_change_keyboard_control_value_list_unpack (const void                                *_buffer,
+                                               uint32_t                                   value_mask,
+                                               xcb_change_keyboard_control_value_list_t  *_aux);
+
+int
+xcb_change_keyboard_control_value_list_sizeof (const void  *_buffer,
+                                               uint32_t     value_mask);
+
+int
+xcb_change_keyboard_control_sizeof (const void  *_buffer);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_change_keyboard_control_checked (xcb_connection_t *c,
+                                     uint32_t          value_mask,
+                                     const void       *value_list);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_change_keyboard_control (xcb_connection_t *c,
+                             uint32_t          value_mask,
+                             const void       *value_list);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_change_keyboard_control_aux_checked (xcb_connection_t                               *c,
+                                         uint32_t                                        value_mask,
+                                         const xcb_change_keyboard_control_value_list_t *value_list);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_change_keyboard_control_aux (xcb_connection_t                               *c,
+                                 uint32_t                                        value_mask,
+                                 const xcb_change_keyboard_control_value_list_t *value_list);
+
+void *
+xcb_change_keyboard_control_value_list (const xcb_change_keyboard_control_request_t *R);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_get_keyboard_control_cookie_t
+xcb_get_keyboard_control (xcb_connection_t *c);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_get_keyboard_control_cookie_t
+xcb_get_keyboard_control_unchecked (xcb_connection_t *c);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_get_keyboard_control_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_get_keyboard_control_reply_t *
+xcb_get_keyboard_control_reply (xcb_connection_t                   *c,
+                                xcb_get_keyboard_control_cookie_t   cookie  /**< */,
+                                xcb_generic_error_t               **e);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_bell_checked (xcb_connection_t *c,
+                  int8_t            percent);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_bell (xcb_connection_t *c,
+          int8_t            percent);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_change_pointer_control_checked (xcb_connection_t *c,
+                                    int16_t           acceleration_numerator,
+                                    int16_t           acceleration_denominator,
+                                    int16_t           threshold,
+                                    uint8_t           do_acceleration,
+                                    uint8_t           do_threshold);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_change_pointer_control (xcb_connection_t *c,
+                            int16_t           acceleration_numerator,
+                            int16_t           acceleration_denominator,
+                            int16_t           threshold,
+                            uint8_t           do_acceleration,
+                            uint8_t           do_threshold);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_get_pointer_control_cookie_t
+xcb_get_pointer_control (xcb_connection_t *c);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_get_pointer_control_cookie_t
+xcb_get_pointer_control_unchecked (xcb_connection_t *c);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_get_pointer_control_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_get_pointer_control_reply_t *
+xcb_get_pointer_control_reply (xcb_connection_t                  *c,
+                               xcb_get_pointer_control_cookie_t   cookie  /**< */,
+                               xcb_generic_error_t              **e);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_set_screen_saver_checked (xcb_connection_t *c,
+                              int16_t           timeout,
+                              int16_t           interval,
+                              uint8_t           prefer_blanking,
+                              uint8_t           allow_exposures);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_set_screen_saver (xcb_connection_t *c,
+                      int16_t           timeout,
+                      int16_t           interval,
+                      uint8_t           prefer_blanking,
+                      uint8_t           allow_exposures);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_get_screen_saver_cookie_t
+xcb_get_screen_saver (xcb_connection_t *c);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_get_screen_saver_cookie_t
+xcb_get_screen_saver_unchecked (xcb_connection_t *c);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_get_screen_saver_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_get_screen_saver_reply_t *
+xcb_get_screen_saver_reply (xcb_connection_t               *c,
+                            xcb_get_screen_saver_cookie_t   cookie  /**< */,
+                            xcb_generic_error_t           **e);
+
+int
+xcb_change_hosts_sizeof (const void  *_buffer);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_change_hosts_checked (xcb_connection_t *c,
+                          uint8_t           mode,
+                          uint8_t           family,
+                          uint16_t          address_len,
+                          const uint8_t    *address);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_change_hosts (xcb_connection_t *c,
+                  uint8_t           mode,
+                  uint8_t           family,
+                  uint16_t          address_len,
+                  const uint8_t    *address);
+
+uint8_t *
+xcb_change_hosts_address (const xcb_change_hosts_request_t *R);
+
+int
+xcb_change_hosts_address_length (const xcb_change_hosts_request_t *R);
+
+xcb_generic_iterator_t
+xcb_change_hosts_address_end (const xcb_change_hosts_request_t *R);
+
+int
+xcb_host_sizeof (const void  *_buffer);
+
+uint8_t *
+xcb_host_address (const xcb_host_t *R);
+
+int
+xcb_host_address_length (const xcb_host_t *R);
+
+xcb_generic_iterator_t
+xcb_host_address_end (const xcb_host_t *R);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_host_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_host_t)
+ */
+void
+xcb_host_next (xcb_host_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_host_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_host_end (xcb_host_iterator_t i);
+
+int
+xcb_list_hosts_sizeof (const void  *_buffer);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_list_hosts_cookie_t
+xcb_list_hosts (xcb_connection_t *c);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_list_hosts_cookie_t
+xcb_list_hosts_unchecked (xcb_connection_t *c);
+
+int
+xcb_list_hosts_hosts_length (const xcb_list_hosts_reply_t *R);
+
+xcb_host_iterator_t
+xcb_list_hosts_hosts_iterator (const xcb_list_hosts_reply_t *R);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_list_hosts_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_list_hosts_reply_t *
+xcb_list_hosts_reply (xcb_connection_t         *c,
+                      xcb_list_hosts_cookie_t   cookie  /**< */,
+                      xcb_generic_error_t     **e);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_set_access_control_checked (xcb_connection_t *c,
+                                uint8_t           mode);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_set_access_control (xcb_connection_t *c,
+                        uint8_t           mode);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_set_close_down_mode_checked (xcb_connection_t *c,
+                                 uint8_t           mode);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_set_close_down_mode (xcb_connection_t *c,
+                         uint8_t           mode);
+
+/**
+ * @brief kills a client
+ *
+ * @param c The connection
+ * @param resource Any resource belonging to the client (for example a Window), used to identify
+ * the client connection.
+ * \n
+ * The special value of `XCB_KILL_ALL_TEMPORARY`, the resources of all clients
+ * that have terminated in `RetainTemporary` (TODO) are destroyed.
+ * @return A cookie
+ *
+ * Forces a close down of the client that created the specified \a resource.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_kill_client_checked (xcb_connection_t *c,
+                         uint32_t          resource);
+
+/**
+ * @brief kills a client
+ *
+ * @param c The connection
+ * @param resource Any resource belonging to the client (for example a Window), used to identify
+ * the client connection.
+ * \n
+ * The special value of `XCB_KILL_ALL_TEMPORARY`, the resources of all clients
+ * that have terminated in `RetainTemporary` (TODO) are destroyed.
+ * @return A cookie
+ *
+ * Forces a close down of the client that created the specified \a resource.
+ *
+ */
+xcb_void_cookie_t
+xcb_kill_client (xcb_connection_t *c,
+                 uint32_t          resource);
+
+int
+xcb_rotate_properties_sizeof (const void  *_buffer);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_rotate_properties_checked (xcb_connection_t *c,
+                               xcb_window_t      window,
+                               uint16_t          atoms_len,
+                               int16_t           delta,
+                               const xcb_atom_t *atoms);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_rotate_properties (xcb_connection_t *c,
+                       xcb_window_t      window,
+                       uint16_t          atoms_len,
+                       int16_t           delta,
+                       const xcb_atom_t *atoms);
+
+xcb_atom_t *
+xcb_rotate_properties_atoms (const xcb_rotate_properties_request_t *R);
+
+int
+xcb_rotate_properties_atoms_length (const xcb_rotate_properties_request_t *R);
+
+xcb_generic_iterator_t
+xcb_rotate_properties_atoms_end (const xcb_rotate_properties_request_t *R);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_force_screen_saver_checked (xcb_connection_t *c,
+                                uint8_t           mode);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_force_screen_saver (xcb_connection_t *c,
+                        uint8_t           mode);
+
+int
+xcb_set_pointer_mapping_sizeof (const void  *_buffer);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_set_pointer_mapping_cookie_t
+xcb_set_pointer_mapping (xcb_connection_t *c,
+                         uint8_t           map_len,
+                         const uint8_t    *map);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_set_pointer_mapping_cookie_t
+xcb_set_pointer_mapping_unchecked (xcb_connection_t *c,
+                                   uint8_t           map_len,
+                                   const uint8_t    *map);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_set_pointer_mapping_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_set_pointer_mapping_reply_t *
+xcb_set_pointer_mapping_reply (xcb_connection_t                  *c,
+                               xcb_set_pointer_mapping_cookie_t   cookie  /**< */,
+                               xcb_generic_error_t              **e);
+
+int
+xcb_get_pointer_mapping_sizeof (const void  *_buffer);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_get_pointer_mapping_cookie_t
+xcb_get_pointer_mapping (xcb_connection_t *c);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_get_pointer_mapping_cookie_t
+xcb_get_pointer_mapping_unchecked (xcb_connection_t *c);
+
+uint8_t *
+xcb_get_pointer_mapping_map (const xcb_get_pointer_mapping_reply_t *R);
+
+int
+xcb_get_pointer_mapping_map_length (const xcb_get_pointer_mapping_reply_t *R);
+
+xcb_generic_iterator_t
+xcb_get_pointer_mapping_map_end (const xcb_get_pointer_mapping_reply_t *R);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_get_pointer_mapping_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_get_pointer_mapping_reply_t *
+xcb_get_pointer_mapping_reply (xcb_connection_t                  *c,
+                               xcb_get_pointer_mapping_cookie_t   cookie  /**< */,
+                               xcb_generic_error_t              **e);
+
+int
+xcb_set_modifier_mapping_sizeof (const void  *_buffer);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_set_modifier_mapping_cookie_t
+xcb_set_modifier_mapping (xcb_connection_t    *c,
+                          uint8_t              keycodes_per_modifier,
+                          const xcb_keycode_t *keycodes);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_set_modifier_mapping_cookie_t
+xcb_set_modifier_mapping_unchecked (xcb_connection_t    *c,
+                                    uint8_t              keycodes_per_modifier,
+                                    const xcb_keycode_t *keycodes);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_set_modifier_mapping_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_set_modifier_mapping_reply_t *
+xcb_set_modifier_mapping_reply (xcb_connection_t                   *c,
+                                xcb_set_modifier_mapping_cookie_t   cookie  /**< */,
+                                xcb_generic_error_t               **e);
+
+int
+xcb_get_modifier_mapping_sizeof (const void  *_buffer);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_get_modifier_mapping_cookie_t
+xcb_get_modifier_mapping (xcb_connection_t *c);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_get_modifier_mapping_cookie_t
+xcb_get_modifier_mapping_unchecked (xcb_connection_t *c);
+
+xcb_keycode_t *
+xcb_get_modifier_mapping_keycodes (const xcb_get_modifier_mapping_reply_t *R);
+
+int
+xcb_get_modifier_mapping_keycodes_length (const xcb_get_modifier_mapping_reply_t *R);
+
+xcb_generic_iterator_t
+xcb_get_modifier_mapping_keycodes_end (const xcb_get_modifier_mapping_reply_t *R);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_get_modifier_mapping_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_get_modifier_mapping_reply_t *
+xcb_get_modifier_mapping_reply (xcb_connection_t                   *c,
+                                xcb_get_modifier_mapping_cookie_t   cookie  /**< */,
+                                xcb_generic_error_t               **e);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_no_operation_checked (xcb_connection_t *c);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_no_operation (xcb_connection_t *c);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/**
+ * @}
+ */
diff --git a/src/WSI/CMakeLists.txt b/src/WSI/CMakeLists.txt
index 5294423..4d5463e 100644
--- a/src/WSI/CMakeLists.txt
+++ b/src/WSI/CMakeLists.txt
@@ -32,7 +32,7 @@
         Win32SurfaceKHR.hpp
     )
 elseif(LINUX)
-    if(HAVE_XCB_H)
+    if(SWIFTSHADER_BUILD_WSI_XCB)
         list(APPEND WSI_SRC_FILES
             XcbSurfaceKHR.cpp
             XcbSurfaceKHR.hpp