aboutsummaryrefslogtreecommitdiff
path: root/src/x.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/x.h')
-rw-r--r--src/x.h293
1 files changed, 0 insertions, 293 deletions
diff --git a/src/x.h b/src/x.h
deleted file mode 100644
index e01aa0a..0000000
--- a/src/x.h
+++ /dev/null
@@ -1,293 +0,0 @@
-// SPDX-License-Identifier: MPL-2.0
-// Copyright (c) 2018 Yuxuan Shui <[email protected]>
-#pragma once
-#include <stdbool.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <xcb/render.h>
-#include <xcb/sync.h>
-#include <xcb/xcb.h>
-#include <xcb/xcb_renderutil.h>
-#include <xcb/xfixes.h>
-
-#include "compiler.h"
-#include "kernel.h"
-#include "log.h"
-#include "region.h"
-
-typedef struct session session_t;
-struct atom;
-
-/// Structure representing Window property value.
-typedef struct winprop {
- union {
- void *ptr;
- int8_t *p8;
- int16_t *p16;
- int32_t *p32;
- uint32_t *c32; // 32bit cardinal
- };
- unsigned long nitems;
- xcb_atom_t type;
- int format;
-
- xcb_get_property_reply_t *r;
-} winprop_t;
-
-typedef struct winprop_info {
- xcb_atom_t type;
- uint8_t format;
- uint32_t length;
-} winprop_info_t;
-
-struct xvisual_info {
- /// Bit depth of the red component
- int red_size;
- /// Bit depth of the green component
- int green_size;
- /// Bit depth of the blue component
- int blue_size;
- /// Bit depth of the alpha component
- int alpha_size;
- /// The depth of X visual
- int visual_depth;
-
- xcb_visualid_t visual;
-};
-
-#define XCB_AWAIT_VOID(func, c, ...) \
- ({ \
- bool __success = true; \
- __auto_type __e = xcb_request_check(c, func##_checked(c, __VA_ARGS__)); \
- if (__e) { \
- x_print_error(__e->sequence, __e->major_code, __e->minor_code, \
- __e->error_code); \
- free(__e); \
- __success = false; \
- } \
- __success; \
- })
-
-#define XCB_AWAIT(func, c, ...) \
- ({ \
- xcb_generic_error_t *__e = NULL; \
- __auto_type __r = func##_reply(c, func(c, __VA_ARGS__), &__e); \
- if (__e) { \
- x_print_error(__e->sequence, __e->major_code, __e->minor_code, \
- __e->error_code); \
- free(__e); \
- } \
- __r; \
- })
-
-#define log_debug_x_error(e, fmt, ...) \
- LOG(DEBUG, fmt " (%s)", ##__VA_ARGS__, x_strerror(e))
-#define log_error_x_error(e, fmt, ...) \
- LOG(ERROR, fmt " (%s)", ##__VA_ARGS__, x_strerror(e))
-#define log_fatal_x_error(e, fmt, ...) \
- LOG(FATAL, fmt " (%s)", ##__VA_ARGS__, x_strerror(e))
-
-/// Wraps x_new_id. abort the program if x_new_id returns error
-static inline uint32_t x_new_id(xcb_connection_t *c) {
- auto ret = xcb_generate_id(c);
- if (ret == (uint32_t)-1) {
- log_fatal("We seems to have run of XIDs. This is either a bug in the X "
- "server, or a resource leakage in the compositor. Please open "
- "an issue about this problem. The compositor will die.");
- abort();
- }
- return ret;
-}
-
-/**
- * Send a request to X server and get the reply to make sure all previous
- * requests are processed, and their replies received
- *
- * xcb_get_input_focus is used here because it is the same request used by
- * libX11
- */
-static inline void x_sync(xcb_connection_t *c) {
- free(xcb_get_input_focus_reply(c, xcb_get_input_focus(c), NULL));
-}
-
-/**
- * Get a specific attribute of a window.
- *
- * Returns a blank structure if the returned type and format does not
- * match the requested type and format.
- *
- * @param ps current session
- * @param w window
- * @param atom atom of attribute to fetch
- * @param length length to read
- * @param rtype atom of the requested type
- * @param rformat requested format
- * @return a <code>winprop_t</code> structure containing the attribute
- * and number of items. A blank one on failure.
- */
-winprop_t x_get_prop_with_offset(xcb_connection_t *c, xcb_window_t w, xcb_atom_t atom,
- int offset, int length, xcb_atom_t rtype, int rformat);
-
-/**
- * Wrapper of wid_get_prop_adv().
- */
-static inline winprop_t x_get_prop(xcb_connection_t *c, xcb_window_t wid, xcb_atom_t atom,
- int length, xcb_atom_t rtype, int rformat) {
- return x_get_prop_with_offset(c, wid, atom, 0L, length, rtype, rformat);
-}
-
-/// Get the type, format and size in bytes of a window's specific attribute.
-winprop_info_t x_get_prop_info(xcb_connection_t *c, xcb_window_t w, xcb_atom_t atom);
-
-/// Discard all X events in queue or in flight. Should only be used when the server is
-/// grabbed
-static inline void x_discard_events(xcb_connection_t *c) {
- xcb_generic_event_t *e;
- while ((e = xcb_poll_for_event(c))) {
- free(e);
- }
-}
-
-/**
- * Get the value of a type-<code>xcb_window_t</code> property of a window.
- *
- * @return the value if successful, 0 otherwise
- */
-xcb_window_t wid_get_prop_window(xcb_connection_t *c, xcb_window_t wid, xcb_atom_t aprop);
-
-/**
- * Get the value of a text property of a window.
- *
- * @param[out] pstrlst Out parameter for an array of strings, caller needs to free this
- * array
- * @param[out] pnstr Number of strings in the array
- */
-bool wid_get_text_prop(session_t *ps, xcb_window_t wid, xcb_atom_t prop, char ***pstrlst,
- int *pnstr);
-
-const xcb_render_pictforminfo_t *
-x_get_pictform_for_visual(xcb_connection_t *, xcb_visualid_t);
-int x_get_visual_depth(xcb_connection_t *, xcb_visualid_t);
-
-xcb_render_picture_t
-x_create_picture_with_pictfmt_and_pixmap(xcb_connection_t *,
- const xcb_render_pictforminfo_t *pictfmt,
- xcb_pixmap_t pixmap, uint32_t valuemask,
- const xcb_render_create_picture_value_list_t *attr)
- attr_nonnull(1, 2);
-
-xcb_render_picture_t
-x_create_picture_with_visual_and_pixmap(xcb_connection_t *, xcb_visualid_t visual,
- xcb_pixmap_t pixmap, uint32_t valuemask,
- const xcb_render_create_picture_value_list_t *attr)
- attr_nonnull(1);
-
-xcb_render_picture_t
-x_create_picture_with_standard_and_pixmap(xcb_connection_t *, xcb_pict_standard_t standard,
- xcb_pixmap_t pixmap, uint32_t valuemask,
- const xcb_render_create_picture_value_list_t *attr)
- attr_nonnull(1);
-
-xcb_render_picture_t
-x_create_picture_with_standard(xcb_connection_t *c, xcb_drawable_t d, int w, int h,
- xcb_pict_standard_t standard, uint32_t valuemask,
- const xcb_render_create_picture_value_list_t *attr)
- attr_nonnull(1);
-
-/**
- * Create an picture.
- */
-xcb_render_picture_t
-x_create_picture_with_pictfmt(xcb_connection_t *, xcb_drawable_t, int w, int h,
- const xcb_render_pictforminfo_t *pictfmt, uint32_t valuemask,
- const xcb_render_create_picture_value_list_t *attr)
- attr_nonnull(1, 5);
-
-xcb_render_picture_t
-x_create_picture_with_visual(xcb_connection_t *, xcb_drawable_t, int w, int h,
- xcb_visualid_t visual, uint32_t valuemask,
- const xcb_render_create_picture_value_list_t *attr)
- attr_nonnull(1);
-
-/// Fetch a X region and store it in a pixman region
-bool x_fetch_region(xcb_connection_t *, xcb_xfixes_region_t r, region_t *res);
-
-void x_set_picture_clip_region(xcb_connection_t *, xcb_render_picture_t, int16_t clip_x_origin,
- int16_t clip_y_origin, const region_t *);
-
-void x_clear_picture_clip_region(xcb_connection_t *, xcb_render_picture_t pict);
-
-/**
- * Log a X11 error
- */
-void x_print_error(unsigned long serial, uint8_t major, uint16_t minor, uint8_t error_code);
-
-/*
- * Convert a xcb_generic_error_t to a string that describes the error
- *
- * @return a pointer to a string. this pointer shouldn NOT be freed, same buffer is used
- * for multiple calls to this function,
- */
-const char *x_strerror(xcb_generic_error_t *e);
-
-xcb_pixmap_t x_create_pixmap(xcb_connection_t *, uint8_t depth, xcb_drawable_t drawable,
- int width, int height);
-
-bool x_validate_pixmap(xcb_connection_t *, xcb_pixmap_t pxmap);
-
-/**
- * Free a <code>winprop_t</code>.
- *
- * @param pprop pointer to the <code>winprop_t</code> to free.
- */
-static inline void free_winprop(winprop_t *pprop) {
- // Empty the whole structure to avoid possible issues
- if (pprop->r)
- free(pprop->r);
- pprop->ptr = NULL;
- pprop->r = NULL;
- pprop->nitems = 0;
-}
-
-/// Get the back pixmap of the root window
-xcb_pixmap_t
-x_get_root_back_pixmap(xcb_connection_t *c, xcb_window_t root, struct atom *atoms);
-
-/// Return true if the atom refers to a property name that is used for the
-/// root window background pixmap
-bool x_is_root_back_pixmap_atom(struct atom *atoms, xcb_atom_t atom);
-
-bool x_fence_sync(xcb_connection_t *, xcb_sync_fence_t);
-
-struct x_convolution_kernel {
- int size;
- int capacity;
- xcb_render_fixed_t kernel[];
-};
-
-/**
- * Convert a struct conv to a X picture convolution filter, normalizing the kernel
- * in the process. Allow the caller to specify the element at the center of the kernel,
- * for compatibility with legacy code.
- *
- * @param[in] kernel the convolution kernel
- * @param[in] center the element to put at the center of the matrix
- * @param[inout] ret pointer to an array of `size`, if `size` is too small, more space
- * will be allocated, and `*ret` will be updated.
- * @param[inout] size size of the array pointed to by `ret`.
- */
-void attr_nonnull(1, 3) x_create_convolution_kernel(const conv *kernel, double center,
- struct x_convolution_kernel **ret);
-
-/// Generate a search criteria for fbconfig from a X visual.
-/// Returns {-1, -1, -1, -1, -1, -1} on failure
-struct xvisual_info x_get_visual_info(xcb_connection_t *c, xcb_visualid_t visual);
-
-xcb_visualid_t x_get_visual_for_standard(xcb_connection_t *c, xcb_pict_standard_t std);
-
-xcb_render_pictformat_t
-x_get_pictfmt_for_standard(xcb_connection_t *c, xcb_pict_standard_t std);
-
-xcb_screen_t *x_screen_of_display(xcb_connection_t *c, int screen);
-
-uint32_t attr_deprecated xcb_generate_id(xcb_connection_t *c);