fixed several things, nearly feature complete 7fe717c2
Anselm R. Garbe · 2006-07-13 20:28 5 file(s) · +35 −29
TODO (added) +1 −0
1 +
- improve mouse based resizals with quadrant approach (then I think we have feature completeness already)
client.c +30 −25
52 52
	sel->w = sw - 2 * sel->border;
53 53
	sel->h = sh - 2 * sel->border;
54 54
	craise(sel);
55 -
	resize(sel);
55 +
	resize(sel, False);
56 56
	discard_events(EnterWindowMask);
57 57
}
58 58
100 100
	arrange = floating;
101 101
	for(c = clients; c; c = c->next) {
102 102
		if(c->tags[tsel])
103 -
			resize(c);
103 +
			resize(c, True);
104 104
		else
105 105
			ban_client(c);
106 106
	}
125 125
		if(c->tags[tsel])
126 126
			n++;
127 127
128 -
	h = (n > 2) ? sh / (n - 2) : sh;
128 +
	h = (n > 1) ? sh / (n - 1) : sh;
129 129
130 130
	for(i = 0, c = clients; c; c = c->next) {
131 131
		if(c->tags[tsel]) {
132 132
			if(n == 1) {
133 133
				c->x = sx;
134 134
				c->y = sy;
135 -
				c->w = sw;
136 -
				c->h = sh;
135 +
				c->w = sw - 2 * c->border;
136 +
				c->h = sh - 2 * c->border;
137 137
			}
138 -
			else if(i == 1) {
138 +
			else if(i == 0) {
139 139
				c->x = sx;
140 140
				c->y = sy;
141 -
				c->w = mw;
142 -
				c->h = sh;
141 +
				c->w = mw - 2 * c->border;
142 +
				c->h = sh - 2 * c->border;
143 143
			}
144 144
			else {
145 145
				c->x = sx + mw;
146 -
				c->y = sy + (i - 2) * h;
147 -
				c->w = w;
148 -
				c->h = h;
146 +
				c->y = sy + (i - 1) * h;
147 +
				c->w = w - 2 * c->border;
148 +
				c->h = h - 2 * c->border;
149 149
			}
150 -
			resize(c);
150 +
			resize(c, False);
151 151
			i++;
152 152
		}
153 153
		else
304 304
void
305 305
focus(Client *c)
306 306
{
307 -
	if(sel && sel != c) {
308 -
		XSetWindowBorder(dpy, sel->win, dc.bg);
309 -
		XMapWindow(dpy, sel->title);
310 -
		draw_client(sel);
311 -
	}
307 +
	Client *old = sel;
308 +
312 309
	sel = c;
313 -
	XUnmapWindow(dpy, c->title);
314 -
	XSetWindowBorder(dpy, c->win, dc.fg);
310 +
	if(old && old != c)
311 +
		draw_client(old);
315 312
	draw_client(c);
316 313
	XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
317 314
	XFlush(dpy);
463 460
464 461
465 462
void
466 -
resize(Client *c)
463 +
resize(Client *c, Bool inc)
467 464
{
468 465
	XConfigureEvent e;
469 466
470 -
	if(c->incw)
471 -
		c->w -= (c->w - c->basew) % c->incw;
472 -
	if(c->inch)
473 -
		c->h -= (c->h - c->baseh) % c->inch;
467 +
	if(inc) {
468 +
		if(c->incw)
469 +
			c->w -= (c->w - c->basew) % c->incw;
470 +
		if(c->inch)
471 +
			c->h -= (c->h - c->baseh) % c->inch;
472 +
	}
474 473
	if(c->minw && c->w < c->minw)
475 474
		c->w = c->minw;
476 475
	if(c->minh && c->h < c->minh)
554 553
draw_client(Client *c)
555 554
{
556 555
	int i;
557 -
	if(c == sel)
556 +
	if(c == sel) {
557 +
		XUnmapWindow(dpy, c->title);
558 +
		XSetWindowBorder(dpy, c->win, dc.fg);
558 559
		return;
560 +
	}
561 +
562 +
	XSetWindowBorder(dpy, c->win, dc.bg);
563 +
	XMapWindow(dpy, c->title);
559 564
560 565
	dc.x = dc.y = 0;
561 566
	dc.h = c->th;
dev.c +2 −2
104 104
			c->h = abs(ocy - ev.xmotion.y);
105 105
			c->x = (ocx <= ev.xmotion.x) ? ocx : ocx - c->w;
106 106
			c->y = (ocy <= ev.xmotion.y) ? ocy : ocy - c->h;
107 -
			resize(c);
107 +
			resize(c, True);
108 108
			break;
109 109
		case ButtonRelease:
110 110
			XUngrabPointer(dpy, CurrentTime);
138 138
			XFlush(dpy);
139 139
			c->x = ocx + (ev.xmotion.x - x1);
140 140
			c->y = ocy + (ev.xmotion.y - y1);
141 -
			resize(c);
141 +
			resize(c, False);
142 142
			break;
143 143
		case ButtonRelease:
144 144
			XUngrabPointer(dpy, CurrentTime);
dwm.h +1 −1
106 106
extern void focus(Client *c);
107 107
extern void update_name(Client *c);
108 108
extern void draw_client(Client *c);
109 -
extern void resize(Client *c);
109 +
extern void resize(Client *c, Bool inc);
110 110
extern void update_size(Client *c);
111 111
extern Client *gettitle(Window w);
112 112
extern void craise(Client *c);
main.c +1 −1
168 168
cleanup()
169 169
{
170 170
	while(sel) {
171 -
		resize(sel);
171 +
		resize(sel, True);
172 172
		unmanage(sel);
173 173
	}
174 174
	XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);