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:
		@@ -1,5 +1,5 @@
 | 
				
			|||||||
# dwm version
 | 
					# dwm version
 | 
				
			||||||
VERSION = 5.7
 | 
					VERSION = 5.7.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Customize below to fit your system
 | 
					# Customize below to fit your system
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										66
									
								
								dwm.c
									
									
									
									
									
								
							
							
						
						
									
										66
									
								
								dwm.c
									
									
									
									
									
								
							@@ -152,7 +152,8 @@ typedef struct {
 | 
				
			|||||||
/* function declarations */
 | 
					/* function declarations */
 | 
				
			||||||
static void applyrules(Client *c);
 | 
					static void applyrules(Client *c);
 | 
				
			||||||
static Bool applysizehints(Client *c, int *x, int *y, int *w, int *h, Bool interact);
 | 
					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 attach(Client *c);
 | 
				
			||||||
static void attachstack(Client *c);
 | 
					static void attachstack(Client *c);
 | 
				
			||||||
static void buttonpress(XEvent *e);
 | 
					static void buttonpress(XEvent *e);
 | 
				
			||||||
@@ -379,18 +380,24 @@ applysizehints(Client *c, int *x, int *y, int *w, int *h, Bool interact) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
arrange(void) {
 | 
					arrange(Monitor *m) {
 | 
				
			||||||
	Monitor *m;
 | 
						if(m)
 | 
				
			||||||
 | 
							showhide(m->stack);
 | 
				
			||||||
	for(m = mons; m; m = m->next)
 | 
						else for(m = mons; m; m = m->next)
 | 
				
			||||||
		showhide(m->stack);
 | 
							showhide(m->stack);
 | 
				
			||||||
	focus(NULL);
 | 
						focus(NULL);
 | 
				
			||||||
	for(m = mons; m; m = m->next) {
 | 
						if(m)
 | 
				
			||||||
		strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, sizeof m->ltsymbol);
 | 
							arrangemon(m);
 | 
				
			||||||
		if(m->lt[m->sellt]->arrange)
 | 
						else for(m = mons; m; m = m->next)
 | 
				
			||||||
			m->lt[m->sellt]->arrange(m);
 | 
							arrangemon(m);
 | 
				
			||||||
		restack(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
 | 
					void
 | 
				
			||||||
@@ -546,7 +553,7 @@ configurenotify(XEvent *e) {
 | 
				
			|||||||
			updatebars();
 | 
								updatebars();
 | 
				
			||||||
			for(m = mons; m; m = m->next)
 | 
								for(m = mons; m; m = m->next)
 | 
				
			||||||
				XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh);
 | 
									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 */
 | 
						XMoveResizeWindow(dpy, c->win, c->x + 2 * sw, c->y, c->w, c->h); /* some windows require this */
 | 
				
			||||||
	XMapWindow(dpy, c->win);
 | 
						XMapWindow(dpy, c->win);
 | 
				
			||||||
	setclientstate(c, NormalState);
 | 
						setclientstate(c, NormalState);
 | 
				
			||||||
	arrange();
 | 
						arrange(c->mon);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
@@ -1265,7 +1272,7 @@ propertynotify(XEvent *e) {
 | 
				
			|||||||
		case XA_WM_TRANSIENT_FOR:
 | 
							case XA_WM_TRANSIENT_FOR:
 | 
				
			||||||
			XGetTransientForHint(dpy, c->win, &trans);
 | 
								XGetTransientForHint(dpy, c->win, &trans);
 | 
				
			||||||
			if(!c->isfloating && (c->isfloating = (wintoclient(trans) != NULL)))
 | 
								if(!c->isfloating && (c->isfloating = (wintoclient(trans) != NULL)))
 | 
				
			||||||
				arrange();
 | 
									arrange(c->mon);
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case XA_WM_NORMAL_HINTS:
 | 
							case XA_WM_NORMAL_HINTS:
 | 
				
			||||||
			updatesizehints(c);
 | 
								updatesizehints(c);
 | 
				
			||||||
@@ -1360,7 +1367,7 @@ restack(Monitor *m) {
 | 
				
			|||||||
	XEvent ev;
 | 
						XEvent ev;
 | 
				
			||||||
	XWindowChanges wc;
 | 
						XWindowChanges wc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	drawbars();
 | 
						drawbar(m);
 | 
				
			||||||
	if(!m->sel)
 | 
						if(!m->sel)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	if(m->sel->isfloating || !m->lt[m->sellt]->arrange)
 | 
						if(m->sel->isfloating || !m->lt[m->sellt]->arrange)
 | 
				
			||||||
@@ -1427,7 +1434,7 @@ sendmon(Client *c, Monitor *m) {
 | 
				
			|||||||
	attach(c);
 | 
						attach(c);
 | 
				
			||||||
	attachstack(c);
 | 
						attachstack(c);
 | 
				
			||||||
	focus(NULL);
 | 
						focus(NULL);
 | 
				
			||||||
	arrange();
 | 
						arrange(NULL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
@@ -1442,12 +1449,14 @@ void
 | 
				
			|||||||
setlayout(const Arg *arg) {
 | 
					setlayout(const Arg *arg) {
 | 
				
			||||||
	if(!arg || !arg->v || arg->v != selmon->lt[selmon->sellt])
 | 
						if(!arg || !arg->v || arg->v != selmon->lt[selmon->sellt])
 | 
				
			||||||
		selmon->sellt ^= 1;
 | 
							selmon->sellt ^= 1;
 | 
				
			||||||
	if(arg && arg->v)
 | 
						if(arg && arg->v) {
 | 
				
			||||||
		selmon->lt[selmon->sellt] = (Layout *)arg->v;
 | 
							selmon->lt[selmon->sellt] = (Layout *)arg->v;
 | 
				
			||||||
 | 
							strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	if(selmon->sel)
 | 
						if(selmon->sel)
 | 
				
			||||||
		arrange();
 | 
							arrange(selmon);
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		drawbars();
 | 
							drawbar(selmon);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* arg > 1.0 will set mfact absolutly */
 | 
					/* arg > 1.0 will set mfact absolutly */
 | 
				
			||||||
@@ -1461,7 +1470,7 @@ setmfact(const Arg *arg) {
 | 
				
			|||||||
	if(f < 0.1 || f > 0.9)
 | 
						if(f < 0.1 || f > 0.9)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	selmon->mfact = f;
 | 
						selmon->mfact = f;
 | 
				
			||||||
	arrange();
 | 
						arrange(selmon);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
@@ -1558,7 +1567,7 @@ void
 | 
				
			|||||||
tag(const Arg *arg) {
 | 
					tag(const Arg *arg) {
 | 
				
			||||||
	if(selmon->sel && arg->ui & TAGMASK) {
 | 
						if(selmon->sel && arg->ui & TAGMASK) {
 | 
				
			||||||
		selmon->sel->tags = arg->ui & TAGMASK;
 | 
							selmon->sel->tags = arg->ui & TAGMASK;
 | 
				
			||||||
		arrange();
 | 
							arrange(selmon);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1615,7 +1624,7 @@ togglebar(const Arg *arg) {
 | 
				
			|||||||
	selmon->showbar = !selmon->showbar;
 | 
						selmon->showbar = !selmon->showbar;
 | 
				
			||||||
	updatebarpos(selmon);
 | 
						updatebarpos(selmon);
 | 
				
			||||||
	XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
 | 
						XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
 | 
				
			||||||
	arrange();
 | 
						arrange(selmon);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
@@ -1626,7 +1635,7 @@ togglefloating(const Arg *arg) {
 | 
				
			|||||||
	if(selmon->sel->isfloating)
 | 
						if(selmon->sel->isfloating)
 | 
				
			||||||
		resize(selmon->sel, selmon->sel->x, selmon->sel->y,
 | 
							resize(selmon->sel, selmon->sel->x, selmon->sel->y,
 | 
				
			||||||
		       selmon->sel->w, selmon->sel->h, False);
 | 
							       selmon->sel->w, selmon->sel->h, False);
 | 
				
			||||||
	arrange();
 | 
						arrange(selmon);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
@@ -1638,7 +1647,7 @@ toggletag(const Arg *arg) {
 | 
				
			|||||||
	newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
 | 
						newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
 | 
				
			||||||
	if(newtags) {
 | 
						if(newtags) {
 | 
				
			||||||
		selmon->sel->tags = newtags;
 | 
							selmon->sel->tags = newtags;
 | 
				
			||||||
		arrange();
 | 
							arrange(selmon);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1648,7 +1657,7 @@ toggleview(const Arg *arg) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if(newtagset) {
 | 
						if(newtagset) {
 | 
				
			||||||
		selmon->tagset[selmon->seltags] = newtagset;
 | 
							selmon->tagset[selmon->seltags] = newtagset;
 | 
				
			||||||
		arrange();
 | 
							arrange(selmon);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1663,6 +1672,7 @@ unfocus(Client *c) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
unmanage(Client *c, Bool destroyed) {
 | 
					unmanage(Client *c, Bool destroyed) {
 | 
				
			||||||
 | 
						Monitor *m = c->mon;
 | 
				
			||||||
	XWindowChanges wc;
 | 
						XWindowChanges wc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* The server grab construct avoids race conditions. */
 | 
						/* The server grab construct avoids race conditions. */
 | 
				
			||||||
@@ -1681,7 +1691,7 @@ unmanage(Client *c, Bool destroyed) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	free(c);
 | 
						free(c);
 | 
				
			||||||
	focus(NULL);
 | 
						focus(NULL);
 | 
				
			||||||
	arrange();
 | 
						arrange(m);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
@@ -1908,7 +1918,7 @@ view(const Arg *arg) {
 | 
				
			|||||||
	selmon->seltags ^= 1; /* toggle sel tagset */
 | 
						selmon->seltags ^= 1; /* toggle sel tagset */
 | 
				
			||||||
	if(arg->ui & TAGMASK)
 | 
						if(arg->ui & TAGMASK)
 | 
				
			||||||
		selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
 | 
							selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
 | 
				
			||||||
	arrange();
 | 
						arrange(selmon);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Client *
 | 
					Client *
 | 
				
			||||||
@@ -1986,7 +1996,7 @@ zoom(const Arg *arg) {
 | 
				
			|||||||
	detach(c);
 | 
						detach(c);
 | 
				
			||||||
	attach(c);
 | 
						attach(c);
 | 
				
			||||||
	focus(c);
 | 
						focus(c);
 | 
				
			||||||
	arrange();
 | 
						arrange(c->mon);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int
 | 
					int
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user