some more changes towards a better dwm
This commit is contained in:
		
							parent
							
								
									00ca643bd7
								
							
						
					
					
						commit
						2f70a14ee1
					
				| 
						 | 
					@ -11,7 +11,7 @@
 | 
				
			||||||
#define SELBGCOLOR		"#0066ff"
 | 
					#define SELBGCOLOR		"#0066ff"
 | 
				
			||||||
#define SELFGCOLOR		"#ffffff"
 | 
					#define SELFGCOLOR		"#ffffff"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* tagging */
 | 
					/* old */
 | 
				
			||||||
const char tags[][MAXTAGLEN]     = { "1", "2", "3", "4", "nil", "6", "7", "8", "www" };
 | 
					const char tags[][MAXTAGLEN]     = { "1", "2", "3", "4", "nil", "6", "7", "8", "www" };
 | 
				
			||||||
unsigned int vtags[LENGTH(tags)] = {  0 ,  0 ,  0 ,  0 ,   0  ,  1 ,  1 ,  1 ,   1   };
 | 
					unsigned int vtags[LENGTH(tags)] = {  0 ,  0 ,  0 ,  0 ,   0  ,  1 ,  1 ,  1 ,   1   };
 | 
				
			||||||
Bool initags[LENGTH(tags)]       = { [0] = True, [5] = True };
 | 
					Bool initags[LENGTH(tags)]       = { [0] = True, [5] = True };
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										108
									
								
								dwm.c
								
								
								
								
							
							
						
						
									
										108
									
								
								dwm.c
								
								
								
								
							| 
						 | 
					@ -71,6 +71,7 @@ struct Client {
 | 
				
			||||||
	unsigned int border, oldborder;
 | 
						unsigned int border, oldborder;
 | 
				
			||||||
	Bool isbanned, isfixed, isfloating, isurgent;
 | 
						Bool isbanned, isfixed, isfloating, isurgent;
 | 
				
			||||||
	Bool *tags;
 | 
						Bool *tags;
 | 
				
			||||||
 | 
						View *view;
 | 
				
			||||||
	Client *next;
 | 
						Client *next;
 | 
				
			||||||
	Client *prev;
 | 
						Client *prev;
 | 
				
			||||||
	Client *snext;
 | 
						Client *snext;
 | 
				
			||||||
| 
						 | 
					@ -110,12 +111,8 @@ typedef struct {
 | 
				
			||||||
	Bool isfloating;
 | 
						Bool isfloating;
 | 
				
			||||||
} Rule;
 | 
					} Rule;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct {
 | 
					 | 
				
			||||||
	const char name[MAXTAGLEN];
 | 
					 | 
				
			||||||
	unsigned int view;
 | 
					 | 
				
			||||||
} Tag;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
struct View {
 | 
					struct View {
 | 
				
			||||||
 | 
						unsigned int id;
 | 
				
			||||||
	int x, y, w, h, wax, way, wah, waw;
 | 
						int x, y, w, h, wax, way, wah, waw;
 | 
				
			||||||
	double mwfact;
 | 
						double mwfact;
 | 
				
			||||||
	Layout *layout;
 | 
						Layout *layout;
 | 
				
			||||||
| 
						 | 
					@ -139,8 +136,8 @@ void destroynotify(XEvent *e);
 | 
				
			||||||
void detach(Client *c);
 | 
					void detach(Client *c);
 | 
				
			||||||
void detachstack(Client *c);
 | 
					void detachstack(Client *c);
 | 
				
			||||||
void drawbar(View *v);
 | 
					void drawbar(View *v);
 | 
				
			||||||
void drawsquare(View *v, Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]);
 | 
					void drawsquare(Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]);
 | 
				
			||||||
void drawtext(View *v, const char *text, unsigned long col[ColLast], Bool invert);
 | 
					void drawtext(const char *text, unsigned long col[ColLast], Bool invert);
 | 
				
			||||||
void *emallocz(unsigned int size);
 | 
					void *emallocz(unsigned int size);
 | 
				
			||||||
void enternotify(XEvent *e);
 | 
					void enternotify(XEvent *e);
 | 
				
			||||||
void eprint(const char *errstr, ...);
 | 
					void eprint(const char *errstr, ...);
 | 
				
			||||||
| 
						 | 
					@ -153,7 +150,6 @@ void focusprev(const char *arg);
 | 
				
			||||||
Client *getclient(Window w);
 | 
					Client *getclient(Window w);
 | 
				
			||||||
