no, reodering floating clients definately breaks the manage() policy which attaches all clients zoomed (otherwise higher-weight clients couldn't be attached zoomed, which sucks)
0915da88
3 file(s) · +18 −16
| 247 | 247 | c->isfloat = trans |
|
| 248 | 248 | || (c->maxw && c->minw && |
|
| 249 | 249 | c->maxw == c->minw && c->maxh == c->minh); |
|
| 250 | - | if(c->isfloat) |
|
| 251 | - | c->weight = ntags; |
|
| 252 | 250 | ||
| 253 | 251 | if(clients) |
|
| 254 | 252 | clients->prev = c; |
| 106 | 106 | if(!matched) |
|
| 107 | 107 | for(i = 0; i < ntags; i++) |
|
| 108 | 108 | c->tags[i] = seltag[i]; |
|
| 109 | - | if(!c->isfloat) |
|
| 110 | - | for(c->weight = 0; c->weight < ntags && !c->tags[c->weight]; c->weight++); |
|
| 109 | + | for(c->weight = 0; c->weight < ntags && !c->tags[c->weight]; c->weight++); |
|
| 111 | 110 | } |
|
| 112 | 111 | ||
| 113 | 112 | void |
|
| 121 | 120 | for(i = 0; i < ntags; i++) |
|
| 122 | 121 | sel->tags[i] = False; |
|
| 123 | 122 | sel->tags[arg->i] = True; |
|
| 124 | - | if(!sel->isfloat) |
|
| 125 | - | sel->weight = arg->i; |
|
| 123 | + | sel->weight = arg->i; |
|
| 126 | 124 | arrange(NULL); |
|
| 127 | 125 | } |
|
| 128 | 126 | ||
| 138 | 136 | for(i = 0; i < ntags && !sel->tags[i]; i++); |
|
| 139 | 137 | if(i == ntags) |
|
| 140 | 138 | sel->tags[arg->i] = True; |
|
| 141 | - | if(!sel->isfloat) |
|
| 142 | - | sel->weight = (i == ntags) ? arg->i : i; |
|
| 139 | + | sel->weight = (i == ntags) ? arg->i : i; |
|
| 143 | 140 | arrange(NULL); |
|
| 144 | 141 | } |
|
| 38 | 38 | clients = newclients; |
|
| 39 | 39 | } |
|
| 40 | 40 | ||
| 41 | + | static Client * |
|
| 42 | + | nexttiled(Client *c) |
|
| 43 | + | { |
|
| 44 | + | for(c = getnext(c->next); c && c->isfloat; c = getnext(c->next)); |
|
| 45 | + | return c; |
|
| 46 | + | } |
|
| 47 | + | ||
| 41 | 48 | /* extern */ |
|
| 42 | 49 | ||
| 43 | 50 | void (*arrange)(Arg *) = DEFMODE; |
|
| 82 | 89 | maximized = False; |
|
| 83 | 90 | ||
| 84 | 91 | w = sw - mw; |
|
| 85 | - | for(n = 0, c = clients; c && !c->isfloat; c = c->next) |
|
| 86 | - | if(isvisible(c)) |
|
| 92 | + | for(n = 0, c = clients; c; c = c->next) |
|
| 93 | + | if(isvisible(c) && !c->isfloat) |
|
| 87 | 94 | n++; |
|
| 88 | 95 | ||
| 89 | 96 | if(n > 1) |
|
| 186 | 193 | unsigned int n; |
|
| 187 | 194 | Client *c; |
|
| 188 | 195 | ||
| 189 | - | for(n = 0, c = clients; c && !c->isfloat; c = c->next) |
|
| 190 | - | if(isvisible(c)) |
|
| 196 | + | for(n = 0, c = clients; c; c = c->next) |
|
| 197 | + | if(isvisible(c) && !c->isfloat) |
|
| 191 | 198 | n++; |
|
| 192 | 199 | if(!sel || sel->isfloat || n < 2 || (arrange != dotile) || maximized) |
|
| 193 | 200 | return; |
|
| 311 | 318 | unsigned int n; |
|
| 312 | 319 | Client *c; |
|
| 313 | 320 | ||
| 314 | - | for(n = 0, c = clients; c && !c->isfloat; c = c->next) |
|
| 315 | - | if(isvisible(c)) |
|
| 321 | + | for(n = 0, c = clients; c; c = c->next) |
|
| 322 | + | if(isvisible(c) && !c->isfloat) |
|
| 316 | 323 | n++; |
|
| 317 | 324 | if(!sel || sel->isfloat || n < 2 || (arrange != dotile) || maximized) |
|
| 318 | 325 | return; |
|
| 319 | 326 | ||
| 320 | - | if((c = sel) == getnext(clients)) |
|
| 321 | - | if(!(c = getnext(c->next)) || c->isfloat) |
|
| 327 | + | if((c = sel) == nexttiled(clients)) |
|
| 328 | + | if(!(c = nexttiled(c))) |
|
| 322 | 329 | return; |
|
| 323 | 330 | detach(c); |
|
| 324 | 331 | c->next = clients; |
|