tutil.c - wmutils - X windows manipulation utilities
(HTM) git clone git://z3bra.org/wmutils
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
tutil.c (1966B)
---
1 #include <err.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <xcb/xcb.h>
5 #include <xcb/xcb_aux.h>
6
7 #include "util.h"
8
9 void
10 init_xcb(xcb_connection_t **con)
11 {
12 *con = xcb_connect(NULL, NULL);
13 if (xcb_connection_has_error(*con))
14 errx(1, "unable connect to the X server");
15 }
16
17 void
18 kill_xcb(xcb_connection_t **con)
19 {
20 if (*con)
21 xcb_disconnect(*con);
22 }
23
24 void
25 get_screen(xcb_connection_t *con, xcb_screen_t **scr)
26 {
27 *scr = xcb_setup_roots_iterator(xcb_get_setup(con)).data;
28 if (*scr == NULL)
29 errx(1, "unable to retrieve screen informations");
30 }
31
32 int
33 exists(xcb_connection_t *con, xcb_window_t w)
34 {
35 xcb_get_window_attributes_cookie_t c;
36 xcb_get_window_attributes_reply_t *r;
37
38 c = xcb_get_window_attributes(con, w);
39 r = xcb_get_window_attributes_reply(con, c, NULL);
40
41 if (r == NULL)
42 return 0;
43
44 free(r);
45 return 1;
46 }
47
48 int
49 mapped(xcb_connection_t *con, xcb_window_t w)
50 {
51 int ms;
52 xcb_get_window_attributes_cookie_t c;
53 xcb_get_window_attributes_reply_t *r;
54
55 c = xcb_get_window_attributes(con, w);
56 r = xcb_get_window_attributes_reply(con, c, NULL);
57
58 if (r == NULL)
59 return 0;
60
61 ms = r->map_state;
62
63 free(r);
64 return ms == XCB_MAP_STATE_VIEWABLE;
65 }
66
67 int
68 ignore(xcb_connection_t *con, xcb_window_t w)
69 {
70 int or;
71 xcb_get_window_attributes_cookie_t c;
72 xcb_get_window_attributes_reply_t *r;
73
74 c = xcb_get_window_attributes(con, w);
75 r = xcb_get_window_attributes_reply(con, c, NULL);
76
77 if (r == NULL)
78 return 0;
79
80 or = r->override_redirect;
81
82 free(r);
83 return or;
84 }
85
86 int
87 get_windows(xcb_connection_t *con, xcb_window_t w, xcb_window_t **l)
88 {
89 uint32_t childnum = 0;
90 xcb_query_tree_cookie_t c;
91 xcb_query_tree_reply_t *r;
92
93 c = xcb_query_tree(con, w);
94 r = xcb_query_tree_reply(con, c, NULL);
95 if (r == NULL)
96 errx(1, "0x%08x: no such window", w);
97
98 *l = malloc(sizeof(xcb_window_t) * r->children_len);
99 memcpy(*l, xcb_query_tree_children(r),
100 sizeof(xcb_window_t) * r->children_len);
101
102 childnum = r->children_len;
103
104 free(r);
105 return childnum;
106 }