view.c
changeset 378 83576f5f0a90
parent 342 a1901753deef
child 380 4bf79305d675
equal deleted inserted replaced
377:b1159a638d0a 378:83576f5f0a90
     5 #include "dwm.h"
     5 #include "dwm.h"
     6 
     6 
     7 /* extern */
     7 /* extern */
     8 
     8 
     9 void (*arrange)(Arg *) = DEFMODE;
     9 void (*arrange)(Arg *) = DEFMODE;
       
    10 
       
    11 void
       
    12 attach(Client *c)
       
    13 {
       
    14 	Client *first = getnext(clients);
       
    15 
       
    16 	if(!first) {
       
    17 		if(clients) {
       
    18 			for(first = clients; first->next; first = first->next);
       
    19 			first->next = c;
       
    20 			c->prev = first;
       
    21 		}
       
    22 		else
       
    23 			clients = c;
       
    24 	}
       
    25 	else if(first == clients) {
       
    26 		c->next = clients;
       
    27 		clients->prev = c;
       
    28 		clients = c;
       
    29 	}
       
    30 	else {
       
    31 		first->prev->next = c;
       
    32 		c->prev = first->prev;
       
    33 		first->prev = c;
       
    34 		c->next = first;
       
    35 	}
       
    36 }
       
    37 
       
    38 void
       
    39 detach(Client *c)
       
    40 {
       
    41 	if(c->prev)
       
    42 		c->prev->next = c->next;
       
    43 	if(c->next)
       
    44 		c->next->prev = c->prev;
       
    45 	if(c == clients)
       
    46 		clients = c->next;
       
    47 	c->next = c->prev = NULL;
       
    48 }
    10 
    49 
    11 void
    50 void
    12 dofloat(Arg *arg)
    51 dofloat(Arg *arg)
    13 {
    52 {
    14 	Client *c;
    53 	Client *c;
   226 }
   265 }
   227 
   266 
   228 void
   267 void
   229 zoom(Arg *arg)
   268 zoom(Arg *arg)
   230 {
   269 {
   231 	Client *c;
   270 	Client *c = sel;
   232 
   271 
   233 	if(!sel || (arrange != dotile) || sel->isfloat || sel->ismax)
   272 	if(!c || (arrange != dotile) || c->isfloat || c->ismax)
   234 		return;
   273 		return;
   235 
   274 
   236 	if(sel == getnext(clients))  {
   275 	if(c == getnext(clients))
   237 		if((c = getnext(sel->next)))
   276 		if(!(c = getnext(c->next)))
   238 			sel = c;
       
   239 		else
       
   240 			return;
   277 			return;
   241 	}
   278 	detach(c);
   242 
   279 	attach(c);
   243 	/* pop */
   280 	focus(c);
   244 	sel->prev->next = sel->next;
       
   245 	if(sel->next)
       
   246 		sel->next->prev = sel->prev;
       
   247 	sel->prev = NULL;
       
   248 	clients->prev = sel;
       
   249 	sel->next = clients;
       
   250 	clients = sel;
       
   251 	focus(sel);
       
   252 	arrange(NULL);
   281 	arrange(NULL);
   253 }
   282 }