~kris/suckless

dwmblocks

ref: 75cd0cb3adb8970cf3774e3a7e004bef2f2600a4 dwmblocks/src/x11.c -rw-r--r-- 1.3 KiB
75cd0cb3 — Kris Yotam Replace sb-playerctl with sb-dashboard block 7 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include "x11.h"

#include <stdio.h>
#include <string.h>
#include <xcb/xcb.h>
#include <xcb/xproto.h>

x11_connection *x11_connection_open(void) {
    xcb_connection_t *const connection = xcb_connect(NULL, NULL);
    if (xcb_connection_has_error(connection)) {
        (void)fprintf(stderr, "error: could not connect to X server\n");
        return NULL;
    }

    return connection;
}

void x11_connection_close(xcb_connection_t *const connection) {
    xcb_disconnect(connection);
}

int x11_set_root_name(x11_connection *const connection, const char *name) {
    xcb_screen_t *const screen =
        xcb_setup_roots_iterator(xcb_get_setup(connection)).data;
    const xcb_window_t root_window = screen->root;

    const unsigned short name_format = 8;
    const xcb_void_cookie_t cookie = xcb_change_property(
        connection, XCB_PROP_MODE_REPLACE, root_window, XCB_ATOM_WM_NAME,
        XCB_ATOM_STRING, name_format, strlen(name), name);

    xcb_generic_error_t *error = xcb_request_check(connection, cookie);
    if (error != NULL) {
        (void)fprintf(stderr, "error: could not set X root name\n");
        return 1;
    }

    if (xcb_flush(connection) <= 0) {
        (void)fprintf(stderr, "error: could not flush X output buffer\n");
        return 1;
    }

    return 0;
}