mirror of
https://github.com/yshui/picom.git
synced 2024-12-02 14:15:41 -05:00
dc37370a66
Of course, we still use GLX, so we can't completely remove Xlib yet. But this removes all Xlib uses outside of the backends. This drops support for COMPOUND_TEXT Xorg strings, so people how wants multilingual support has to use UTF8, which should be fine since most of the applications support that. Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
37 lines
1,016 B
C
37 lines
1,016 B
C
#include <string.h>
|
|
#include <xcb/xcb.h>
|
|
|
|
#include "atom.h"
|
|
#include "common.h"
|
|
#include "utils.h"
|
|
#include "log.h"
|
|
|
|
static inline void *atom_getter(void *ud, const char *atom_name, int *err) {
|
|
xcb_connection_t *c = ud;
|
|
xcb_intern_atom_reply_t *reply = xcb_intern_atom_reply(
|
|
c, xcb_intern_atom(c, 0, to_u16_checked(strlen(atom_name)), atom_name), NULL);
|
|
|
|
xcb_atom_t atom = XCB_NONE;
|
|
if (reply) {
|
|
log_debug("Atom %s is %d", atom_name, reply->atom);
|
|
atom = reply->atom;
|
|
free(reply);
|
|
} else {
|
|
log_error("Failed to intern atoms");
|
|
*err = 1;
|
|
}
|
|
return (void *)(intptr_t)atom;
|
|
}
|
|
|
|
/**
|
|
* Create a new atom structure and fetch all predefined atoms
|
|
*/
|
|
struct atom *init_atoms(xcb_connection_t *c) {
|
|
auto atoms = ccalloc(1, struct atom);
|
|
atoms->c = new_cache((void *)c, atom_getter, NULL);
|
|
#define ATOM_GET(x) atoms->a##x = (xcb_atom_t)(intptr_t)cache_get(atoms->c, #x, NULL)
|
|
LIST_APPLY(ATOM_GET, SEP_COLON, ATOM_LIST1);
|
|
LIST_APPLY(ATOM_GET, SEP_COLON, ATOM_LIST2);
|
|
#undef ATOM_GET
|
|
return atoms;
|
|
}
|