prelim of dotile()
8fa47ac6
2 file(s) · +68 −37
| 40 | 40 | #define MOUSEMASK (BUTTONMASK | PointerMotionMask) |
|
| 41 | 41 | /* other stuff used in different places */ |
|
| 42 | 42 | #define BORDERPX 1 |
|
| 43 | + | #define MINW 100 |
|
| 43 | 44 | #define PROTODELWIN 1 |
|
| 44 | 45 | ||
| 45 | 46 | enum { NetSupported, NetWMName, NetLast }; /* EWMH atoms */ |
| 99 | 99 | ||
| 100 | 100 | /* This algorithm is based on a (M)aster area and a (S)tacking area. |
|
| 101 | 101 | * It supports following arrangements: |
|
| 102 | - | * MMMS MMMM SMMM |
|
| 103 | - | * MMMS MMMM SMMM |
|
| 104 | - | * MMMS SSSS SMMM |
|
| 102 | + | * SSMMM MMMMM MMMSS |
|
| 103 | + | * SSMMM SSSSS MMMSS |
|
| 105 | 104 | */ |
|
| 106 | 105 | void |
|
| 107 | 106 | dotile(Arg *arg) { |
|
| 108 | - | int h, i, n, w; |
|
| 107 | + | int i, n, stackw, stackh, tw, th; |
|
| 109 | 108 | Client *c; |
|
| 110 | 109 | ||
| 111 | 110 | for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next)) |
|
| 112 | 111 | n++; |
|
| 113 | 112 | ||
| 114 | - | if(isvertical) { |
|
| 115 | - | if(stackpos == StackBottom) { |
|
| 116 | - | w = sw; |
|
| 117 | - | if(n > 1) |
|
| 118 | - | h = (sh - bh) / (n - 1); |
|
| 119 | - | else |
|
| 120 | - | h = sh - bh; |
|
| 121 | - | } |
|
| 122 | - | else { |
|
| 123 | - | w = sw - master; |
|
| 124 | - | if(n > 1) |
|
| 125 | - | h = (sh - bh) / (n - 1); |
|
| 126 | - | else |
|
| 127 | - | h = sh - bh; |
|
| 128 | - | } |
|
| 113 | + | if(stackpos == StackBottom) { |
|
| 114 | + | stackw = sw; |
|
| 115 | + | stackh = sh - bh - master; |
|
| 129 | 116 | } |
|
| 130 | - | else { /* horizontal stack */ |
|
| 117 | + | else { |
|
| 118 | + | stackw = sw - master; |
|
| 119 | + | stackh = sh - bh; |
|
| 120 | + | } |
|
| 131 | 121 | ||
| 122 | + | if(isvertical) { |
|
| 123 | + | tw = stackw; |
|
| 124 | + | if(n > 1) |
|
| 125 | + | th = stackh / (n - 1); |
|
| 126 | + | else |
|
| 127 | + | th = stackh; |
|
| 128 | + | } |
|
| 129 | + | else { |
|
| 130 | + | th = stackh; |
|
| 131 | + | if(n > 1) |
|
| 132 | + | tw = stackw / (n - 1); |
|
| 133 | + | else |
|
| 134 | + | tw = stackw; |
|
| 132 | 135 | } |
|
| 133 | 136 | ||
| 134 | 137 | for(i = 0, c = clients; c; c = c->next) { |
|
| 138 | 141 | continue; |
|
| 139 | 142 | } |
|
| 140 | 143 | c->ismax = False; |
|
| 141 | - | if(n == 1) { |
|
| 144 | + | if(n == 1) { /* only 1 window */ |
|
| 142 | 145 | c->x = sx; |
|
| 143 | 146 | c->y = sy + bh; |
|
| 144 | 147 | c->w = sw - 2 * BORDERPX; |
|
| 145 | 148 | c->h = sh - 2 * BORDERPX - bh; |
|
| 146 | 149 | } |
|
| 147 | - | else if(i == 0) { |
|
| 150 | + | else if(i == 0) { /* master window */ |
|
| 148 | 151 | c->x = sx; |
|
| 152 | + | if(stackpos == StackLeft) |
|
| 153 | + | c->x += master; |
|
| 149 | 154 | c->y = sy + bh; |
|
| 150 | - | c->w = master - 2 * BORDERPX; |
|
| 151 | - | c->h = sh - 2 * BORDERPX - bh; |
|
| 155 | + | if(isvertical) { |
|
| 156 | + | c->w = master - 2 * BORDERPX; |
|
| 157 | + | c->h = sh - 2 * BORDERPX - bh; |
|
| 158 | + | } |
|
| 159 | + | else { |
|
| 160 | + | c->w = sw; |
|
| 161 | + | c->h = master - 2 * BORDERPX; |
|
| 162 | + | } |
|
| 152 | 163 | } |
|
| 153 | - | else if(h > bh) { |
|
| 154 | - | c->x = sx + master; |
|
| 155 | - | c->y = sy + (i - 1) * h + bh; |
|
| 156 | - | c->w = w - 2 * BORDERPX; |
|
| 157 | - | if(i + 1 == n) |
|
| 158 | - | c->h = sh - c->y - 2 * BORDERPX; |
|
| 164 | + | else if((isvertical && th > bh) || (!isvertical && tw > MINW)) { |
|
| 165 | + | /* tile window */ |
|
| 166 | + | c->x = sx; |
|
| 167 | + | if(isvertical) |
|
| 168 | + | c->y = sy + (i - 1) * th + bh; |
|
| 159 | 169 | else |
|
| 160 | - | c->h = h - 2 * BORDERPX; |
|
| 170 | + | c->y = sy + bh; |
|
| 171 | + | if(stackpos == StackRight) |
|
| 172 | + | c->x += master; |
|
| 173 | + | else if(stackpos == StackBottom) |
|
| 174 | + | c->y += master; |
|
| 175 | + | c->w = tw - 2 * BORDERPX; |
|
| 176 | + | c->h = th - 2 * BORDERPX; |
|
| 177 | + | if(i + 1 == n) { /* fixes for last tile to take up rest space */ |
|
| 178 | + | if(isvertical) |
|
| 179 | + | c->h = sh - c->y - 2 * BORDERPX; |
|
| 180 | + | else { |
|
| 181 | + | if(stackpos == StackLeft) |
|
| 182 | + | c->w = master - c->x - 2 * BORDERPX; |
|
| 183 | + | else |
|
| 184 | + | c->w = sw - c->x - 2 * BORDERPX; |
|
| 185 | + | } |
|
| 186 | + | } |
|
| 161 | 187 | } |
|
| 162 | - | else { /* fallback if h < bh */ |
|
| 163 | - | c->x = sx + master; |
|
| 188 | + | else { /* fallback if th < bh resp. tw < MINW */ |
|
| 189 | + | c->x = sx; |
|
| 164 | 190 | c->y = sy + bh; |
|
| 165 | - | c->w = w - 2 * BORDERPX; |
|
| 166 | - | c->h = sh - 2 * BORDERPX - bh; |
|
| 191 | + | if(stackpos == StackRight) |
|
| 192 | + | c->x += master; |
|
| 193 | + | else if(stackpos == StackBottom) |
|
| 194 | + | c->y += master; |
|
| 195 | + | c->w = stackw - 2 * BORDERPX; |
|
| 196 | + | c->h = stackh - 2 * BORDERPX; |
|
| 167 | 197 | } |
|
| 168 | 198 | resize(c, False, TopLeft); |
|
| 169 | 199 | i++; |
|
| 232 | 262 | return; |
|
| 233 | 263 | ||
| 234 | 264 | if(sel == getnext(clients)) { |
|
| 235 | - | if(master + arg->i > sw - 100 || master + arg->i < 100) |
|
| 265 | + | if(master + arg->i > sw - MINW || master + arg->i < MINW) |
|
| 236 | 266 | return; |
|
| 237 | 267 | master += arg->i; |
|
| 238 | 268 | } |
|
| 239 | 269 | else { |
|
| 240 | - | if(master - arg->i > sw - 100 || master - arg->i < 100) |
|
| 270 | + | if(master - arg->i > sw - MINW || master - arg->i < MINW) |
|
| 241 | 271 | return; |
|
| 242 | 272 | master -= arg->i; |
|
| 243 | 273 | } |
|