removed Monitor->dc, unnecessary
This commit is contained in:
		
							parent
							
								
									191cb9ce28
								
							
						
					
					
						commit
						c2737b7b93
					
				
							
								
								
									
										247
									
								
								dwm.c
									
									
									
									
									
								
							
							
						
						
									
										247
									
								
								dwm.c
									
									
									
									
									
								
							@ -117,10 +117,9 @@ typedef struct {
 | 
			
		||||
} Regs;
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
	int screen;
 | 
			
		||||
	int monitor;
 | 
			
		||||
	Window barwin;
 | 
			
		||||
	int sx, sy, sw, sh, wax, way, wah, waw;
 | 
			
		||||
	DC dc;
 | 
			
		||||
	Bool *seltags;
 | 
			
		||||
	Bool *prevtags;
 | 
			
		||||
	Layout *layout;
 | 
			
		||||
@ -156,13 +155,13 @@ void focusin(XEvent *e);
 | 
			
		||||
void focusnext(const char *arg);
 | 
			
		||||
void focusprev(const char *arg);
 | 
			
		||||
Client *getclient(Window w);
 | 
			
		||||
unsigned long getcolor(const char *colstr, int screen);
 | 
			
		||||
unsigned long getcolor(const char *colstr);
 | 
			
		||||
long getstate(Window w);
 | 
			
		||||
Bool gettextprop(Window w, Atom atom, char *text, unsigned int size);
 | 
			
		||||
void grabbuttons(Client *c, Bool focused);
 | 
			
		||||
void grabkeys(void);
 | 
			
		||||
unsigned int idxoftag(const char *tag);
 | 
			
		||||
void initfont(Monitor*, const char *fontstr);
 | 
			
		||||
void initfont(const char *fontstr);
 | 
			
		||||
Bool isoccupied(unsigned int monitor, unsigned int t);
 | 
			
		||||
Bool isprotodel(Client *c);
 | 
			
		||||
Bool isurgent(unsigned int monitor, unsigned int t);
 | 
			
		||||
@ -188,8 +187,8 @@ void setmwfact(const char *arg);
 | 
			
		||||
void setup(void);
 | 
			
		||||
void spawn(const char *arg);
 | 
			
		||||
void tag(const char *arg);
 | 
			
		||||
unsigned int textnw(Monitor*, const char *text, unsigned int len);
 | 
			
		||||
unsigned int textw(Monitor*, const char *text);
 | 
			
		||||
unsigned int textnw(const char *text, unsigned int len);
 | 
			
		||||
unsigned int textw(const char *text);
 | 
			
		||||
void tile(void);
 | 
			
		||||
void togglebar(const char *arg);
 | 
			
		||||
void togglefloating(const char *arg);
 | 
			
		||||
@ -216,6 +215,7 @@ void selectmonitor(const char *arg);
 | 
			
		||||
char stext[256];
 | 
			
		||||
int mcount = 1;
 | 
			
		||||
int selmonitor = 0;
 | 
			
		||||
int screen;
 | 
			
		||||
int (*xerrorxlib)(Display *, XErrorEvent *);
 | 
			
		||||
unsigned int bh, bpos;
 | 
			
		||||
unsigned int blw = 0;
 | 
			
		||||
