tnew tool: chwb - wmutils - X windows manipulation utilities
 (HTM) git clone git://z3bra.org/wmutils
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 8e1695bdd1ace9cdb02d601320bd59658850144a
 (DIR) parent b11f4e3cd4c5e154a914165c55eb13756bec845f
 (HTM) Author: dcat <dcat@iotek.org>
       Date:   Sun, 30 Nov 2014 21:13:22 +0100
       
       new tool: chwb
       
       Diffstat:
         M Makefile                            |       3 ++-
         A chwb.c                              |     101 +++++++++++++++++++++++++++++++
       
       2 files changed, 103 insertions(+), 1 deletion(-)
       ---
 (DIR) diff --git a/Makefile b/Makefile
       t@@ -17,7 +17,8 @@ SRC =           \
                wmv.c   \
                chwso.c \
                wtf.c   \
       -        wrs.c
       +        wrs.c   \
       +        chwb.c
        
        OBJ = $(SRC:.c=.o)
        BIN = $(SRC:.c=)
 (DIR) diff --git a/chwb.c b/chwb.c
       t@@ -0,0 +1,101 @@
       +/**
       +*      Copyright (c) 2014, Broseph <dcat (at) iotek (dot) org>
       +*
       +*      Permission to use, copy, modify, and/or distribute this software for any
       +*      purpose with or without fee is hereby granted, provided that the above
       +*      copyright notice and this permission notice appear in all copies.
       +*
       +*      THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
       +*      WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
       +*      MERCHANTABILITY AND FITNESS IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
       +*      ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
       +*      WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
       +*      ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
       +*      OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
       +**/
       +
       +#include <xcb/xcb.h>
       +#include <stdlib.h>
       +#include <stdio.h>
       +#include <err.h>
       +
       +#include "arg.h"
       +
       +static xcb_connection_t *conn;
       +
       +static void cleanup    (void);
       +static void usage      (char *name);
       +static void setborder  (int, int, xcb_window_t);
       +
       +static void
       +cleanup (void)
       +{
       +        if (conn)
       +                xcb_disconnect(conn);
       +}
       +
       +static void
       +usage (char *name)
       +{
       +        fprintf(stderr, "usage: %s <-ds> [-c color] <wid>\n", name);
       +        exit(1);
       +}
       +
       +static void
       +setborder (int bw, int color, xcb_window_t win)
       +{
       +        uint32_t values[1];
       +        int mask;
       +
       +        if (bw != -1) {
       +                values[0] = bw;
       +                mask = XCB_CONFIG_WINDOW_BORDER_WIDTH;
       +                xcb_configure_window(conn, win, mask, values);
       +
       +                xcb_flush(conn);
       +        }
       +
       +        if (color != -1) {
       +                values[0] = color;
       +                mask = XCB_CW_BORDER_PIXEL;
       +                xcb_change_window_attributes(conn, win, mask, values);
       +
       +                xcb_flush(conn);
       +        }
       +}
       +
       +int
       +main (int argc, char **argv)
       +{
       +        char *argv0;
       +        int color,bw;
       +        atexit(cleanup);
       +
       +        if (xcb_connection_has_error(conn = xcb_connect(NULL, NULL)))
       +                errx(1, "error connecting to X");
       +
       +        color = bw = -1;
       +
       +        if (argc < 2)
       +                usage(argv[0]);
       +
       +        ARGBEGIN {
       +                case 's':
       +                        bw = strtoul(ARGF(), NULL, 10);
       +                        break;
       +                case 'c':
       +                        color = strtoul(ARGF(), NULL, 16);
       +                        break;
       +                case 'h':
       +                        usage(argv0);
       +        } ARGEND
       +
       +        /* assume remaining arguments are windows */
       +        while (*argv)
       +                setborder(bw, color, strtoul(*argv++, NULL, 16));
       +
       +
       +        xcb_flush(conn);
       +
       +        return 0;
       +}