master ohmu/wmutils / src / core / killw.c
ohmu  ·  2026-07-25
 1/* See LICENSE file for copyright and license details. */
 2
 3#include <stdio.h>
 4#include <stdlib.h>
 5#include <err.h>
 6#include <xcb/xcb.h>
 7#include <xcb/xcb_aux.h>
 8
 9#include "arg.h"
10#include "util.h"
11
12static xcb_connection_t *conn;
13
14static void usage(char *);
15
16static void
17usage (char *name)
18{
19	fprintf(stderr, "usage: %s [-p] <wid> [wid...]\n", name);
20	exit(1);
21}
22
23int
24main(int argc, char **argv)
25{
26	int parent = 0;
27	char *argv0;
28
29	if (argc < 2)
30		usage(argv[0]);
31
32	ARGBEGIN{
33	case 'p': parent=1; break;
34	default: usage(argv0);
35	}ARGEND;
36
37	init_xcb(&conn);
38
39	/* assume remaining arguments are windows */
40	while (*argv) {
41		if (parent) {
42			/* kills the client whose WID belongs to */
43			xcb_kill_client(conn, strtoul(*argv++, NULL, 16));
44		} else {
45			/* destroy the given window and all its children */
46			xcb_destroy_window(conn, strtoul(*argv++, NULL, 16));
47		}
48	}
49
50	xcb_aux_sync(conn);
51	kill_xcb(&conn);
52
53	return 0;
54}