twattr: test wether the specified window exist or not - wmutils - X windows manipulation utilities
 (HTM) git clone git://z3bra.org/wmutils
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 2c19eee092e62e716b0f8e48c64b52d9e925f3df
 (DIR) parent c1f2541ca1940d8ee27ddb6ec4fbc15ede51a428
 (HTM) Author: z3bra <willy@mailoo.org>
       Date:   Thu, 27 Nov 2014 23:59:35 +0100
       
       wattr: test wether the specified window exist or not
       
       Diffstat:
         M wattr.c                             |      24 ++++++++++++++++++++++--
       
       1 file changed, 22 insertions(+), 2 deletions(-)
       ---
 (DIR) diff --git a/wattr.c b/wattr.c
       t@@ -43,6 +43,23 @@ cleanup(void)
        }
        
        static int
       +exists(xcb_window_t w)
       +{
       +        int ms;
       +        xcb_get_window_attributes_cookie_t c;
       +        xcb_get_window_attributes_reply_t  *r;
       +
       +        c = xcb_get_window_attributes(conn, w);
       +        r = xcb_get_window_attributes_reply(conn, c, NULL);
       +
       +        if (r == NULL)
       +                return 0;
       +
       +        free(r);
       +        return 1;
       +}
       +
       +static int
        getattribute(xcb_window_t w, int attr)
        {
                xcb_get_geometry_cookie_t c;
       t@@ -71,13 +88,15 @@ main(int argc, char **argv)
                int i;
                xcb_window_t w = 0;
        
       -        if (argc < 2 || (strncmp(argv[1], "-h", 2) == 0))
       +        if (argc < 2 || (strncmp(argv[1], "-h", 2) == 0)) {
       +                argv0 = argv[0];
                        usage();
       +        }
        
                atexit(cleanup);
                xcbinit();
        
       -        w = strtoul(argv[2], NULL, 16);
       +        w = strtoul(argv[argc-1], NULL, 16);
        
                for (i=0; i<strnlen(argv[1], ATTR_MAX); i++) {
                        switch (argv[1][i]) {
       t@@ -85,6 +104,7 @@ main(int argc, char **argv)
                                case 'h': printf("%d", getattribute(w, ATTR_H)); break;
                                case 'x': printf("%d", getattribute(w, ATTR_X)); break;
                                case 'y': printf("%d", getattribute(w, ATTR_Y)); break;
       +                        default : exists(w) ? exit(0) : exit(1);
                        }
        
                        /* add a space if more attribute come after */