fixed the layout symbol bug reported by Nibble (but using a different approach as he suggested)
- optimised drawbar() and arrange() handling for multiple monitors, arrange only arranges the relevant monitors when applicable, same with drawbar - need to release 5.7.1
This commit is contained in:
		
							parent
							
								
									0b72be924d
								
							
						
					
					
						commit
						9e8dd3479d
					
				| @ -1,5 +1,5 @@ | ||||
| # dwm version
 | ||||
| VERSION = 5.7 | ||||
| VERSION = 5.7.1 | ||||
| 
 | ||||
| # Customize below to fit your system
 | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										58
									
								
								dwm.c
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								dwm.c
									
									
									
									
									
								
							| @ -152,7 +152,8 @@ typedef struct { | ||||
| /* function declarations */ | ||||
| static void applyrules(Client *c); | ||||
| static Bool applysizehints(Client *c, int *x, int *y, int *w, int *h, Bool interact); | ||||
| static void arrange(void); | ||||
| static void arrange(Monitor *m); | ||||
| static void arrangemon(Monitor *m); | ||||
| static void attach(Client *c); | ||||
| static void attachstack(Client *c); | ||||
| static void buttonpress(XEvent *e); | ||||
| @ -379,19 +380,25 @@ applysizehints(Client *c, int *x, int *y, int *w, int *h, Bool interact) { | ||||
| } | ||||
| 
 | ||||
| void | ||||
| arrange(void) { | ||||
| 	Monitor *m; | ||||
| 
 | ||||
| 	for(m = mons; m; m = m->next) | ||||
| arrange(Monitor *m) { | ||||
| 	if(m) | ||||
| 		showhide(m->stack); | ||||
| 	else for(m = mons; m; m = m->next) | ||||
| 		showhide(m->stack); | ||||
| 	focus(NULL); | ||||
| 	for(m = mons; m; m = m->next) { | ||||
| 	if(m) | ||||
| 		arrangemon(m); | ||||
| 	else for(m = mons; m; m = m->next) | ||||
| 		arrangemon(m); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| arrangemon(Monitor *m) { | ||||
| 	strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, sizeof m->ltsymbol); | ||||
| 	if(m->lt[m->sellt]->arrange) | ||||
| 		m->lt[m->sellt]->arrange(m); | ||||
| 	restack(m); | ||||
| } | ||||
| } | ||||
| 
 | ||||
| void | ||||
| attach(Client *c) { | ||||
| @ -546,7 +553,7 @@ configurenotify(XEvent *e) { | ||||
| 			updatebars(); | ||||
| 			for(m = mons; m; m = m->next) | ||||
| 				XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh); | ||||
| 			arrange(); | ||||
| 			arrange(NULL); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @ -1139,7 +1146,7 @@ manage(Window w, XWindowAttributes *wa) { | ||||
| 	XMoveResizeWindow(dpy, c->win, c->x + 2 * sw, c->y, c->w, c->h); /* some windows require this */ | ||||
| 	XMapWindow(dpy, c->win); | ||||
| 	setclientstate(c, NormalState); | ||||
| 	arrange(); | ||||
| 	arrange(c->mon); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| @ -1265,7 +1272,7 @@ propertynotify(XEvent *e) { | ||||
| 		case XA_WM_TRANSIENT_FOR: | ||||
| 			XGetTransientForHint(dpy, c->win, &trans); | ||||
| 			if(!c->isfloating && (c->isfloating = (wintoclient(trans) != NULL))) | ||||
| 				arrange(); | ||||
| 				arrange(c->mon); | ||||
| 			break; | ||||
| 		case XA_WM_NORMAL_HINTS: | ||||
| 			updatesizehints(c); | ||||
| @ -1360,7 +1367,7 @@ restack(Monitor *m) { | ||||
| 	XEvent ev; | ||||
| 	XWindowChanges wc; | ||||
| 
 | ||||
| 	drawbars(); | ||||
| 	drawbar(m); | ||||
| 	if(!m->sel) | ||||
| 		return; | ||||
| 	if(m->sel->isfloating || !m->lt[m->sellt]->arrange) | ||||
| @ -1427,7 +1434,7 @@ sendmon(Client *c, Monitor *m) { | ||||
| 	attach(c); | ||||
| 	attachstack(c); | ||||
| 	focus(NULL); | ||||
| 	arrange(); | ||||
| 	arrange(NULL); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| @ -1442,12 +1449,14 @@ void | ||||
| setlayout(const Arg *arg) { | ||||
| 	if(!arg || !arg->v || arg->v != selmon->lt[selmon->sellt]) | ||||
| 		selmon->sellt ^= 1; | ||||
| 	if(arg && arg->v) | ||||
| 	if(arg && arg->v) { | ||||
| 		selmon->lt[selmon->sellt] = (Layout *)arg->v; | ||||
| 		strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol); | ||||
| 	} | ||||
| 	if(selmon->sel) | ||||
| 		arrange(); | ||||
| 		arrange(selmon); | ||||
| 	else | ||||
| 		drawbars(); | ||||
| 		drawbar(selmon); | ||||
| } | ||||
| 
 | ||||
| /* arg > 1.0 will set mfact absolutly */ | ||||
| @ -1461,7 +1470,7 @@ setmfact(const Arg *arg) { | ||||
| 	if(f < 0.1 || f > 0.9) | ||||
| 		return; | ||||
| 	selmon->mfact = f; | ||||
| 	arrange(); | ||||
| 	arrange(selmon); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| @ -1558,7 +1567,7 @@ void | ||||
| tag(const Arg *arg) { | ||||
| 	if(selmon->sel && arg->ui & TAGMASK) { | ||||
| 		selmon->sel->tags = arg->ui & TAGMASK; | ||||
| 		arrange(); | ||||
| 		arrange(selmon); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| @ -1615,7 +1624,7 @@ togglebar(const Arg *arg) { | ||||
| 	selmon->showbar = !selmon->showbar; | ||||
| 	updatebarpos(selmon); | ||||
| 	XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh); | ||||
| 	arrange(); | ||||
| 	arrange(selmon); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| @ -1626,7 +1635,7 @@ togglefloating(const Arg *arg) { | ||||
| 	if(selmon->sel->isfloating) | ||||
| 		resize(selmon->sel, selmon->sel->x, selmon->sel->y, | ||||
| 		       selmon->sel->w, selmon->sel->h, False); | ||||
| 	arrange(); | ||||
| 	arrange(selmon); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| @ -1638,7 +1647,7 @@ toggletag(const Arg *arg) { | ||||
| 	newtags = selmon->sel->tags ^ (arg->ui & TAGMASK); | ||||
| 	if(newtags) { | ||||
| 		selmon->sel->tags = newtags; | ||||
| 		arrange(); | ||||
| 		arrange(selmon); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| @ -1648,7 +1657,7 @@ toggleview(const Arg *arg) { | ||||
| 
 | ||||
| 	if(newtagset) { | ||||
| 		selmon->tagset[selmon->seltags] = newtagset; | ||||
| 		arrange(); | ||||
| 		arrange(selmon); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| @ -1663,6 +1672,7 @@ unfocus(Client *c) { | ||||
| 
 | ||||
| void | ||||
| unmanage(Client *c, Bool destroyed) { | ||||
| 	Monitor *m = c->mon; | ||||
| 	XWindowChanges wc; | ||||
| 
 | ||||
| 	/* The server grab construct avoids race conditions. */ | ||||
| @ -1681,7 +1691,7 @@ unmanage(Client *c, Bool destroyed) { | ||||
| 	} | ||||
| 	free(c); | ||||
| 	focus(NULL); | ||||
| 	arrange(); | ||||
| 	arrange(m); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| @ -1908,7 +1918,7 @@ view(const Arg *arg) { | ||||
| 	selmon->seltags ^= 1; /* toggle sel tagset */ | ||||
| 	if(arg->ui & TAGMASK) | ||||
| 		selmon->tagset[selmon->seltags] = arg->ui & TAGMASK; | ||||
| 	arrange(); | ||||
| 	arrange(selmon); | ||||
| } | ||||
| 
 | ||||
| Client * | ||||
| @ -1986,7 +1996,7 @@ zoom(const Arg *arg) { | ||||
| 	detach(c); | ||||
| 	attach(c); | ||||
| 	focus(c); | ||||
| 	arrange(); | ||||
| 	arrange(c->mon); | ||||
| } | ||||
| 
 | ||||
| int | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Anselm R Garbe
						Anselm R Garbe