unsigned long getcolor(const char *colstr);
 | 
					unsigned long getcolor(const char *colstr);
 | 
				
			||||||
View *getviewbar(Window barwin);
 | 
					View *getviewbar(Window barwin);
 | 
				
			||||||
View *getview(Client *c);
 | 
					 | 
				
			||||||
long getstate(Window w);
 | 
					long getstate(Window w);
 | 
				
			||||||
Bool gettextprop(Window w, Atom atom, char *text, unsigned int size);
 | 
					Bool gettextprop(Window w, Atom atom, char *text, unsigned int size);
 | 
				
			||||||
void grabbuttons(Client *c, Bool focused);
 | 
					void grabbuttons(Client *c, Bool focused);
 | 
				
			||||||
| 
						 | 
					@ -211,7 +207,6 @@ void selectview(const char *arg);
 | 
				
			||||||
/* variables */
 | 
					/* variables */
 | 
				
			||||||
char stext[256], buf[256];
 | 
					char stext[256], buf[256];
 | 
				
			||||||
int nviews = 1;
 | 
					int nviews = 1;
 | 
				
			||||||
View *selview;
 | 
					 | 
				
			||||||
int screen;
 | 
					int screen;
 | 
				
			||||||
int (*xerrorxlib)(Display *, XErrorEvent *);
 | 
					int (*xerrorxlib)(Display *, XErrorEvent *);
 | 
				
			||||||
unsigned int bh, bpos;
 | 
					unsigned int bh, bpos;
 | 
				
			||||||
| 
						 | 
					@ -246,6 +241,7 @@ Cursor cursor[CurLast];
 | 
				
			||||||
Display *dpy;
 | 
					Display *dpy;
 | 
				
			||||||
DC dc = {0};
 | 
					DC dc = {0};
 | 
				
			||||||
View *views;
 | 
					View *views;
 | 
				
			||||||
 | 
					View *selview;
 | 
				
			||||||
Window root;
 | 
					Window root;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* configuration, allows nested code to access above variables */
 | 
					/* configuration, allows nested code to access above variables */
 | 
				
			||||||
