view.c
changeset 531 96563762b4ad
parent 530 451f19d48845
child 532 651f2c868b31
equal deleted inserted replaced
530:451f19d48845 531:96563762b4ad
    93 		focus(c);
    93 		focus(c);
    94 	}
    94 	}
    95 	restack();
    95 	restack();
    96 }
    96 }
    97 
    97 
    98 /* This algorithm is based on a (M)aster area and a (S)tacking area.
       
    99  * It supports following arrangements:
       
   100  * 	SSMMM	MMMMM	MMMSS
       
   101  * 	SSMMM	SSSSS	MMMSS
       
   102  */
       
   103 void
    98 void
   104 dotile(Arg *arg) {
    99 dotile(Arg *arg) {
   105 	unsigned int i, n, md, stackw, stackh, th;
   100 	unsigned int i, n, mpx, stackw, stackh, th;
   106 	Client *c;
   101 	Client *c;
   107 
   102 
   108 	for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next))
   103 	for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next))
   109 		n++;
   104 		n++;
   110 
   105 
   111 	md = (sw * master) / 1000;
   106 	mpx = (sw * master) / 1000;
   112 	stackw = sw - md;
   107 	stackw = sw - mpx;
   113 	stackh = sh - bh;
   108 	stackh = sh - bh;
   114 
   109 
   115 	th = stackh;
   110 	th = stackh;
   116 	if(n > 1)
   111 	if(n > 1)
   117 		th /= (n - 1);
   112 		th /= (n - 1);
   118 
   113 
   119 	for(i = 0, c = clients; c; c = c->next) {
   114 	for(i = 0, c = clients; c; c = c->next, i++)
   120 		if(isvisible(c)) {
   115 		if(isvisible(c)) {
   121 			if(c->isfloat) {
   116 			if(c->isfloat) {
   122 				resize(c, True, TopLeft);
   117 				resize(c, True, TopLeft);
   123 				continue;
   118 				continue;
   124 			}
   119 			}
   128 			if(n == 1) { /* only 1 window */
   123 			if(n == 1) { /* only 1 window */
   129 				c->w = sw - 2 * BORDERPX;
   124 				c->w = sw - 2 * BORDERPX;
   130 				c->h = sh - 2 * BORDERPX - bh;
   125 				c->h = sh - 2 * BORDERPX - bh;
   131 			}
   126 			}
   132 			else if(i == 0) { /* master window */
   127 			else if(i == 0) { /* master window */
   133 				c->w = md - 2 * BORDERPX;
   128 				c->w = mpx - 2 * BORDERPX;
   134 				c->h = sh - bh - 2 * BORDERPX;
   129 				c->h = sh - bh - 2 * BORDERPX;
   135 			}
   130 			}
   136 			else {  /* tile window */
   131 			else {  /* tile window */
   137 				c->x += md;
   132 				c->x += mpx;
       
   133 				c->w = stackw - 2 * BORDERPX;
   138 				if(th > bh) {
   134 				if(th > bh) {
   139 					c->y = sy + (i - 1) * th + bh;
   135 					c->y = sy + (i - 1) * th + bh;
   140 					if(i + 1 == n)
   136 					if(i + 1 == n)
   141 						c->h = sh - c->y - 2 * BORDERPX;
   137 						c->h = sh - c->y - 2 * BORDERPX;
   142 					c->w = stackw - 2 * BORDERPX;
   138 					else
   143 					c->h = th - 2 * BORDERPX;
   139 						c->h = th - 2 * BORDERPX;
   144 				}
   140 				}
   145 				else { /* fallback if th < bh */
   141 				else /* fallback if th < bh */
   146 					c->w = stackw - 2 * BORDERPX;
       
   147 					c->h = stackh - 2 * BORDERPX;
   142 					c->h = stackh - 2 * BORDERPX;
   148 				}
       
   149 			}
   143 			}
   150 			resize(c, False, TopLeft);
   144 			resize(c, False, TopLeft);
   151 			i++;
       
   152 		}
   145 		}
   153 		else
   146 		else
   154 			ban(c);
   147 			ban(c);
   155 	}
       
   156 	if(!sel || !isvisible(sel)) {
   148 	if(!sel || !isvisible(sel)) {
   157 		for(c = stack; c && !isvisible(c); c = c->snext);
   149 		for(c = stack; c && !isvisible(c); c = c->snext);
   158 		focus(c);
   150 		focus(c);
   159 	}
   151 	}
   160 	restack();
   152 	restack();