@ -343,7 +343,7 @@ buttonpress(XEvent *e) {
 | 
			
		||||
	if(ev->window == m->barwin) {
 | 
			
		||||
		x = 0;
 | 
			
		||||
		for(i = 0; i < LENGTH(tags); i++) {
 | 
			
		||||
			x += textw(m, tags[i]);
 | 
			
		||||
			x += textw(tags[i]);
 | 
			
		||||
			if(ev->x < x) {
 | 
			
		||||
				if(ev->button == Button1) {
 | 
			
		||||
					if(ev->state & MODKEY)
 | 
			
		||||
@ -408,22 +408,21 @@ cleanup(void) {
 | 
			
		||||
		unban(stack);
 | 
			
		||||
		unmanage(stack);
 | 
			
		||||
	}
 | 
			
		||||
	for(i = 0; i < mcount; i++) {
 | 
			
		||||
		Monitor *m = &monitors[i];
 | 
			
		||||
		if(m->dc.font.set)
 | 
			
		||||
			XFreeFontSet(dpy, m->dc.font.set);
 | 
			
		||||
		else
 | 
			
		||||
			XFreeFont(dpy, m->dc.font.xfont);
 | 
			
		||||
		XUngrabKey(dpy, AnyKey, AnyModifier, root);
 | 
			
		||||
		XFreePixmap(dpy, m->dc.drawable);
 | 
			
		||||
		XFreeGC(dpy, m->dc.gc);
 | 
			
		||||
		XDestroyWindow(dpy, m->barwin);
 | 
			
		||||
		XFreeCursor(dpy, cursor[CurNormal]);
 | 
			
		||||
		XFreeCursor(dpy, cursor[CurResize]);
 | 
			
		||||
		XFreeCursor(dpy, cursor[CurMove]);
 | 
			
		||||
		XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
 | 
			
		||||
		XSync(dpy, False);
 | 
			
		||||
	}
 | 
			
		||||
	if(dc.font.set)
 | 
			
		||||
		XFreeFontSet(dpy, dc.font.set);
 | 
			
		||||
	else
 | 
			
		||||
		XFreeFont(dpy, dc.font.xfont);
 | 
			
		||||
 | 
			
		||||
	XUngrabKey(dpy, AnyKey, AnyModifier, root);
 | 
			
		||||
	XFreePixmap(dpy, dc.drawable);
 | 
			
		||||
	XFreeGC(dpy, dc.gc);
 | 
			
		||||
	XFreeCursor(dpy, cursor[CurNormal]);
 | 
			
		||||
	XFreeCursor(dpy, cursor[CurResize]);
 | 
			
		||||
	XFreeCursor(dpy, cursor[CurMove]);
 | 
			
		||||
	for(i = 0; i < mcount; i++)
 | 
			
		||||
		XDestroyWindow(dpy, monitors[i].barwin);
 | 
			
		||||
	XSync(dpy, False);
 | 
			
		||||
	XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
@ -476,10 +475,11 @@ configurenotify(XEvent *e) {
 | 
			
		||||
	Monitor *m = &monitors[selmonitor];
 | 
			
		||||
 | 
			
		||||
	if(ev->window == root && (ev->width != m->sw || ev->height != m->sh)) {
 | 
			
		||||
		/* TODO -- update Xinerama dimensions here */
 | 
			
		||||
		m->sw = ev->width;
 | 
			
		||||
		m->sh = ev->height;
 | 
			
		||||
		XFreePixmap(dpy, dc.drawable);
 | 
			
		||||
		dc.drawable = XCreatePixmap(dpy, root, m->sw, bh, DefaultDepth(dpy, m->screen));
 | 
			
		||||
		dc.drawable = XCreatePixmap(dpy, root, DisplayWidth(root, screen), bh, DefaultDepth(dpy, screen));
 | 
			
		||||
		XResizeWindow(dpy, m->barwin, m->sw, bh);
 | 
			
		||||
		updatebarpos(m);
 | 
			
		||||
		arrange();
 | 
			
		||||
@ -566,47 +566,47 @@ drawbar(void) {
 | 
			
		||||
 | 
			
		||||
	for(i = 0; i < mcount; i++) {
 | 
			
		||||
		Monitor *m = &monitors[i];
 | 
			
		||||
		m->dc.x = 0;
 | 
			
		||||
		dc.x = 0;
 | 
			
		||||
		for(c = stack; c && !isvisible(c, i); c = c->snext);
 | 
			
		||||
		fprintf(stderr, "m%d %s\n", i, c ? c->name : "NIL");
 | 
			
		||||
		for(j = 0; j < LENGTH(tags); j++) {
 | 
			
		||||
			m->dc.w = textw(m, tags[j]);
 | 
			
		||||
			dc.w = textw(tags[j]);
 | 
			
		||||
			if(m->seltags[j]) {
 | 
			
		||||
				drawtext(m, tags[j], m->dc.sel, isurgent(i, j));
 | 
			
		||||
				drawtext(m, tags[j], dc.sel, isurgent(i, j));
 | 
			
		||||
				drawsquare(m, c && c->tags[j] && c->monitor == i,
 | 
			
		||||
						isoccupied(i, j), isurgent(i, j), m->dc.sel);
 | 
			
		||||
						isoccupied(i, j), isurgent(i, j), dc.sel);
 | 
			
		||||
			}
 | 
			
		||||
			else {
 | 
			
		||||
				drawtext(m, tags[j], m->dc.norm, isurgent(i, j));
 | 
			
		||||
				drawtext(m, tags[j], dc.norm, isurgent(i, j));
 | 
			
		||||
				drawsquare(m, c && c->tags[j] && c->monitor == i,
 | 
			
		||||
						isoccupied(i, j), isurgent(i, j), m->dc.norm);
 | 
			
		||||
						isoccupied(i, j), isurgent(i, j), dc.norm);
 | 
			
		||||
			}
 | 
			
		||||
			m->dc.x += m->dc.w;
 | 
			
		||||
			dc.x += dc.w;
 | 
			
		||||
		}
 | 
			
		||||
		m->dc.w = blw;
 | 
			
		||||
		drawtext(m, m->layout->symbol, m->dc.norm, False);
 | 
			
		||||
		x = m->dc.x + m->dc.w;
 | 
			
		||||
		dc.w = blw;
 | 
			
		||||
		drawtext(m, m->layout->symbol, dc.norm, False);
 | 
			
		||||
		x = dc.x + dc.w;
 | 
			
		||||
		if(i == selmonitor) {
 | 
			
		||||
			m->dc.w = textw(m, stext);
 | 
			
		||||
			m->dc.x = m->sw - m->dc.w;
 | 
			
		||||
			if(m->dc.x < x) {
 | 
			
		||||
				m->dc.x = x;
 | 
			
		||||
				m->dc.w = m->sw - x;
 | 
			
		||||
			dc.w = textw(stext);
 | 
			
		||||
			dc.x = m->sw - dc.w;
 | 
			
		||||
			if(dc.x < x) {
 | 
			
		||||
				dc.x = x;
 | 
			
		||||
				dc.w = m->sw - x;
 | 
			
		||||
			}
 | 
			
		||||
			drawtext(m, stext, m->dc.norm, False);
 | 
			
		||||
			drawtext(m, stext, dc.norm, False);
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
			m->dc.x = m->sw;
 | 
			
		||||
		if((m->dc.w = m->dc.x - x) > bh) {
 | 
			
		||||
			m->dc.x = x;
 | 
			
		||||
			dc.x = m->sw;
 | 
			
		||||
		if((dc.w = dc.x - x) > bh) {
 | 
			
		||||
			dc.x = x;
 | 
			
		||||
			if(c) {
 | 
			
		||||
				drawtext(m, c->name, m->dc.sel, False);
 | 
			
		||||
				drawsquare(m, False, c->isfloating, False, m->dc.sel);
 | 
			
		||||
				drawtext(m, c->name, dc.sel, False);
 | 
			
		||||
				drawsquare(m, False, c->isfloating, False, dc.sel);
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
				drawtext(m, NULL, m->dc.norm, False);
 | 
			
		||||
				drawtext(m, NULL, dc.norm, False);
 | 
			
		||||
		}
 | 
			
		||||
		XCopyArea(dpy, m->dc.drawable, m->barwin, m->dc.gc, 0, 0, m->sw, bh, 0, 0);
 | 
			
		||||
		XCopyArea(dpy, dc.drawable, m->barwin, dc.gc, 0, 0, m->sw, bh, 0, 0);
 | 
			
		||||
		XSync(dpy, False);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -615,20 +615,20 @@ void
 | 
			
		||||
drawsquare(Monitor *m, Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]) {
 | 
			
		||||
	int x;
 | 
			
		||||
	XGCValues gcv;
 | 
			
		||||
	XRectangle r = { m->dc.x, m->dc.y, m->dc.w, m->dc.h };
 | 
			
		||||
	XRectangle r = { dc.x, dc.y, dc.w, dc.h };
 | 
			
		||||
 | 
			
		||||
	gcv.foreground = col[invert ? ColBG : ColFG];
 | 
			
		||||
	XChangeGC(dpy, m->dc.gc, GCForeground, &gcv);
 | 
			
		||||
	x = (m->dc.font.ascent + m->dc.font.descent + 2) / 4;
 | 
			
		||||
	r.x = m->dc.x + 1;
 | 
			
		||||
	r.y = m->dc.y + 1;
 | 
			
		||||
	XChangeGC(dpy, dc.gc, GCForeground, &gcv);
 | 
			
		||||
	x = (dc.font.ascent + dc.font.descent + 2) / 4;
 | 
			
		||||
	r.x = dc.x + 1;
 | 
			
		||||
	r.y = dc.y + 1;
 | 
			
		||||
	if(filled) {
 | 
			
		||||
		r.width = r.height = x + 1;
 | 
			
		||||
		XFillRectangles(dpy, m->dc.drawable, m->dc.gc, &r, 1);
 | 
			
		||||
		XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
 | 
			
		||||
	}
 | 
			
		||||
	else if(empty) {
 | 
			
		||||
		r.width = r.height = x;
 | 
			
		||||
		XDrawRectangles(dpy, m->dc.drawable, m->dc.gc, &r, 1);
 | 
			
		||||
		XDrawRectangles(dpy, dc.drawable, dc.gc, &r, 1);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -637,10 +637,10 @@ drawtext(Monitor *m, const char *text, unsigned long col[ColLast], Bool invert)
 | 
			
		||||
	int x, y, w, h;
 | 
			
		||||
	static char buf[256];
 | 
			
		||||
	unsigned int len, olen;
 | 
			
		||||
	XRectangle r = { m->dc.x, m->dc.y, m->dc.w, m->dc.h };
 | 
			
		||||
	XRectangle r = { dc.x, dc.y, dc.w, dc.h };
 | 
			
		||||
 | 
			
		||||
	XSetForeground(dpy, m->dc.gc, col[invert ? ColFG : ColBG]);
 | 
			
		||||
	XFillRectangles(dpy, m->dc.drawable, m->dc.gc, &r, 1);
 | 
			
		||||
	XSetForeground(dpy, dc.gc, col[invert ? ColFG : ColBG]);
 | 
			
		||||
	XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
 | 
			
		||||
	if(!text)
 | 
			
		||||
		return;
 | 
			
		||||
	w = 0;
 | 
			
		||||
@ -649,11 +649,11 @@ drawtext(Monitor *m, const char *text, unsigned long col[ColLast], Bool invert)
 | 
			
		||||
		len = sizeof buf - 1;
 | 
			
		||||
	memcpy(buf, text, len);
 | 
			
		||||
	buf[len] = 0;
 | 
			
		||||
	h = m->dc.font.ascent + m->dc.font.descent;
 | 
			
		||||
	y = m->dc.y + (m->dc.h / 2) - (h / 2) + m->dc.font.ascent;
 | 
			
		||||
	x = m->dc.x + (h / 2);
 | 
			
		||||
	h = dc.font.ascent + dc.font.descent;
 | 
			
		||||
	y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent;
 | 
			
		||||
	x = dc.x + (h / 2);
 | 
			
		||||
	/* shorten text if necessary */
 | 
			
		||||
	while(len && (w = textnw(m, buf, len)) > m->dc.w - h)
 | 
			
		||||
	while(len && (w = textnw(buf, len)) > dc.w - h)
 | 
			
		||||
		buf[--len] = 0;
 | 
			
		||||
	if(len < olen) {
 | 
			
		||||
		if(len > 1)
 | 
			
		||||
@ -663,13 +663,13 @@ drawtext(Monitor *m, const char *text, unsigned long col[ColLast], Bool invert)
 | 
			
		||||
		if(len > 3)
 | 
			
		||||
			buf[len - 3] = '.';
 | 
			
		||||
	}
 | 
			
		||||
	if(w > m->dc.w)
 | 
			
		||||
	if(w > dc.w)
 | 
			
		||||
		return; /* too long */
 | 
			
		||||
	XSetForeground(dpy, m->dc.gc, col[invert ? ColBG : ColFG]);
 | 
			
		||||
	if(m->dc.font.set)
 | 
			
		||||
		XmbDrawString(dpy, m->dc.drawable, m->dc.font.set, m->dc.gc, x, y, buf, len);
 | 
			
		||||
	XSetForeground(dpy, dc.gc, col[invert ? ColBG : ColFG]);
 | 
			
		||||
	if(dc.font.set)
 | 
			
		||||
		XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len);
 | 
			
		||||
	else
 | 
			
		||||
		XDrawString(dpy, m->dc.drawable, m->dc.gc, x, y, buf, len);
 | 
			
		||||
		XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void *
 | 
			
		||||
@ -740,7 +740,7 @@ focus(Client *c) {
 | 
			
		||||
		for(c = stack; c && !isvisible(c, c->monitor); c = c->snext);
 | 
			
		||||
	if(sel && sel != c) {
 | 
			
		||||
		grabbuttons(sel, False);
 | 
			
		||||
		XSetWindowBorder(dpy, sel->win, monitors[sel->monitor].dc.norm[ColBorder]);
 | 
			
		||||
		XSetWindowBorder(dpy, sel->win, dc.norm[ColBorder]);
 | 
			
		||||
	}
 | 
			
		||||
	if(c) {
 | 
			
		||||
		detachstack(c);
 | 
			
		||||
@ -750,7 +750,7 @@ focus(Client *c) {
 | 
			
		||||
	sel = c;
 | 
			
		||||
	drawbar();
 | 
			
		||||
	if(c) {
 | 
			
		||||
		XSetWindowBorder(dpy, c->win, m->dc.sel[ColBorder]);
 | 
			
		||||
		XSetWindowBorder(dpy, c->win, dc.sel[ColBorder]);
 | 
			
		||||
		XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
 | 
			
		||||
		selmonitor = c->monitor;
 | 
			
		||||
	}
 | 
			
		||||
@ -809,7 +809,7 @@ getclient(Window w) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
unsigned long
 | 
			
		||||
getcolor(const char *colstr, int screen) {
 | 
			
		||||
getcolor(const char *colstr) {
 | 
			
		||||
	Colormap cmap = DefaultColormap(dpy, screen);
 | 
			
		||||
	XColor color;
 | 
			
		||||
 | 
			
		||||
@ -937,45 +937,45 @@ idxoftag(const char *tag) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
initfont(Monitor *m, const char *fontstr) {
 | 
			
		||||
initfont(const char *fontstr) {
 | 
			
		||||
	char *def, **missing;
 | 
			
		||||
	int i, n;
 | 
			
		||||
 | 
			
		||||
	missing = NULL;
 | 
			
		||||
	if(m->dc.font.set)
 | 
			
		||||
		XFreeFontSet(dpy, m->dc.font.set);
 | 
			
		||||
	m->dc.font.set = XCreateFontSet(dpy, fontstr, &missing, &n, &def);
 | 
			
		||||
	if(dc.font.set)
 | 
			
		||||
		XFreeFontSet(dpy, dc.font.set);
 | 
			
		||||
	dc.font.set = XCreateFontSet(dpy, fontstr, &missing, &n, &def);
 | 
			
		||||
	if(missing) {
 | 
			
		||||
		while(n--)
 | 
			
		||||
			fprintf(stderr, "dwm: missing fontset: %s\n", missing[n]);
 | 
			
		||||
		XFreeStringList(missing);
 | 
			
		||||
	}
 | 
			
		||||
	if(m->dc.font.set) {
 | 
			
		||||
	if(dc.font.set) {
 | 
			
		||||
		XFontSetExtents *font_extents;
 | 
			
		||||
		XFontStruct **xfonts;
 | 
			
		||||
		char **font_names;
 | 
			
		||||
		m->dc.font.ascent = m->dc.font.descent = 0;
 | 
			
		||||
		font_extents = XExtentsOfFontSet(m->dc.font.set);
 | 
			
		||||
		n = XFontsOfFontSet(m->dc.font.set, &xfonts, &font_names);
 | 
			
		||||
		for(i = 0, m->dc.font.ascent = 0, m->dc.font.descent = 0; i < n; i++) {
 | 
			
		||||
			if(m->dc.font.ascent < (*xfonts)->ascent)
 | 
			
		||||
				m->dc.font.ascent = (*xfonts)->ascent;
 | 
			
		||||
			if(m->dc.font.descent < (*xfonts)->descent)
 | 
			
		||||
				m->dc.font.descent = (*xfonts)->descent;
 | 
			
		||||
		dc.font.ascent = dc.font.descent = 0;
 | 
			
		||||
		font_extents = XExtentsOfFontSet(dc.font.set);
 | 
			
		||||
		n = XFontsOfFontSet(dc.font.set, &xfonts, &font_names);
 | 
			
		||||
		for(i = 0, dc.font.ascent = 0, dc.font.descent = 0; i < n; i++) {
 | 
			
		||||
			if(dc.font.ascent < (*xfonts)->ascent)
 | 
			
		||||
				dc.font.ascent = (*xfonts)->ascent;
 | 
			
		||||
			if(dc.font.descent < (*xfonts)->descent)
 | 
			
		||||
				dc.font.descent = (*xfonts)->descent;
 | 
			
		||||
			xfonts++;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	else {
 | 
			
		||||
		if(m->dc.font.xfont)
 | 
			
		||||
			XFreeFont(dpy, m->dc.font.xfont);
 | 
			
		||||
		m->dc.font.xfont = NULL;
 | 
			
		||||
		if(!(m->dc.font.xfont = XLoadQueryFont(dpy, fontstr))
 | 
			
		||||
		&& !(m->dc.font.xfont = XLoadQueryFont(dpy, "fixed")))
 | 
			
		||||
		if(dc.font.xfont)
 | 
			
		||||
			XFreeFont(dpy, dc.font.xfont);
 | 
			
		||||
		dc.font.xfont = NULL;
 | 
			
		||||
		if(!(dc.font.xfont = XLoadQueryFont(dpy, fontstr))
 | 
			
		||||
		&& !(dc.font.xfont = XLoadQueryFont(dpy, "fixed")))
 | 
			
		||||
			eprint("error, cannot load font: '%s'\n", fontstr);
 | 
			
		||||
		m->dc.font.ascent = m->dc.font.xfont->ascent;
 | 
			
		||||
		m->dc.font.descent = m->dc.font.xfont->descent;
 | 
			
		||||
		dc.font.ascent = dc.font.xfont->ascent;
 | 
			
		||||
		dc.font.descent = dc.font.xfont->descent;
 | 
			
		||||
	}
 | 
			
		||||
	m->dc.font.height = m->dc.font.ascent + m->dc.font.descent;
 | 
			
		||||
	dc.font.height = dc.font.ascent + dc.font.descent;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Bool
 | 
			
		||||
@ -1101,7 +1101,7 @@ manage(Window w, XWindowAttributes *wa) {
 | 
			
		||||
	}
 | 
			
		||||
	wc.border_width = c->border;
 | 
			
		||||
	XConfigureWindow(dpy, w, CWBorderWidth, &wc);
 | 
			
		||||
	XSetWindowBorder(dpy, w, m->dc.norm[ColBorder]);
 | 
			
		||||
	XSetWindowBorder(dpy, w, dc.norm[ColBorder]);
 | 
			
		||||
	configure(c); /* propagates border_width, if size doesn't change */
 | 
			
		||||
	updatesizehints(c);
 | 
			
		||||
	XSelectInput(dpy, w, EnterWindowMask | FocusChangeMask | PropertyChangeMask | StructureNotifyMask);
 | 
			
		||||
@ -1549,7 +1549,7 @@ setmwfact(const char *arg) {
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
setup(void) {
 | 
			
		||||
	unsigned int i, j, k;
 | 
			
		||||
	unsigned int i;
 | 
			
		||||
	Monitor *m;
 | 
			
		||||
	XSetWindowAttributes wa;
 | 
			
		||||
	XineramaScreenInfo *info = NULL;
 | 
			
		||||
@ -1573,13 +1573,34 @@ setup(void) {
 | 
			
		||||
		info = XineramaQueryScreens(dpy, &mcount);
 | 
			
		||||
	monitors = emallocz(mcount * sizeof(Monitor));
 | 
			
		||||
 | 
			
		||||
	root = DefaultRootWindow(dpy);
 | 
			
		||||
	screen = DefaultScreen(dpy);
 | 
			
		||||
	root = RootWindow(dpy, screen);
 | 
			
		||||
 | 
			
		||||
	/* init appearance */
 | 
			
		||||
	dc.norm[ColBorder] = getcolor(NORMBORDERCOLOR);
 | 
			
		||||
	dc.norm[ColBG] = getcolor(NORMBGCOLOR);
 | 
			
		||||
	dc.norm[ColFG] = getcolor(NORMFGCOLOR);
 | 
			
		||||
	dc.sel[ColBorder] = getcolor(SELBORDERCOLOR);
 | 
			
		||||
	dc.sel[ColBG] = getcolor(SELBGCOLOR);
 | 
			
		||||
	dc.sel[ColFG] = getcolor(SELFGCOLOR);
 | 
			
		||||
	initfont(FONT);
 | 
			
		||||
	dc.h = bh = dc.font.height + 2;
 | 
			
		||||
	dc.drawable = XCreatePixmap(dpy, root, DisplayWidth(dpy, screen), bh, DefaultDepth(dpy, screen));
 | 
			
		||||
	dc.gc = XCreateGC(dpy, root, 0, 0);
 | 
			
		||||
	XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
 | 
			
		||||
	if(!dc.font.set)
 | 
			
		||||
		XSetFont(dpy, dc.gc, dc.font.xfont->fid);
 | 
			
		||||
 | 
			
		||||
	for(blw = i = 0; i < LENGTH(layouts); i++) {
 | 
			
		||||
		i = textw(layouts[i].symbol);
 | 
			
		||||
		if(i > blw)
 | 
			
		||||
			blw = i;
 | 
			
		||||
	}
 | 
			
		||||
	for(i = 0; i < mcount; i++) {
 | 
			
		||||
		/* init geometry */
 | 
			
		||||
		m = &monitors[i];
 | 
			
		||||
 | 
			
		||||
		m->screen = isxinerama ? 0 : i;
 | 
			
		||||
		m->monitor = i;
 | 
			
		||||
 | 
			
		||||
		if (mcount != 1 && isxinerama) {
 | 
			
		||||
			m->sx = info[i].x_org;
 | 
			
		||||
@ -1591,8 +1612,8 @@ setup(void) {
 | 
			
		||||
		else {
 | 
			
		||||
			m->sx = 0;
 | 
			
		||||
			m->sy = 0;
 | 
			
		||||
			m->sw = DisplayWidth(dpy, m->screen);
 | 
			
		||||
			m->sh = DisplayHeight(dpy, m->screen);
 | 
			
		||||
			m->sw = DisplayWidth(dpy, screen);
 | 
			
		||||
			m->sh = DisplayHeight(dpy, screen);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		m->seltags = emallocz(sizeof initags);
 | 
			
		||||
@ -1601,24 +1622,9 @@ setup(void) {
 | 
			
		||||
		memcpy(m->seltags, initags, sizeof initags);
 | 
			
		||||
		memcpy(m->prevtags, initags, sizeof initags);
 | 
			
		||||
 | 
			
		||||
		/* init appearance */
 | 
			
		||||
		m->dc.norm[ColBorder] = getcolor(NORMBORDERCOLOR, m->screen);
 | 
			
		||||
		m->dc.norm[ColBG] = getcolor(NORMBGCOLOR, m->screen);
 | 
			
		||||
		m->dc.norm[ColFG] = getcolor(NORMFGCOLOR, m->screen);
 | 
			
		||||
		m->dc.sel[ColBorder] = getcolor(SELBORDERCOLOR, m->screen);
 | 
			
		||||
		m->dc.sel[ColBG] = getcolor(SELBGCOLOR, m->screen);
 | 
			
		||||
		m->dc.sel[ColFG] = getcolor(SELFGCOLOR, m->screen);
 | 
			
		||||
		initfont(m, FONT);
 | 
			
		||||
		m->dc.h = bh = m->dc.font.height + 2;
 | 
			
		||||
 | 
			
		||||
		/* init layouts */
 | 
			
		||||
		m->mwfact = MWFACT;
 | 
			
		||||
		m->layout = &layouts[0];
 | 
			
		||||
		for(blw = k = 0; k < LENGTH(layouts); k++) {
 | 
			
		||||
			j = textw(m, layouts[k].symbol);
 | 
			
		||||
			if(j > blw)
 | 
			
		||||
				blw = j;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// TODO: bpos per screen?
 | 
			
		||||
		bpos = BARPOS;
 | 
			
		||||
@ -1628,17 +1634,12 @@ setup(void) {
 | 
			
		||||
 | 
			
		||||
		/* init bars */
 | 
			
		||||
		m->barwin = XCreateWindow(dpy, root, m->sx, m->sy, m->sw, bh, 0,
 | 
			
		||||
				DefaultDepth(dpy, m->screen), CopyFromParent, DefaultVisual(dpy, m->screen),
 | 
			
		||||
				DefaultDepth(dpy, screen), CopyFromParent, DefaultVisual(dpy, screen),
 | 
			
		||||
				CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
 | 
			
		||||
		XDefineCursor(dpy, m->barwin, cursor[CurNormal]);
 | 
			
		||||
		updatebarpos(m);
 | 
			
		||||
		XMapRaised(dpy, m->barwin);
 | 
			
		||||
		strcpy(stext, "dwm-"VERSION);
 | 
			
		||||
		m->dc.drawable = XCreatePixmap(dpy, root, m->sw, bh, DefaultDepth(dpy, m->screen));
 | 
			
		||||
		m->dc.gc = XCreateGC(dpy, root, 0, 0);
 | 
			
		||||
		XSetLineAttributes(dpy, m->dc.gc, 1, LineSolid, CapButt, JoinMiter);
 | 
			
		||||
		if(!m->dc.font.set)
 | 
			
		||||
			XSetFont(dpy, m->dc.gc, m->dc.font.xfont->fid);
 | 
			
		||||
 | 
			
		||||
		/* EWMH support per monitor */
 | 
			
		||||
		XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32,
 | 
			
		||||
@ -1700,19 +1701,19 @@ tag(const char *arg) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
unsigned int
 | 
			
		||||
textnw(Monitor *m, const char *text, unsigned int len) {
 | 
			
		||||
textnw(const char *text, unsigned int len) {
 | 
			
		||||
	XRectangle r;
 | 
			
		||||
 | 
			
		||||
	if(m->dc.font.set) {
 | 
			
		||||
		XmbTextExtents(m->dc.font.set, text, len, NULL, &r);
 | 
			
		||||
	if(dc.font.set) {
 | 
			
		||||
		XmbTextExtents(dc.font.set, text, len, NULL, &r);
 | 
			
		||||
		return r.width;
 | 
			
		||||
	}
 | 
			
		||||
	return XTextWidth(m->dc.font.xfont, text, len);
 | 
			
		||||
	return XTextWidth(dc.font.xfont, text, len);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
unsigned int
 | 
			
		||||
textw(Monitor *m, const char *text) {
 | 
			
		||||
	return textnw(m, text, strlen(text)) + m->dc.font.height;
 | 
			
		||||
textw(const char *text) {
 | 
			
		||||
	return textnw(text, strlen(text)) + dc.font.height;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user