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 }