diff options
| author | Anselm R Garbe <garbeam@gmail.com> | 2009-09-16 15:59:54 +0100 | 
|---|---|---|
| committer | Anselm R Garbe <garbeam@gmail.com> | 2009-09-16 15:59:54 +0100 | 
| commit | e7300e0f6f10900b50d15ea3ae8949049431e38b (patch) | |
| tree | ce34061c30753459c45631b088554ad06f118c68 | |
| parent | c3feffa1e25da4c39a31d7ae76637bacb0444042 (diff) | |
implemented dynamic layout symbol stuff
| -rw-r--r-- | dwm.1 | 15 | ||||
| -rw-r--r-- | dwm.c | 37 | 
2 files changed, 25 insertions, 27 deletions
| @@ -20,14 +20,13 @@ Windows are grouped by tags. Each window can be tagged with one or multiple  tags. Selecting certain tags displays all windows with these tags.  .P  Each screen contains a small status bar which displays all available tags, the -layout, the number of visible windows, the title of the focused window, and the -text read from the root window name property, if the screen is focused. A -floating window is indicated with an empty square and a maximised floating -window is indicated with a filled square before the windows title.  The -selected tags are indicated with a different color. The tags of the focused -window are indicated with a filled square in the top left corner.  The tags -which are applied to one or more windows are indicated with an empty square in -the top left corner. +layout, the title of the focused window, and the text read from the root window +name property, if the screen is focused. A floating window is indicated with an +empty square and a maximised floating window is indicated with a filled square +before the windows title.  The selected tags are indicated with a different +color. The tags of the focused window are indicated with a filled square in the +top left corner.  The tags which are applied to one or more windows are +indicated with an empty square in the top left corner.  .P  dwm draws a small border around windows to indicate the focus state.  .SH OPTIONS @@ -121,6 +121,7 @@ typedef struct {  } Layout;  struct Monitor { +	const char *ltsymbol;  	float mfact;  	int num;  	int by;               /* bar geometry */ @@ -238,7 +239,7 @@ static void zoom(const Arg *arg);  /* variables */  static const char broken[] = "broken"; -static char stext[256], ntext[8]; +static char stext[256];  static int screen;  static int sw, sh;           /* X display screen geometry width, height */  static int bh, blw = 0;      /* bar geometry */ @@ -384,6 +385,7 @@ arrange(void) {  		showhide(m->stack);  	focus(NULL);  	for(m = mons; m; m = m->next) { +		m->ltsymbol = m->lt[m->sellt]->symbol;  		if(m->lt[m->sellt]->arrange)  			m->lt[m->sellt]->arrange(m);  		restack(m); @@ -649,13 +651,11 @@ dirtomon(int dir) {  void  drawbar(Monitor *m) {  	int x; -	unsigned int i, n = 0, occ = 0, urg = 0; +	unsigned int i, occ = 0, urg = 0;  	unsigned long *col;  	Client *c;  	for(c = m->clients; c; c = c->next) { -		if(ISVISIBLE(c)) -			n++;  		occ |= c->tags;  		if(c->isurgent)  			urg |= c->tags; @@ -669,15 +669,10 @@ drawbar(Monitor *m) {  		           occ & 1 << i, urg & 1 << i, col);  		dc.x += dc.w;  	} -	if(blw > 0) { -		dc.w = blw; -		drawtext(m->lt[m->sellt]->symbol, dc.norm, False); -		dc.x += dc.w; -	} -	snprintf(ntext, sizeof ntext, "%u", n); -	dc.w = TEXTW(ntext); -	drawtext(ntext, dc.norm, False); -	x = (dc.x += dc.w); +	dc.w = blw = TEXTW(m->ltsymbol); +	drawtext(m->ltsymbol, dc.norm, False); +	dc.x += dc.w; +	x = dc.x;  	if(m == selmon) { /* status is only drawn on selected monitor */  		dc.w = TEXTW(stext);  		dc.x = m->ww - dc.w; @@ -1137,8 +1132,17 @@ maprequest(XEvent *e) {  void  monocle(Monitor *m) { +	static char ntext[8]; +	unsigned int n = 0;  	Client *c; +	for(c = m->clients; c; c = c->next) +		if(ISVISIBLE(c)) +			n++; +	if(n > 0) { /* override layout symbol */ +		snprintf(ntext, sizeof ntext, "[%d]", n); +		m->ltsymbol = ntext; +	}  	for(c = nexttiled(m->clients); c; c = nexttiled(c->next))  		resize(c, m->wx, m->wy, m->ww - 2 * c->bw, m->wh - 2 * c->bw, False);  } @@ -1431,8 +1435,6 @@ setmfact(const Arg *arg) {  void  setup(void) { -	unsigned int i; -	int w;  	XSetWindowAttributes wa;  	/* clean up any zombies immediately */ @@ -1469,10 +1471,6 @@ setup(void) {  	if(!dc.font.set)  		XSetFont(dpy, dc.gc, dc.font.xfont->fid);  	/* init bars */ -	for(blw = i = 0; LENGTH(layouts) > 1 && i < LENGTH(layouts); i++) { -		w = TEXTW(layouts[i].symbol); -		blw = MAX(blw, w); -	}  	updatebars();  	updatestatus();  	/* EWMH support per view */ @@ -1752,6 +1750,7 @@ updategeom(void) {  		m->topbar = topbar;  		m->lt[0] = &layouts[0];  		m->lt[1] = &layouts[1 % LENGTH(layouts)]; +		m->ltsymbol = layouts[0].symbol;  		updatebarpos(m);  	}  	/* reassign left over clients of disappeared monitors */ | 
