X-Git-Url: https://git.xinqibao.xyz/dwm.git/blobdiff_plain/a33150eb4b041b243d0493cd4b53bfbcace3299e..529be52fea06151df1f0056ae6f7bfedf819d107:/view.c diff --git a/view.c b/view.c index eddf2da..1226f0d 100644 --- a/view.c +++ b/view.c @@ -8,10 +8,11 @@ /* static */ static Client * -minclient() -{ +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; @@ -19,18 +20,7 @@ minclient() } static void -pop(Client *c) -{ - detach(c); - if(clients) - clients->prev = c; - c->next = clients; - clients = c; -} - -static void -reorder() -{ +reorder() { Client *c, *newclients, *tail; newclients = tail = NULL; @@ -48,8 +38,7 @@ reorder() } static Client * -nexttiled(Client *c) -{ +nexttiled(Client *c) { for(c = getnext(c); c && c->isfloat; c = getnext(c->next)); return c; } @@ -59,8 +48,7 @@ nexttiled(Client *c) void (*arrange)(Arg *) = DEFMODE; void -detach(Client *c) -{ +detach(Client *c) { if(c->prev) c->prev->next = c->next; if(c->next) @@ -71,8 +59,7 @@ detach(Client *c) } void -dofloat(Arg *arg) -{ +dofloat(Arg *arg) { Client *c; maximized = False; @@ -84,14 +71,15 @@ dofloat(Arg *arg) else ban(c); } - if(!sel || !isvisible(sel)) - focus(getnext(clients)); + if(!sel || !isvisible(sel)) { + for(c = stack; c && !isvisible(c); c = c->snext); + focus(c); + } restack(); } void -dotile(Arg *arg) -{ +dotile(Arg *arg) { int h, i, n, w; Client *c; @@ -146,14 +134,15 @@ dotile(Arg *arg) else ban(c); } - if(!sel || !isvisible(sel)) - focus(getnext(clients)); + if(!sel || !isvisible(sel)) { + for(c = stack; c && !isvisible(c); c = c->snext); + focus(c); + } restack(); } void -focusnext(Arg *arg) -{ +focusnext(Arg *arg) { Client *c; if(!sel) @@ -168,8 +157,7 @@ focusnext(Arg *arg) } void -focusprev(Arg *arg) -{ +focusprev(Arg *arg) { Client *c; if(!sel) @@ -186,8 +174,7 @@ focusprev(Arg *arg) } Bool -isvisible(Client *c) -{ +isvisible(Client *c) { unsigned int i; for(i = 0; i < ntags; i++) @@ -197,8 +184,7 @@ isvisible(Client *c) } void -resizecol(Arg *arg) -{ +resizecol(Arg *arg) { unsigned int n; Client *c; @@ -222,8 +208,7 @@ resizecol(Arg *arg) } void -restack() -{ +restack() { Client *c; XEvent ev; @@ -232,11 +217,10 @@ restack() return; } if(sel->isfloat || arrange == dofloat) { - pop(sel); XRaiseWindow(dpy, sel->win); XRaiseWindow(dpy, sel->twin); } - if(arrange != dofloat) + if(arrange != dofloat) for(c = nexttiled(clients); c; c = nexttiled(c->next)) { XLowerWindow(dpy, c->twin); XLowerWindow(dpy, c->win); @@ -247,8 +231,7 @@ restack() } void -togglemode(Arg *arg) -{ +togglemode(Arg *arg) { arrange = (arrange == dofloat) ? dotile : dofloat; if(sel) arrange(NULL); @@ -257,8 +240,7 @@ togglemode(Arg *arg) } void -toggleview(Arg *arg) -{ +toggleview(Arg *arg) { unsigned int i; seltag[arg->i] = !seltag[arg->i]; @@ -270,8 +252,7 @@ toggleview(Arg *arg) } void -view(Arg *arg) -{ +view(Arg *arg) { unsigned int i; for(i = 0; i < ntags; i++) @@ -282,8 +263,7 @@ view(Arg *arg) } void -viewall(Arg *arg) -{ +viewall(Arg *arg) { unsigned int i; for(i = 0; i < ntags; i++) @@ -293,8 +273,7 @@ viewall(Arg *arg) } void -zoom(Arg *arg) -{ +zoom(Arg *arg) { unsigned int n; Client *c; @@ -307,7 +286,11 @@ zoom(Arg *arg) if((c = sel) == nexttiled(clients)) if(!(c = nexttiled(c->next))) return; - pop(c); + detach(c); + if(clients) + clients->prev = c; + c->next = clients; + clients = c; focus(c); arrange(NULL); }