view.c
changeset 511 1599c953647b
parent 510 0dfa6b752aed
child 512 aca04c3022c1
equal deleted inserted replaced
510:0dfa6b752aed 511:1599c953647b
    63 }
    63 }
    64 
    64 
    65 /* extern */
    65 /* extern */
    66 
    66 
    67 void (*arrange)(Arg *) = DEFMODE;
    67 void (*arrange)(Arg *) = DEFMODE;
    68 Bool isvertical = VERTICALSTACK;
       
    69 StackPos stackpos = STACKPOS;
    68 StackPos stackpos = STACKPOS;
    70 
    69 
    71 void
    70 void
    72 detach(Client *c) {
    71 detach(Client *c) {
    73 	if(c->prev)
    72 	if(c->prev)
   117 	else {
   116 	else {
   118 		stackw = sw - master;
   117 		stackw = sw - master;
   119 		stackh = sh - bh;
   118 		stackh = sh - bh;
   120 	}
   119 	}
   121 
   120 
   122 	if(isvertical) {
   121 	tw = stackw;
   123 		tw = stackw;
   122 	if(n > 1)
   124 		if(n > 1)
   123 		th = stackh / (n - 1);
   125 			th = stackh / (n - 1);
   124 	else
   126 		else
       
   127 			th = stackh;
       
   128 	}
       
   129 	else {
       
   130 		th = stackh;
   125 		th = stackh;
   131 		if(n > 1)
       
   132 			tw = stackw / (n - 1);
       
   133 		else
       
   134 			tw = stackw;
       
   135 	}
       
   136 
   126 
   137 	for(i = 0, c = clients; c; c = c->next) {
   127 	for(i = 0, c = clients; c; c = c->next) {
   138 		if(isvisible(c)) {
   128 		if(isvisible(c)) {
   139 			if(c->isfloat) {
   129 			if(c->isfloat) {
   140 				resize(c, True, TopLeft);
   130 				resize(c, True, TopLeft);
   167 					c->w = master - 2 * BORDERPX;
   157 					c->w = master - 2 * BORDERPX;
   168 					c->h = sh - bh - 2 * BORDERPX;
   158 					c->h = sh - bh - 2 * BORDERPX;
   169 					break;
   159 					break;
   170 				}
   160 				}
   171 			}
   161 			}
   172 			else if((isvertical && th > bh) || (!isvertical && tw > MINW)) {
   162 			else if(th > bh) {
   173 				/* tile window */
   163 				/* tile window */
   174 				c->w = tw - 2 * BORDERPX;
   164 				c->w = tw - 2 * BORDERPX;
   175 				c->h = th - 2 * BORDERPX;
   165 				c->h = th - 2 * BORDERPX;
   176 				switch(stackpos) {
   166 				switch(stackpos) {
   177 				case StackLeft:
   167 				case StackLeft:
   178 					if(isvertical) {
   168 					c->x = sx;
   179 						c->x = sx;
   169 					c->y = sy + (i - 1) * th + bh;
   180 						c->y = sy + (i - 1) * th + bh;
   170 					if(i + 1 == n)
   181 						if(i + 1 == n)
   171 						c->h = sh - c->y - 2 * BORDERPX;
   182 							c->h = sh - c->y - 2 * BORDERPX;
       
   183 					}
       
   184 					else {
       
   185 						c->x = sx + (i - 1) * tw;
       
   186 						c->y = sy + bh;
       
   187 						if(i + 1 == n)
       
   188 							c->w = sx + stackw - c->x - 2 * BORDERPX;
       
   189 					}
       
   190 					break;
   172 					break;
   191 				case StackBottom:
   173 				case StackBottom:
   192 					if(isvertical) {
   174 					c->x = sx;
   193 						c->x = sx;
   175 					c->y = sy + master + (i - 1) * th + bh;
   194 						c->y = sy + master + (i - 1) * th + bh;
   176 					if(i + 1 == n)
   195 						if(i + 1 == n)
   177 						c->h = sh - c->y - 2 * BORDERPX;
   196 							c->h = sh - c->y - 2 * BORDERPX;
       
   197 					}
       
   198 					else {
       
   199 						c->x = sx + (i - 1) * tw;
       
   200 						c->y = sy + bh + master;
       
   201 						if(i + 1 == n)
       
   202 							c->w = sw - c->x - 2 * BORDERPX;
       
   203 					}
       
   204 					break;
   178 					break;
   205 				case StackRight:
   179 				case StackRight:
   206 					if(isvertical) {
   180 					c->x = sx + master;
   207 						c->x = sx + master;
   181 					c->y = sy + (i - 1) * th + bh;
   208 						c->y = sy + (i - 1) * th + bh;
   182 					if(i + 1 == n)
   209 						if(i + 1 == n)
   183 						c->h = sh - c->y - 2 * BORDERPX;
   210 							c->h = sh - c->y - 2 * BORDERPX;
       
   211 					}
       
   212 					else {
       
   213 						c->x = sx + master + (i - 1) * tw;
       
   214 						c->y = sy + bh;
       
   215 						if(i + 1 == n)
       
   216 							c->w = sw - c->x - 2 * BORDERPX;
       
   217 					}
       
   218 					break;
   184 					break;
   219 				}
   185 				}
   220 			}
   186 			}
   221 			else { /* fallback if th < bh resp. tw < MINW */
   187 			else { /* fallback if th < bh */
   222 				c->w = stackw - 2 * BORDERPX;
   188 				c->w = stackw - 2 * BORDERPX;
   223 				c->h = stackh - 2 * BORDERPX;
   189 				c->h = stackh - 2 * BORDERPX;
   224 				switch(stackpos) {
   190 				switch(stackpos) {
   225 				case StackLeft:
   191 				case StackLeft:
   226 					c->x = sx;
   192 					c->x = sx;
   354 	seltag[arg->i] = !seltag[arg->i];
   320 	seltag[arg->i] = !seltag[arg->i];
   355 	for(i = 0; i < ntags && !seltag[i]; i++);
   321 	for(i = 0; i < ntags && !seltag[i]; i++);
   356 	if(i == ntags)
   322 	if(i == ntags)
   357 		seltag[arg->i] = True; /* cannot toggle last view */
   323 		seltag[arg->i] = True; /* cannot toggle last view */
   358 	reorder();
   324 	reorder();
   359 	arrange(NULL);
       
   360 }
       
   361 
       
   362 void
       
   363 togglestackdir(Arg *arg) {
       
   364 	if(arrange == dofloat)
       
   365 		return;
       
   366 	isvertical = !isvertical;
       
   367 	arrange(NULL);
   325 	arrange(NULL);
   368 }
   326 }
   369 
   327 
   370 void
   328 void
   371 togglestackpos(Arg *arg) {
   329 togglestackpos(Arg *arg) {