added ban() which takes care than a banned window is not banned again... (this reduces the overall ConfigureNotify's to clients)
This commit is contained in:
		
							
								
								
									
										10
									
								
								client.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								client.c
									
									
									
									
									
								
							@@ -67,6 +67,14 @@ xerrordummy(Display *dsply, XErrorEvent *ee) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* extern */
 | 
					/* extern */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					ban(Client *c) {
 | 
				
			||||||
 | 
						if(!c || c->isbanned)
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						c->isbanned = True;
 | 
				
			||||||
 | 
						XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
configure(Client *c) {
 | 
					configure(Client *c) {
 | 
				
			||||||
	XConfigureEvent ce;
 | 
						XConfigureEvent ce;
 | 
				
			||||||
@@ -190,7 +198,7 @@ manage(Window w, XWindowAttributes *wa) {
 | 
				
			|||||||
	c->next = clients;
 | 
						c->next = clients;
 | 
				
			||||||
	c->snext = stack;
 | 
						c->snext = stack;
 | 
				
			||||||
	stack = clients = c;
 | 
						stack = clients = c;
 | 
				
			||||||
	XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
 | 
						ban(c);
 | 
				
			||||||
	XMapWindow(dpy, c->win);
 | 
						XMapWindow(dpy, c->win);
 | 
				
			||||||
	setclientstate(c, NormalState);
 | 
						setclientstate(c, NormalState);
 | 
				
			||||||
	if(isvisible(c))
 | 
						if(isvisible(c))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
# dwm version
 | 
					# dwm version
 | 
				
			||||||
VERSION = 3.5
 | 
					VERSION = 3.6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Customize below to fit your system
 | 
					# Customize below to fit your system
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								dwm.h
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								dwm.h
									
									
									
									
									
								
							@@ -73,7 +73,7 @@ struct Client {
 | 
				
			|||||||
	int minax, minay, maxax, maxay;
 | 
						int minax, minay, maxax, maxay;
 | 
				
			||||||
	long flags; 
 | 
						long flags; 
 | 
				
			||||||
	unsigned int border;
 | 
						unsigned int border;
 | 
				
			||||||
	Bool isfixed, isfloat, ismax;
 | 
						Bool isbanned, isfixed, isfloat, ismax;
 | 
				
			||||||
	Bool *tags;
 | 
						Bool *tags;
 | 
				
			||||||
	Client *next;
 | 
						Client *next;
 | 
				
			||||||
	Client *prev;
 | 
						Client *prev;
 | 
				
			||||||
@@ -99,6 +99,7 @@ extern Display *dpy;
 | 
				
			|||||||
extern Window root, barwin;
 | 
					extern Window root, barwin;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* client.c */
 | 
					/* client.c */
 | 
				
			||||||
 | 
					extern void ban(Client *c);			/* ban c */
 | 
				
			||||||
extern void configure(Client *c);		/* send synthetic configure event */
 | 
					extern void configure(Client *c);		/* send synthetic configure event */
 | 
				
			||||||
extern void focus(Client *c);			/* focus c, c may be NULL */
 | 
					extern void focus(Client *c);			/* focus c, c may be NULL */
 | 
				
			||||||
extern Client *getclient(Window w);		/* return client of w */
 | 
					extern Client *getclient(Window w);		/* return client of w */
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								event.c
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								event.c
									
									
									
									
									
								
							@@ -189,7 +189,7 @@ configurerequest(XEvent *e) {
 | 
				
			|||||||
				configure(c);
 | 
									configure(c);
 | 
				
			||||||
			resize(c, False);
 | 
								resize(c, False);
 | 
				
			||||||
			if(!isvisible(c))
 | 
								if(!isvisible(c))
 | 
				
			||||||
				XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
 | 
									ban(c);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			configure(c);
 | 
								configure(c);
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										9
									
								
								view.c
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								view.c
									
									
									
									
									
								
							@@ -55,10 +55,12 @@ dofloat(void) {
 | 
				
			|||||||
	Client *c;
 | 
						Client *c;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for(c = clients; c; c = c->next) {
 | 
						for(c = clients; c; c = c->next) {
 | 
				
			||||||
		if(isvisible(c))
 | 
							if(isvisible(c)) {
 | 
				
			||||||
 | 
								c->isbanned = False;
 | 
				
			||||||
			resize(c, True);
 | 
								resize(c, True);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
 | 
								ban(c);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if(!sel || !isvisible(sel)) {
 | 
						if(!sel || !isvisible(sel)) {
 | 
				
			||||||
		for(c = stack; c && !isvisible(c); c = c->snext);
 | 
							for(c = stack; c && !isvisible(c); c = c->snext);
 | 
				
			||||||
@@ -82,6 +84,7 @@ dotile(void) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	for(i = 0, c = clients; c; c = c->next)
 | 
						for(i = 0, c = clients; c; c = c->next)
 | 
				
			||||||
		if(isvisible(c)) {
 | 
							if(isvisible(c)) {
 | 
				
			||||||
 | 
								c->isbanned = False;
 | 
				
			||||||
			if(c->isfloat) {
 | 
								if(c->isfloat) {
 | 
				
			||||||
				resize(c, True);
 | 
									resize(c, True);
 | 
				
			||||||
				continue;
 | 
									continue;
 | 
				
			||||||
@@ -108,7 +111,7 @@ dotile(void) {
 | 
				
			|||||||
			i++;
 | 
								i++;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
 | 
								ban(c);
 | 
				
			||||||
	if(!sel || !isvisible(sel)) {
 | 
						if(!sel || !isvisible(sel)) {
 | 
				
			||||||
		for(c = stack; c && !isvisible(c); c = c->snext);
 | 
							for(c = stack; c && !isvisible(c); c = c->snext);
 | 
				
			||||||
		focus(c);
 | 
							focus(c);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user