summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnaud Fontaine <arnau@debian.org>2009-11-26 00:39:15 +0100
committerArnaud Fontaine <arnau@debian.org>2010-08-09 16:06:30 -0500
commit2c00345650942be08dd9543300b8ed34a63e661f (patch)
tree4f7a23c0658b576097d0d9b7313c7c690d59e90c
parent8a4d2358e3858dfaa376044995fcc74dedfb7ba0 (diff)
Clean up and add missing protypes
-rw-r--r--ewmh/ewmh.c.m4138
-rw-r--r--ewmh/xcb_ewmh.h.m41625
2 files changed, 1537 insertions, 226 deletions
diff --git a/ewmh/ewmh.c.m4 b/ewmh/ewmh.c.m4
index 836ef8d..5696ddb 100644
--- a/ewmh/ewmh.c.m4
+++ b/ewmh/ewmh.c.m4
@@ -127,7 +127,7 @@ static ewmh_atom_t ewmh_atoms[] = {dnl
* considering that the value is 32-bit long (actually only used for
* WINDOW and CARDINAL)
*/
-#define DO_REPLY_SINGLE_VALUE_ATOM(name, name_type, reply_type) \
+#define DO_REPLY_SINGLE_VALUE(name, name_type, reply_type) \
static uint8_t \
get_single_##name##_from_reply(name_type *atom_value, \
xcb_get_property_reply_t *r) \
@@ -157,13 +157,13 @@ static ewmh_atom_t ewmh_atoms[] = {dnl
}
/** Define reply functions for common WINDOW Atom */
-DO_REPLY_SINGLE_VALUE_ATOM(window, xcb_window_t, WINDOW)
+DO_REPLY_SINGLE_VALUE(window, xcb_window_t, WINDOW)
/** Define reply functions for common CARDINAL Atom */
-DO_REPLY_SINGLE_VALUE_ATOM(cardinal, uint32_t, CARDINAL)
+DO_REPLY_SINGLE_VALUE(cardinal, uint32_t, CARDINAL)
-#define DO_GET_SINGLE_VALUE_ATOM(atom, name, reply_type, \
- out_type, func_reply) \
+#define DO_GET_SINGLE_VALUE(atom, name, reply_type, \
+ out_type, func_reply) \
uint8_t \
xcb_ewmh_get_##name##_from_reply(out_type *out, \
xcb_get_property_reply_t *r) \
@@ -180,8 +180,8 @@ DO_REPLY_SINGLE_VALUE_ATOM(cardinal, uint32_t, CARDINAL)
return get_single_##func_reply##_reply(ewmh, cookie, out, e); \
}
-#define DO_SINGLE_VALUE_ATOM(atom, name, reply_type, \
- out_type, func_reply) \
+#define DO_SINGLE_VALUE(atom, name, reply_type, \
+ out_type, func_reply) \
DO_GET_PROPERTY(atom, name, reply_type, 1L) \
\
xcb_void_cookie_t \
@@ -206,8 +206,8 @@ DO_REPLY_SINGLE_VALUE_ATOM(cardinal, uint32_t, CARDINAL)
&value); \
} \
\
- DO_GET_SINGLE_VALUE_ATOM(atom, name, reply_type, out_type, \
- func_reply)
+ DO_GET_SINGLE_VALUE(atom, name, reply_type, out_type, \
+ func_reply)
#define DO_ROOT_SINGLE_VALUE_ATOM(atom, name, reply_type, \
out_type, func_reply) \
@@ -232,8 +232,8 @@ DO_REPLY_SINGLE_VALUE_ATOM(cardinal, uint32_t, CARDINAL)
32, 1, &value); \
} \
\
- DO_GET_SINGLE_VALUE_ATOM(atom, name, reply_type, out_type, \
- func_reply)
+ DO_GET_SINGLE_VALUE(atom, name, reply_type, out_type, \
+ func_reply)
/**
* Generic function for EWMH atoms with a list of values which may be
@@ -402,10 +402,10 @@ DO_REPLY_SINGLE_VALUE_ATOM(cardinal, uint32_t, CARDINAL)
* UTF8_STRING handling
*/
-static uint8_t
-get_utf8_from_reply(xcb_ewmh_connection_t *ewmh,
- xcb_ewmh_get_utf8_strings_reply_t *data,
- xcb_get_property_reply_t *r)
+uint8_t
+xcb_ewmh_get_utf8_strings_from_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_ewmh_get_utf8_strings_reply_t *data,
+ xcb_get_property_reply_t *r)
{
if(!r || r->type != ewmh->UTF8_STRING || r->format != 8)
return 0;
@@ -417,16 +417,16 @@ get_utf8_from_reply(xcb_ewmh_connection_t *ewmh,
return 1;
}
-static uint8_t
-get_utf8_reply(xcb_ewmh_connection_t *ewmh,
- xcb_get_property_cookie_t cookie,
- xcb_ewmh_get_utf8_strings_reply_t *data,
- xcb_generic_error_t **e)
+uint8_t
+xcb_ewmh_get_utf8_strings_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ xcb_ewmh_get_utf8_strings_reply_t *data,
+ xcb_generic_error_t **e)
{
xcb_get_property_reply_t *r = xcb_get_property_reply(ewmh->connection,
cookie, e);
- const uint8_t ret = get_utf8_from_reply(ewmh, data, r);
+ const uint8_t ret = xcb_ewmh_get_utf8_strings_from_reply(ewmh, data, r);
/* If the last call was not successful (ret equals to 0), then just
free the reply as the data value is not consistent */
@@ -448,7 +448,7 @@ xcb_ewmh_get_utf8_strings_reply_wipe(xcb_ewmh_get_utf8_strings_reply_t *data)
xcb_ewmh_get_utf8_strings_reply_t *data, \
xcb_get_property_reply_t *r) \
{ \
- return get_utf8_from_reply(ewmh, data, r); \
+ return xcb_ewmh_get_utf8_strings_from_reply(ewmh, data, r); \
} \
\
uint8_t \
@@ -457,7 +457,7 @@ xcb_ewmh_get_utf8_strings_reply_wipe(xcb_ewmh_get_utf8_strings_reply_t *data)
xcb_ewmh_get_utf8_strings_reply_t *data, \
xcb_generic_error_t **e) \
{ \
- return get_utf8_reply(ewmh, cookie, data, e); \
+ return xcb_ewmh_get_utf8_strings_reply(ewmh, cookie, data, e); \
}
#define DO_ROOT_UTF8_STRING(atom, name) \
@@ -925,7 +925,7 @@ DO_UTF8_STRING(_NET_WM_VISIBLE_ICON_NAME, wm_visible_icon_name)
* _NET_WM_DESKTOP
*/
-DO_SINGLE_VALUE_ATOM(_NET_WM_DESKTOP, wm_desktop, CARDINAL, uint32_t, cardinal)
+DO_SINGLE_VALUE(_NET_WM_DESKTOP, wm_desktop, CARDINAL, uint32_t, cardinal)
xcb_void_cookie_t
xcb_ewmh_request_change_wm_desktop(xcb_ewmh_connection_t *ewmh,
@@ -983,8 +983,14 @@ DO_LIST_VALUES(_NET_WM_ALLOWED_ACTIONS, wm_allowed_actions, ATOM, atom)
* _NET_WM_STRUT_PARTIAL
*/
-DO_GET_PROPERTY(_NET_WM_STRUT, wm_strut, CARDINAL, 12)
-DO_REPLY_STRUCTURE(wm_strut, xcb_ewmh_wm_strut_t)
+xcb_void_cookie_t
+xcb_ewmh_set_wm_strut(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ xcb_ewmh_wm_strut_t wm_strut)
+{
+ return xcb_change_property(ewmh->connection, XCB_PROP_MODE_REPLACE, window,
+ ewmh->_NET_WM_STRUT, CARDINAL, 32, 12, &wm_strut);
+}
xcb_void_cookie_t
xcb_ewmh_set_wm_strut_checked(xcb_ewmh_connection_t *ewmh,
@@ -996,22 +1002,13 @@ xcb_ewmh_set_wm_strut_checked(xcb_ewmh_connection_t *ewmh,
12, &wm_strut);
}
-xcb_void_cookie_t
-xcb_ewmh_set_wm_strut(xcb_ewmh_connection_t *ewmh,
- xcb_window_t window,
- xcb_ewmh_wm_strut_t wm_strut)
-{
- return xcb_change_property(ewmh->connection, XCB_PROP_MODE_REPLACE, window,
- ewmh->_NET_WM_STRUT, CARDINAL, 32, 12, &wm_strut);
-}
+DO_GET_PROPERTY(_NET_WM_STRUT, wm_strut, CARDINAL, 12)
+DO_REPLY_STRUCTURE(wm_strut, xcb_ewmh_wm_strut_t)
/**
* _NET_WM_ICON_GEOMETRY
*/
-DO_GET_PROPERTY(_NET_WM_ICON_GEOMETRY, wm_icon_geometry, CARDINAL, 4)
-DO_REPLY_STRUCTURE(wm_icon_geometry, xcb_ewmh_geometry_t)
-
xcb_void_cookie_t
xcb_ewmh_set_wm_icon_geometry_checked(xcb_ewmh_connection_t *ewmh,
xcb_window_t window,
@@ -1037,12 +1034,13 @@ xcb_ewmh_set_wm_icon_geometry(xcb_ewmh_connection_t *ewmh,
ewmh->_NET_WM_ICON_GEOMETRY, CARDINAL, 32, 4, data);
}
+DO_GET_PROPERTY(_NET_WM_ICON_GEOMETRY, wm_icon_geometry, CARDINAL, 4)
+DO_REPLY_STRUCTURE(wm_icon_geometry, xcb_ewmh_geometry_t)
+
/**
* _NET_WM_ICON
*/
-DO_GET_PROPERTY(_NET_WM_ICON, wm_icon, CARDINAL, UINT_MAX)
-
static inline void
set_wm_icon_data(uint32_t data[], uint32_t width, uint32_t height,
uint32_t img_len, uint32_t *img)
@@ -1084,6 +1082,8 @@ xcb_ewmh_set_wm_icon(xcb_ewmh_connection_t *ewmh,
ewmh->_NET_WM_ICON, CARDINAL, 32, data_len, data);
}
+DO_GET_PROPERTY(_NET_WM_ICON, wm_icon, CARDINAL, UINT_MAX)
+
uint8_t
xcb_ewmh_get_wm_icon_from_reply(xcb_ewmh_get_wm_icon_reply_t *wm_icon,
xcb_get_property_reply_t *r)
@@ -1126,30 +1126,27 @@ xcb_ewmh_get_wm_icon_reply_wipe(xcb_ewmh_get_wm_icon_reply_t *wm_icon)
* _NET_WM_PID
*/
-DO_SINGLE_VALUE_ATOM(_NET_WM_PID, wm_pid, CARDINAL, uint32_t,
- cardinal)
+DO_SINGLE_VALUE(_NET_WM_PID, wm_pid, CARDINAL, uint32_t,
+ cardinal)
/**
* _NET_WM_USER_TIME
*/
-DO_SINGLE_VALUE_ATOM(_NET_WM_USER_TIME, wm_user_time, CARDINAL,
- uint32_t, cardinal)
+DO_SINGLE_VALUE(_NET_WM_USER_TIME, wm_user_time, CARDINAL,
+ uint32_t, cardinal)
/**
* _NET_WM_USER_TIME_WINDOW
*/
-DO_SINGLE_VALUE_ATOM(_NET_WM_USER_TIME_WINDOW, wm_user_time_window,
- CARDINAL, uint32_t, cardinal)
+DO_SINGLE_VALUE(_NET_WM_USER_TIME_WINDOW, wm_user_time_window,
+ CARDINAL, uint32_t, cardinal)
/**
* _NET_FRAME_EXTENTS
*/
-DO_GET_PROPERTY(_NET_FRAME_EXTENTS, frame_extents, CARDINAL, 4)
-DO_REPLY_STRUCTURE(frame_extents, xcb_ewmh_get_frame_extents_reply_t)
-
xcb_void_cookie_t
xcb_ewmh_set_frame_extents(xcb_ewmh_connection_t *ewmh,
xcb_window_t window,
@@ -1175,6 +1172,9 @@ xcb_ewmh_set_frame_extents_checked(xcb_ewmh_connection_t *ewmh,
32, 4, data);
}
+DO_GET_PROPERTY(_NET_FRAME_EXTENTS, frame_extents, CARDINAL, 4)
+DO_REPLY_STRUCTURE(frame_extents, xcb_ewmh_get_frame_extents_reply_t)
+
/**
* _NET_WM_PING
*
@@ -1197,8 +1197,6 @@ xcb_ewmh_send_wm_ping(xcb_ewmh_connection_t *ewmh,
* _NET_WM_SYNC_REQUEST_COUNTER
*/
-DO_GET_PROPERTY(_NET_WM_SYNC_REQUEST, wm_sync_request_counter, CARDINAL, 2)
-
xcb_void_cookie_t
xcb_ewmh_set_wm_sync_request_counter(xcb_ewmh_connection_t *ewmh,
xcb_window_t window,
@@ -1224,20 +1222,7 @@ xcb_ewmh_set_wm_sync_request_counter_checked(xcb_ewmh_connection_t *ewmh,
CARDINAL, 32, 2, data);
}
-xcb_void_cookie_t
-xcb_ewmh_send_wm_sync_request(xcb_ewmh_connection_t *ewmh,
- xcb_window_t window,
- xcb_atom_t wm_protocols_atom,
- xcb_atom_t wm_sync_request_atom,
- xcb_timestamp_t timestamp,
- uint64_t counter)
-{
- const uint32_t data[] = { ewmh->_NET_WM_SYNC_REQUEST, timestamp, counter,
- GET_NB_FROM_LEN(counter, 32) };
-
- return xcb_ewmh_send_client_message(ewmh->connection, window, window,
- ewmh->WM_PROTOCOLS, 4, data);
-}
+DO_GET_PROPERTY(_NET_WM_SYNC_REQUEST, wm_sync_request_counter, CARDINAL, 2)
uint8_t
xcb_ewmh_get_wm_sync_request_counter_from_reply(uint64_t *counter,
@@ -1266,15 +1251,25 @@ xcb_ewmh_get_wm_sync_request_counter_reply(xcb_ewmh_connection_t *ewmh,
return ret;
}
+xcb_void_cookie_t
+xcb_ewmh_send_wm_sync_request(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ xcb_atom_t wm_protocols_atom,
+ xcb_atom_t wm_sync_request_atom,
+ xcb_timestamp_t timestamp,
+ uint64_t counter)
+{
+ const uint32_t data[] = { ewmh->_NET_WM_SYNC_REQUEST, timestamp, counter,
+ GET_NB_FROM_LEN(counter, 32) };
+
+ return xcb_ewmh_send_client_message(ewmh->connection, window, window,
+ ewmh->WM_PROTOCOLS, 4, data);
+}
+
/**
* _NET_WM_FULLSCREEN_MONITORS
*/
-DO_GET_PROPERTY(_NET_WM_FULLSCREEN_MONITORS, wm_fullscreen_monitors, CARDINAL, 4)
-
-DO_REPLY_STRUCTURE(wm_fullscreen_monitors,
- xcb_ewmh_get_wm_fullscreen_monitors_reply_t)
-
xcb_void_cookie_t
xcb_ewmh_set_wm_fullscreen_monitors(xcb_ewmh_connection_t *ewmh,
xcb_window_t window,
@@ -1301,6 +1296,11 @@ xcb_ewmh_set_wm_fullscreen_monitors_checked(xcb_ewmh_connection_t *ewmh,
CARDINAL, 32, 4, data);
}
+DO_GET_PROPERTY(_NET_WM_FULLSCREEN_MONITORS, wm_fullscreen_monitors, CARDINAL, 4)
+
+DO_REPLY_STRUCTURE(wm_fullscreen_monitors,
+ xcb_ewmh_get_wm_fullscreen_monitors_reply_t)
+
xcb_void_cookie_t
xcb_ewmh_request_change_wm_fullscreen_monitors(xcb_ewmh_connection_t *ewmh,
xcb_window_t window,
diff --git a/ewmh/xcb_ewmh.h.m4 b/ewmh/xcb_ewmh.h.m4
index 2cde22b..12d6790 100644
--- a/ewmh/xcb_ewmh.h.m4
+++ b/ewmh/xcb_ewmh.h.m4
@@ -48,9 +48,9 @@
#include <xcb/xcb.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
+/* #ifdef __cplusplus */
+/* extern "C" { */
+/* #endif */
/**
* @brief Hold EWMH information specific to a screen
@@ -61,10 +61,10 @@ typedef struct {
/** The root window of this connection */
xcb_window_t root;
/** The EWMH atoms of this connection */dnl
-define(`DO', `ifelse(`$1', , , `
- xcb_atom_t $1;DO(shift($@))')')dnl
-include(atomlist.m4)dnl
-} xcb_ewmh_connection_t;
+ define(`DO', `ifelse(`$1', , , `
+ xcb_atom_t $1;DO(shift($@))')')dnl
+ include(atomlist.m4)dnl
+ } xcb_ewmh_connection_t;
/**
* @brief Hold a GetProperty reply containing a list of Atoms
@@ -337,84 +337,184 @@ typedef struct {
} xcb_ewmh_get_wm_fullscreen_monitors_reply_t;
/**
- * @brief Send a ClientMessage request
+ * @brief Send InternAtom requests for the EWMH atoms and its required atoms
+ *
+ * @param c The connection to the X server
+ * @param ewmh The information relative to EWMH
+ * @param screen_nbr The screen number
+ * @return The cookies corresponding to EWMH atoms
+ */
+xcb_intern_atom_cookie_t *xcb_ewmh_init_atoms(xcb_connection_t *c,
+ xcb_ewmh_connection_t * const ewmh,
+ const int screen_nbr);
+
+/**
+ * @brief Process the replies to the screen initialisation requests
+ * previously sent
+ *
+ * @param emwh The information relative to EWMH
+ * @param ewmh_cookies The cookies corresponding to EWMH atoms
+ * @param e Error if any
+ * @return Return 1 on success, 0 otherwise
+ */
+uint8_t xcb_ewmh_init_atoms_replies(xcb_ewmh_connection_t * const ewmh,
+ xcb_intern_atom_cookie_t *ewmh_cookies,
+ xcb_generic_error_t **e);
+
+/**
+ * @brief Send a SendEvent request containing a ClientMessage event
*
* This function is called by all the xcb_ewmh_request* functions
* whose should be used instead of calling directly this function
*
* @param c The X connection
- * @param window
- * @param dest Destination Window XID
- * @param atom
- * @param data_len The length of data
- * @param data
+ * @param window The window where the action will be applied
+ * @param dest The destination window (usually the root window)
+ * @param atom The type of the message
+ * @param data_len The length of data to be sent
+ * @param data The data to be sent
+ * @return The cookie associated with the SendEvent request
*/
xcb_void_cookie_t xcb_ewmh_send_client_message(xcb_connection_t *c,
- xcb_window_t window,
- xcb_window_t dest,
- xcb_atom_t atom,
- uint32_t data_len,
- const uint32_t *data);
+ xcb_window_t window,
+ xcb_window_t dest,
+ xcb_atom_t atom,
+ uint32_t data_len,
+ const uint32_t *data);
+/**
+ * @brief Get a list of atoms from a given GetProperty reply whose
+ * type is ATOM
+ *
+ * This function is called by all the xcb_ewmh_get_*_from_reply
+ * functions whose should be used instead of calling it directly.
+ * Indeed, The GetProperty request has been previously sent by the
+ * corresponding xcb_ewmh_get_*.
+ *
+ * @param atoms The atoms list
+ * @param r The reply to get the atoms list from
+ * @return Return 1 on success, 0 otherwise
+ */
uint8_t xcb_ewmh_get_atoms_from_reply(xcb_ewmh_get_atoms_reply_t *atoms,
- xcb_get_property_reply_t *r);
+ xcb_get_property_reply_t *r);
+/**
+ * @brief Get a list of atoms from the reply of a GetProperty request
+ * whose type is ATOM
+ *
+ * This function is called by all the xcb_ewmh_get_*_reply functions
+ * whose should be used instead of calling it directly. The
+ * GetProperty request has been previously sent by the corresponding
+ * xcb_ewmh_get_*.
+ *
+ * @param ewmh The per-screen EWMH specific information
+ * @param cookie The GetProperty cookie
+ * @param atoms The atoms list
+ * @param e The error if any
+ * @return Return 1 on success, 0 otherwise
+ */
uint8_t xcb_ewmh_get_atoms_reply(xcb_ewmh_connection_t *ewmh,
- xcb_get_property_cookie_t cookie,
- xcb_ewmh_get_atoms_reply_t *atoms,
- xcb_generic_error_t **e);
-
-uint8_t xcb_ewmh_get_windows_from_reply(xcb_ewmh_get_windows_reply_t *atoms,
- xcb_get_property_reply_t *r);
-
-uint8_t xcb_ewmh_get_windows_reply(xcb_ewmh_connection_t *ewmh,
- xcb_get_property_cookie_t cookie,
- xcb_ewmh_get_windows_reply_t *atoms,
- xcb_generic_error_t **e);
+ xcb_get_property_cookie_t cookie,
+ xcb_ewmh_get_atoms_reply_t *atoms,
+ xcb_generic_error_t **e);
/**
- * @brief Send InternAtom requests for the EWMH atoms and its required atoms.
- * @param c The connection to the X server.
- * @param ewmh The information relative to EWMH.
- * @param screen_nbr The screen number.
- * @return The cookies corresponding to EWMH atoms.
+ * @brief Wipe the Atoms list reply
+ *
+ * This function must be called to free the memory allocated for atoms
+ * when the reply is requested in *_reply functions.
+ *
+ * @param data The X reply to be freed
*/
-xcb_intern_atom_cookie_t *xcb_ewmh_init_atoms(xcb_connection_t *c,
- xcb_ewmh_connection_t * const ewmh,
- const int screen_nbr);
+void xcb_ewmh_get_atoms_reply_wipe(xcb_ewmh_get_atoms_reply_t *data);
/**
- * @brief Process the replies previously sent
- * @param emwh The information relative to EWMH.
- * @param ewmh_cookies The cookies corresponding to EWMH atoms.
- * @param e Error if any.
- * @return Return 1 on success, 0 otherwise.
+ * @brief Get a list of atoms from a given GetProperty reply whose
+ * type is WINDOW
+ *
+ * This function is called by all the xcb_ewmh_get_*_from_reply
+ * functions whose should be used instead of calling it directly.
+ * Indeed, The GetProperty request has been previously sent by the
+ * corresponding xcb_ewmh_get_*.
+ *
+ * @param atoms The atoms list
+ * @param r The reply to get the atoms list from
+ * @return Return 1 on success, 0 otherwise
*/
-uint8_t xcb_ewmh_init_atoms_replies(xcb_ewmh_connection_t * const ewmh,
- xcb_intern_atom_cookie_t *ewmh_cookies,
- xcb_generic_error_t **e);
+uint8_t xcb_ewmh_get_windows_from_reply(xcb_ewmh_get_windows_reply_t *atoms,
+ xcb_get_property_reply_t *r);
+
+uint8_t xcb_ewmh_get_utf8_strings_from_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_ewmh_get_utf8_strings_reply_t *data,
+ xcb_get_property_reply_t *r);
+
+uint8_t xcb_ewmh_get_utf8_strings_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ xcb_ewmh_get_utf8_strings_reply_t *data,
+ xcb_generic_error_t **e);
/**
- * @brief Wipe the Atoms list reply.
+ * @brief Get a list of atoms from the reply of a GetProperty request
+ * whose type is WINDOW
*
- * This function must be called to free the memory allocated for atoms
- * when the reply is requested in '_reply' functions.
+ * This function is called by all the xcb_ewmh_get_*_reply functions
+ * whose should be used instead of calling it directly. The
+ * GetProperty request has been previously sent by the corresponding
+ * xcb_ewmh_get_*.
*
- * @param data The X reply to be freed.
+ * @param ewmh The per-screen EWMH specific information
+ * @param cookie The GetProperty cookie
+ * @param atoms The atoms list
+ * @param e The error if any
+ * @return Return 1 on success, 0 otherwise
*/
-void xcb_ewmh_get_atoms_reply_wipe(xcb_ewmh_get_atoms_reply_t *data);
+uint8_t xcb_ewmh_get_windows_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ xcb_ewmh_get_windows_reply_t *atoms,
+ xcb_generic_error_t **e);
/**
- * @brief Wipe the Windows list reply.
+ * @brief Wipe the windows list reply
*
* This function must be called to the free the memory allocated for
* windows when the reply is requested in '_reply' functions.
*
- * @param data The X reply to be freed.
+ * @param data The X reply to be freed
*/
void xcb_ewmh_get_windows_reply_wipe(xcb_ewmh_get_windows_reply_t *data);
/**
+ * @brief Wipe the UTF-8 strings list reply
+ *
+ * This function must be called to the free the memory allocated for
+ * UTF-8 strings when the reply is requested in '_reply' functions.
+ *
+ * @param data The X reply to be freed
+ */
+void xcb_ewmh_get_utf8_strings_reply_wipe(xcb_ewmh_get_utf8_strings_reply_t *data);
+
+/**
+ * @brief Send a ChangeProperty request for _NET_SUPPORTED
+ *
+ * _NET_SUPPORTED, ATOM[]/32
+ *
+ * @param ewmh The per-screen EWMH information
+ * @param list_len The number of Atoms supported by the WM
+ * @param list The Atoms supported by the WM
+ * @return Cookie associated with the ChangeProperty _NET_SUPPORTED request
+ */
+xcb_void_cookie_t xcb_ewmh_set_supported(xcb_ewmh_connection_t *ewmh,
+ uint32_t list_len,
+ xcb_atom_t *list);
+
+/**
+ * @see xcb_ewmh_set_supported
+ */
+xcb_void_cookie_t xcb_ewmh_set_supported_checked(xcb_ewmh_connection_t *ewmh,
+ uint32_t list_len,
+ xcb_atom_t *list);
+
+/**
* @brief Send GetProperty request to get _NET_SUPPORTED root window
* property
*
@@ -430,8 +530,8 @@ void xcb_ewmh_get_windows_reply_wipe(xcb_ewmh_get_windows_reply_t *data);
* 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.
*
- * @param ewmh The information relative to EWMH.
- * @return The _NET_SUPPORTED cookie of the GetProperty request.
+ * @param ewmh The information relative to EWMH
+ * @return The _NET_SUPPORTED cookie of the GetProperty request
*/
xcb_get_property_cookie_t xcb_ewmh_get_supported_unchecked(xcb_ewmh_connection_t *ewmh);
@@ -445,8 +545,15 @@ xcb_get_property_cookie_t xcb_ewmh_get_supported_unchecked(xcb_ewmh_connection_t
*/
xcb_get_property_cookie_t xcb_ewmh_get_supported(xcb_ewmh_connection_t *ewmh);
-static inline uint8_t xcb_ewmh_get_supported_from_reply(xcb_ewmh_get_atoms_reply_t *supported,
- xcb_get_property_reply_t *r)
+/**
+ * @brief Get the list of supported atoms
+ *
+ * @param supported The list of atoms contained in the reply
+ * @param r GetProperty _NET_SUPPORTED reply
+ */
+static inline uint8_t
+xcb_ewmh_get_supported_from_reply(xcb_ewmh_get_atoms_reply_t *supported,
+ xcb_get_property_reply_t *r)
{
return xcb_ewmh_get_atoms_from_reply(supported, r);
}
@@ -458,21 +565,43 @@ static inline uint8_t xcb_ewmh_get_supported_from_reply(xcb_ewmh_get_atoms_reply
* xcb_get_window_supported_unchecked() is used. Otherwise, it stores
* the error if any.
*
- * @param ewmh The information relative to EWMH.
- * @param cookie The _NET_SUPPORTED GetProperty request cookie.
- * @param supported The reply to be filled.
- * @param The xcb_generic_error_t supplied.
- * @return Return 1 on success, 0 otherwise.
+ * @param ewmh The information relative to EWMH
+ * @param cookie The _NET_SUPPORTED GetProperty request cookie
+ * @param supported The reply to be filled
+ * @param The xcb_generic_error_t supplied
+ * @return Return 1 on success, 0 otherwise
*/
-static inline uint8_t xcb_ewmh_get_supported_reply(xcb_ewmh_connection_t *ewmh,
- xcb_get_property_cookie_t cookie,
- xcb_ewmh_get_atoms_reply_t *supported,
- xcb_generic_error_t **e)
+static inline uint8_t
+xcb_ewmh_get_supported_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ xcb_ewmh_get_atoms_reply_t *supported,
+ xcb_generic_error_t **e)
{
return xcb_ewmh_get_atoms_reply(ewmh, cookie, supported, e);
}
/**
+ * @brief Send a ChangeProperty request for _NET_CLIENT_LIST
+ *
+ * _NET_CLIENT_LIST, WINDOW[]/32
+ *
+ * @param ewmh The per-screen EWMH information
+ * @param list_len The number of Atoms supported by the WM
+ * @param list The Atoms supported by the WM
+ * @return Cookie associated with the ChangeProperty _NET_CLIENT_LIST request
+ */
+xcb_void_cookie_t xcb_ewmh_set_client_list(xcb_ewmh_connection_t *ewmh,
+ uint32_t list_len,
+ xcb_window_t *list);
+
+/**
+ * @see xcb_ewmh_set_client_list
+ */
+xcb_void_cookie_t xcb_ewmh_set_client_list_checked(xcb_ewmh_connection_t *ewmh,
+ uint32_t list_len,
+ xcb_window_t *list);
+
+/**
* @brief Send GetProperty request to get _NET_CLIENT_LIST root window
* property
*
@@ -496,6 +625,13 @@ xcb_get_property_cookie_t xcb_ewmh_get_client_list_unchecked(xcb_ewmh_connection
*/
xcb_get_property_cookie_t xcb_ewmh_get_client_list(xcb_ewmh_connection_t *ewmh);
+/**
+ * @brief Get the list of client windows from a GetProperty
+ * _NET_CLIENT_LIST reply
+ *
+ * @param clients The list of clients contained in the reply
+ * @param r GetProperty _NET_CLIENT_LIST reply
+ */
static inline uint8_t
xcb_ewmh_get_client_list_from_reply(xcb_ewmh_get_windows_reply_t *clients,
xcb_get_property_reply_t *r)
@@ -510,37 +646,522 @@ xcb_ewmh_get_client_list_from_reply(xcb_ewmh_get_windows_reply_t *clients,
* xcb_get_window_client_list_unchecked() is used. Otherwise, it
* stores the error if any.
*
- * @param ewmh The information relative to EWMH.
- * @param cookie The _NET_CLIENT_LIST GetProperty request cookie.
- * @param clients The list of clients to be filled.
- * @param The xcb_generic_error_t supplied.
- * @return Return 1 on success, 0 otherwise.
+ * @param ewmh The information relative to EWMH
+ * @param cookie The _NET_CLIENT_LIST GetProperty request cookie
+ * @param clients The list of clients to be filled
+ * @param The xcb_generic_error_t supplied
+ * @return Return 1 on success, 0 otherwise
*/
-static inline uint8_t xcb_ewmh_get_client_list_reply(xcb_ewmh_connection_t *ewmh,
- xcb_get_property_cookie_t cookie,
- xcb_ewmh_get_windows_reply_t *clients,
- xcb_generic_error_t **e)
+static inline uint8_t
+xcb_ewmh_get_client_list_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ xcb_ewmh_get_windows_reply_t *clients,
+ xcb_generic_error_t **e)
{
return xcb_ewmh_get_windows_reply(ewmh, cookie, clients, e);
}
+/**
+ * @brief Send a ChangeProperty request for _NET_CLIENT_LIST_STACKING
+ *
+ * _NET_CLIENT_LIST_STACKING, WINDOW[]/32
+ *
+ * @param ewmh The per-screen EWMH information
+ * @param list_len The number of Atoms supported by the WM
+ * @param list The Atoms supported by the WM
+ * @return Cookie associated with the ChangeProperty _NET_CLIENT_LIST_STACKING request
+ */
+xcb_void_cookie_t xcb_ewmh_set_client_list_stacking(xcb_ewmh_connection_t *ewmh,
+ uint32_t list_len,
+ xcb_window_t *list);
+
+/**
+ * @see xcb_ewmh_set_client_list_stacking
+ */
+xcb_void_cookie_t xcb_ewmh_set_client_list_stacking_checked(xcb_ewmh_connection_t *ewmh,
+ uint32_t list_len,
+ xcb_window_t *list);
+
+/**
+ * @brief Send GetProperty request to get _NET_CLIENT_LIST_STACKING
+ * root window property
+ *
+ * This array contains all X Windows managed by the Window
+ * Manager. _NET_CLIENT_LIST_STACKING has initial mapping order,
+ * starting with the oldest window. This property SHOULD be set and
+ * updated by the Window Manager.
+ *
+ * @param ewmh The information relative to EWMH
+ * @return The _NET_CLIENT_LIST_STACKING cookie of the GetProperty request
+ */
+xcb_get_property_cookie_t xcb_ewmh_get_client_list_stacking_unchecked(xcb_ewmh_connection_t *ewmh);
+
+/**
+ * @brief Send GetProperty request to get _NET_CLIENT_LIST_STACKING
+ * root window property
+ *
+ * @see xcb_ewmh_get_client_list_unchecked
+ * @param ewmh The information relative to EWMH
+ * @return The _NET_CLIENT_LIST_STACKING cookie of the GetProperty request
+ */
+xcb_get_property_cookie_t xcb_ewmh_get_client_list_stacking(xcb_ewmh_connection_t *ewmh);
+
+/**
+ * @brief Get the list of client windows from a GetProperty
+ * _NET_CLIENT_LIST_STACKING reply
+ *
+ * @param clients The list of clients contained in the reply
+ * @param r GetProperty _NET_CLIENT_LIST_STACKING reply
+ */
static inline uint8_t
xcb_ewmh_get_client_list_stacking_from_reply(xcb_ewmh_get_windows_reply_t *clients,
- xcb_get_property_reply_t *r)
+ xcb_get_property_reply_t *r)
{
return xcb_ewmh_get_windows_from_reply(clients, r);
}
+/**
+ * @brief Get reply from the GetProperty _NET_CLIENT_LIST_STACKING
+ * cookie
+ *
+ * The parameter e supplied to this function must be NULL if
+ * xcb_get_window_client_list_stacking_unchecked() is used.
+ * Otherwise, it stores the error if any.
+ *
+ * @param ewmh The information relative to EWMH
+ * @param cookie The _NET_CLIENT_LIST_STACKING GetProperty request cookie
+ * @param clients The list of clients to be filled
+ * @param The xcb_generic_error_t supplied
+ * @return Return 1 on success, 0 otherwise
+ */
static inline uint8_t
xcb_ewmh_get_client_list_stacking_reply(xcb_ewmh_connection_t *ewmh,
- xcb_get_property_cookie_t cookie,
- xcb_ewmh_get_windows_reply_t *clients,
- xcb_generic_error_t **e)
+ xcb_get_property_cookie_t cookie,
+ xcb_ewmh_get_windows_reply_t *clients,
+ xcb_generic_error_t **e)
{
return xcb_ewmh_get_windows_reply(ewmh, cookie, clients, e);
}
/**
+ * @brief Send a ChangeProperty request for _NET_NUMBER_OF_DESKTOPS
+ *
+ * _NET_NUMBER_OF_DESKTOPS? CARDINAL/32
+ *
+ * @param ewmh The per-screen EWMH information
+ * @param number_of_desktops The number of desktops
+ * @return Cookie associated with the ChangeProperty _NET_NUMBER_OF_DESKTOPS request
+ */
+xcb_void_cookie_t xcb_ewmh_set_number_of_desktops(xcb_ewmh_connection_t *ewmh,
+ uint32_t number_of_desktops);
+
+/**
+ * @see xcb_ewmh_set_number_of_desktops
+ */
+xcb_void_cookie_t xcb_ewmh_set_number_of_desktops_checked(xcb_ewmh_connection_t *ewmh,
+ uint32_t number_of_desktops);
+
+/**
+ * @brief Send GetProperty request to get _NET_NUMBER_OF_DESKTOPS root
+ * window property
+ *
+ * @param ewmh The information relative to EWMH.
+ * @return The _NET_NUMBER_OF_DESKTOPS cookie of the GetProperty request.
+ */
+xcb_get_property_cookie_t xcb_ewmh_get_number_of_desktops_unchecked(xcb_ewmh_connection_t *ewmh);
+
+/**
+ * @see xcb_ewmh_get_number_of_desktops_unchecked
+ */
+xcb_get_property_cookie_t xcb_ewmh_get_number_of_desktops(xcb_ewmh_connection_t *ewmh);
+
+/**
+ * @brief Get the list of client windows from a GetProperty
+ * _NET_NUMBER_OF_DESKTOPS reply
+ *
+ * @param clients The list of clients contained in the reply
+ * @param r GetProperty _NET_NUMBER_OF_DESKTOPS reply
+ * @return Return 1 on success, 0 otherwise
+ */
+uint8_t xcb_ewmh_get_number_of_desktops_from_reply(uint32_t *number_of_desktops,
+ xcb_get_property_reply_t *r);
+
+/**
+ * @brief Get reply from the GetProperty _NET_NUMBER_OF_DESKTOPS cookie
+ *
+ * The parameter e supplied to this function must be NULL if
+ * xcb_get_window_number_of_desktops_unchecked() is used. Otherwise,
+ * it stores the error if any.
+ *
+ * @param ewmh The information relative to EWMH
+ * @param cookie The _NET_NUMBER_OF_DESKTOPS GetProperty request cookie
+ * @param supported The reply to be filled
+ * @param The xcb_generic_error_t supplied
+ * @return Return 1 on success, 0 otherwise
+ */
+uint8_t xcb_ewmh_get_number_of_desktops_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ uint32_t *number_of_desktops,
+ xcb_generic_error_t **e);
+
+static inline xcb_void_cookie_t
+xcb_ewmh_request_change_number_of_desktops(xcb_ewmh_connection_t *ewmh,
+ uint32_t new_number_of_desktops)
+{
+ return xcb_ewmh_send_client_message(ewmh->connection, XCB_NONE, ewmh->root,
+ ewmh->_NET_NUMBER_OF_DESKTOPS, 1,
+ &new_number_of_desktops);
+}
+
+/**
+ * @brief Send a ChangeProperty request for _NET_DESKTOP_GEOMETRY
+ *
+ * _NET_DESKTOP_GEOMETRY width, height, CARDINAL[2]/32
+ *
+ * @param ewmh The per-screen EWMH information
+ * @param new_width The new desktop width
+ * @param new_height The new desktop height
+ * @return Cookie associated with the ChangeProperty _NET_DESKTOP_GEOMETRY request
+ */
+xcb_void_cookie_t xcb_ewmh_set_desktop_geometry(xcb_ewmh_connection_t *ewmh,
+ uint32_t new_width,
+ uint32_t new_height);
+
+/**
+ * @see xcb_ewmh_set_desktop_geometry
+ */
+xcb_void_cookie_t xcb_ewmh_set_desktop_geometry_checked(xcb_ewmh_connection_t *ewmh,
+ uint32_t new_width,
+ uint32_t new_height);
+
+/**
+ * @brief Send GetProperty request to get _NET_DESKTOP_GEOMETRY root
+ * window property
+ *
+ * @param ewmh The information relative to EWMH
+ * @return The _NET_DESKTOP_GEOMETRY cookie of the GetProperty request
+ */
+xcb_get_property_cookie_t xcb_ewmh_get_desktop_geometry_unchecked(xcb_ewmh_connection_t *ewmh);
+
+/**
+ * @see xcb_ewmh_get_desktop_geometry_unchecked
+ */
+xcb_get_property_cookie_t xcb_ewmh_get_desktop_geometry(xcb_ewmh_connection_t *ewmh);
+
+/**
+ * @brief Send ClientMessage requesting to change the _NET_DESKTOP_GEOMETRY
+ *
+ * @param ewmh The per-screen EWMH information
+ * @param new_width The new desktop width
+ * @param new_height The new desktop height
+ * @return The SendEvent cookie
+ */
+xcb_void_cookie_t xcb_ewmh_request_change_desktop_geometry(xcb_ewmh_connection_t *ewmh,
+ uint32_t new_width,
+ uint32_t new_height);
+
+/**
+ * @brief Get the desktop geometry from a GetProperty
+ * _NET_DESKTOP_GEOMETRY reply
+ *
+ * @param width The current desktop width
+ * @param height The current desktop height
+ * @param r GetProperty _NET_DESKTOP_GEOMETRY reply
+ * @return Return 1 on success, 0 otherwise
+ */
+uint8_t xcb_ewmh_get_desktop_geometry_from_reply(uint32_t *width,
+ uint32_t *height,
+ xcb_get_property_reply_t *r);
+
+/**
+ * @brief Get reply from the GetProperty _NET_DESKTOP_GEOMETRY cookie
+ *
+ * The parameter e supplied to this function must be NULL if
+ * xcb_get_desktop_geometry_unchecked() is used. Otherwise, it stores
+ * the error if any.
+ *
+ * @param ewmh The information relative to EWMH
+ * @param cookie The _NET_DESKTOP_GEOMETRY GetProperty request cookie
+ * @param width The current desktop width
+ * @param width The current desktop height
+ * @param The xcb_generic_error_t supplied
+ * @return Return 1 on success, 0 otherwise
+ */
+uint8_t xcb_ewmh_get_desktop_geometry_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ uint32_t *width, uint32_t *height,
+ xcb_generic_error_t **e);
+
+/**
+ * @brief Send a ChangeProperty request for _NET_DESKTOP_VIEWPORT
+ *
+ * _NET_DESKTOP_VIEWPORT x, y, CARDINAL[][2]/32
+ *
+ * @param ewmh The per-screen EWMH information
+ * @param list_len The number of desktop viewports
+ * @param list The desktop viewports
+ * @return Cookie associated with the ChangeProperty _NET_DESKTOP_VIEWPORT request
+ */
+xcb_void_cookie_t xcb_ewmh_set_desktop_viewport(xcb_ewmh_connection_t *ewmh,
+ uint32_t list_len,
+ xcb_ewmh_coordinates_t *list);
+
+/**
+ * @see xcb_ewmh_set_desktop_viewport
+ */
+xcb_void_cookie_t xcb_ewmh_set_desktop_viewport_checked(xcb_ewmh_connection_t *ewmh,
+ uint32_t list_len,
+ xcb_ewmh_coordinates_t *list);
+
+/**
+ * @brief Send GetProperty request to get _NET_DESKTOP_VIEWPORT root
+ * window property
+ *
+ * @param ewmh The information relative to EWMH
+ * @return The _NET_DESKTOP_VIEWPORT cookie of the GetProperty request
+ */
+xcb_get_property_cookie_t xcb_ewmh_get_desktop_viewport_unchecked(xcb_ewmh_connection_t *ewmh);
+
+/**
+ * @see xcb_ewmh_get_desktop_viewport_unchecked
+ */
+xcb_get_property_cookie_t xcb_ewmh_get_desktop_viewport(xcb_ewmh_connection_t *ewmh);
+
+/**
+ * @brief Send ClientMessage requesting to change the _NET_DESKTOP_VIEWPORT
+ *
+ * @param ewmh The per-screen EWMH information
+ * @param new_x The new x coordinate
+ * @param new_y The new y coordinate
+ * @return The SendEvent cookie
+ */
+xcb_void_cookie_t xcb_ewmh_request_change_desktop_viewport(xcb_ewmh_connection_t *ewmh,
+ uint32_t x, uint32_t y);
+
+/**
+ * @brief Get the desktop geometry from a GetProperty
+ * _NET_DESKTOP_VIEWPORT reply
+ *
+ * @param vp The current desktop viewports
+ * @param r GetProperty _NET_DESKTOP_VIEWPORT reply
+ * @return Return 1 on success, 0 otherwise
+ */
+uint8_t xcb_ewmh_get_desktop_viewport_from_reply(xcb_ewmh_get_desktop_viewport_reply_t *vp,
+ xcb_get_property_reply_t *r);
+
+/**
+ * @brief Get reply from the GetProperty _NET_DESKTOP_VIEWPORT cookie
+ *
+ * The parameter e supplied to this function must be NULL if
+ * xcb_get_desktop_viewport_unchecked() is used. Otherwise, it stores
+ * the error if any.
+ *
+ * @param ewmh The information relative to EWMH
+ * @param cookie The _NET_DESKTOP_VIEWPORT GetProperty request cookie
+ * @param vp The current desktop viewports
+ * @param The xcb_generic_error_t supplied
+ * @return Return 1 on success, 0 otherwise
+ */
+uint8_t xcb_ewmh_get_desktop_viewport_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ xcb_ewmh_get_desktop_viewport_reply_t *vp,
+ xcb_generic_error_t **e);
+
+/**
+ * @brief Wipe the desktop viewports list reply
+ *
+ * This function must be called to free the memory allocated for atoms
+ * when the reply is requested in xcb_ewmh_get_desktop_viewport_reply
+ * function.
+ *
+ * @param r The X reply to be freed
+ */
+void xcb_ewmh_get_desktop_viewport_reply_wipe(xcb_ewmh_get_desktop_viewport_reply_t *r);
+
+/**
+ * @brief Send a ChangeProperty request for _NET_CURRENT_DESKTOP
+ *
+ * _NET_CURRENT_DESKTOP desktop, CARDINAL/32
+ *
+ * @param ewmh The per-screen EWMH information
+ * @param new_current_desktop The new current desktop
+ * @return Cookie associated with the ChangeProperty _NET_CURRENT_DESKTOP request
+ */
+xcb_void_cookie_t xcb_ewmh_set_current_desktop(xcb_ewmh_connection_t *ewmh,
+ uint32_t new_current_desktop);
+
+/**
+ * @see xcb_ewmh_set_current_desktop
+ */
+xcb_void_cookie_t xcb_ewmh_set_current_desktop_checked(xcb_ewmh_connection_t *ewmh,
+ uint32_t new_current_desktop);
+
+/**
+ * @brief Send GetProperty request to get _NET_CURRENT_DESKTOP root
+ * window property
+ *
+ * @param ewmh The information relative to EWMH
+ * @return The _NET_CURRENT_DESKTOP cookie of the GetProperty request
+ */
+xcb_get_property_cookie_t xcb_ewmh_get_current_desktop_unchecked(xcb_ewmh_connection_t *ewmh);
+
+/**
+ * @see xcb_ewmh_get_current_desktop_unchecked
+ */
+xcb_get_property_cookie_t xcb_ewmh_get_current_desktop(xcb_ewmh_connection_t *ewmh);
+
+/**
+ * @brief Send ClientMessage requesting to change the _NET_CURRENT_DESKTOP
+ *
+ * @param ewmh The per-screen EWMH information
+ * @param new_desktop The new current desktop
+ * @param timestamp The request timestamp
+ * @return The SendEvent cookie
+ */
+xcb_void_cookie_t xcb_ewmh_request_change_current_desktop(xcb_ewmh_connection_t *ewmh,
+ uint32_t new_desktop,
+ xcb_timestamp_t timestamp);
+
+/**
+ * @brief Get the desktop geometry from a GetProperty
+ * _NET_CURRENT_DESKTOP reply
+ *
+ * @param current_desktop The current desktop
+ * @param r GetProperty _NET_CURRENT_DESKTOP reply
+ * @return Return 1 on success, 0 otherwise
+ */
+uint8_t xcb_ewmh_get_current_desktop_from_reply(uint32_t *current_desktop,
+ xcb_get_property_reply_t *r);
+
+/**
+ * @brief Get reply from the GetProperty _NET_CURRENT_DESKTOP cookie
+ *
+ * The parameter e supplied to this function must be NULL if
+ * xcb_get_current_desktop_unchecked() is used. Otherwise, it stores
+ * the error if any.
+ *
+ * @param ewmh The information relative to EWMH
+ * @param cookie The _NET_CURRENT_DESKTOP GetProperty request cookie
+ * @param vp The current desktop
+ * @param The xcb_generic_error_t supplied
+ * @return Return 1 on success, 0 otherwise
+ */
+uint8_t xcb_ewmh_get_current_desktop_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ uint32_t *current_desktop,
+ xcb_generic_error_t **e);
+
+/**
+ * @brief Send a ChangeProperty request for _NET_DESKTOP_NAMES
+ *
+ * _NET_DESKTOP_NAMES, UTF8_STRING[]
+ *
+ * @param ewmh The per-screen EWMH information
+ * @param strings_len The number of desktop names
+ * @param strings The desktop names
+ * @return Cookie associated with the ChangeProperty _NET_DESKTOP_NAMES request
+ */
+xcb_void_cookie_t xcb_ewmh_set_desktop_names(xcb_ewmh_connection_t *ewmh,
+ uint32_t strings_len,
+ const char *strings);
+
+/**
+ * @see xcb_ewmh_set_desktop_names
+ */
+xcb_void_cookie_t xcb_ewmh_set_desktop_names_checked(xcb_ewmh_connection_t *ewmh,
+ uint32_t strings_len,
+ const char *strings);
+
+/**
+ * @brief Send GetProperty request to get _NET_DESKTOP_NAMES root
+ * window property
+ *
+ * @param ewmh The information relative to EWMH
+ * @return The _NET_DESKTOP_NAMES cookie of the GetProperty request
+ */
+xcb_get_property_cookie_t xcb_ewmh_get_desktop_names_unchecked(xcb_ewmh_connection_t *ewmh);
+
+/**
+ * @see xcb_ewmh_get_desktop_names_unchecked
+ */
+xcb_get_property_cookie_t xcb_ewmh_get_desktop_names(xcb_ewmh_connection_t *ewmh);
+
+/**
+ * @brief Get the desktop geometry from a GetProperty
+ * _NET_DESKTOP_NAMES reply
+ *
+ * @param ewmh The information relative to EWMH
+ * @param names The desktop names
+ * @param r GetProperty _NET_DESKTOP_NAMES reply
+ * @return Return 1 on success, 0 otherwise
+ */
+uint8_t xcb_ewmh_get_desktop_names_from_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_ewmh_get_utf8_strings_reply_t *names,
+ xcb_get_property_reply_t *r);
+
+/**
+ * @brief Get reply from the GetProperty _NET_DESKTOP_NAMES cookie
+ *
+ * The parameter e supplied to this function must be NULL if
+ * xcb_get_desktop_names_unchecked() is used. Otherwise, it stores
+ * the error if any.
+ *
+ * @param ewmh The information relative to EWMH
+ * @param cookie The _NET_DESKTOP_NAMES GetProperty request cookie
+ * @param names The desktop names
+ * @param The xcb_generic_error_t supplied
+ * @return Return 1 on success, 0 otherwise
+ */
+uint8_t xcb_ewmh_get_desktop_names_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ xcb_ewmh_get_utf8_strings_reply_t *names,
+ xcb_generic_error_t **e);
+
+/**
+ * @brief Send a ChangeProperty request for _NET_ACTIVE_WINDOW
+ *
+ * _NET_ACTIVE_WINDOW, WINDOW/32
+ *
+ * @param ewmh The per-screen EWMH information
+ * @param new_active_window The window to make active
+ * @return Cookie associated with the ChangeProperty _NET_ACTIVE_WINDOW request
+ */
+xcb_void_cookie_t xcb_ewmh_set_active_window(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t new_active_window);
+
+/**
+ * @see xcb_ewmh_set_active_window
+ */
+xcb_void_cookie_t xcb_ewmh_set_active_window_checked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t new_active_window);
+
+/**
+ * @brief Send ClientMessage requesting to change the _NET_ACTIVE_WINDOW
+ *
+ * The window ID of the currently active window or None if no window
+ * has the focus. This is a read-only property set by the Window
+ * Manager. If a Client wants to activate another window, it MUST send
+ * a _NET_ACTIVE_WINDOW client message to the root window. The
+ * timestamp is Client's last user activity timestamp at the time of
+ * the request, and the currently active window is the Client's active
+ * toplevel window, if any (the Window Manager may be e.g. more likely
+ * to obey the request if it will mean transferring focus from one
+ * active window to another).
+ *
+ * @see xcb_ewmh_client_source_type_t
+ * @param ewmh The information relative to EWMH.
+ * @param window_to_active The window ID to activate.
+ * @param source_indication The source indication.
+ * @param timestamp The client's last user activity timestamp.
+ * @param current_active_window The currently active window or None
+ */
+xcb_void_cookie_t xcb_ewmh_request_change_active_window(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window_to_activate,
+ xcb_ewmh_client_source_type_t source_indication,
+ xcb_timestamp_t timestamp,
+ xcb_window_t current_active_window);
+
+/**
* @brief Send GetProperty request to get _NET_ACTIVE_WINDOW root
* window property
*
@@ -568,6 +1189,17 @@ xcb_get_property_cookie_t xcb_ewmh_get_active_window_unchecked(xcb_ewmh_connecti
xcb_get_property_cookie_t xcb_ewmh_get_active_window(xcb_ewmh_connection_t *ewmh);
/**
+ * @brief Get the list of client windows from a GetProperty
+ * _NET_ACTIVE_WINDOW reply
+ *
+ * @param active_window The current active window
+ * @param r GetProperty _NET_ACTIVE_WINDOW_OF_DESKTOPS reply
+ * @return Return 1 on success, 0 otherwise
+ */
+uint8_t xcb_ewmh_get_active_window_from_reply(xcb_window_t *active_window,
+ xcb_get_property_reply_t *r);
+
+/**
* @brief Get reply from the GetProperty _NET_ACTIVE_WINDOW cookie
*
* The parameter e supplied to this function must be NULL if
@@ -581,137 +1213,816 @@ xcb_get_property_cookie_t xcb_ewmh_get_active_window(xcb_ewmh_connection_t *ewmh
* @return Return 1 on success, 0 otherwise.
*/
uint8_t xcb_ewmh_get_active_window_reply(xcb_ewmh_connection_t *ewmh,
- xcb_get_property_cookie_t cookie,
- xcb_window_t *active_window,
- xcb_generic_error_t **e);
+ xcb_get_property_cookie_t cookie,
+ xcb_window_t *active_window,
+ xcb_generic_error_t **e);
/**
- * @brief Send ClientMessage requesting to change the _NET_ACTIVE_WINDOW
+ * @brief Send a ChangeProperty request for _NET_WORKAREA
*
- * The window ID of the currently active window or None if no window
- * has the focus. This is a read-only property set by the Window
- * Manager. If a Client wants to activate another window, it MUST send
- * a _NET_ACTIVE_WINDOW client message to the root window. The
- * timestamp is Client's last user activity timestamp at the time of
- * the request, and the currently active window is the Client's active
- * toplevel window, if any (the Window Manager may be e.g. more likely
- * to obey the request if it will mean transferring focus from one
- * active window to another).
+ * _NET_WORKAREA, x, y, width, height CARDINAL[][4]/32
*
- * @see xcb_ewmh_client_source_type_t
- * @param ewmh The information relative to EWMH.
- * @param window_to_active The window ID to activate.
- * @param source_indication The source indication.
- * @param timestamp The client's last user activity timestamp.
- * @param current_active_window The currently active window or None
+ * @param ewmh The per-screen EWMH information
+ * @param list_len The number of desktops workareas
+ * @param list The desktops workareas
+ * @return Cookie associated with the ChangeProperty _NET_WORKAREA request
*/
-xcb_void_cookie_t xcb_ewmh_request_change_active_window(xcb_ewmh_connection_t *ewmh,
- xcb_window_t window_to_activate,
- xcb_ewmh_client_source_type_t source_indication,
- xcb_timestamp_t timestamp,
- xcb_window_t current_active_window);
+xcb_void_cookie_t xcb_ewmh_set_workarea(xcb_ewmh_connection_t *ewmh,
+ uint32_t list_len,
+ xcb_ewmh_geometry_t *list);
/**
- * @brief Send GetSelectOwner request to get the owner of
- * _NET_WM_CM_Sn root window property
+ * @see xcb_ewmh_set_workarea
+ */
+xcb_void_cookie_t xcb_ewmh_set_workarea_checked(xcb_ewmh_connection_t *ewmh,
+ uint32_t list_len,
+ xcb_ewmh_geometry_t *list);
+
+/**
+ * @brief Send GetProperty request to get _NET_WORKAREA root
+ * window property
*
- * @param ewmh The information relative to EWMH.
- * @return The _NET_WM_CM_Sn cookie of the GetSelectionOwner request.
+ * @param ewmh The information relative to EWMH
+ * @return The _NET_WORKAREA cookie of the GetProperty request
*/
-xcb_get_selection_owner_cookie_t xcb_ewmh_get_wm_cm_owner_unchecked(xcb_ewmh_connection_t *ewmh);
+xcb_get_property_cookie_t xcb_ewmh_get_workarea_unchecked(xcb_ewmh_connection_t *ewmh);
/**
- * @brief Send GetSelectOwner request to get the owner of
- * _NET_WM_CM_Sn root window property
+ * @see xcb_ewmh_get_virtual_roots_unchecked
+ */
+xcb_get_property_cookie_t xcb_ewmh_get_workarea(xcb_ewmh_connection_t *ewmh);
+
+/**
+ * @brief Get the desktop geometry from a GetProperty _NET_WORKAREA
+ * reply
*
- * @see xcb_ewmh_get_wm_cm_owner_unchecked
- * @param ewmh The information relative to EWMH.
- * @return The _NET_WM_CM_Sn cookie of the GetSelectionOwner request.
+ * @param wa The current workarea
+ * @param r GetProperty _NET_WORKAREA reply
+ * @return Return 1 on success, 0 otherwise
*/
-xcb_get_selection_owner_cookie_t xcb_ewmh_get_wm_cm_owner(xcb_ewmh_connection_t *ewmh);
+uint8_t xcb_ewmh_get_workarea_from_reply(xcb_ewmh_get_workarea_reply_t *wa,
+ xcb_get_property_reply_t *r);
/**
- * @brief Get reply from the GetProperty _NET_CLIENT_LIST cookie
+ * @brief Get reply from the GetProperty _NET_WORKAREA cookie
*
* The parameter e supplied to this function must be NULL if
- * xcb_get_window_client_list_unchecked() is used. Otherwise, it
+ * xcb_get_workarea_unchecked() is used. Otherwise, it stores the
+ * error if any.
+ *
+ * @param ewmh The information relative to EWMH
+ * @param cookie The _NET_WORKAREA GetProperty request cookie
+ * @param wa The current workareas of desktops
+ * @param The xcb_generic_error_t supplied
+ * @return Return 1 on success, 0 otherwise
+ */
+uint8_t xcb_ewmh_get_workarea_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ xcb_ewmh_get_workarea_reply_t *wa,
+ xcb_generic_error_t **e);
+
+/**
+ * @brief Wipe the workarea list reply
+ *
+ * This function must be called to free the memory allocated for atoms
+ * when the reply is requested in xcb_ewmh_get_workarea_reply
+ * function.
+ *
+ * @param r The X reply to be freed
+ */
+void xcb_ewmh_get_workarea_reply_wipe(xcb_ewmh_get_workarea_reply_t *r);
+
+/**
+ * @brief Send a ChangeProperty request for _NET_SUPPORTING_WM_CHECK
+ *
+ * _NET_SUPPORTING_WM_CHECK, WINDOW/32
+ *
+ * @param ewmh The per-screen EWMH information
+ * @param new_window The child window created by the WM
+ * @return Cookie associated with the ChangeProperty _NET_SUPPORTING_WM_CHECK request
+ */
+xcb_void_cookie_t xcb_ewmh_set_supporting_wm_check(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t new_window);
+
+/**
+ * @see xcb_ewmh_set_supporting_wm_check
+ */
+xcb_void_cookie_t xcb_ewmh_set_supporting_wm_check_checked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t new_window);
+
+/**
+ * @brief Send GetProperty request to get _NET_SUPPORTING_WM_CHECK
+ * root window property
+ *
+ * @param ewmh The information relative to EWMH
+ * @return The _NET_SUPPORTING_WM_CHECK cookie of the GetProperty request
+ */
+xcb_get_property_cookie_t xcb_ewmh_get_supporting_wm_check_unchecked(xcb_ewmh_connection_t *ewmh);
+
+/**
+ * @see xcb_ewmh_get_supporting_wm_check_unchecked
+ */
+xcb_get_property_cookie_t xcb_ewmh_get_supporting_wm_check(xcb_ewmh_connection_t *ewmh);
+
+/**
+ * @brief Get the list of client windows from a GetProperty
+ * _NET_SUPPORTING_WM_CHECK reply
+ *
+ * @param window The child window created by the WM
+ * @param r GetProperty _NET_SUPPORTING_WM_CHECK reply
+ * @return Return 1 on success, 0 otherwise
+ */
+uint8_t xcb_ewmh_get_supporting_wm_check_from_reply(xcb_window_t *window,
+ xcb_get_property_reply_t *r);
+
+/**
+ * @brief Get reply from the GetProperty _NET_SUPPORTING_WM_CHECK
+ * cookie
+ *
+ * The parameter e supplied to this function must be NULL if
+ * xcb_get_supporting_wm_check_unchecked() is used. Otherwise, it
* stores the error if any.
*
- * @param ewmh The information relative to EWMH.
- * @param cookie The _NET_WM_CM_Sn GetSelectionOwner request cookie.
- * @param owner The window ID which owns the selection or None.
- * @param The xcb_generic_error_t supplied.
- * @return Return 1 on success, 0 otherwise.
+ * @param ewmh The information relative to EWMH
+ * @param cookie The _NET_SUPPORTING_WM_CHECK GetProperty request cookie
+ * @param window The reply to be filled
+ * @param The xcb_generic_error_t supplied
+ * @return Return 1 on success, 0 otherwise
*/
-uint8_t xcb_ewmh_get_wm_cm_owner_reply(xcb_ewmh_connection_t *ewmh,
- xcb_get_selection_owner_cookie_t cookie,
- xcb_window_t *owner,
- xcb_generic_error_t **e);
+uint8_t xcb_ewmh_get_supporting_wm_check_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ xcb_window_t *window,
+ xcb_generic_error_t **e);
/**
- * @brief Set _NET_WM_CM_Sn ownership to the given window
+ * @brief Send a ChangeProperty request for _NET_VIRTUAL_ROOTS
*
- * For each screen they manage, compositing manager MUST acquire
- * ownership of a selection named _NET_WM_CM_Sn, where n is the screen
- * number.
+ * _NET_VIRTUAL_ROOTS, WINDOW[]/32
*
- * @param ewmh The information relative to EWMH.
- * @param owner The new owner of _NET_WM_CM_Sn selection.
- * @param timestamp The client's last user activity timestamp.
- * @param selection_data1 Optional data described by ICCCM
- * @param selection_data2 Optional data described by ICCCM
+ * @param ewmh The per-screen EWMH information
+ * @param list_len The number of virtual root windows
+ * @param list The virtual root windows
+ * @return Cookie associated with the ChangeProperty _NET_VIRTUAL_ROOTS request
*/
-xcb_void_cookie_t xcb_ewmh_set_wm_cm_owner(xcb_ewmh_connection_t *ewmh,
- xcb_window_t owner,
- xcb_timestamp_t timestamp,
- uint32_t selection_data1,
- uint32_t selection_data2);
+xcb_void_cookie_t xcb_ewmh_set_virtual_roots(xcb_ewmh_connection_t *ewmh,
+ uint32_t list_len,
+ xcb_window_t *list);
+
+/**
+ * @see xcb_ewmh_set_virtual_roots
+ */
+xcb_void_cookie_t xcb_ewmh_set_virtual_roots_checked(xcb_ewmh_connection_t *ewmh,
+ uint32_t list_len,
+ xcb_window_t *list);
+/**
+ * @brief Send GetProperty request to get _NET_VIRTUAL_ROOTS root
+ * window property
+ *
+ * @param ewmh The information relative to EWMH
+ * @return The _NET_VIRTUAL_ROOTS cookie of the GetProperty request
+ */
+xcb_get_property_cookie_t xcb_ewmh_get_virtual_roots_unchecked(xcb_ewmh_connection_t *ewmh);
+
+/**
+ * @see xcb_ewmh_get_virtual_roots_unchecked
+ */
+xcb_get_property_cookie_t xcb_ewmh_get_virtual_roots(xcb_ewmh_connection_t *ewmh);
+
+/**
+ * @brief Get the desktop geometry from a GetProperty _NET_WORKAREA
+ * reply
+ *
+ * @param virtual_roots The current virtual root windows
+ * @param r GetProperty _NET_VIRTUAL_ROOTS reply
+ * @return Return 1 on success, 0 otherwise
+ */
static inline uint8_t
xcb_ewmh_get_virtual_roots_from_reply(xcb_ewmh_get_windows_reply_t *virtual_roots,
- xcb_get_property_reply_t *r)
+ xcb_get_property_reply_t *r)
{
return xcb_ewmh_get_windows_from_reply(virtual_roots, r);
}
+/**
+ * @brief Get reply from the GetProperty _NET_VIRTUAL_ROOTS cookie
+ *
+ * The parameter e supplied to this function must be NULL if
+ * xcb_get_virtual_roots_unchecked() is used. Otherwise, it stores
+ * the error if any.
+ *
+ * @param ewmh The information relative to EWMH
+ * @param cookie The _NET_VIRTUAL_ROOTS GetProperty request cookie
+ * @param virtual_roots The current virtual root windows
+ * @param The xcb_generic_error_t supplied
+ * @return Return 1 on success, 0 otherwise
+ */
static inline uint8_t
xcb_ewmh_get_virtual_roots_reply(xcb_ewmh_connection_t *ewmh,
- xcb_get_property_cookie_t cookie,
- xcb_ewmh_get_windows_reply_t *virtual_roots,
- xcb_generic_error_t **e)
+ xcb_get_property_cookie_t cookie,
+ xcb_ewmh_get_windows_reply_t *virtual_roots,
+ xcb_generic_error_t **e)
{
return xcb_ewmh_get_windows_reply(ewmh, cookie, virtual_roots, e);
}
+xcb_void_cookie_t xcb_ewmh_set_desktop_layout(xcb_ewmh_connection_t *ewmh,
+ xcb_ewmh_desktop_layout_orientation_t orientation,
+ uint32_t columns, uint32_t rows,
+ xcb_ewmh_desktop_layout_starting_corner_t starting_corner);
+
+xcb_void_cookie_t xcb_ewmh_set_desktop_layout_checked(xcb_ewmh_connection_t *ewmh,
+ xcb_ewmh_desktop_layout_orientation_t orientation,
+ uint32_t columns, uint32_t rows,
+ xcb_ewmh_desktop_layout_starting_corner_t starting_corner);
+
+/**
+ * @brief Send GetProperty request to get _NET_DESKTOP_LAYOUT root
+ * window property
+ *
+ * @param ewmh The information relative to EWMH
+ * @return The _NET_DESKTOP_LAYOUT cookie of the GetProperty request
+ */
+xcb_get_property_cookie_t xcb_ewmh_get_desktop_layout_unchecked(xcb_ewmh_connection_t *ewmh);
+
+/**
+ * @see xcb_ewmh_get_desktop_layout_unchecked
+ */
+xcb_get_property_cookie_t xcb_ewmh_get_desktop_layout(xcb_ewmh_connection_t *ewmh);
+
+uint8_t xcb_ewmh_get_desktop_layout_from_reply(xcb_ewmh_get_desktop_layout_reply_t *desktop_layouts,
+ xcb_get_property_reply_t *r);
+
+uint8_t xcb_ewmh_get_desktop_layout_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ xcb_ewmh_get_desktop_layout_reply_t *desktop_layouts,
+ xcb_generic_error_t **e);
+
+xcb_void_cookie_t xcb_ewmh_set_showing_desktop(xcb_ewmh_connection_t *ewmh,
+ uint32_t desktop);
+
+xcb_void_cookie_t xcb_ewmh_set_showing_desktop_checked(xcb_ewmh_connection_t *ewmh,
+ uint32_t desktop);
+
+xcb_get_property_cookie_t xcb_ewmh_get_showing_desktop_unchecked(xcb_ewmh_connection_t *ewmh);
+
+xcb_get_property_cookie_t xcb_ewmh_get_showing_desktop(xcb_ewmh_connection_t *ewmh);
+
+uint8_t xcb_ewmh_get_showing_desktop_from_reply(uint32_t *desktop,
+ xcb_get_property_reply_t *r);
+
+uint8_t xcb_ewmh_get_showing_desktop_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ uint32_t *desktop,
+ xcb_generic_error_t **e);
static inline xcb_void_cookie_t
xcb_ewmh_request_change_showing_desktop(xcb_ewmh_connection_t *ewmh,
- uint32_t enter)
+ uint32_t enter)
{
return xcb_ewmh_send_client_message(ewmh->connection, XCB_NONE, ewmh->root,
- ewmh->_NET_SHOWING_DESKTOP, 1, &enter);
+ ewmh->_NET_SHOWING_DESKTOP, 1, &enter);
}
-static inline xcb_void_cookie_t
-xcb_ewmh_request_change_number_of_desktops(xcb_ewmh_connection_t *ewmh,
- uint32_t new_number_of_desktops)
-{
- return xcb_ewmh_send_client_message(ewmh->connection, XCB_NONE, ewmh->root,
- ewmh->_NET_NUMBER_OF_DESKTOPS, 1,
- &new_number_of_desktops);
-}
+xcb_void_cookie_t xcb_ewmh_request_close_window(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window_to_close,
+ xcb_timestamp_t timestamp,
+ xcb_ewmh_client_source_type_t source_indication);
+
+xcb_void_cookie_t xcb_ewmh_request_moveresize_window(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t moveresize_window,
+ xcb_gravity_t gravity,
+ xcb_ewmh_client_source_type_t source_indication,
+ xcb_ewmh_moveresize_window_opt_flags_t flags,
+ uint32_t x, uint32_t y,
+ uint32_t width, uint32_t height);
+
+xcb_void_cookie_t xcb_ewmh_request_wm_moveresize(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t moveresize_window,
+ uint32_t x_root, uint32_t y_root,
+ xcb_ewmh_moveresize_direction_t direction,
+ xcb_button_index_t button,
+ xcb_ewmh_client_source_type_t source_indication);
+
+xcb_void_cookie_t xcb_ewmh_request_restack_window(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window_to_restack,
+ xcb_window_t sibling_window,
+ xcb_stack_mode_t detail);
static inline xcb_void_cookie_t
xcb_ewmh_request_frame_extents(xcb_ewmh_connection_t *ewmh,
xcb_window_t client_window)
{
return xcb_ewmh_send_client_message(ewmh->connection, client_window, ewmh->root,
- ewmh->_NET_REQUEST_FRAME_EXTENTS, 0, NULL);
+ ewmh->_NET_REQUEST_FRAME_EXTENTS, 0, NULL);
}
-#ifdef __cplusplus
-}
-#endif
+xcb_void_cookie_t xcb_ewmh_set_wm_name(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t strings_len,
+ const char *strings);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_name_checked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t strings_len,
+ const char *strings);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_name_unchecked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_name(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+uint8_t xcb_ewmh_get_wm_name_from_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_ewmh_get_utf8_strings_reply_t *data,
+ xcb_get_property_reply_t *r);
+
+uint8_t xcb_ewmh_get_wm_name_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ xcb_ewmh_get_utf8_strings_reply_t *data,
+ xcb_generic_error_t **e);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_visible_name(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t strings_len,
+ const char *strings);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_visible_name_checked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t strings_len,
+ const char *strings);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_visible_name_unchecked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_visible_name(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+uint8_t xcb_ewmh_get_wm_visible_name_from_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_ewmh_get_utf8_strings_reply_t *data,
+ xcb_get_property_reply_t *r);
+
+uint8_t xcb_ewmh_get_wm_visible_name_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ xcb_ewmh_get_utf8_strings_reply_t *data,
+ xcb_generic_error_t **e);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_icon_name(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t strings_len,
+ const char *strings);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_icon_name_checked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t strings_len,
+ const char *strings);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_icon_name_unchecked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_icon_name(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+uint8_t xcb_ewmh_get_wm_icon_name_from_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_ewmh_get_utf8_strings_reply_t *data,
+ xcb_get_property_reply_t *r);
+
+uint8_t xcb_ewmh_get_wm_icon_name_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ xcb_ewmh_get_utf8_strings_reply_t *data,
+ xcb_generic_error_t **e);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_visible_icon_name(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t strings_len,
+ const char *strings);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_visible_icon_name_checked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t strings_len,
+ const char *strings);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_visible_icon_name_unchecked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_visible_icon_name(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+uint8_t xcb_ewmh_get_wm_visible_icon_name_from_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_ewmh_get_utf8_strings_reply_t *data,
+ xcb_get_property_reply_t *r);
+
+uint8_t xcb_ewmh_get_wm_visible_icon_name_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ xcb_ewmh_get_utf8_strings_reply_t *data,
+ xcb_generic_error_t **e);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_desktop(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t desktop);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_desktop_checked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t desktop);
+
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_desktop_unchecked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_desktop(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+uint8_t xcb_ewmh_get_wm_desktop_from_reply(uint32_t *desktop,
+ xcb_get_property_reply_t *r);
+
+uint8_t xcb_ewmh_get_wm_desktop_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ uint32_t *desktop,
+ xcb_generic_error_t **e);
+
+xcb_void_cookie_t xcb_ewmh_request_change_wm_desktop(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t client_window,
+ uint32_t new_desktop,
+ xcb_ewmh_client_source_type_t source_indication);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_window_type(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t list_len,
+ xcb_atom_t *list);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_window_type_checked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t list_len,
+ xcb_atom_t *list);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_window_type_unchecked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_window_type(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+uint8_t xcb_ewmh_get_wm_window_type_from_reply(xcb_ewmh_get_atoms_reply_t *wtypes,
+ xcb_get_property_reply_t *r);
+
+uint8_t xcb_ewmh_get_wm_window_type_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ xcb_ewmh_get_atoms_reply_t *name,
+ xcb_generic_error_t **e);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_state(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t list_len,
+ xcb_atom_t *list);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_state_checked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t list_len,
+ xcb_atom_t *list);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_state_unchecked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_state(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+uint8_t xcb_ewmh_get_wm_state_from_reply(xcb_ewmh_get_atoms_reply_t *wtypes,
+ xcb_get_property_reply_t *r);
+
+uint8_t xcb_ewmh_get_wm_state_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ xcb_ewmh_get_atoms_reply_t *name,
+ xcb_generic_error_t **e);
+
+xcb_void_cookie_t xcb_ewmh_request_change_wm_state(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t client_window,
+ xcb_ewmh_wm_state_action_t action,
+ xcb_atom_t first_property,
+ xcb_atom_t second_property,
+ xcb_ewmh_client_source_type_t source_indication);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_allowed_actions(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t list_len,
+ xcb_atom_t *list);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_allowed_actions_checked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t list_len,
+ xcb_atom_t *list);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_allowed_actions_unchecked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_allowed_actions(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+uint8_t xcb_ewmh_get_wm_allowed_actions_from_reply(xcb_ewmh_get_atoms_reply_t *wtypes,
+ xcb_get_property_reply_t *r);
+
+uint8_t xcb_ewmh_get_wm_allowed_actions_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ xcb_ewmh_get_atoms_reply_t *name,
+ xcb_generic_error_t **e);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_strut(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ xcb_ewmh_wm_strut_t wm_strut);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_strut_checked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ xcb_ewmh_wm_strut_t wm_strut);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_strut_unchecked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_strut(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+uint8_t xcb_ewmh_get_wm_strut_from_reply(xcb_ewmh_wm_strut_t *struts,
+ xcb_get_property_reply_t *r);
+
+uint8_t xcb_ewmh_get_wm_strut_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ xcb_ewmh_wm_strut_t *struts,
+ xcb_generic_error_t **e);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_icon_geometry(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t left, uint32_t right,
+ uint32_t top, uint32_t bottom);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_icon_geometry_checked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t left, uint32_t right,
+ uint32_t top, uint32_t bottom);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_icon_geometry_unchecked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_icon_geometry(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+uint8_t xcb_ewmh_get_wm_icon_geometry_from_reply(xcb_ewmh_geometry_t *icons,
+ xcb_get_property_reply_t *r);
+
+uint8_t xcb_ewmh_get_wm_icon_geometry_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ xcb_ewmh_geometry_t *icons,
+ xcb_generic_error_t **e);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_icon_checked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t width, uint32_t height,
+ uint32_t img_len, uint32_t *img);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_icon(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t width, uint32_t height,
+ uint32_t img_len, uint32_t *img);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_icon_unchecked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_icon(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+uint8_t xcb_ewmh_get_wm_icon_from_reply(xcb_ewmh_get_wm_icon_reply_t *wm_icon,
+ xcb_get_property_reply_t *r);
+
+uint8_t xcb_ewmh_get_wm_icon_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ xcb_ewmh_get_wm_icon_reply_t *wm_icon,
+ xcb_generic_error_t **e);
+
+void xcb_ewmh_get_wm_icon_reply_wipe(xcb_ewmh_get_wm_icon_reply_t *wm_icon);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_pid(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t pid);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_pid_checked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t pid);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_pid_unchecked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_pid(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+uint8_t xcb_ewmh_get_wm_pid_from_reply(uint32_t *pid,
+ xcb_get_property_reply_t *r);
+
+uint8_t xcb_ewmh_get_wm_pid_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ uint32_t *time,
+ xcb_generic_error_t **e);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_user_time(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t time);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_user_time_checked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t pid);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_user_time_unchecked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_user_time(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+uint8_t xcb_ewmh_get_wm_user_time_from_reply(uint32_t *time,
+ xcb_get_property_reply_t *r);
+
+uint8_t xcb_ewmh_get_wm_user_time_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ uint32_t *time,
+ xcb_generic_error_t **e);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_user_time_window(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t time);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_user_time_window_checked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t pid);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_user_time_window_unchecked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_user_time_window(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+uint8_t xcb_ewmh_get_wm_user_time_window_from_reply(uint32_t *time,
+ xcb_get_property_reply_t *r);
+
+uint8_t xcb_ewmh_get_wm_user_time_window_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ uint32_t *time,
+ xcb_generic_error_t **e);
+
+xcb_void_cookie_t xcb_ewmh_set_frame_extents(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t left, uint32_t right,
+ uint32_t top, uint32_t bottom);
+
+xcb_void_cookie_t xcb_ewmh_set_frame_extents_checked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t left, uint32_t right,
+ uint32_t top, uint32_t bottom);
+
+xcb_get_property_cookie_t xcb_ewmh_get_frame_extents_unchecked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+xcb_get_property_cookie_t xcb_ewmh_get_frame_extents(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+uint8_t xcb_ewmh_get_frame_extents_from_reply(xcb_ewmh_get_frame_extents_reply_t *frame_extents,
+ xcb_get_property_reply_t *r);
+
+uint8_t xcb_ewmh_get_frame_extents_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ xcb_ewmh_get_frame_extents_reply_t *frame_extents,
+ xcb_generic_error_t **e);
+
+xcb_void_cookie_t xcb_ewmh_send_wm_ping(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ xcb_timestamp_t timestamp);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_sync_request_counter(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ xcb_atom_t wm_sync_request_counter_atom,
+ uint32_t low, uint32_t high);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_sync_request_counter_checked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ xcb_atom_t wm_sync_request_counter_atom,
+ uint32_t low, uint32_t high);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_sync_request_counter_unchecked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_sync_request_counter(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+uint8_t xcb_ewmh_get_wm_sync_request_counter_from_reply(uint64_t *counter,
+ xcb_get_property_reply_t *r);
+
+uint8_t xcb_ewmh_get_wm_sync_request_counter_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ uint64_t *counter,
+ xcb_generic_error_t **e);
+
+xcb_void_cookie_t xcb_ewmh_send_wm_sync_request(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ xcb_atom_t wm_protocols_atom,
+ xcb_atom_t wm_sync_request_atom,
+ xcb_timestamp_t timestamp,
+ uint64_t counter);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_fullscreen_monitors(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t top, uint32_t bottom,
+ uint32_t left, uint32_t right);
+
+xcb_void_cookie_t xcb_ewmh_set_wm_fullscreen_monitors_checked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t top, uint32_t bottom,
+ uint32_t left, uint32_t right);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_fullscreen_monitors_unchecked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+xcb_get_property_cookie_t xcb_ewmh_get_wm_fullscreen_monitors(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window);
+
+uint8_t xcb_ewmh_get_wm_fullscreen_monitors_from_reply(xcb_ewmh_get_wm_fullscreen_monitors_reply_t *monitors,
+ xcb_get_property_reply_t *r);
+
+uint8_t xcb_ewmh_get_wm_fullscreen_monitors_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_property_cookie_t cookie,
+ xcb_ewmh_get_wm_fullscreen_monitors_reply_t *monitors,
+ xcb_generic_error_t **e);
+
+
+xcb_void_cookie_t xcb_ewmh_request_change_wm_fullscreen_monitors(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t window,
+ uint32_t top, uint32_t bottom,
+ uint32_t left, uint32_t right,
+ xcb_ewmh_client_source_type_t source_indication);
+
+/**
+ * @brief Set _NET_WM_CM_Sn ownership to the given window
+ *
+ * For each screen they manage, compositing manager MUST acquire
+ * ownership of a selection named _NET_WM_CM_Sn, where n is the screen
+ * number.
+ *
+ * @param ewmh The information relative to EWMH.
+ * @param owner The new owner of _NET_WM_CM_Sn selection.
+ * @param timestamp The client's last user activity timestamp.
+ * @param selection_data1 Optional data described by ICCCM
+ * @param selection_data2 Optional data described by ICCCM
+ */
+xcb_void_cookie_t xcb_ewmh_set_wm_cm_owner(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t owner,
+ xcb_timestamp_t timestamp,
+ uint32_t selection_data1,
+ uint32_t selection_data2);
+
+/**
+ * @see xcb_ewmh_set_wm_cm_owner
+ */
+xcb_void_cookie_t xcb_ewmh_set_wm_cm_owner_checked(xcb_ewmh_connection_t *ewmh,
+ xcb_window_t owner,
+ xcb_timestamp_t timestamp,
+ uint32_t selection_data1,
+ uint32_t selection_data2);
+
+/**
+ * @brief Send GetSelectOwner request to get the owner of
+ * _NET_WM_CM_Sn root window property
+ *
+ * @param ewmh The information relative to EWMH.
+ * @return The _NET_WM_CM_Sn cookie of the GetSelectionOwner request.
+ */
+xcb_get_selection_owner_cookie_t xcb_ewmh_get_wm_cm_owner_unchecked(xcb_ewmh_connection_t *ewmh);
+
+/**
+ * @brief Send GetSelectOwner request to get the owner of
+ * _NET_WM_CM_Sn root window property
+ *
+ * @see xcb_ewmh_get_wm_cm_owner_unchecked
+ * @param ewmh The information relative to EWMH.
+ * @return The _NET_WM_CM_Sn cookie of the GetSelectionOwner request.
+ */
+xcb_get_selection_owner_cookie_t xcb_ewmh_get_wm_cm_owner(xcb_ewmh_connection_t *ewmh);
+
+uint8_t xcb_ewmh_get_wm_cm_owner_from_reply(xcb_window_t *owner,
+ xcb_get_selection_owner_reply_t *r);
+
+/**
+ * @brief Get reply from the GetProperty _NET_CLIENT_LIST cookie
+ *
+ * The parameter e supplied to this function must be NULL if
+ * xcb_get_window_client_list_unchecked() is used. Otherwise, it
+ * stores the error if any.
+ *
+ * @param ewmh The information relative to EWMH.
+ * @param cookie The _NET_WM_CM_Sn GetSelectionOwner request cookie.
+ * @param owner The window ID which owns the selection or None.
+ * @param The xcb_generic_error_t supplied.
+ * @return Return 1 on success, 0 otherwise.
+ */
+uint8_t xcb_ewmh_get_wm_cm_owner_reply(xcb_ewmh_connection_t *ewmh,
+ xcb_get_selection_owner_cookie_t cookie,
+ xcb_window_t *owner,
+ xcb_generic_error_t **e);
+
+/* #ifdef __cplusplus */
+/* } */
+/* #endif */
/**
* @}