93 focus(c); |
93 focus(c); |
94 } |
94 } |
95 restack(); |
95 restack(); |
96 } |
96 } |
97 |
97 |
98 /* This algorithm is based on a (M)aster area and a (S)tacking area. |
|
99 * It supports following arrangements: |
|
100 * SSMMM MMMMM MMMSS |
|
101 * SSMMM SSSSS MMMSS |
|
102 */ |
|
103 void |
98 void |
104 dotile(Arg *arg) { |
99 dotile(Arg *arg) { |
105 unsigned int i, n, md, stackw, stackh, th; |
100 unsigned int i, n, mpx, stackw, stackh, th; |
106 Client *c; |
101 Client *c; |
107 |
102 |
108 for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next)) |
103 for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next)) |
109 n++; |
104 n++; |
110 |
105 |
111 md = (sw * master) / 1000; |
106 mpx = (sw * master) / 1000; |
112 stackw = sw - md; |
107 stackw = sw - mpx; |
113 stackh = sh - bh; |
108 stackh = sh - bh; |
114 |
109 |
115 th = stackh; |
110 th = stackh; |
116 if(n > 1) |
111 if(n > 1) |
117 th /= (n - 1); |
112 th /= (n - 1); |
118 |
113 |
119 for(i = 0, c = clients; c; c = c->next) { |
114 for(i = 0, c = clients; c; c = c->next, i++) |
120 if(isvisible(c)) { |
115 if(isvisible(c)) { |
121 if(c->isfloat) { |
116 if(c->isfloat) { |
122 resize(c, True, TopLeft); |
117 resize(c, True, TopLeft); |
123 continue; |
118 continue; |
124 } |
119 } |
128 if(n == 1) { /* only 1 window */ |
123 if(n == 1) { /* only 1 window */ |
129 c->w = sw - 2 * BORDERPX; |
124 c->w = sw - 2 * BORDERPX; |
130 c->h = sh - 2 * BORDERPX - bh; |
125 c->h = sh - 2 * BORDERPX - bh; |
131 } |
126 } |
132 else if(i == 0) { /* master window */ |
127 else if(i == 0) { /* master window */ |
133 c->w = md - 2 * BORDERPX; |
128 c->w = mpx - 2 * BORDERPX; |
134 c->h = sh - bh - 2 * BORDERPX; |
129 c->h = sh - bh - 2 * BORDERPX; |
135 } |
130 } |
136 else { /* tile window */ |
131 else { /* tile window */ |
137 c->x += md; |
132 c->x += mpx; |
|
133 c->w = stackw - 2 * BORDERPX; |
138 if(th > bh) { |
134 if(th > bh) { |
139 c->y = sy + (i - 1) * th + bh; |
135 c->y = sy + (i - 1) * th + bh; |
140 if(i + 1 == n) |
136 if(i + 1 == n) |
141 c->h = sh - c->y - 2 * BORDERPX; |
137 c->h = sh - c->y - 2 * BORDERPX; |
142 c->w = stackw - 2 * BORDERPX; |
138 else |
143 c->h = th - 2 * BORDERPX; |
139 c->h = th - 2 * BORDERPX; |
144 } |
140 } |
145 else { /* fallback if th < bh */ |
141 else /* fallback if th < bh */ |
146 c->w = stackw - 2 * BORDERPX; |
|
147 c->h = stackh - 2 * BORDERPX; |
142 c->h = stackh - 2 * BORDERPX; |
148 } |
|
149 } |
143 } |
150 resize(c, False, TopLeft); |
144 resize(c, False, TopLeft); |
151 i++; |
|
152 } |
145 } |
153 else |
146 else |
154 ban(c); |
147 ban(c); |
155 } |
|
156 if(!sel || !isvisible(sel)) { |
148 if(!sel || !isvisible(sel)) { |
157 for(c = stack; c && !isvisible(c); c = c->snext); |
149 for(c = stack; c && !isvisible(c); c = c->snext); |
158 focus(c); |
150 focus(c); |
159 } |
151 } |
160 restack(); |
152 restack(); |