1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- Client *
- nextc(Client *c, float f) {
- if(!f)
- return nexttiled(c);
- for(; c && !ISVISIBLE(c); c = c->next);
- return c;
- }
- static Client *
- prevc(Client *c, float f) {
- Client *p, *r;
- for(p = selmon->clients, r = NULL; c && p && p != c; p = p->next)
- if((f || !p->isfloating) && ISVISIBLE(p))
- r = p;
- return r;
- }
- static void
- pushup(const Arg *arg) {
- Client *sel = selmon->sel;
- Client *c;
- if(!sel || (sel->isfloating && !arg->f))
- return;
- if((c = prevc(sel, arg->f))) {
- /* attach before c */
- detach(sel);
- sel->next = c;
- if(selmon->clients == c)
- selmon->clients = sel;
- else {
- for(c = selmon->clients; c->next != sel->next; c = c->next);
- c->next = sel;
- }
- } else {
- /* move to the end */
- for(c = sel; c->next; c = c->next);
- detach(sel);
- sel->next = NULL;
- c->next = sel;
- }
- focus(sel);
- arrange(selmon);
- }
- static void
- pushdown(const Arg *arg) {
- Client *sel = selmon->sel;
- Client *c;
- if(!sel || (sel->isfloating && !arg->f))
- return;
- if((c = nextc(sel->next, arg->f))) {
- /* attach after c */
- detach(sel);
- sel->next = c->next;
- c->next = sel;
- } else {
- /* move to the front */
- detach(sel);
- attach(sel);
- }
- focus(sel);
- arrange(selmon);
- }
|