-
Notifications
You must be signed in to change notification settings - Fork 2
/
util.c
58 lines (58 loc) · 1.46 KB
/
util.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
// jbwm - Minimalist Window Manager for X
// Copyright 2008-2019, Alisa Bedard <alisabedard@gmail.com>
// Copyright 1999-2015, Ciaran Anscomb <evilwm@6809.org.uk>
// See README for license and other details.
#include "util.h"
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
void jbwm_error(const char * msg)
{
perror(msg);
exit(1);
}
jbwm_pixel_t jbwm_get_pixel(Display * dpy,
const uint8_t screen, const char * name)
{
jbwm_pixel_t r;
if (name) { // sanitize input to avoid segfault
XColor c, d;
XAllocNamedColor(dpy, DefaultColormap(dpy, screen),
name, &c, &d);
r = c.pixel;
} else
r = 0;
return r;
}
void *jbwm_get_property(Display * dpy, Window w,
Atom property, uint16_t * num_items)
{
unsigned char * value;
long unsigned int n;
XGetWindowProperty(dpy, w, property, 0, 1024, false,
AnyPropertyType, &property, &(int){0}, &n,
&(unsigned long){0}, &value);
if (property == None) {
// Requested property not found
XFree(value);
value = NULL;
}
*num_items = n;
return value;
}
void jbwm_grab_button(Display * d, const Window w,
const unsigned int mask)
{
XGrabButton(d, AnyButton, mask, w, false,
ButtonPressMask | ButtonReleaseMask, GrabModeAsync,
GrabModeSync, None, None);
}
#ifdef DEBUG
void jbwm_print_atom(Display * d, const Atom a, const char * src,
const uint16_t line)
{
char *an = XGetAtomName(d, a);
fprintf(stderr, "\t%s:%d %s(%lu)\n", src, line, an, a);
XFree(an);
}
#endif//DEBUG