| 
						 | 
					@ -260,6 +256,7 @@ addtag(Client *c, const char *t) {
 | 
				
			||||||
		if(c->tags[i] && vtags[i] != vtags[tidx])
 | 
							if(c->tags[i] && vtags[i] != vtags[tidx])
 | 
				
			||||||
			return; /* conflict */
 | 
								return; /* conflict */
 | 
				
			||||||
	c->tags[tidx] = True;
 | 
						c->tags[tidx] = True;
 | 
				
			||||||
 | 
						c->view = &views[vtags[tidx]];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
| 
						 | 
					@ -288,8 +285,10 @@ applyrules(Client *c) {
 | 
				
			||||||
		XFree(ch.res_class);
 | 
							XFree(ch.res_class);
 | 
				
			||||||
	if(ch.res_name)
 | 
						if(ch.res_name)
 | 
				
			||||||
		XFree(ch.res_name);
 | 
							XFree(ch.res_name);
 | 
				
			||||||
	if(!matched)
 | 
						if(!matched) {
 | 
				
			||||||
		memcpy(c->tags, seltags, sizeof initags);
 | 
							memcpy(c->tags, seltags, sizeof initags);
 | 
				
			||||||
 | 
							c->view = selview;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -330,7 +329,7 @@ void
 | 
				
			||||||
ban(Client *c) {
 | 
					ban(Client *c) {
 | 
				
			||||||
	if(c->isbanned)
 | 
						if(c->isbanned)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	XMoveWindow(dpy, c->win, c->x + 3 * getview(c)->w, c->y);
 | 
						XMoveWindow(dpy, c->win, c->x + 3 * c->view->w, c->y);
 | 
				
			||||||
	c->isbanned = True;
 | 
						c->isbanned = True;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -340,9 +339,7 @@ buttonpress(XEvent *e) {
 | 
				
			||||||
	Client *c;
 | 
						Client *c;
 | 
				
			||||||
	XButtonPressedEvent *ev = &e->xbutton;
 | 
						XButtonPressedEvent *ev = &e->xbutton;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	View *v = selview;
 | 
						if(ev->window == selview->barwin) {
 | 
				
			||||||
 | 
					 | 
				
			||||||
	if(ev->window == v->barwin) {
 | 
					 | 
				
			||||||
		x = 0;
 | 
							x = 0;
 | 
				
			||||||
		for(i = 0; i < LENGTH(tags); i++) {
 | 
							for(i = 0; i < LENGTH(tags); i++) {
 | 
				
			||||||
			x += textw(tags[i]);
 | 
								x += textw(tags[i]);
 | 
				
			||||||
| 
						 | 
					@ -370,17 +367,17 @@ buttonpress(XEvent *e) {
 | 
				
			||||||
		if(CLEANMASK(ev->state) != MODKEY)
 | 
							if(CLEANMASK(ev->state) != MODKEY)
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
		if(ev->button == Button1) {
 | 
							if(ev->button == Button1) {
 | 
				
			||||||
			restack(getview(c));
 | 
								restack(c->view);
 | 
				
			||||||
			movemouse(c);
 | 
								movemouse(c);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if(ev->button == Button2) {
 | 
							else if(ev->button == Button2) {
 | 
				
			||||||
			if((floating != v->layout->arrange) && c->isfloating)
 | 
								if((floating != c->view->layout->arrange) && c->isfloating)
 | 
				
			||||||
				togglefloating(NULL);
 | 
									togglefloating(NULL);
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
				zoom(NULL);
 | 
									zoom(NULL);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if(ev->button == Button3 && !c->isfixed) {
 | 
							else if(ev->button == Button3 && !c->isfixed) {
 | 
				
			||||||
			restack(getview(c));
 | 
								restack(c->view);
 | 
				
			||||||
			resizemouse(c);
 | 
								resizemouse(c);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -457,7 +454,7 @@ configurenotify(XEvent *e) {
 | 
				
			||||||
		XFreePixmap(dpy, dc.drawable);
 | 
							XFreePixmap(dpy, dc.drawable);
 | 
				
			||||||
		dc.drawable = XCreatePixmap(dpy, root, DisplayWidth(root, screen), bh, DefaultDepth(dpy, screen));
 | 
							dc.drawable = XCreatePixmap(dpy, root, DisplayWidth(root, screen), bh, DefaultDepth(dpy, screen));
 | 
				
			||||||
		XResizeWindow(dpy, v->barwin, v->w, bh);
 | 
							XResizeWindow(dpy, v->barwin, v->w, bh);
 | 
				
			||||||
		updatebarpos(v);
 | 
							updatebarpos(selview);
 | 
				
			||||||
		arrange();
 | 
							arrange();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -469,7 +466,7 @@ configurerequest(XEvent *e) {
 | 
				
			||||||
	XWindowChanges wc;
 | 
						XWindowChanges wc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if((c = getclient(ev->window))) {
 | 
						if((c = getclient(ev->window))) {
 | 
				
			||||||
		View *v = getview(c);
 | 
							View *v = c->view;
 | 
				
			||||||
		if(ev->value_mask & CWBorderWidth)
 | 
							if(ev->value_mask & CWBorderWidth)
 | 
				
			||||||
			c->border = ev->border_width;
 | 
								c->border = ev->border_width;
 | 
				
			||||||
		if(c->isfixed || c->isfloating || (floating == v->layout->arrange)) {
 | 
							if(c->isfixed || c->isfloating || (floating == v->layout->arrange)) {
 | 
				
			||||||
| 
						 | 
					@ -541,21 +538,23 @@ drawbar(View *v) {
 | 
				
			||||||
	Client *c;
 | 
						Client *c;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	dc.x = 0;
 | 
						dc.x = 0;
 | 
				
			||||||
	for(c = stack; c && (!isvisible(c) || getview(c) != v); c = c->snext);
 | 
						for(c = stack; c && (!isvisible(c) || c->view != v); c = c->snext);
 | 
				
			||||||
	for(i = 0; i < LENGTH(tags); i++) {
 | 
						for(i = 0; i < LENGTH(tags); i++) {
 | 
				
			||||||
 | 
							if(&views[vtags[i]] != v)
 | 
				
			||||||
 | 
								continue;
 | 
				
			||||||
		dc.w = textw(tags[i]);
 | 
							dc.w = textw(tags[i]);
 | 
				
			||||||
		if(seltags[i]) {
 | 
							if(seltags[i]) {
 | 
				
			||||||
			drawtext(v, tags[i], dc.sel, isurgent(i));
 | 
								drawtext(tags[i], dc.sel, isurgent(i));
 | 
				
			||||||
			drawsquare(v, c && c->tags[i], isoccupied(i), isurgent(i), dc.sel);
 | 
								drawsquare(c && c->tags[i], isoccupied(i), isurgent(i), dc.sel);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else {
 | 
							else {
 | 
				
			||||||
			drawtext(v, tags[i], dc.norm, isurgent(i));
 | 
								drawtext(tags[i], dc.norm, isurgent(i));
 | 
				
			||||||
			drawsquare(v, c && c->tags[i], isoccupied(i), isurgent(i), dc.norm);
 | 
								drawsquare(c && c->tags[i], isoccupied(i), isurgent(i), dc.norm);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		dc.x += dc.w;
 | 
							dc.x += dc.w;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	dc.w = blw;
 | 
						dc.w = blw;
 | 
				
			||||||
	drawtext(v, v->layout->symbol, dc.norm, False);
 | 
						drawtext(v->layout->symbol, dc.norm, False);
 | 
				
			||||||
	x = dc.x + dc.w;
 | 
						x = dc.x + dc.w;
 | 
				
			||||||
	if(v == selview) {
 | 
						if(v == selview) {
 | 
				
			||||||
		dc.w = textw(stext);
 | 
							dc.w = textw(stext);
 | 
				
			||||||
| 
						 | 
					@ -564,25 +563,25 @@ drawbar(View *v) {
 | 
				
			||||||
			dc.x = x;
 | 
								dc.x = x;
 | 
				
			||||||
			dc.w = v->w - x;
 | 
								dc.w = v->w - x;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		drawtext(v, stext, dc.norm, False);
 | 
							drawtext(stext, dc.norm, False);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		dc.x = v->w;
 | 
							dc.x = v->w;
 | 
				
			||||||
	if((dc.w = dc.x - x) > bh) {
 | 
						if((dc.w = dc.x - x) > bh) {
 | 
				
			||||||
		dc.x = x;
 | 
							dc.x = x;
 | 
				
			||||||
		if(c) {
 | 
							if(c) {
 | 
				
			||||||
			drawtext(v, c->name, dc.sel, False);
 | 
								drawtext(c->name, dc.sel, False);
 | 
				
			||||||
			drawsquare(v, False, c->isfloating, False, dc.sel);
 | 
								drawsquare(False, c->isfloating, False, dc.sel);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			drawtext(v, NULL, dc.norm, False);
 | 
								drawtext(NULL, dc.norm, False);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	XCopyArea(dpy, dc.drawable, v->barwin, dc.gc, 0, 0, v->w, bh, 0, 0);
 | 
						XCopyArea(dpy, dc.drawable, v->barwin, dc.gc, 0, 0, v->w, bh, 0, 0);
 | 
				
			||||||
	XSync(dpy, False);
 | 
						XSync(dpy, False);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
drawsquare(View *v, Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]) {
 | 
					drawsquare(Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]) {
 | 
				
			||||||
	int x;
 | 
						int x;
 | 
				
			||||||
	XGCValues gcv;
 | 
						XGCValues gcv;
 | 
				
			||||||
	XRectangle r = { dc.x, dc.y, dc.w, dc.h };
 | 
						XRectangle r = { dc.x, dc.y, dc.w, dc.h };
 | 
				
			||||||
| 
						 | 
					@ -603,7 +602,7 @@ drawsquare(View *v, Bool filled, Bool empty, Bool invert, unsigned long col[ColL
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
drawtext(View *v, const char *text, unsigned long col[ColLast], Bool invert) {
 | 
					drawtext(const char *text, unsigned long col[ColLast], Bool invert) {
 | 
				
			||||||
	int x, y, w, h;
 | 
						int x, y, w, h;
 | 
				
			||||||
	unsigned int len, olen;
 | 
						unsigned int len, olen;
 | 
				
			||||||
	XRectangle r = { dc.x, dc.y, dc.w, dc.h };
 | 
						XRectangle r = { dc.x, dc.y, dc.w, dc.h };
 | 
				
			||||||
| 
						 | 
					@ -680,7 +679,7 @@ expose(XEvent *e) {
 | 
				
			||||||
	View *v;
 | 
						View *v;
 | 
				
			||||||
	XExposeEvent *ev = &e->xexpose;
 | 
						XExposeEvent *ev = &e->xexpose;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(ev->count == 0 && (v = getviewbar(ev->window)))
 | 
						if(ev->count == 0 && ((v = getviewbar(ev->window))))
 | 
				
			||||||
		drawbar(v);
 | 
							drawbar(v);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -698,13 +697,13 @@ void
 | 
				
			||||||
focus(Client *c) {
 | 
					focus(Client *c) {
 | 
				
			||||||
	View *v = selview;
 | 
						View *v = selview;
 | 
				
			||||||
	if(c)
 | 
						if(c)
 | 
				
			||||||
		selview = getview(c);
 | 
							selview = c->view;
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		selview = viewat();
 | 
							selview = viewat();
 | 
				
			||||||
	if(selview != v)
 | 
						if(selview != v)
 | 
				
			||||||
		drawbar(v);
 | 
							drawbar(v);
 | 
				
			||||||
	if(!c || (c && !isvisible(c)))
 | 
						if(!c || (c && !isvisible(c)))
 | 
				
			||||||
		for(c = stack; c && (!isvisible(c) || getview(c) != selview); c = c->snext);
 | 
							for(c = stack; c && (!isvisible(c) || c->view != selview); c = c->snext);
 | 
				
			||||||
	if(sel && sel != c) {
 | 
						if(sel && sel != c) {
 | 
				
			||||||
		grabbuttons(sel, False);
 | 
							grabbuttons(sel, False);
 | 
				
			||||||
		XSetWindowBorder(dpy, sel->win, dc.norm[ColBorder]);
 | 
							XSetWindowBorder(dpy, sel->win, dc.norm[ColBorder]);
 | 
				
			||||||
| 
						 | 
					@ -718,7 +717,7 @@ focus(Client *c) {
 | 
				
			||||||
	if(c) {
 | 
						if(c) {
 | 
				
			||||||
		XSetWindowBorder(dpy, c->win, dc.sel[ColBorder]);
 | 
							XSetWindowBorder(dpy, c->win, dc.sel[ColBorder]);
 | 
				
			||||||
		XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
 | 
							XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
 | 
				
			||||||
		selview = getview(c);
 | 
							selview = c->view;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
 | 
							XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
 | 
				
			||||||
| 
						 | 
					@ -744,7 +743,7 @@ focusnext(const char *arg) {
 | 
				
			||||||
		for(c = clients; c && !isvisible(c); c = c->next);
 | 
							for(c = clients; c && !isvisible(c); c = c->next);
 | 
				
			||||||
	if(c) {
 | 
						if(c) {
 | 
				
			||||||
		focus(c);
 | 
							focus(c);
 | 
				
			||||||
		restack(getview(c));
 | 
							restack(c->view);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -761,7 +760,7 @@ focusprev(const char *arg) {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if(c) {
 | 
						if(c) {
 | 
				
			||||||
		focus(c);
 | 
							focus(c);
 | 
				
			||||||
		restack(getview(c));
 | 
							restack(c->view);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -793,16 +792,6 @@ getviewbar(Window barwin) {
 | 
				
			||||||
	return NULL;
 | 
						return NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
View *
 | 
					 | 
				
			||||||
getview(Client *c) {
 | 
					 | 
				
			||||||
	unsigned int i;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	for(i = 0; i < LENGTH(tags); i++)
 | 
					 | 
				
			||||||
		if(c->tags[i])
 | 
					 | 
				
			||||||
			return &views[c->tags[i] - 1];
 | 
					 | 
				
			||||||
	return &views[0]; /* fallback */
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
long
 | 
					long
 | 
				
			||||||
getstate(Window w) {
 | 
					getstate(Window w) {
 | 
				
			||||||
	int format, status;
 | 
						int format, status;
 | 
				
			||||||
| 
						 | 
					@ -1058,7 +1047,7 @@ manage(Window w, XWindowAttributes *wa) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	applyrules(c);
 | 
						applyrules(c);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	v = getview(c);
 | 
						v = c->view;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	c->x = wa->x + v->x;
 | 
						c->x = wa->x + v->x;
 | 
				
			||||||
	c->y = wa->y + v->y;
 | 
						c->y = wa->y + v->y;
 | 
				
			||||||
| 
						 | 
					@ -1137,7 +1126,7 @@ movemouse(Client *c) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ocx = nx = c->x;
 | 
						ocx = nx = c->x;
 | 
				
			||||||
	ocy = ny = c->y;
 | 
						ocy = ny = c->y;
 | 
				
			||||||
	v = getview(c);
 | 
						v = c->view;
 | 
				
			||||||
	if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
 | 
						if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
 | 
				
			||||||
			None, cursor[CurMove], CurrentTime) != GrabSuccess)
 | 
								None, cursor[CurMove], CurrentTime) != GrabSuccess)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
| 
						 | 
					@ -1176,7 +1165,7 @@ movemouse(Client *c) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Client *
 | 
					Client *
 | 
				
			||||||
nexttiled(Client *c, View *v) {
 | 
					nexttiled(Client *c, View *v) {
 | 
				
			||||||
	for(; c && (c->isfloating || getview(c) != v || !isvisible(c)); c = c->next);
 | 
						for(; c && (c->isfloating || c->view != v || !isvisible(c)); c = c->next);
 | 
				
			||||||
	return c;
 | 
						return c;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1201,7 +1190,7 @@ propertynotify(XEvent *e) {
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case XA_WM_HINTS:
 | 
							case XA_WM_HINTS:
 | 
				
			||||||
			updatewmhints(c);
 | 
								updatewmhints(c);
 | 
				
			||||||
			drawbar(getview(c));
 | 
								drawbar(c->view);
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if(ev->atom == XA_WM_NAME || ev->atom == netatom[NetWMName]) {
 | 
							if(ev->atom == XA_WM_NAME || ev->atom == netatom[NetWMName]) {
 | 
				
			||||||
| 
						 | 
					@ -1234,7 +1223,7 @@ resize(Client *c, int x, int y, int w, int h, Bool sizehints) {
 | 
				
			||||||
	View *v;
 | 
						View *v;
 | 
				
			||||||
	XWindowChanges wc;
 | 
						XWindowChanges wc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	v = getview(c);
 | 
						v = c->view;
 | 
				
			||||||
	if(sizehints) {
 | 
						if(sizehints) {
 | 
				
			||||||
		/* set minimum possible */
 | 
							/* set minimum possible */
 | 
				
			||||||
		if (w < 1)
 | 
							if (w < 1)
 | 
				
			||||||
| 
						 | 
					@ -1305,7 +1294,7 @@ resizemouse(Client *c) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ocx = c->x;
 | 
						ocx = c->x;
 | 
				
			||||||
	ocy = c->y;
 | 
						ocy = c->y;
 | 
				
			||||||
	v = getview(c);
 | 
						v = c->view;
 | 
				
			||||||
	if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
 | 
						if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
 | 
				
			||||||
			None, cursor[CurResize], CurrentTime) != GrabSuccess)
 | 
								None, cursor[CurResize], CurrentTime) != GrabSuccess)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
| 
						 | 
					@ -1484,13 +1473,12 @@ setlayout(const char *arg) {
 | 
				
			||||||
	if(sel)
 | 
						if(sel)
 | 
				
			||||||
		arrange();
 | 
							arrange();
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		drawbar(v);
 | 
							drawbar(selview);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
setmwfact(const char *arg) {
 | 
					setmwfact(const char *arg) {
 | 
				
			||||||
	double delta;
 | 
						double delta;
 | 
				
			||||||
 | 
					 | 
				
			||||||
	View *v = selview;
 | 
						View *v = selview;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(!domwfact)
 | 
						if(!domwfact)
 | 
				
			||||||
| 
						 | 
					@ -1537,7 +1525,7 @@ setup(void) {
 | 
				
			||||||
isxinerama = True;
 | 
					isxinerama = True;
 | 
				
			||||||
nviews = 2; /* aim Xinerama */
 | 
					nviews = 2; /* aim Xinerama */
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	selview = views = emallocz(nviews * sizeof(View));
 | 
						views = emallocz(nviews * sizeof(View));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	screen = DefaultScreen(dpy);
 | 
						screen = DefaultScreen(dpy);
 | 
				
			||||||
	root = RootWindow(dpy, screen);
 | 
						root = RootWindow(dpy, screen);
 | 
				
			||||||
| 
						 | 
					@ -1627,10 +1615,10 @@ v->h = DisplayHeight(dpy, screen);
 | 
				
			||||||
	if(info)
 | 
						if(info)
 | 
				
			||||||
		XFree(info);
 | 
							XFree(info);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						selview = viewat();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* grab keys */
 | 
						/* grab keys */
 | 
				
			||||||
	grabkeys();
 | 
						grabkeys();
 | 
				
			||||||
 | 
					 | 
				
			||||||
	selview = &views[0];
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
| 
						 | 
					@ -1990,8 +1978,8 @@ zoom(const char *arg) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(!sel || !dozoom || sel->isfloating)
 | 
						if(!sel || !dozoom || sel->isfloating)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	if(c == nexttiled(clients, getview(c)))
 | 
						if(c == nexttiled(clients, c->view))
 | 
				
			||||||
		if(!(c = nexttiled(c->next, getview(c))))
 | 
							if(!(c = nexttiled(c->next, c->view)))
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
	detach(c);
 | 
						detach(c);
 | 
				
			||||||
	attach(c);
 | 
						attach(c);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue