client.c
changeset 270 dacd3f3c5823
parent 261 d6fd632d861c
child 272 be40a56df248
equal deleted inserted replaced
269:bf6792e3e700 270:dacd3f3c5823
    57 	sel = c;
    57 	sel = c;
    58 	if(old && old != c)
    58 	if(old && old != c)
    59 		drawtitle(old);
    59 		drawtitle(old);
    60 	drawtitle(c);
    60 	drawtitle(c);
    61 	XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
    61 	XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
    62 	XSync(dpy, False);
       
    63 	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
       
    64 }
    62 }
    65 
    63 
    66 void
    64 void
    67 focusnext(Arg *arg)
    65 focusnext(Arg *arg)
    68 {
    66 {
    75 		togglemax(NULL);
    73 		togglemax(NULL);
    76 
    74 
    77 	if(!(c = getnext(sel->next)))
    75 	if(!(c = getnext(sel->next)))
    78 		c = getnext(clients);
    76 		c = getnext(clients);
    79 	if(c) {
    77 	if(c) {
    80 		higher(c);
       
    81 		focus(c);
    78 		focus(c);
       
    79 		restack();
    82 	}
    80 	}
    83 }
    81 }
    84 
    82 
    85 void
    83 void
    86 focusprev(Arg *arg)
    84 focusprev(Arg *arg)
    96 	if(!(c = getprev(sel->prev))) {
    94 	if(!(c = getprev(sel->prev))) {
    97 		for(c = clients; c && c->next; c = c->next);
    95 		for(c = clients; c && c->next; c = c->next);
    98 		c = getprev(c);
    96 		c = getprev(c);
    99 	}
    97 	}
   100 	if(c) {
    98 	if(c) {
   101 		higher(c);
       
   102 		focus(c);
    99 		focus(c);
       
   100 		restack();
   103 	}
   101 	}
   104 }
   102 }
   105 
   103 
   106 Client *
   104 Client *
   107 getclient(Window w)
   105 getclient(Window w)
   176 		dx = -dx;
   174 		dx = -dx;
   177 		dy = -dy;
   175 		dy = -dy;
   178 	}
   176 	}
   179 	c->x += dx;
   177 	c->x += dx;
   180 	c->y += dy;
   178 	c->y += dy;
   181 }
       
   182 
       
   183 void
       
   184 higher(Client *c)
       
   185 {
       
   186 	XRaiseWindow(dpy, c->win);
       
   187 	XRaiseWindow(dpy, c->title);
       
   188 }
   179 }
   189 
   180 
   190 void
   181 void
   191 killclient(Arg *arg)
   182 killclient(Arg *arg)
   192 {
   183 {
   269 	if(!c->isfloat)
   260 	if(!c->isfloat)
   270 		c->isfloat = trans
   261 		c->isfloat = trans
   271 			|| (c->maxw && c->minw &&
   262 			|| (c->maxw && c->minw &&
   272 				c->maxw == c->minw && c->maxh == c->minh);
   263 				c->maxw == c->minw && c->maxh == c->minh);
   273 	settitle(c);
   264 	settitle(c);
   274 	arrange(NULL);
   265 
   275 
   266 	XMapWindow(dpy, c->win);
   276 	/* mapping the window now prevents flicker */
   267 	XMapWindow(dpy, c->title);
   277 	XMapRaised(dpy, c->win);
       
   278 	XMapRaised(dpy, c->title);
       
   279 	if(isvisible(c))
   268 	if(isvisible(c))
   280 		focus(c);
   269 		focus(c);
       
   270 	arrange(NULL);
   281 }
   271 }
   282 
   272 
   283 void
   273 void
   284 resize(Client *c, Bool sizehints, Corner sticky)
   274 resize(Client *c, Bool sizehints, Corner sticky)
   285 {
   275 {
   408 		sel->x = sx;
   398 		sel->x = sx;
   409 		sel->y = sy + bh;
   399 		sel->y = sy + bh;
   410 		sel->w = sw - 2;
   400 		sel->w = sw - 2;
   411 		sel->h = sh - 2 - bh;
   401 		sel->h = sh - 2 - bh;
   412 
   402 
   413 		higher(sel);
   403 		restack();
   414 		resize(sel, arrange == dofloat, TopLeft);
   404 		resize(sel, arrange == dofloat, TopLeft);
   415 
   405 
   416 		sel->x = ox;
   406 		sel->x = ox;
   417 		sel->y = oy;
   407 		sel->y = oy;
   418 		sel->w = ow;
   408 		sel->w = ow;
   444 	free(c);
   434 	free(c);
   445 
   435 
   446 	XSync(dpy, False);
   436 	XSync(dpy, False);
   447 	XSetErrorHandler(xerror);
   437 	XSetErrorHandler(xerror);
   448 	XUngrabServer(dpy);
   438 	XUngrabServer(dpy);
   449 	arrange(NULL);
       
   450 	if(sel)
   439 	if(sel)
   451 		focus(sel);
   440 		focus(sel);
       
   441 	arrange(NULL);
   452 }
   442 }
   453 
   443 
   454 void
   444 void
   455 zoom(Arg *arg)
   445 zoom(Arg *arg)
   456 {
   446 {
   472 		sel->next->prev = sel->prev;
   462 		sel->next->prev = sel->prev;
   473 	sel->prev = NULL;
   463 	sel->prev = NULL;
   474 	clients->prev = sel;
   464 	clients->prev = sel;
   475 	sel->next = clients;
   465 	sel->next = clients;
   476 	clients = sel;
   466 	clients = sel;
       
   467 	focus(sel);
   477 	arrange(NULL);
   468 	arrange(NULL);
   478 	focus(sel);
   469 }
   479 }