diff options
| -rw-r--r-- | dmenu.c | 77 | 
1 files changed, 33 insertions, 44 deletions
@@ -52,6 +52,7 @@ static void calcoffsetsh(void);  static void calcoffsetsv(void);  static char *cistrstr(const char *s, const char *sub);  static void cleanup(void); +static void drawmenu(void);  static void drawmenuh(void);  static void drawmenuv(void);  static void drawtext(const char *text, unsigned long col[ColLast]); @@ -95,7 +96,6 @@ static char *(*fstrstr)(const char *, const char *) = strstr;  static Bool vlist = False;  static unsigned int lines = 5;  static void (*calcoffsets)(void) = calcoffsetsh; -static void (*drawmenu)(void) = drawmenuh;  void  appenditem(Item *i, Item **list, Item **last) { @@ -200,7 +200,7 @@ cleanup(void) {  void  drawcursor(void) { -	XRectangle r = { dc.x, dc.y + 2, 1, dc.h - 4 }; +	XRectangle r = { dc.x, dc.y + 2, 1, dc.font.height - 2 };  	r.x += textnw(text, cursor) + dc.font.height / 2; @@ -209,9 +209,7 @@ drawcursor(void) {  }  void -drawmenuh(void) { -	Item *i; - +drawmenu(void) {  	dc.x = 0;  	dc.y = 0;  	dc.w = mw; @@ -231,56 +229,48 @@ drawmenuh(void) {  	drawcursor();  	dc.x += cmdw;  	if(curr) { -		dc.w = spaceitem; -		drawtext((curr && curr->left) ? "<" : NULL, dc.norm); -		dc.x += dc.w; -		/* determine maximum items */ -		for(i = curr; i != next; i=i->right) { -			dc.w = textw(i->text); -			if(dc.w > mw / 3) -				dc.w = mw / 3; -			drawtext(i->text, (sel == i) ? dc.sel : dc.norm); -			dc.x += dc.w; -		} -		dc.x = mw - spaceitem; -		dc.w = spaceitem; -		drawtext(next ? ">" : NULL, dc.norm); +		if(vlist) +			drawmenuv(); +		else +			drawmenuh();  	}  	XCopyArea(dpy, dc.drawable, win, dc.gc, 0, 0, mw, mh, 0, 0);  	XFlush(dpy);  }  void +drawmenuh(void) { +	Item *i; + +	dc.w = spaceitem; +	drawtext((curr && curr->left) ? "<" : NULL, dc.norm); +	dc.x += dc.w; +	/* determine maximum items */ +	for(i = curr; i != next; i=i->right) { +		dc.w = textw(i->text); +		if(dc.w > mw / 3) +			dc.w = mw / 3; +		drawtext(i->text, (sel == i) ? dc.sel : dc.norm); +		dc.x += dc.w; +	} +	dc.x = mw - spaceitem; +	dc.w = spaceitem; +	drawtext(next ? ">" : NULL, dc.norm); +} + +void  drawmenuv(void) {  	Item *i;  	dc.x = 0; -	dc.y = 0;  	dc.w = mw; -	dc.h = mh; -	drawtext(NULL, dc.norm); -	/* print prompt? */ -	if(promptw) { -		dc.w = promptw; -		drawtext(prompt, dc.sel); -	} -	dc.x += promptw; -	dc.w = mw - promptw; -	/* print command */ -	drawtext(text[0] ? text : NULL, dc.norm); -	if(curr) { -		dc.x = 0; -		dc.w = mw; +	dc.y += dc.font.height + 2; +	/* determine maximum items */ +	for(i = curr; i != next; i=i->right) { +		drawtext(i->text, (sel == i) ? dc.sel : dc.norm);  		dc.y += dc.font.height + 2; -		/* determine maximum items */ -		for(i = curr; i != next; i=i->right) { -			drawtext(i->text, (sel == i) ? dc.sel : dc.norm); -			dc.y += dc.font.height + 2; -		} -		drawtext(NULL, dc.norm);  	} -	XCopyArea(dpy, dc.drawable, win, dc.gc, 0, 0, mw, mh, 0, 0); -	XFlush(dpy); +	drawtext(NULL, dc.norm);  }  void @@ -786,8 +776,7 @@ main(int argc, char *argv[]) {  		else if(!strcmp(argv[i], "-l")) {  			vlist = True;  			calcoffsets = calcoffsetsv; -			drawmenu = drawmenuv; -			if(++i < argc) lines += atoi(argv[i]); +			if(++i < argc) lines = atoi(argv[i]);  		}  		else if(!strcmp(argv[i], "-fn")) {  			if(++i < argc) font = argv[i];  | 
