master ohmu/wmutils / src / core / mapw.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
12enum {
13	MAP     = 1 << 0,
14	UNMAP   = 1 << 1,
15	TOGGLE  = 1 << 2
16};
17
18static xcb_connection_t *conn;
19
20static void usage(char *);
21
22static void
23usage(char *name)
24{
25	fprintf(stderr, "usage: %s [-h] [-mut <wid> [wid..]]\n", name);
26	exit(1);
27}
28
29int
30main(int argc, char **argv)
31{
32	int mapflag = 0;
33	xcb_window_t w = 0;
34	char *argv0;
35
36	ARGBEGIN {
37		case 'm': mapflag = MAP;    break;
38		case 'u': mapflag = UNMAP;  break;
39		case 't': mapflag = TOGGLE; break;
40		default : usage(argv0);
41	} ARGEND;
42
43	if (argc < 1 || mapflag == 0)
44		usage(argv0);
45
46	init_xcb(&conn);
47
48	while (*argv) {
49		w = strtoul(*argv++, NULL, 16);
50
51		switch (mapflag) {
52		case MAP:
53			xcb_map_window(conn, w);
54			break;
55		case UNMAP:
56			xcb_unmap_window(conn, w);
57			break;
58		case TOGGLE:
59			if (mapped(conn, w))
60				xcb_unmap_window(conn, w);
61			else
62				xcb_map_window(conn, w);
63			break;
64		}
65	}
66	xcb_aux_sync(conn);
67
68	kill_xcb(&conn);
69
70	return 0;
71}