view.c
changeset 530 451f19d48845
parent 529 e2bd83191fc6
child 531 96563762b4ad
equal deleted inserted replaced
529:e2bd83191fc6 530:451f19d48845
    63 }
    63 }
    64 
    64 
    65 /* extern */
    65 /* extern */
    66 
    66 
    67 void (*arrange)(Arg *) = DEFMODE;
    67 void (*arrange)(Arg *) = DEFMODE;
    68 StackPos stackpos = STACKPOS;
       
    69 
    68 
    70 void
    69 void
    71 detach(Client *c) {
    70 detach(Client *c) {
    72 	if(c->prev)
    71 	if(c->prev)
    73 		c->prev->next = c->next;
    72 		c->prev->next = c->next;
   101  * 	SSMMM	MMMMM	MMMSS
   100  * 	SSMMM	MMMMM	MMMSS
   102  * 	SSMMM	SSSSS	MMMSS
   101  * 	SSMMM	SSSSS	MMMSS
   103  */
   102  */
   104 void
   103 void
   105 dotile(Arg *arg) {
   104 dotile(Arg *arg) {
   106 	unsigned int i, n, md, stackw, stackh, tw, th;
   105 	unsigned int i, n, md, stackw, stackh, th;
   107 	Client *c;
   106 	Client *c;
   108 
   107 
   109 	for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next))
   108 	for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next))
   110 		n++;
   109 		n++;
   111 
   110 
   112 	if(stackpos == StackBottom) {
   111 	md = (sw * master) / 1000;
   113 		md = ((sh - bh) * master) / 1000;
   112 	stackw = sw - md;
   114 		stackw = sw;
   113 	stackh = sh - bh;
   115 		stackh = sh - bh - md;
   114 
   116 	}
   115 	th = stackh;
   117 	else {
       
   118 		md = (sw * master) / 1000;
       
   119 		stackw = sw - md;
       
   120 		stackh = sh - bh;
       
   121 	}
       
   122 
       
   123 	tw = stackw;
       
   124 	if(n > 1)
   116 	if(n > 1)
   125 		th = stackh / (n - 1);
   117 		th /= (n - 1);
   126 	else
       
   127 		th = stackh;
       
   128 
   118 
   129 	for(i = 0, c = clients; c; c = c->next) {
   119 	for(i = 0, c = clients; c; c = c->next) {
   130 		if(isvisible(c)) {
   120 		if(isvisible(c)) {
   131 			if(c->isfloat) {
   121 			if(c->isfloat) {
   132 				resize(c, True, TopLeft);
   122 				resize(c, True, TopLeft);
   138 			if(n == 1) { /* only 1 window */
   128 			if(n == 1) { /* only 1 window */
   139 				c->w = sw - 2 * BORDERPX;
   129 				c->w = sw - 2 * BORDERPX;
   140 				c->h = sh - 2 * BORDERPX - bh;
   130 				c->h = sh - 2 * BORDERPX - bh;
   141 			}
   131 			}
   142 			else if(i == 0) { /* master window */
   132 			else if(i == 0) { /* master window */
   143 				if(stackpos == StackLeft)
   133 				c->w = md - 2 * BORDERPX;
   144 					c->x += stackw;
   134 				c->h = sh - bh - 2 * BORDERPX;
   145 				switch(stackpos) {
       
   146 				case StackLeft:
       
   147 				case StackRight:
       
   148 					c->w = md - 2 * BORDERPX;
       
   149 					c->h = sh - bh - 2 * BORDERPX;
       
   150 					break;
       
   151 				case StackBottom:
       
   152 					c->w = sw - 2 * BORDERPX;
       
   153 					c->h = md - 2 * BORDERPX;
       
   154 					break;
       
   155 				}
       
   156 			}
   135 			}
   157 			else {  /* tile window */
   136 			else {  /* tile window */
   158 				if(stackpos == StackRight)
   137 				c->x += md;
   159 					c->x += md;
       
   160 				if(th > bh) {
   138 				if(th > bh) {
   161 					switch(stackpos) {
   139 					c->y = sy + (i - 1) * th + bh;
   162 					case StackLeft:
   140 					if(i + 1 == n)
   163 					case StackRight:
   141 						c->h = sh - c->y - 2 * BORDERPX;
   164 						c->y = sy + (i - 1) * th + bh;
   142 					c->w = stackw - 2 * BORDERPX;
   165 						if(i + 1 == n)
       
   166 							c->h = sh - c->y - 2 * BORDERPX;
       
   167 						break;
       
   168 					case StackBottom:
       
   169 						c->y = sy + md + (i - 1) * th + bh;
       
   170 						if(i + 1 == n)
       
   171 							c->h = sh - c->y - 2 * BORDERPX;
       
   172 						break;
       
   173 					}
       
   174 					c->w = tw - 2 * BORDERPX;
       
   175 					c->h = th - 2 * BORDERPX;
   143 					c->h = th - 2 * BORDERPX;
   176 				}
   144 				}
   177 				else { /* fallback if th < bh */
   145 				else { /* fallback if th < bh */
   178 					if(stackpos == StackBottom)
       
   179 						c->y += md;
       
   180 					c->w = stackw - 2 * BORDERPX;
   146 					c->w = stackw - 2 * BORDERPX;
   181 					c->h = stackh - 2 * BORDERPX;
   147 					c->h = stackh - 2 * BORDERPX;
   182 				}
   148 				}
   183 			}
   149 			}
   184 			resize(c, False, TopLeft);
   150 			resize(c, False, TopLeft);
   306 	seltag[arg->i] = !seltag[arg->i];
   272 	seltag[arg->i] = !seltag[arg->i];
   307 	for(i = 0; i < ntags && !seltag[i]; i++);
   273 	for(i = 0; i < ntags && !seltag[i]; i++);
   308 	if(i == ntags)
   274 	if(i == ntags)
   309 		seltag[arg->i] = True; /* cannot toggle last view */
   275 		seltag[arg->i] = True; /* cannot toggle last view */
   310 	reorder();
   276 	reorder();
   311 	arrange(NULL);
       
   312 }
       
   313 
       
   314 void
       
   315 togglestackpos(Arg *arg) {
       
   316 	if(arrange == dofloat)
       
   317 		return;
       
   318 	if(stackpos == StackBottom)
       
   319 		stackpos = STACKPOS;
       
   320 	else
       
   321 		stackpos = StackBottom;
       
   322 	arrange(NULL);
   277 	arrange(NULL);
   323 }
   278 }
   324 
   279 
   325 void
   280 void
   326 view(Arg *arg) {
   281 view(Arg *arg) {