-getslot(Client *c)
-{
- unsigned int i, tic;
- Client *p;
-
- for(tic = 0; tic < ntags && !c->tags[tic]; tic++);
- for(p = clients; p; p = p->next) {
- for(i = 0; i < ntags && !p->tags[i]; i++);
- if(tic < i)
- return p;
+minclient() {
+ Client *c, *min;
+
+ if((clients && clients->isfloat) || arrange == dofloat)
+ return clients; /* don't touch floating order */
+ for(min = c = clients; c; c = c->next)
+ if(c->weight < min->weight)
+ min = c;
+ return min;
+}
+
+static void
+reorder() {
+ Client *c, *newclients, *tail;
+
+ newclients = tail = NULL;
+ while((c = minclient())) {
+ detach(c);
+ if(tail) {
+ c->prev = tail;
+ tail->next = c;
+ tail = c;
+ }
+ else
+ tail = newclients = c;