diff options
author | Arnaud Fontaine <arnau@debian.org> | 2010-03-23 11:47:26 +0000 |
---|---|---|
committer | Arnaud Fontaine <Arnaud Fontaine arnau@debian.org> | 2010-03-29 13:31:11 +0100 |
commit | 24bd59609cfecd2bea918d18c94d84e0b7e5e55a (patch) | |
tree | 972c1ae6e1f8f085120ef13cdc2a1a9ffd05c847 | |
parent | 9107c7b8b9291a33a1c39527f33985d7c45bf60d (diff) |
icccm: add WM_COLORMAP_WINDOWS
-rw-r--r-- | icccm/icccm.c | 78 | ||||
-rw-r--r-- | icccm/xcb_icccm.h | 92 |
2 files changed, 170 insertions, 0 deletions
diff --git a/icccm/icccm.c b/icccm/icccm.c index 49429e8..404a409 100644 --- a/icccm/icccm.c +++ b/icccm/icccm.c @@ -182,6 +182,84 @@ xcb_watch_wm_icon_name(xcb_property_handlers_t *prophs, uint32_t long_len, data); } +/* WM_COLORMAP_WINDOWS */ + +xcb_void_cookie_t +xcb_set_wm_colormap_windows_checked(xcb_connection_t *c, + xcb_window_t window, + xcb_atom_t wm_colormap_windows_atom, + uint32_t list_len, + const xcb_window_t *list) +{ + return xcb_change_property_checked(c, XCB_PROP_MODE_REPLACE, window, + wm_colormap_windows_atom, XCB_ATOM_WINDOW, + 32, list_len, list); +} + +xcb_void_cookie_t +xcb_set_wm_colormap_windows(xcb_connection_t *c, + xcb_window_t window, + xcb_atom_t wm_colormap_windows_atom, + uint32_t list_len, + const xcb_atom_t *list) +{ + return xcb_change_property(c, XCB_PROP_MODE_REPLACE, window, + wm_colormap_windows_atom, XCB_ATOM_WINDOW, 32, + list_len, list); +} + + +xcb_get_property_cookie_t +xcb_get_wm_colormap_windows(xcb_connection_t *c, + xcb_window_t window, + xcb_atom_t wm_colormap_windows_atom ) +{ + return xcb_get_property(c, 0, window, wm_colormap_windows_atom, + XCB_ATOM_WINDOW, 0, UINT_MAX); +} + +xcb_get_property_cookie_t +xcb_get_wm_colormap_windows_unchecked(xcb_connection_t *c, + xcb_window_t window, + xcb_atom_t wm_colormap_windows_atom) +{ + return xcb_get_property_unchecked(c, 0, window, wm_colormap_windows_atom, + XCB_ATOM_WINDOW, 0, UINT_MAX); +} + +uint8_t +xcb_get_wm_colormap_windows_from_reply(xcb_get_property_reply_t *reply, + xcb_get_wm_colormap_windows_reply_t *colormap_windows) +{ + if(!reply || reply->type != XCB_ATOM_WINDOW || reply->format != 32) + return 0; + + colormap_windows->_reply = reply; + colormap_windows->windows_len = xcb_get_property_value_length(colormap_windows->_reply) / (reply->format / 8); + colormap_windows->windows = (xcb_window_t *) xcb_get_property_value(colormap_windows->_reply); + + return 1; +} + +uint8_t +xcb_get_wm_colormap_windows_reply(xcb_connection_t *c, + xcb_get_property_cookie_t cookie, + xcb_get_wm_colormap_windows_reply_t *colormap_windows, + xcb_generic_error_t **e) +{ + xcb_get_property_reply_t *reply = xcb_get_property_reply(c, cookie, e); + uint8_t ret = xcb_get_wm_colormap_windows_from_reply(reply, colormap_windows); + if(!ret) + free(reply); + return ret; +} + +void +xcb_get_wm_colormap_windows_reply_wipe(xcb_get_wm_colormap_windows_reply_t *colormap_windows) +{ + free(colormap_windows->_reply); +} + /* WM_CLIENT_MACHINE */ xcb_void_cookie_t diff --git a/icccm/xcb_icccm.h b/icccm/xcb_icccm.h index 5e838bd..d7598be 100644 --- a/icccm/xcb_icccm.h +++ b/icccm/xcb_icccm.h @@ -245,6 +245,98 @@ uint8_t xcb_watch_wm_icon_name(xcb_property_handlers_t *prophs, xcb_generic_property_handler_t handler, void *data); +/* WM_COLORMAP_WINDOWS */ + +/** + * @brief Deliver a ChangeProperty request to set WM_COLORMAP_WINDOWS property value. + * @param c The connection to the X server. + * @param wm_colormap_windows The WM_COLORMAP_WINDOWS atom + * @param window Window X identifier. + * @param list_len Windows list len. + * @param list Windows list. + * @return The request cookie. + */ +xcb_void_cookie_t xcb_set_wm_colormap_windows_checked(xcb_connection_t *c, + xcb_window_t window, + xcb_atom_t wm_colormap_windows_atom, + uint32_t list_len, + const xcb_window_t *list); + +/** + * @see xcb_set_wm_colormap_windows_checked() + */ +xcb_void_cookie_t xcb_set_wm_colormap_windows(xcb_connection_t *c, + xcb_window_t window, + xcb_atom_t wm_colormap_windows_atom, + uint32_t list_len, + const xcb_window_t *list); + +/** + * @brief WM_COLORMAP_WINDOWS structure. + */ +typedef struct { + /** Length of the windows list */ + uint32_t windows_len; + /** Windows list */ + xcb_window_t *windows; + /** Store reply to avoid memory allocation, should normally not be + used directly */ + xcb_get_property_reply_t *_reply; +} xcb_get_wm_colormap_windows_reply_t; + +/** + * @brief Send request to get WM_COLORMAP_WINDOWS property of a given window. + * @param c The connection to the X server. + * @param window Window X identifier. + * @return The request cookie. + */ +xcb_get_property_cookie_t xcb_get_wm_colormap_windows(xcb_connection_t *c, + xcb_window_t window, + xcb_atom_t wm_colormap_windows_atom); + +/** + * @see xcb_get_wm_colormap_windows() + */ +xcb_get_property_cookie_t xcb_get_wm_colormap_windows_unchecked(xcb_connection_t *c, + xcb_window_t window, + xcb_atom_t wm_colormap_windows_atom); + +/** + * @brief Fill the given structure with the WM_COLORMAP_WINDOWS property of a window. + * @param reply The reply of the GetProperty request. + * @param colormap_windows WM_COLORMAP property value. + * @return Return 1 on success, 0 otherwise. + * + * protocols structure members should be freed by + * xcb_get_wm_protocols_reply_wipe(). + */ +uint8_t xcb_get_wm_colormap_windows_from_reply(xcb_get_property_reply_t *reply, + xcb_get_wm_colormap_windows_reply_t *colormap_windows); +/** + * @brief Fill the given structure with the WM_COLORMAP_WINDOWS property of a window. + * @param c The connection to the X server. + * @param cookie Request cookie. + * @param protocols WM_COLORMAP_WINDOWS property value. + * @param e Error if any. + * @return Return 1 on success, 0 otherwise. + * + * The parameter e supplied to this function must be NULL if + * xcb_get_wm_colormap_windows_unchecked() is used. Otherwise, it + * stores the error if any. protocols structure members should be + * freed by xcb_get_wm_colormap_windows_reply_wipe(). + */ +uint8_t xcb_get_wm_colormap_windows_reply(xcb_connection_t *c, + xcb_get_property_cookie_t cookie, + xcb_get_wm_colormap_windows_reply_t *windows, + xcb_generic_error_t **e); + +/** + * @brief Wipe protocols structure members previously allocated by + * xcb_get_wm_colormap_windows_reply(). + * @param windows windows structure whose members is going to be freed. + */ +void xcb_get_wm_colormap_windows_reply_wipe(xcb_get_wm_colormap_windows_reply_t *windows); + /* WM_CLIENT_MACHINE */ /** |