client.c
changeset 52 d18f6dd0cf23
parent 51 035617ee18d1
child 53 529901e6a227
equal deleted inserted replaced
51:035617ee18d1 52:d18f6dd0cf23
    50 	sel->x = sx;
    50 	sel->x = sx;
    51 	sel->y = sy;
    51 	sel->y = sy;
    52 	sel->w = sw - 2 * sel->border;
    52 	sel->w = sw - 2 * sel->border;
    53 	sel->h = sh - 2 * sel->border;
    53 	sel->h = sh - 2 * sel->border;
    54 	craise(sel);
    54 	craise(sel);
    55 	resize(sel);
    55 	resize(sel, False);
    56 	discard_events(EnterWindowMask);
    56 	discard_events(EnterWindowMask);
    57 }
    57 }
    58 
    58 
    59 void
    59 void
    60 view(Arg *arg)
    60 view(Arg *arg)
    98 	Client *c;
    98 	Client *c;
    99 
    99 
   100 	arrange = floating;
   100 	arrange = floating;
   101 	for(c = clients; c; c = c->next) {
   101 	for(c = clients; c; c = c->next) {
   102 		if(c->tags[tsel])
   102 		if(c->tags[tsel])
   103 			resize(c);
   103 			resize(c, True);
   104 		else
   104 		else
   105 			ban_client(c);
   105 			ban_client(c);
   106 	}
   106 	}
   107 	if(sel && !sel->tags[tsel]) {
   107 	if(sel && !sel->tags[tsel]) {
   108 		if((sel = next(clients))) {
   108 		if((sel = next(clients))) {
   123 	arrange = tiling;
   123 	arrange = tiling;
   124 	for(n = 0, c = clients; c; c = c->next)
   124 	for(n = 0, c = clients; c; c = c->next)
   125 		if(c->tags[tsel])
   125 		if(c->tags[tsel])
   126 			n++;
   126 			n++;
   127 
   127 
   128 	h = (n > 2) ? sh / (n - 2) : sh;
   128 	h = (n > 1) ? sh / (n - 1) : sh;
   129 
   129 
   130 	for(i = 0, c = clients; c; c = c->next) {
   130 	for(i = 0, c = clients; c; c = c->next) {
   131 		if(c->tags[tsel]) {
   131 		if(c->tags[tsel]) {
   132 			if(n == 1) {
   132 			if(n == 1) {
   133 				c->x = sx;
   133 				c->x = sx;
   134 				c->y = sy;
   134 				c->y = sy;
   135 				c->w = sw;
   135 				c->w = sw - 2 * c->border;
   136 				c->h = sh;
   136 				c->h = sh - 2 * c->border;
   137 			}
   137 			}
   138 			else if(i == 1) {
   138 			else if(i == 0) {
   139 				c->x = sx;
   139 				c->x = sx;
   140 				c->y = sy;
   140 				c->y = sy;
   141 				c->w = mw;
   141 				c->w = mw - 2 * c->border;
   142 				c->h = sh;
   142 				c->h = sh - 2 * c->border;
   143 			}
   143 			}
   144 			else {
   144 			else {
   145 				c->x = sx + mw;
   145 				c->x = sx + mw;
   146 				c->y = sy + (i - 2) * h;
   146 				c->y = sy + (i - 1) * h;
   147 				c->w = w;
   147 				c->w = w - 2 * c->border;
   148 				c->h = h;
   148 				c->h = h - 2 * c->border;
   149 			}
   149 			}
   150 			resize(c);
   150 			resize(c, False);
   151 			i++;
   151 			i++;
   152 		}
   152 		}
   153 		else
   153 		else
   154 			ban_client(c);
   154 			ban_client(c);
   155 	}
   155 	}
   302 }
   302 }
   303 
   303 
   304 void
   304 void
   305 focus(Client *c)
   305 focus(Client *c)
   306 {
   306 {
   307 	if(sel && sel != c) {
   307 	Client *old = sel;
   308 		XSetWindowBorder(dpy, sel->win, dc.bg);
   308 
   309 		XMapWindow(dpy, sel->title);
       
   310 		draw_client(sel);
       
   311 	}
       
   312 	sel = c;
   309 	sel = c;
   313 	XUnmapWindow(dpy, c->title);
   310 	if(old && old != c)
   314 	XSetWindowBorder(dpy, c->win, dc.fg);
   311 		draw_client(old);
   315 	draw_client(c);
   312 	draw_client(c);
   316 	XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
   313 	XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
   317 	XFlush(dpy);
   314 	XFlush(dpy);
   318 	discard_events(EnterWindowMask);
   315 	discard_events(EnterWindowMask);
   319 }
   316 }
   461 	c->y += dy;
   458 	c->y += dy;
   462 }
   459 }
   463 
   460 
   464 
   461 
   465 void
   462 void
   466 resize(Client *c)
   463 resize(Client *c, Bool inc)
   467 {
   464 {
   468 	XConfigureEvent e;
   465 	XConfigureEvent e;
   469 
   466 
   470 	if(c->incw)
   467 	if(inc) {
   471 		c->w -= (c->w - c->basew) % c->incw;
   468 		if(c->incw)
   472 	if(c->inch)
   469 			c->w -= (c->w - c->basew) % c->incw;
   473 		c->h -= (c->h - c->baseh) % c->inch;
   470 		if(c->inch)
       
   471 			c->h -= (c->h - c->baseh) % c->inch;
       
   472 	}
   474 	if(c->minw && c->w < c->minw)
   473 	if(c->minw && c->w < c->minw)
   475 		c->w = c->minw;
   474 		c->w = c->minw;
   476 	if(c->minh && c->h < c->minh)
   475 	if(c->minh && c->h < c->minh)
   477 		c->h = c->minh;
   476 		c->h = c->minh;
   478 	if(c->maxw && c->w > c->maxw)
   477 	if(c->maxw && c->w > c->maxw)
   552 
   551 
   553 void
   552 void
   554 draw_client(Client *c)
   553 draw_client(Client *c)
   555 {
   554 {
   556 	int i;
   555 	int i;
   557 	if(c == sel)
   556 	if(c == sel) {
   558 		return;
   557 		XUnmapWindow(dpy, c->title);
       
   558 		XSetWindowBorder(dpy, c->win, dc.fg);
       
   559 		return;
       
   560 	}
       
   561 
       
   562 	XSetWindowBorder(dpy, c->win, dc.bg);
       
   563 	XMapWindow(dpy, c->title);
   559 
   564 
   560 	dc.x = dc.y = 0;
   565 	dc.x = dc.y = 0;
   561 	dc.h = c->th;
   566 	dc.h = c->th;
   562 
   567 
   563 	dc.w = 0;
   568 	dc.w = 0;