made code more readable a05beb65
Anselm R. Garbe · 2006-07-11 22:49 5 file(s) · +67 −70
client.c +30 −20
44 44
}
45 45
46 46
void
47 +
update_size(Client *c)
48 +
{
49 +
	XSizeHints size;
50 +
	long msize;
51 +
	if(!XGetWMNormalHints(dpy, c->win, &size, &msize) || !size.flags)
52 +
		size.flags = PSize;
53 +
	c->flags = size.flags;
54 +
	c->basew = size.base_width;
55 +
	c->baseh = size.base_height;
56 +
	c->incw = size.width_inc;
57 +
	c->inch = size.height_inc;
58 +
	c->maxw = size.max_width;
59 +
	c->maxh = size.max_height;
60 +
	c->minw = size.min_width;
61 +
	c->minh = size.min_height;
62 +
}
63 +
64 +
void
47 65
focus(Client *c)
48 66
{
49 67
	Client **l;
62 80
{
63 81
	Client *c, **l;
64 82
	XSetWindowAttributes twa;
65 -
	long msize;
66 83
67 84
	c = emallocz(sizeof(Client));
68 85
	c->win = w;
69 -
	c->r[RFloat].x = wa->x;
70 -
	c->r[RFloat].y = wa->y;
71 -
	c->r[RFloat].width = wa->width;
72 -
	c->r[RFloat].height = wa->height;
86 +
	c->x = wa->x;
87 +
	c->y = wa->y;
88 +
	c->w = wa->width;
89 +
	c->h = wa->height;
90 +
	update_size(c);
73 91
	XSetWindowBorderWidth(dpy, c->win, 1);
74 92
	XSelectInput(dpy, c->win, CLIENT_MASK);
75 93
	XGetTransientForHint(dpy, c->win, &c->trans);
76 -
	if(!XGetWMNormalHints(dpy, c->win, &c->size, &msize) || !c->size.flags)
77 -
		c->size.flags = PSize;
78 -
	c->fixedsize =
79 -
		(c->size.flags & PMinSize && c->size.flags & PMaxSize
80 -
		 && c->size.min_width == c->size.max_width
81 -
		 && c->size.min_height == c->size.max_height);
82 94
	update_name(c);
83 95
	twa.override_redirect = 1;
84 96
	twa.background_pixmap = ParentRelative;
85 97
	twa.event_mask = ExposureMask;
86 98
87 -
	c->title = XCreateWindow(dpy, root, c->r[RFloat].x, c->r[RFloat].y,
88 -
			c->r[RFloat].width, barrect.height, 0,
89 -
			DefaultDepth(dpy, screen), CopyFromParent,
99 +
	c->title = XCreateWindow(dpy, root, c->x, c->y, c->w, barrect.height,
100 +
			0, DefaultDepth(dpy, screen), CopyFromParent,
90 101
			DefaultVisual(dpy, screen),
91 102
			CWOverrideRedirect | CWBackPixmap | CWEventMask, &twa);
92 103
110 121
{
111 122
	XConfigureEvent e;
112 123
113 -
	XMoveResizeWindow(dpy, c->win, c->r[RFloat].x, c->r[RFloat].y,
114 -
			c->r[RFloat].width, c->r[RFloat].height);
124 +
	XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h);
115 125
	e.type = ConfigureNotify;
116 126
	e.event = c->win;
117 127
	e.window = c->win;
118 -
	e.x = c->r[RFloat].x;
119 -
	e.y = c->r[RFloat].y;
120 -
	e.width = c->r[RFloat].width;
121 -
	e.height = c->r[RFloat].height;
128 +
	e.x = c->x;
129 +
	e.y = c->y;
130 +
	e.width = c->w;
131 +
	e.height = c->h;
122 132
	e.border_width = 0;
123 133
	e.above = None;
124 134
	e.override_redirect = False;
event.c +6 −14
79 79
	ev->value_mask &= ~CWSibling;
80 80
	if((c = getclient(ev->window))) {
81 81
		if(ev->value_mask & CWX)
82 -
			c->r[RFloat].x = ev->x;
82 +
			c->x = ev->x;
83 83
		if(ev->value_mask & CWY)
84 -
			c->r[RFloat].y = ev->y;
84 +
			c->y = ev->y;
85 85
		if(ev->value_mask & CWWidth)
86 -
			c->r[RFloat].width = ev->width;
86 +
			c->w = ev->width;
87 87
		if(ev->value_mask & CWHeight)
88 -
			c->r[RFloat].height = ev->height;
88 +
			c->h = ev->height;
89 89
	}
90 90
91 91
	wc.x = ev->x;
179 179
propertynotify(XEvent *e)
180 180
{
181 181
	XPropertyEvent *ev = &e->xproperty;
182 -
	long msize;
183 182
	Client *c;
184 183
185 184
	if(ev->state == PropertyDelete)
195 194
			case XA_WM_TRANSIENT_FOR:
196 195
				XGetTransientForHint(dpy, c->win, &c->trans);
197 196
				break;
197 +
				update_size(c);
198 198
			case XA_WM_NORMAL_HINTS:
199 -
				if(!XGetWMNormalHints(dpy, c->win, &c->size, &msize)
200 -
						|| !c->size.flags)
201 -
					c->size.flags = PSize;
202 -
				if(c->size.flags & PMinSize && c->size.flags & PMaxSize
203 -
						&& c->size.min_width == c->size.max_width
204 -
						&& c->size.min_height == c->size.max_height)
205 -
					c->fixedsize = True;
206 -
				else
207 -
					c->fixedsize = False;
199 +
				update_size(c);
208 200
				break;
209 201
		}
210 202
		if(ev->atom == XA_WM_NAME || ev->atom == net_atom[NetWMName]) {
kb.c +1 −1
8 8
#include <X11/keysym.h>
9 9
10 10
static const char *term[] = { 
11 -
	"xterm", "-u8", "-bg", "black", "-fg", "white", "-fn",
11 +
	"xterm", "-bg", "black", "-fg", "white", "-fn",
12 12
	"-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*", 0 
13 13
};
14 14
mouse.c +25 −27
16 16
static void
17 17
mmatch(Client *c, int x1, int y1, int x2, int y2)
18 18
{
19 -
	c->r[RFloat].width = abs(x1 - x2);
20 -
	c->r[RFloat].height = abs(y1 - y2);
21 -
	c->r[RFloat].width -=
22 -
		(c->r[RFloat].width - c->size.base_width) % c->size.width_inc;
23 -
	c->r[RFloat].height -=
24 -
		(c->r[RFloat].height - c->size.base_height) % c->size.height_inc;
25 -
	if(c->size.min_width && c->r[RFloat].width < c->size.min_width)
26 -
		c->r[RFloat].width = c->size.min_width;
27 -
	if(c->size.min_height && c->r[RFloat].height < c->size.min_height)
28 -
		c->r[RFloat].height = c->size.min_height;
29 -
	if(c->size.max_width && c->r[RFloat].width > c->size.max_width)
30 -
		c->r[RFloat].width = c->size.max_width;
31 -
	if(c->size.max_height && c->r[RFloat].height > c->size.max_height)
32 -
		c->r[RFloat].height = c->size.max_height;
33 -
	c->r[RFloat].x = (x1 <= x2) ? x1 : x1 - c->r[RFloat].width;
34 -
	c->r[RFloat].y = (y1 <= y2) ? y1 : y1 - c->r[RFloat].height;
19 +
	c->w = abs(x1 - x2);
20 +
	c->h = abs(y1 - y2);
21 +
	if(c->incw)
22 +
		c->w -= (c->w - c->basew) % c->incw;
23 +
	if(c->inch)
24 +
		c->h -= (c->h - c->baseh) % c->inch;
25 +
	if(c->minw && c->w < c->minw)
26 +
		c->w = c->minw;
27 +
	if(c->minh && c->h < c->minh)
28 +
		c->h = c->minh;
29 +
	if(c->maxw && c->w > c->maxw)
30 +
		c->w = c->maxw;
31 +
	if(c->maxh && c->h > c->maxh)
32 +
		c->h = c->maxh;
33 +
	c->x = (x1 <= x2) ? x1 : x1 - c->w;
34 +
	c->y = (y1 <= y2) ? y1 : y1 - c->h;
35 35
}
36 36
37 37
void
40 40
	XEvent ev;
41 41
	int old_cx, old_cy;
42 42
43 -
	old_cx = c->r[RFloat].x;
44 -
	old_cy = c->r[RFloat].y;
43 +
	old_cx = c->x;
44 +
	old_cy = c->y;
45 45
	if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync,
46 46
				None, cursor[CurResize], CurrentTime) != GrabSuccess)
47 47
		return;
48 48
	XGrabServer(dpy);
49 -
	XWarpPointer(dpy, None, c->win, 0, 0, 0, 0,
50 -
			c->r[RFloat].width, c->r[RFloat].height);
49 +
	XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w, c->h);
51 50
	for(;;) {
52 51
		XMaskEvent(dpy, MouseMask, &ev);
53 52
		switch(ev.type) {
55 54
		case MotionNotify:
56 55
			XUngrabServer(dpy);
57 56
			mmatch(c, old_cx, old_cy, ev.xmotion.x, ev.xmotion.y);
58 -
			XResizeWindow(dpy, c->win, c->r[RFloat].width, c->r[RFloat].height);
57 +
			XResizeWindow(dpy, c->win, c->w, c->h);
59 58
			XGrabServer(dpy);
60 59
			break;
61 60
		case ButtonRelease:
75 74
	unsigned int dui;
76 75
	Window dummy;
77 76
78 -
	old_cx = c->r[RFloat].x;
79 -
	old_cy = c->r[RFloat].y;
77 +
	old_cx = c->x;
78 +
	old_cy = c->y;
80 79
	if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync,
81 80
				None, cursor[CurMove], CurrentTime) != GrabSuccess)
82 81
		return;
88 87
		default: break;
89 88
		case MotionNotify:
90 89
			XUngrabServer(dpy);
91 -
			c->r[RFloat].x = old_cx + (ev.xmotion.x - x1);
92 -
			c->r[RFloat].y = old_cy + (ev.xmotion.y - y1);
93 -
			XMoveResizeWindow(dpy, c->win, c->r[RFloat].x, c->r[RFloat].y,
94 -
					c->r[RFloat].width, c->r[RFloat].height);
90 +
			c->x = old_cx + (ev.xmotion.x - x1);
91 +
			c->y = old_cy + (ev.xmotion.y - y1);
92 +
			XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h);
95 93
			XGrabServer(dpy);
96 94
			break;
97 95
		case ButtonRelease:
wm.h +5 −8
21 21
/* cursor */
22 22
enum { CurNormal, CurResize, CurMove, CurInput, CurLast };
23 23
24 -
/* rects */
25 -
enum { RFloat, RGrid, RLast };
26 -
27 24
struct Client {
28 -
	char name[256];
29 -
	char tag[256];
25 +
	char name[256], tag[256];
30 26
	int proto;
31 -
	Bool fixedsize;
27 +
	int x, y, w, h;
28 +
	int basew, baseh, incw, inch, maxw, maxh, minw, minh;
29 +
	long flags; 
32 30
	Window win;
33 31
	Window trans;
34 32
	Window title;
35 -
	XSizeHints size;
36 -
	XRectangle r[RLast];
37 33
	Client *next;
38 34
	Client *snext;
39 35
};
75 71
extern void update_name(Client *c);
76 72
extern void draw_client(Client *c);
77 73
extern void resize(Client *c);
74 +
extern void update_size(Client *c);
78 75
79 76
/* event.c */
80 77
extern unsigned int discard_events(long even_mask);