view.c
changeset 436 b3659c3c5dab
parent 433 a6b8994af164
child 437 433a5c662f73
equal deleted inserted replaced
435:42388f634de0 436:b3659c3c5dab
   213 }
   213 }
   214 
   214 
   215 void
   215 void
   216 restack()
   216 restack()
   217 {
   217 {
   218 	static unsigned int nwins = 0;
       
   219 	static Window *wins = NULL;
       
   220 	unsigned int f, fi, m, mi, n;
       
   221 	Client *c;
   218 	Client *c;
   222 	XEvent ev;
   219 	XEvent ev;
   223 
   220 	
   224 	for(f = 0, m = 0, c = clients; c; c = c->next)
   221 	if(!sel)
   225 		if(isvisible(c)) {
   222 		return;
   226 			if(c->isfloat || arrange == dofloat)
   223 	if(sel->isfloat || arrange == dofloat) {
   227 				f++;
   224 		XRaiseWindow(dpy, sel->win);
   228 			else
   225 		XRaiseWindow(dpy, sel->twin);
   229 				m++;
   226 	}
       
   227 	if(arrange != dofloat) 
       
   228 		for(c = nexttiled(clients); c; c = nexttiled(c->next)) {
       
   229 			XLowerWindow(dpy, c->twin);
       
   230 			XLowerWindow(dpy, c->win);
   230 		}
   231 		}
   231 	if(!(n = 2 * (f + m))) {
       
   232 		drawstatus();
       
   233 		return;
       
   234 	}
       
   235 	if(nwins < n) {
       
   236 		nwins = n;
       
   237 		wins = erealloc(wins, nwins * sizeof(Window));
       
   238 	}
       
   239 
       
   240 	fi = 0;
       
   241 	mi = 2 * f;
       
   242 	if(sel) {
       
   243 		if(sel->isfloat || arrange == dofloat) {
       
   244 			wins[fi++] = sel->twin;
       
   245 			wins[fi++] = sel->win;
       
   246 		}
       
   247 		else {
       
   248 			wins[mi++] = sel->twin;
       
   249 			wins[mi++] = sel->win;
       
   250 		}
       
   251 	}
       
   252 	for(c = clients; c; c = c->next)
       
   253 		if(isvisible(c) && c != sel) {
       
   254 			if(c->isfloat || arrange == dofloat) {
       
   255 				wins[fi++] = c->twin;
       
   256 				wins[fi++] = c->win;
       
   257 			}
       
   258 			else {
       
   259 				wins[mi++] = c->twin;
       
   260 				wins[mi++] = c->win;
       
   261 			}
       
   262 		}
       
   263 	XRestackWindows(dpy, wins, n);
       
   264 	drawall();
   232 	drawall();
   265 	XSync(dpy, False);
   233 	XSync(dpy, False);
   266 	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
   234 	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
   267 }
   235 }
   268 
   236