118 if(i < 0 || i >= nlayouts) |
99 if(i < 0 || i >= nlayouts) |
119 return; |
100 return; |
120 lt = &layout[i]; |
101 lt = &layout[i]; |
121 } |
102 } |
122 if(sel) |
103 if(sel) |
123 lt->arrange(NULL); |
104 lt->arrange(); |
124 else |
105 else |
125 drawstatus(); |
106 drawstatus(); |
126 } |
|
127 |
|
128 void |
|
129 tile(const char *arg) { |
|
130 static double master = MASTER; |
|
131 double delta; |
|
132 unsigned int i, n, nx, ny, nw, nh, mw, th; |
|
133 Client *c; |
|
134 |
|
135 if(lt->arrange != tile) |
|
136 return; |
|
137 |
|
138 /* arg handling, manipulate master */ |
|
139 if(arg && (1 == sscanf(arg, "%lf", &delta))) { |
|
140 if(delta + master > 0.1 && delta + master < 0.9) |
|
141 master += delta; |
|
142 } |
|
143 |
|
144 for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next)) |
|
145 n++; |
|
146 |
|
147 /* window geoms */ |
|
148 mw = (n == 1) ? waw : master * waw; |
|
149 th = (n > 1) ? wah / (n - 1) : 0; |
|
150 if(n > 1 && th < bh) |
|
151 th = wah; |
|
152 |
|
153 nx = wax; |
|
154 ny = way; |
|
155 for(i = 0, c = clients; c; c = c->next) |
|
156 if(isvisible(c)) { |
|
157 unban(c); |
|
158 if(c->isfloating) |
|
159 continue; |
|
160 c->ismax = False; |
|
161 if(i == 0) { /* master */ |
|
162 nw = mw - 2 * c->border; |
|
163 nh = wah - 2 * c->border; |
|
164 } |
|
165 else { /* tile window */ |
|
166 if(i == 1) { |
|
167 ny = way; |
|
168 nx += mw; |
|
169 } |
|
170 nw = waw - mw - 2 * c->border; |
|
171 if(i + 1 == n) /* remainder */ |
|
172 nh = (way + wah) - ny - 2 * c->border; |
|
173 else |
|
174 nh = th - 2 * c->border; |
|
175 } |
|
176 resize(c, nx, ny, nw, nh, False); |
|
177 if(n > 1 && th != wah) |
|
178 ny += nh + 2 * c->border; |
|
179 i++; |
|
180 } |
|
181 else |
|
182 ban(c); |
|
183 focus(NULL); |
|
184 restack(); |
|
185 } |
107 } |
186 |
108 |
187 void |
109 void |
188 togglebar(const char *arg) { |
110 togglebar(const char *arg) { |
189 if(bpos == BarOff) |
111 if(bpos == BarOff) |
190 bpos = (BARPOS == BarOff) ? BarTop : BARPOS; |
112 bpos = (BARPOS == BarOff) ? BarTop : BARPOS; |
191 else |
113 else |
192 bpos = BarOff; |
114 bpos = BarOff; |
193 updatebarpos(); |
115 updatebarpos(); |
194 lt->arrange(NULL); |
116 lt->arrange(); |
195 } |
117 } |
196 |
|
197 void |
|
198 togglemax(const char *arg) { |
|
199 XEvent ev; |
|
200 |
|
201 if(!sel || (lt->arrange != floating && !sel->isfloating) || sel->isfixed) |
|
202 return; |
|
203 if((sel->ismax = !sel->ismax)) { |
|
204 sel->rx = sel->x; |
|
205 sel->ry = sel->y; |
|
206 sel->rw = sel->w; |
|
207 sel->rh = sel->h; |
|
208 resize(sel, wax, way, waw - 2 * sel->border, wah - 2 * sel->border, True); |
|
209 } |
|
210 else |
|
211 resize(sel, sel->rx, sel->ry, sel->rw, sel->rh, True); |
|
212 drawstatus(); |
|
213 while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); |
|
214 } |
|
215 |
|
216 void |
|
217 zoom(const char *arg) { |
|
218 Client *c; |
|
219 |
|
220 if(!sel || lt->arrange == floating || sel->isfloating) |
|
221 return; |
|
222 if((c = sel) == nexttiled(clients)) |
|
223 if(!(c = nexttiled(c->next))) |
|
224 return; |
|
225 detach(c); |
|
226 attach(c); |
|
227 focus(c); |
|
228 lt->arrange(NULL); |
|
229 } |
|