client.c
changeset 904 2dfd50e4cfde
parent 903 467c754b607d
child 905 ca352bd2f8f7
equal deleted inserted replaced
903:467c754b607d 904:2dfd50e4cfde
   127 	c->next = c->prev = NULL;
   127 	c->next = c->prev = NULL;
   128 }
   128 }
   129 
   129 
   130 void
   130 void
   131 focus(Client *c) {
   131 focus(Client *c) {
   132 	if(c && !isvisible(c))
   132 	if( !c && selscreen || c && !isvisible(c))
   133 		return;
   133 		for(c = stack; c && !isvisible(c); c = c->snext);
   134 	if(sel && sel != c) {
   134 	if(sel && sel != c) {
   135 		grabbuttons(sel, False);
   135 		grabbuttons(sel, False);
   136 		XSetWindowBorder(dpy, sel->win, dc.norm[ColBorder]);
   136 		XSetWindowBorder(dpy, sel->win, dc.norm[ColBorder]);
   137 	}
   137 	}
   138 	if(c) {
   138 	if(c) {
   148 		XSetWindowBorder(dpy, c->win, dc.sel[ColBorder]);
   148 		XSetWindowBorder(dpy, c->win, dc.sel[ColBorder]);
   149 		XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
   149 		XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
   150 	}
   150 	}
   151 	else
   151 	else
   152 		XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
   152 		XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
   153 }
       
   154 
       
   155 void
       
   156 focustopvisible(void) {
       
   157 	Client *c;
       
   158 
       
   159 	for(c = stack; c && !isvisible(c); c = c->snext);
       
   160 	focus(c);
       
   161 }
   153 }
   162 
   154 
   163 void
   155 void
   164 killclient(const char *arg) {
   156 killclient(const char *arg) {
   165 	XEvent ev;
   157 	XEvent ev;
   228 	attachstack(c);
   220 	attachstack(c);
   229 	c->isbanned = True;
   221 	c->isbanned = True;
   230 	XMoveWindow(dpy, w, c->x + 2 * sw, c->y);
   222 	XMoveWindow(dpy, w, c->x + 2 * sw, c->y);
   231 	XMapWindow(dpy, w);
   223 	XMapWindow(dpy, w);
   232 	setclientstate(c, NormalState);
   224 	setclientstate(c, NormalState);
   233 	if(isvisible(c))
   225 	focus(c);
   234 		focus(c);
       
   235 	lt->arrange();
   226 	lt->arrange();
   236 }
   227 }
   237 
   228 
   238 void
   229 void
   239 resize(Client *c, int x, int y, int w, int h, Bool sizehints) {
   230 resize(Client *c, int x, int y, int w, int h, Bool sizehints) {
   399 	XSetErrorHandler(xerrordummy);
   390 	XSetErrorHandler(xerrordummy);
   400 	XConfigureWindow(dpy, c->win, CWBorderWidth, &wc); /* restore border */
   391 	XConfigureWindow(dpy, c->win, CWBorderWidth, &wc); /* restore border */
   401 	detach(c);
   392 	detach(c);
   402 	detachstack(c);
   393 	detachstack(c);
   403 	if(sel == c)
   394 	if(sel == c)
   404 		focustopvisible();
   395 		focus(NULL);
   405 	XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
   396 	XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
   406 	setclientstate(c, WithdrawnState);
   397 	setclientstate(c, WithdrawnState);
   407 	free(c->tags);
   398 	free(c->tags);
   408 	free(c);
   399 	free(c);
   409 	XSync(dpy, False);
   400 	XSync(dpy, False);