about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAnselm R Garbe <garbeam@gmail.com>2008-03-13 13:59:40 +0000
committerAnselm R Garbe <garbeam@gmail.com>2008-03-13 13:59:40 +0000
commit831428b00cf0bb6c7830c2178c8d13213f29b2db (patch)
treea6abf32121b64f42247053a160162ec89ad83bf2
parent69439715c09ac36fe94f3cb7b1ed87149fc5ecff (diff)
downloaddwm-831428b00cf0bb6c7830c2178c8d13213f29b2db.tar.gz
some polishing in tileh/tilev
-rw-r--r--dwm.c102
1 files changed, 50 insertions, 52 deletions
diff --git a/dwm.c b/dwm.c
index 0071379..0894c65 100644
--- a/dwm.c
+++ b/dwm.c
@@ -117,6 +117,7 @@ void cleanup(void);
 void configure(Client *c);
 void configurenotify(XEvent *e);
 void configurerequest(XEvent *e);
+unsigned int counttiled(void);
 void destroynotify(XEvent *e);
 void detach(Client *c);
 void detachstack(Client *c);
@@ -170,7 +171,8 @@ unsigned int textnw(const char *text, unsigned int len);
 unsigned int textw(const char *text);
 void tileh(void);
 void tilehstack(unsigned int n);
-unsigned int tilemaster(void);
+Client *tilemaster(unsigned int n);
+void tileresize(Client *c, int x, int y, int w, int h);
 void tilev(void);
 void tilevstack(unsigned int n);
 void togglefloating(const char *arg);
@@ -458,6 +460,15 @@ configurerequest(XEvent *e) {
 	XSync(dpy, False);
 }
 
+unsigned int
+counttiled(void) {
+	unsigned int n;
+	Client *c;
+
+	for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next), n++);
+	return n;
+}
+
 void
 destroynotify(XEvent *e) {
 	Client *c;
@@ -1579,89 +1590,76 @@ textw(const char *text) {
 }
 
 void
-tileresize(Client *c, int x, int y, int w, int h) {
-	resize(c, x, y, w, h, RESIZEHINTS);
-	if((RESIZEHINTS) && ((c->h < bh) || (c->h > h) || (c->w < bh) || (c->w > w)))
-		/* client doesn't accept size constraints */
-		resize(c, x, y, w, h, False);
-}
-
-void
 tileh(void) {
-	tilehstack(tilemaster());
-}
-
-void
-tilehstack(unsigned int n) {
-	int i, x, w;
+	int x, w;
+	unsigned int i, n = counttiled();
 	Client *c;
 
 	if(n == 0)
 		return;
+	c = tilemaster(n);
+	if(--n == 0)
+		return;
 
 	x = tx;
 	w = tw / n;
 	if(w < bh)
 		w = tw;
 
-	for(i = 0, c = nexttiled(clients); c; c = nexttiled(c->next), i++)
-		if(i > 0) {
-			if(i > 1 && i == n) /* remainder */
-				tileresize(c, x, ty, (tx + tw) - x - 2 * c->border,
-				              th - 2 * c->border);
-			else
-				tileresize(c, x, ty, w - 2 * c->border,
-				              th - 2 * c->border);
-			if(w != tw)
-				x = c->x + c->w + 2 * c->border;
-		}
+	for(i = 0, c = nexttiled(c->next); c; c = nexttiled(c->next), i++) {
+		if(i + 1 == n) /* remainder */
+			tileresize(c, x, ty, (tx + tw) - x - 2 * c->border, th - 2 * c->border);
+		else
+			tileresize(c, x, ty, w - 2 * c->border, th - 2 * c->border);
+		if(w != tw)
+			x = c->x + c->w + 2 * c->border;
+	}
 }
 
-unsigned int
-tilemaster(void) {
-	unsigned int n;
-	Client *c, *mc;
+Client *
+tilemaster(unsigned int n) {
+	Client *c = nexttiled(clients);
 
-	for(n = 0, mc = c = nexttiled(clients); c; c = nexttiled(c->next))
-		n++;
-	if(n == 0)
-		return 0;
 	if(n == 1)
-		tileresize(mc, mox, moy, mow - 2 * mc->border, moh - 2 * mc->border);
+		tileresize(c, mox, moy, mow - 2 * c->border, moh - 2 * c->border);
 	else
-		tileresize(mc, mx, my, mw - 2 * mc->border, mh - 2 * mc->border);
-	return n - 1;
+		tileresize(c, mx, my, mw - 2 * c->border, mh - 2 * c->border);
+	return c;
 }
 
 void
-tilev(void) {
-	tilevstack(tilemaster());
+tileresize(Client *c, int x, int y, int w, int h) {
+	resize(c, x, y, w, h, RESIZEHINTS);
+	if((RESIZEHINTS) && ((c->h < bh) || (c->h > h) || (c->w < bh) || (c->w > w)))
+		/* client doesn't accept size constraints */
+		resize(c, x, y, w, h, False);
 }
 
 void
-tilevstack(unsigned int n) {
-	int i, y, h;
+tilev(void) {
+	int y, h;
+	unsigned int i, n = counttiled();
 	Client *c;
 
 	if(n == 0)
 		return;
+	c = tilemaster(n);
+	if(--n == 0)
+		return;
 
 	y = ty;
 	h = th / n;
 	if(h < bh)
 		h = th;
 
-	for(i = 0, c = nexttiled(clients); c; c = nexttiled(c->next), i++)
-		if(i > 0) {
-			if(i > 1 && i == n) /* remainder */
-				tileresize(c, tx, y, tw - 2 * c->border,
-				              (ty + th) - y - 2 * c->border);
-			else
-				tileresize(c, tx, y, tw - 2 * c->border,
-				              h - 2 * c->border);
-			if(h != th)
-				y = c->y + c->h + 2 * c->border;
-		}
+	for(i = 0, c = nexttiled(c->next); c; c = nexttiled(c->next), i++) {
+		if(i + 1 == n) /* remainder */
+			tileresize(c, tx, y, tw - 2 * c->border, (ty + th) - y - 2 * c->border);
+		else
+			tileresize(c, tx, y, tw - 2 * c->border, h - 2 * c->border);
+		if(h != th)
+			y = c->y + c->h + 2 * c->border;
+	}
 }
 
 void
/a> ^
bfbc8edc ^

9cf78e59 ^





a2726b6a ^
bfbc8edc ^

9cf78e59 ^





a2726b6a ^
bfbc8edc ^

9cf78e59 ^







a2726b6a ^
bfbc8edc ^

9cf78e59 ^







a2726b6a ^
bfbc8edc ^

9cf78e59 ^





a2726b6a ^
bfbc8edc ^

9cf78e59 ^











a2726b6a ^





bfbc8edc ^

9cf78e59 ^











a2726b6a ^





0fb27dc4 ^
a2726b6a ^



0fb27dc4 ^
4711fc62 ^



3370418d ^
62cbad1c ^

3370418d ^
4711fc62 ^

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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191