comparison view.c @ 531:96563762b4ad

yet another small fix and simplification of dotile
author Anselm R. Garbe <arg@10kloc.org>
date Fri, 06 Oct 2006 11:37:12 +0200
parents 451f19d48845
children 651f2c868b31
comparison
equal deleted inserted replaced
530:451f19d48845 531:96563762b4ad
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();